o
    h"*                     @  sX  U d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZmZmZmZmZ d dlmZ d dlmZ  d dl!m"Z# d dl!m$Z% d dl&m'Z' d dl(m)Z)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1m2Z2 erd dl3m4Z4 ee2e1df Z5de6d< eG dd dZ7G dd dZ8dS )    )annotations)	dataclass)dedent)TYPE_CHECKINGUnioncast)	TypeAlias)make_deprecated_name_warningshow_deprecation_warning)enforce_filename_restriction)current_form_id)check_widget_policiesmaybe_raise_label_warnings)KeyLabelVisibilitycompute_and_register_element_id get_label_visibility_proto_valueto_key)_get_upload_files)
AudioInput)FileUploaderState)UploadedFileInfo)gather_metrics)ScriptRunContextget_script_run_ctx)
WidgetArgsWidgetCallbackWidgetKwargsregister_widget)DeletedFileUploadedFile)DeltaGeneratorNr   SomeUploadedAudioFilec                   @  s    e Zd ZdddZdddZdS )AudioInputSerde
audio_filer"   returnFileUploaderStateProtoc                 C  sP   t  }|d u st|tr|S |j }|j|_|j|_|j|_|j	|j
 |S )N)r&   
isinstancer   uploaded_file_infoaddfile_idnamesize	file_urlsCopyFrom
_file_urls)selfr$   state_proto	file_info r3   Z/var/www/vscode/kcb/lib/python3.10/site-packages/streamlit/elements/widgets/audio_input.py	serialize>   s   
zAudioInputSerde.serializeui_valueFileUploaderStateProto | None	widget_idstrc                 C  sF   t |}t|dkrd }n|d }|d ur!t|ts!t|jdg |S )Nr   z.wav)r   lenr'   r   r   r+   )r0   r6   r8   upload_filesreturn_valuer3   r3   r4   deserializeO   s   zAudioInputSerde.deserializeN)r$   r"   r%   r&   )r6   r7   r8   r9   r%   r"   )__name__
__module____qualname__r5   r=   r3   r3   r3   r4   r#   <   s    
r#   c                	   @  s   e Zd Zedddddddddd%ddZedddddddddd%ddZ					d&ddddd'd d!Zed(d#d$ZdS ))AudioInputMixinaudio_inputNFvisible)keyhelp	on_changeargskwargsdisabledlabel_visibilitylabelr9   rD   
Key | NonerE   
str | NonerF   WidgetCallback | NonerG   WidgetArgs | NonerH   WidgetKwargs | NonerI   boolrJ   r   r%   UploadedFile | Nonec          
      C  s"   t  }	| j|||||||||	d	S )aH  Display a widget that returns an audio recording from the user's microphone.

        Parameters
        ----------
        label : str
            A short label explaining to the user what this widget is used for.
            The label can optionally contain GitHub-flavored Markdown of the
            following types: Bold, Italics, Strikethroughs, Inline Code, Links,
            and Images. Images display like icons, with a max height equal to
            the font height.

            Unsupported Markdown elements are unwrapped so only their children
            (text contents) render. Display unsupported elements as literal
            characters by backslash-escaping them. E.g.,
            ``"1\. Not an ordered list"``.

            See the ``body`` parameter of |st.markdown|_ for additional,
            supported Markdown directives.

            For accessibility reasons, you should never set an empty label, but
            you can hide it with ``label_visibility`` if needed. In the future,
            we may disallow empty labels by raising an exception.

            .. |st.markdown| replace:: ``st.markdown``
            .. _st.markdown: https://docs.streamlit.io/develop/api-reference/text/st.markdown

        key : str or int
            An optional string or integer to use as the unique key for the widget.
            If this is omitted, a key will be generated for the widget
            based on its content. No two widgets may have the same key.

        help : str or None
            A tooltip that gets displayed next to the widget label. Streamlit
            only displays the tooltip when ``label_visibility="visible"``. If
            this is ``None`` (default), no tooltip is displayed.

            The tooltip can optionally contain GitHub-flavored Markdown,
            including the Markdown directives described in the ``body``
            parameter of ``st.markdown``.

        on_change : callable
            An optional callback invoked when this audio input's value
            changes.

        args : tuple
            An optional tuple of args to pass to the callback.

        kwargs : dict
            An optional dict of kwargs to pass to the callback.

        disabled : bool
            An optional boolean that disables the audio input if set to
            ``True``. Default is ``False``.

        label_visibility : "visible", "hidden", or "collapsed"
            The visibility of the label. The default is ``"visible"``. If this
            is ``"hidden"``, Streamlit displays an empty spacer instead of the
            label, which can help keep the widget alligned with other widgets.
            If this is ``"collapsed"``, Streamlit displays no label or spacer.

        Returns
        -------
        None or UploadedFile
            The ``UploadedFile`` class is a subclass of ``BytesIO``, and
            therefore is "file-like". This means you can pass an instance of it
            anywhere a file is expected. The MIME type for the audio data is
            ``audio/wav``.

            .. Note::
                The resulting ``UploadedFile`` is subject to the size
                limitation configured in ``server.maxUploadSize``. If you
                expect large sound files, update the configuration option
                appropriately.

        Examples
        --------
        >>> import streamlit as st
        >>>
        >>> audio_value = st.audio_input("Record a voice message")
        >>>
        >>> if audio_value:
        ...     st.audio(audio_value)

        .. output::
           https://doc-audio-input.streamlit.app/
           height: 260px

        	rK   rD   rE   rF   rG   rH   rI   rJ   ctx)r   _audio_input
