a
    Df                     @  s   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rd dlmZ d dlmZ d dlmZ G dd deZG dd deZG dd deZi Zdd Ze
e dS )    )annotationsN)TYPE_CHECKINGAnyClassVarOptional)register_reference_transform)JupyterComm   )config	IPyWidget   )PaneBase)Document)Model)Commc                      sr   e Zd ZU dZejddddZdZded< e	d	d
dddZ
 fddZdd ZdddddddddZ  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.)defaultZ
allow_refsdocg333333?zClassVar[float | bool | None]priorityr   float | bool | Noneobjreturnc                 C  s:   z t |dot |dot |dW S  ty4   Y dS 0 d S )NZtraitsZget_manager_statecommF)hasattr	Exceptionclsr    r   a/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/panel/pane/ipywidget.pyapplies.   s     zIPyWidget.appliesc                   s(   |dkr|  |rd |fS t ||S Nobject)r    super_resolve_ref)selfZpnamevalue	__class__r   r   r$   5   s    zIPyWidget._resolve_refc                 K  sl   t |tr tjs dtjvr t}n6ddlm}m	} ddl
m} |  D ]}	||	| qF|f d|i|}
|
S )NPANEL_IPYWIDGETr	   )_get_ipywidgets_on_widget_constructedr   r   widget)
isinstancer   r
   embedosenviron_BkIPyWidgetio.ipywidgetr*   r+   Zipywidgets_bokeh.widgetr   values)r%   r   r   rootr   kwargsr   r*   r+   wmodelr   r   r   _get_ipywidget:   s    zIPyWidget._get_ipywidgetr   zOptional[Model]Optional[Comm]r   )r   r4   parentr   r   c                 C  sT   |d u r|  ||S | |  }| j| j|||fi |}||f| j|jd < |S Nid)Zget_rootZ_process_param_changeZ_init_paramsr8   r"   Z_modelsref)r%   r   r4   r:   r   r5   r7   r   r   r   
_get_modelI   s    zIPyWidget._get_model)NNN)__name__
__module____qualname____doc__param	Parameterr"   r   __annotations__classmethodr    r$   r8   r>   __classcell__r   r   r'   r   r      s   
  r   c                   @  s@   e Zd ZU ejdg ddZdZded< edddd	d
Z	dS )
IPyLeafletstretch_width)fixedrI   Zstretch_heightZstretch_bothZscale_widthZscale_heightZ
scale_bothN)r   Zobjectsgffffff?r   r   r   r   c                 C  s   t |o|jdkS )Nzjupyter-leaflet)r   r    Z_view_moduler   r   r   r   r    ]   s    zIPyLeaflet.appliesN)
r?   r@   rA   rC   ZObjectSelectorZsizing_moder   rE   rF   r    r   r   r   r   rH   U   s   
rH   c                      s^   e Zd Zd fdd	ZedddddZdd	d
d fddZdddd fddZ  ZS )ReactonNc                   s    t  jf d|i| i | _d S r!   )r#   __init___rcs)r%   r"   paramsr'   r   r   rL   d   s    zReacton.__init__r   r   r   c                 C  s   t |dddS )Nr@   Nonereacton)getattr
startswithr   r   r   r   r    h   s    zReacton.applieszModel | NonerO   )r4   r   c                   sV   |rF|j d | jv rF| j|j d }z|  W n tyD   Y n0 t | d S r;   )r=   rM   popcloser   r#   _cleanup)r%   r4   rcr'   r   r   rU   l   s    zReacton._cleanupr   r   r9   )r   r4   r   c           
        s`   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   r<   )r-   r   r/   r0   r2   rW   rP   renderrM   r=   r#   r8   )
r%   r   r   r4   r   r5   rW   rP   r,   rV   r'   r   r   r8   u   s    zReacton._get_ipywidget)N)N)	r?   r@   rA   rL   rF   r    rU   r8   rG   r   r   r'   r   rK   b   s
   	rK   c                   sx   t | rt| ds| S t| j}|tv r4t| }nt|dt i}|t|< || j	d | 
 fddd  jj	S )zg
    Transforms an ipywidget into a Parameter that listens updates
    when the ipywidget updates.
    r&   r&   c                   s    j j| d dS )NnewrY   )rC   update)eventZipy_instr   r   <lambda>       z&_ipywidget_transform.<locals>.<lambda>)r   r    r   typer?   _ipywidget_classesrC   Zparameterized_classrD   r&   Zobserve)r   nameZ	ipy_paramr   r]   r   _ipywidget_transform   s    

rc   )
__future__r   r/   typingr   r   r   r   rC   Zparam.parameterizedr   Zpyviz_commsr   r
   modelsr   r1   baser   Zbokeh.documentr   Zbokeh.modelr   r   rH   rK   ra   rc   r   r   r   r   <module>   s$   =