
    Bel-                    .   d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZ ddl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 ddlmZ ddlm Z m!Z!m"Z" ddl#m$Z$ erddl%m&Z&  G d de          Z G d de"          Z G d de          Z'dS )zH
Miscellaneous widgets which do not fit into the other main categories.
    )annotations)	b64encode)Path)TYPE_CHECKINGClassVarListMappingTypeN)JupyterComm   )push)CDN_DIST)state)FileDownloadVideoStream)	lazy_load   )Widget)BUTTON_STYLESBUTTON_TYPES	IconMixin)Progress)Modelc                      e Zd ZU dZ ej        dddgd          Z ej        dd          Z ej	        d	d
          Z
 ej        dd          ZeZded<   dd	iZded<   d Zd	S )r   a-  
    The `VideoStream` displays a video from a local stream (for example from a webcam) and allows
    accessing the streamed video data from Python.

    Reference: https://panel.holoviz.org/reference/widgets/VideoStream.html

    :Example:

    >>> VideoStream(name='Video Stream', timeout=100)
    pngjpegz8
        The file format as which the video is returned.defaultobjectsdocFz.
        Whether the video is currently pausedr   r    Nz2
        Interval between snapshots in millisecons z>
        A base64 representation of the video stream snapshot.ClassVar[Type[Model]]_widget_typename"ClassVar[Mapping[str, str | None]]_renamec                    | j                                         D ]G\  }\  }}|j         |_        t          j        |         \  } }}}|rd|j        vrt          ||           HdS )zh
        Triggers a snapshot of the current VideoStream state to sync
        the widget value.
        embeddedN)_modelsitemssnapshotr   _viewstagsr   )selfrefm_rootr    comms          2lib/python3.11/site-packages/panel/widgets/misc.pyr,   zVideoStream.snapshot<   su    
  <--// 	  	 KC!QZAJ&+l3&7#T4d  
$)33S$		  	     )__name__
__module____qualname____doc__paramObjectSelectorformatBooleanpausedNumbertimeoutStringvalue_BkVideoStreamr$   __annotations__r'   r,    r6   r5   r   r      s         	 	 "U!%%';< < <F U]5 /1 2 2 2F el4 .5 6 6 6G EL *A B B BE +9L8888394.G@@@@	  	  	  	  	 r6   r   c                      e Zd ZU dZ ej        dd          Z ej        ded          Z	 ej        de
d	          Z ej        d
dd          Z ej        d
d          Z ej        dd          Z ej        d
d          Z ej        d
d          Z ej        dd          Z ej        d
d          Z ej        d          Z ej        d          Zdddddddddd d!d"d"d#d#d$d%d&d&d'd(d)d*d+d,d*d-d.ddd/d0Zd
d
d
d1d2Zd3ed4<   e d5gZd6ed7<   eZd8ed9<   dN fd:	Z  fd;Z! ej"        d<d=          d>             Z#e$dOdA            Z%e$dPdC            Z& ej"        dDd=          dE             Z' ej"        dFdDdGd=          dH             Z( ej"        dIdDdJd=          dK             Z) ej"        dLd=          dM             Z* xZ+S )Qr   at  
    The `FileDownload` widget allows a user to download a file.

    It works either by sending the file data to the browser on initialization
    (`embed`=True), or when the button is clicked.

    Reference: https://panel.holoviz.org/reference/widgets/FileDownload.html

    :Example:

    >>> FileDownload(file='IntroductionToPanel.ipynb', filename='intro.ipynb')
    Tz[
        Whether to download on the initial click or allow for
        right-click save as.r!   r   z
        A button theme; should be one of 'default' (white), 'primary'
        (blue), 'success' (green), 'info' (yellow), 'light' (light),
        or 'danger' (red).r   solidz=
        A button style to switch between 'solid', 'outline'.NFzC
        A callable that returns the file path or file-like object.)r   
allow_refsr    z$
        The data being transferred.z5
        Whether to embed the file on initialization.z
        The file, Path, file-like object or file contents to transfer.  If
        the file is not pointing to a file on disk a filename must
        also be provided.zZ
        A filename which will also be the default name when downloading
        the file.zDownload filez)
        The label of the download buttonzB
        An HTML string describing the function of this component.r   )r   pdfzip)rJ   rK   mp3oggwavwebm)rL   rM   rN   rO   apngbmpgifzx-iconr   r   zsvg+xmltiffwebp)rP   rQ   rR   icocurjpgr   r   svgtifrS   rT   csszplain;charset=UTF-8