r0   rK   rD   rE   rF   rG   rH   rI   rJ   rT   r3   r3   r4   rB   ]   s   ezAudioInputMixin.audio_inputexperimental_audio_inputc          
      C  s2   t tddd t }	| j|||||||||	d	S )zbDeprecated alias for st.audio_input.
        See the docstring for the widget's new name.
        rW   rB   z
2025-01-01rS   )r
   r	   r   rU   rV   r3   r3   r4   rW      s&   z(AudioInputMixin.experimental_audio_input)rI   rJ   rT   rT   ScriptRunContext | Nonec             
   C  s   t |}t| j||d dd t|| td|t| j||d}
t }|
|_||_t| j|_	||_
t||j_|rB|d urBt||_t }t|j||||j|j|	dd}| jd| t|jtrcd S |jS )NF)default_valuewrites_allowedrB   )user_keyform_idrK   rE   file_uploader_state_value)on_change_handlerrG   rH   deserializer
serializerrT   
value_type)r   r   dgr   r   r   AudioInputProtoidrK   r\   rI   r   rJ   valuer   rE   r#   r   r=   r5   _enqueuer'   r   )r0   rK   rD   rE   rF   rG   rH   rI   rJ   rT   
element_idaudio_input_protoserdeaudio_input_stater3   r3   r4   rU      sR   

zAudioInputMixin._audio_inputr!   c                 C  s
   t d| S )zGet our DeltaGenerator.r!   )r   )r0   r3   r3   r4   rb   4  s   
zAudioInputMixin.dg)rK   r9   rD   rL   rE   rM   rF   rN   rG   rO   rH   rP   rI   rQ   rJ   r   r%   rR   )NNNNN)rK   r9   rD   rL   rE   rM   rF   rN   rG   rO   rH   rP   rI   rQ   rJ   r   rT   rX   r%   rR   )r%   r!   )	r>   r?   r@   r   rB   rW   rU   propertyrb   r3   r3   r3   r4   rA   \   s>    q(	?rA   )9
__future__r   dataclassesr   textwrapr   typingr   r   r   typing_extensionsr   streamlit.deprecation_utilr	   r
   *streamlit.elements.lib.file_uploader_utilsr   !streamlit.elements.lib.form_utilsr   streamlit.elements.lib.policiesr   r   streamlit.elements.lib.utilsr   r   r   r   r   (streamlit.elements.widgets.file_uploaderr   streamlit.proto.AudioInput_pb2r   rc   streamlit.proto.Common_pb2r   r&   r   UploadedFileInfoProtostreamlit.runtime.metrics_utilr   streamlit.runtime.scriptrunnerr   r   streamlit.runtime.stater   r   r   r   'streamlit.runtime.uploaded_file_managerr   r    streamlit.delta_generatorr!   r"   __annotations__r#   rA   r3   r3   r3   r4   <module>   s0   