
    Be                       d dl mZ d dlZd dl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 erd dlmZ d dlmZ d dlmZ  G d de          Z G d de          Z G d de          Zi Zd Z e
e           dS )    )annotationsN)TYPE_CHECKINGAnyClassVarOptional)register_reference_transform)JupyterComm   )config	IPyWidget   )PaneBase)Document)Model)Commc                       e Zd ZU dZ ej        ddd          ZdZded<   e	dd            Z
 fdZd Z	 	 dddZ xZS )r   a  
    The IPyWidget pane renders any ipywidgets model both in the notebook and
    in a deployed server.

    When rendering ipywidgets on the server you must add `ipywidgets` to
    `pn.extension`. You must not do this in Jupyterlab as this may render
    Jupyterlab unusable.

    Reference: https://panel.holoviz.org/reference/panes/IPyWidget.html

    :Example:

    >>> IPyWidget(some_ipywidget)
    NFzW
        The IPywidget being wrapped, which will be converted to a
        Bokeh model.)default
allow_refsdocg333333?zClassVar[float | bool | None]priorityobjr   returnfloat | bool | Nonec                    	 t          |d          ot          |d          ot          |d          S # t          $ r Y dS w xY w)Ntraitsget_manager_statecommF)hasattr	Exceptionclsr   s     4lib/python3.11/site-packages/panel/pane/ipywidget.pyapplieszIPyWidget.applies.   s[    	C**iws<O/P/PiU\]`bhUiUij 	 	 	55	s   /2 
A A c                    |dk    r|                      |          rd |fS t                                          ||          S )Nobject)r$   super_resolve_ref)selfpnamevalue	__class__s      r#   r(   zIPyWidget._resolve_ref5   sC    He!4!4;ww##E5111    c                    t          |t                    r"t          j        sdt          j        vrt          }n9ddlm}m	} ddl
m}  |                                            D ]}	 ||	|            |dd|i|}
|
S )NPANEL_IPYWIDGETr
   )_get_ipywidgets_on_widget_constructedr   r   widget )
isinstancer	   r   embedosenviron_BkIPyWidgetio.ipywidgetr0   r1   ipywidgets_bokeh.widgetr   values)r)   r   r   rootr   kwargsr   r0   r1   wmodels              r#   _get_ipywidgetzIPyWidget._get_ipywidget:   s    dK(( 		/ 		/BS[][eBeBe$II ONNNNNNN999999 %_&&--// / /&&q#....	/////r-   r   r   r<   Optional[Model]parentr   Optional[Comm]r   c                    ||                      ||          S |                     |                                           } | j        | j        |||fi |}||f| j        |j        d         <   |S Nid)get_root_process_param_change_init_paramsr@   r&   _modelsref)r)   r   r<   rB   r   r=   r?   s          r#   
_get_modelzIPyWidget._get_modelI   sy     <==d+++++D,=,=,?,?@@##DKdDKKFKK(-vTXd^$r-   r   r   r   r   )NNN)
r   r   r<   rA   rB   rA   r   rC   r   r   )__name__
__module____qualname____doc__param	Parameterr&   r   __annotations__classmethodr$   r(   r@   rL   __classcell__r,   s   @r#   r   r      s           U_Te B   F /2H1111   [2 2 2 2 2
    6:?C	 	 	 	 	 	 	 	 	r-   r   c                  ^    e Zd ZU  ej        dg d          ZdZded<   edd
            Z	dS )
IPyLeafletstretch_width)fixedrZ   stretch_heightstretch_bothscale_widthscale_height
scale_bothN)r   objectsgffffff?r   r   r   r   r   c                L    t                               |          o
|j        dk    S )Nzjupyter-leaflet)r   r$   _view_moduler!   s     r#   r$   zIPyLeaflet.applies]   s$      %%O#*:>O*OOr-   NrM   )
rN   rO   rP   rR   ObjectSelectorsizing_moder   rT   rU   r$   r3   r-   r#   rY   rY   U   sz         &%& I; I; I; < < <K %(H''''P P P [P P Pr-   rY   c                  R     e Zd Zd fd	Zedd            Zdd fdZd fdZ xZS )ReactonNc                L     t                      j        dd|i| i | _        d S )Nr&   r3   )r'   __init___rcs)r)   r&   paramsr,   s      r#   ri   zReacton.__init__d   s0    111&111			r-   r   r   r   r   c                J    t          |dd                              d          S )NrO   Nonereacton)getattr
startswithr!   s     r#   r$   zReacton.appliesh   s"    sL&11<<YGGGr-   r<   Model | Nonerm   c                   |r_|j         d         | j        v rK| j                            |j         d                   }	 |                                 n# t          $ r Y nw xY wt                                          |           d S rE   )rK   rj   popcloser    r'   _cleanup)r)   r<   rcr,   s      r#   ru   zReacton._cleanupl   s     	DHTNdi//tx~..B



   s   A 
A A r   r   r   r   rC   c                    t          |t                    rdt          j        v rddlm} dd l}|                    |          \  }}	|	| j        |j	        d         <    t                      j        ||||fi |S )Nr/   r
   )Widgetr   rF   )r4   r	   r6   r7   r9   rx   rn   renderrj   rK   r'   r@   )r)   r   r   r<   r   r=   rx   rn   r2   rv   r,   s             r#   r@   zReacton._get_ipywidgetu   s     $,, 	.0ARZ0O0O------^^C((
$&	$(4.!%uww%fc4HHHHHr-   )NrM   )r<   rq   r   rm   )r   r   r<   r   r   rC   )	rN   rO   rP   ri   rU   r$   ru   r@   rV   rW   s   @r#   rg   rg   b   s              H H H [H      I I I I I I I I I Ir-   rg   c                   t                               |           rt          | d          s| S t          |           j        }|t
          v rt
          |         }n(t          j        |dt          j                    i          }|t
          |<    || j	                  | 
                    fdd           j        j	        S )zg
    Transforms an ipywidget into a Parameter that listens updates
    when the ipywidget updates.
    r+   r+   c                F    j                             | d                   S )Nnewr{   )rR   update)eventipy_insts    r#   <lambda>z&_ipywidget_transform.<locals>.<lambda>   s    hn33%,3GG r-   )r   r$   r   typerN   _ipywidget_classesrR   parameterized_classrS   r+   observe)r   name	ipy_paramr   s      @r#   _ipywidget_transformr      s    
 c"" wsG'<'< 
99D!!!&t,		-dWeo>O>O4PQQ	(tysy)))HKKGGGGQQQ>r-   )
__future__r   r6   typingr   r   r   r   rR   param.parameterizedr   pyviz_commsr	   r   modelsr   r8   baser   bokeh.documentr   bokeh.modelr   r   rY   rg   r   r   r3   r-   r#   <module>r      s   " " " " " " 				             < < < < < < # # # # # #       . . . . . .       !''''''!!!!!!      : : : : : : : :z
P 
P 
P 
P 
P 
P 
P 
PI I I I Ii I I I<       "  1 2 2 2 2 2r-   