javascripthtml)rZ   csvjsr\   txtmp4)r`   rM   rO   )applicationaudioimagetextvideoclicks)callbackbutton_stylefile_clicksr&   r'   zcss/button.csszClassVar[List[str]]_stylesheetsr#   r$   c                    d|v| _         d| _         t                      j        dd|i| | j        r|                                  |                                  d|vr|                                  d S d S )NlabelFri   filenamerF   )_default_label_syncedsuper__init__embed	_transfer_update_label_update_filename)r/   ri   params	__class__s      r5   rr   zFileDownload.__init__   s    %V3--d-f---: 	NNV##!!##### $#r6   c                    d|v sd|v r;|                     d| j                  g|                    d| j                  z   |d<   t	                                          |          S )Nrh   css_classes)poprh   getrz   rq   _process_param_change)r/   rw   rx   s     r5   r}   z"FileDownload._process_param_change   sk    V##}'>'>

>4+<==%

=$*:;;%<F=! ww,,V444r6   rm   )watchc                    d| _         d S )NF)ro   r/   s    r5   _update_defaultzFileDownload._update_default   s    #r6   returnboolc                D    t          | j        t          t          f          S N)
isinstanceri   strr   r   s    r5   _is_file_pathzFileDownload._is_file_path   s    $)c4[111r6   r   c                *    t          | j                  S r   )r   ri   r   s    r5   
_file_pathzFileDownload._file_path   s    DIr6   ri   c                :    | j         r| j        j        | _        d S d S r   )r   r   r%   rn   r   s    r5   rv   zFileDownload._update_filename   s'     	1 O0DMMM	1 	1r6   autorn   c                    | j         s| j        rdnd}| j        rZ| j        
| j        d}n9	 | j        p| j        j        }n# t          $ r t          d          w xY w|d|}|| _
        d| _        d S d S )NDownloadTransferzNo file set6Must provide filename if file-like object is provided. T)rp   r   ro   ri   rg   rn   r   r%   	TypeError
ValueErrorrm   )r/   rm   rn   s      r5   ru   zFileDownload._update_label   s    "lGdiG

Z 	'y T]%:%<#}D0DHH  < < <$ &; < < << $)55((3DJ"&D	' 	's   A   Ars   rg   c                @    | j         r|                                  d S d S r   )rs   rt   r   s    r5   _update_embedzFileDownload._update_embed   s,    : 	NN	 	r6   rj   c                    | j         | j        | j        rt          d          d S ddlm} | j        | j         }n|                    | j                  }| j        }t          |t          t          f          rt          |          }|                                st          d|z            t          |d          5 }t          |                                                              d          }d d d            n# 1 swxY w Y   ||j        }nt%          |d          rr|                                }t          |t&                    s|                    d          }t          |                              d          }|t          d          n$t          d	t+          |          j        z            |                    d
          d         }| j                                        D ]\  }}	d }
||	v r
|	|         }
 n|
d}nd                    ||
          }d                    ||          }d| _        | j                            ||           |                                  | xj        dz  c_        d S )Nz:Must provide a file or a callback if it is to be embedded.r   )ParamFunctionzFile "%s" not found.rbzutf-8readr   z)Cannot transfer unknown object of type %s.zapplication/octet-streamz{type}/{subtype})typesubtypezdata:{mime};base64,{b64})mimeb64T)datarn   r   )ri   rg   rs   r   r;   r   evalrn   r   r   r   existsFileNotFoundErroropenr   r   decoder%   hasattrbytesencoder   r7   split_mime_typesr+   r=   rp   updateru   
_transfers)r/   r   fileobjrn   fr   bdataextmtypesubtypesstyper   r   s                r5   rt   zFileDownload._transfer   s   9!6z =  "< = = =F))))))= iGG#((77G=gT{++ 	57mmG>>## J'(>(HIIIgt$$ :))0099: : : : : : : : : : : : : : :"<Wf%% 
	5LLNNEeU++ .W--E""))'22C  "7 8 8 8   H!']]34 5 5 5 nnS!!"%#/5577 	 	OE8Eh   =-DD%,,%,GGD)00d0DD
th7771s   >5C??DDr   )r   r   )r   r   ),r7   r8   r9   r:   r;   r>   r   r<   r   button_typer   rh   Callablerg   rB   r   rs   	Parameterri   rn   rm   descriptionIntegerrj   r   r   r'   rE   r   rk   _BkFileDownloadr$   rr   r}   dependsr   propertyr   r   rv   ru   r   rt   __classcell__rx   s   @r5   r   r   H   s          5= ,  ! ! !D '%&y, U   K
 (5' U@ A A AL u~du CF G G GH 5< +' ( ( (D EM% .8 9 9 9E 5?4 .   D
 u|D /   H EL 7, - - -E %,t 2E F F FK emA&&&Gq)))J 
 
 uf
 
 5xFFEVVV
 
 !6l#8
 

 
 
! K, $3 3G     -5)D)D)D(ELEEEE*9L9999$ $ $ $ $ $5 5 5 5 5 U]7$'''$ $ ('$ 2 2 2 X2    X U]6&&&1 1 '&1 U]66:T:::' ' ;:' U]7FJd;;;  <; U]9D)))1 1 *)1 1 1 1 1r6   r   c                  :    e Zd ZU dZ ej        dd          Z ej        dg dd          Z ej        dd	          Z	 ej
        g d
          Z ej        dd          Z ej
        d          Z ej        i d          ZdddZded<   d fd	Z xZS )
JSONEditora  
    The `JSONEditor` provides a visual editor for JSON-serializable
    datastructures, e.g. Python dictionaries and lists, with functionality for
    different editing modes, inserting objects and validation using JSON
    Schema.

    Reference: https://panel.holoviz.org/reference/widgets/JSONEditor.html

    :Example:

    >>> JSONEditor(value={
    ...     'dict'  : {'key': 'value'},
    ...     'float' : 3.14,
    ...     'int'   : 1,
    ...     'list'  : [1, 2, 3],
    ...     'string': 'A string',
    ... }, mode='code')
    Tz
        Adds main menu bar - Contains format, sort, transform, search
        etc. functionality. true by default. Applicable in all types
        of mode.r!   tree)r   viewformrd   previewa  
        Sets the editor mode. In 'view' mode, the data and
        datastructure is read-only. In 'form' mode, only the value can
        be changed, the data structure is read-only. Mode 'code'
        requires the Ace editor to be loaded on the page. Mode 'text'
        shows the data as plain text. The 'preview' mode can handle
        large JSON documents up to 500 MiB. It shows a preview of the
        data, and allows to transform, sort, filter, format, or
        compact the data.r   z
        Enables a search box in the upper right corner of the
        JSONEditor. true by default. Only applicable when mode is
        'tree', 'view', or 'form'.z
        Current selection.Na  
        Validate the JSON object against a JSON schema. A JSON schema
        describes the structure that a JSON object must have, like
        required properties or the type that a value must have.

        See http://json-schema.org/ for more information.z
        Array of templates that will appear in the context menu, Each
        template is a json object precreated that can be added as a
        object value to any node in your document.)r    z 
        JSON data to be edited.r   )r%   rC   r&   r'   c                    | j         )t          ddt          |t                              | _         t	                                          ||||          }|S )Nzpanel.models.jsoneditorr   )r$   r   r   r   rq   
_get_model)r/   r    r3   parentr4   modelrx   s         r5   r   zJSONEditor._get_modelG  sS    $ ))<D+9V9V! !D ""3fd;;r6   )NNN)r7   r8   r9   r:   r;   r>   menuSelectormodesearchr   	selectionDictschema	templatesr   rC   r'   rE   r   r   r   s   @r5   r   r     sd         & 5= ,   D
 5>& 33 33 339	 	 	D U]4 .& ' ' 'F
 
2 ,   I UZ += > > >F 
  6 7 7 7I
 EOB -# $ $ $E v3 3G             r6   r   )(r:   
__future__r   base64r   pathlibr   typingr   r   r   r	   r
   r;   pyviz_commsr   io.notebookr   io.resourcesr   io.stater   modelsr   r   r   rD   utilr   baser   buttonr   r   r   
indicatorsr   bokeh.modelr   r   rF   r6   r5   <module>r      s    # " " " " "                           # # # # # #       # # # # # #                          : : : : : : : : : :             "!!!!!!&  &  &  &  & & &  &  & R| | | | |9 | | |@E E E E E E E E E Er6   