
    g|#                    R   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 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l+m,Z,m-Z- erd dl.m/Z/ ee-e,df   Z0de1d<   e G d d             Z2 G d d      Z3y)    )annotations)	dataclass)dedent)TYPE_CHECKINGUnioncast)	TypeAlias)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)CameraInput)FileUploaderState)UploadedFileInfo)gather_metrics)ScriptRunContextget_script_run_ctx)
WidgetArgsWidgetCallbackWidgetKwargsregister_widget)DeletedFileUploadedFile)DeltaGeneratorNr	   SomeUploadedSnapshotFilec                  0    e Zd Z	 	 	 	 ddZ	 	 	 	 	 	 ddZy)CameraInputSerdec                &   t               }|t        |t              r|S |j                  j	                         }|j
                  |_        |j                  |_        |j                  |_        |j                  j                  |j                         |S )N)FileUploaderStateProto
isinstancer   uploaded_file_infoaddfile_idnamesize	file_urlsCopyFrom
_file_urls)selfsnapshotstate_proto	file_infos       \/var/www/openai/venv/lib/python3.12/site-packages/streamlit/elements/widgets/camera_input.py	serializezCameraInputSerde.serialize9   sy     -.z(K@+6+I+I+M+M+O	$,,	!	!	$$X%8%89    c                J    t        |      }t        |      dk(  rd }|S |d   }|S )Nr   )r   len)r.   ui_value	widget_idupload_filesreturn_values        r2   deserializezCameraInputSerde.deserializeJ   s9     )2|!L  (?Lr4   N)r/   r    returnr$   )r7   zFileUploaderStateProto | Noner8   strr<   r    )__name__
__module____qualname__r3   r;    r4   r2   r"   r"   7   s6    * 
 "5BE	!r4   r"   c                      e Zd Z ed      	 	 	 	 	 d
ddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd       Z	 	 	 	 	 d
dddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZedd	       Zy)CameraInputMixincamera_inputNFvisible)disabledlabel_visibilityc               J    t               }	| j                  |||||||||		      S )a  Display a widget that returns pictures from the user's webcam.

        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 camera_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 camera 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.

        Examples
        --------
        >>> import streamlit as st
        >>>
        >>> enable = st.checkbox("Enable camera")
        >>> picture = st.camera_input("Take a picture", disabled=not enable)
        >>>
        >>> if picture:
        ...     st.image(picture)

        .. output::
           https://doc-camera-input.streamlit.app/
           height: 600px

        )	labelkeyhelp	on_changeargskwargsrF   rG   ctx)r   _camera_input)
r.   rI   rJ   rK   rL   rM   rN   rF   rG   rO   s
             r2   rD   zCameraInputMixin.camera_inputV   s@    ~ !"!!- " 

 
	
r4   )rF   rG   rO   c          
     p   t        |      }t        | j                  ||d d       t        ||       t	        d|t        | j                        ||      }
t               }|
|_        ||_        t        | j                        |_	        ||_
        t        |      |j                  _        |t        |      |_        t!               }t#        |j                  ||||j$                  |j&                  |	d      }| j                  j)                  d|       t+        |j                  t,              ry |j                  S )NF)default_valuewrites_allowedrD   )user_keyform_idrI   rK   file_uploader_state_value)on_change_handlerrM   rN   deserializer
serializerrO   
value_type)r   r   dgr   r   r
   CameraInputProtoidrI   rU   rF   r   rG   valuer   rK   r"   r   r;   r3   _enqueuer%   r   )r.   rI   rJ   rK   rL   rM   rN   rF   rG   rO   
element_idcamera_input_protoserdecamera_input_states                 r2   rP   zCameraInputMixin._camera_input   s-    SkGG 	
 	#5*:;4#DGG,

 ./ *#( %4TWW%="&.#4T5
++1 &,Tl# ",!!'**2	
 	);<(..<!'''r4   c                    t        d|       S )zGet our DeltaGenerator.r   )r   )r.   s    r2   r[   zCameraInputMixin.dg  s     $d++r4   )NNNNN)rI   r=   rJ   
Key | NonerK   
str | NonerL   WidgetCallback | NonerM   WidgetArgs | NonerN   WidgetKwargs | NonerF   boolrG   r   r<   UploadedFile | None)rI   r=   rJ   re   rK   rf   rL   rg   rM   rh   rN   ri   rF   rj   rG   r   rO   zScriptRunContext | Noner<   rk   )r<   r   )r>   r?   r@   r   rD   rP   propertyr[   rA   r4   r2   rC   rC   U   s9   N# +/"&&*i
 ,5i
i
 i
 	i

 )i
  i
 $i
 i
 *i
 
i
 $i
\ +/"&&*=( ,5'+=(=( =( 	=(
 )=(  =( $=( =( *=( %=( 
=(~ , ,r4   rC   )4
__future__r   dataclassesr   textwrapr   typingr   r   r   typing_extensionsr	   !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.CameraInput_pb2r   r\   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"   rC   rA   r4   r2   <module>r      s    # !  - - ' =  G K R P 9 O  N8&+L+t,K&L ) L   :o, o,r4   