
    Be                       d dl mZ d dlZd dlZd dlmZ d dlmZmZ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 erd dlmZ d dlmZ d dlmZ  G d de          Zd Zej         !                    e           dS )    )annotationsN)defaultdict)TYPE_CHECKINGAnyCallableClassVarListMappingOptional)CustomJS)JupyterComm   )	lazy_load)Viewable   )	ModelPane)Document)Model)Commc                  t    e Zd ZU dZ ej        dd          Z ej        dd          Z ej        dddgd	          Z	 ej        d
g dd	          Z
dZded<   ddiZded<   g Zded<   dZded<   d6 fd	Zed7d            Zed             Zd Zd  Z fd!Zd8 fd$Z	 	 d9d: fd,Zd6d;d3Zd6d<d5Z xZS )=EChartsa  
    ECharts panes allow rendering echarts.js dictionaries and pyecharts plots.

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

    :Example:

    >>> pn.extension('echarts')
    >>> ECharts(some_echart_dict_or_pyecharts_object, height=480, width=640)
    Nz\
        The Echarts object being wrapped. Can be an Echarts dictionary or a pyecharts chart)defaultdoca#  
        An optional dict of options passed to Echarts.setOption. Allows to fine-tune the rendering behavior.
        For example, you might want to use `options={ "replaceMerge": ['series'] })` when updating
        the `objects` with a value containing a smaller number of series.
        canvassvgz/
       Whether to render as HTML canvas or SVG)r   objectsr   r   )r   lightdarkz 
       Theme to apply to plots.zClassVar[float | bool | None]priorityobjectdataz"ClassVar[Mapping[str, str | None]]_renamezClassVar[List[str]]_rerender_paramsTzClassVar[bool]_updatesc                     t                      j        |fi | t          d           | _        t          t                    | _        d S )Nc                 *    t          t                    S N)r   list     2lib/python3.11/site-packages/panel/pane/echarts.py<lambda>z"ECharts.__init__.<locals>.<lambda>?   s    T1B1B r*   )super__init__r   _py_callbacksr(   _js_callbacks)selfr    params	__class__s      r+   r.   zECharts.__init__=   sL    **6***()B)BCC(..r*   objr   returnfloat | bool | Nonec                b    t          |t                    rdS |                     |          rdS d S )Nr   g?)
isinstancedictis_pyecharts)clsr4   r2   s      r+   applieszECharts.appliesB   s9    c4   	1c"" 	3tr*   c                h    dt           j        v r#dd l}t          ||j        j        j                  S dS )N	pyechartsr   F)sysmodulesr>   r8   chartschartChart)r;   r4   r>   s      r+   r:   zECharts.is_pyechartsJ   s9    #+%%c9#3#9#?@@@ur*   c                    | j                             |j        i           }|                    d g           D ]} ||           |j        d S |                    |j        g           D ]} ||           d S r'   )r/   gettypequery)r1   event	callbackscbs       r+   _process_eventzECharts._process_eventQ   s    &**5:r::	--b)) 	 	BBuIIII;F--R00 	 	BBuIIII	 	r*   c           	     4   t          t                    }| j                                        D ][\  }}|D ]S\  }}}fd|                                D             }||                             |t          ||          d           T\t          |          S )Nc                P    i | ]"\  }}|j         v ||j                  d          #S )r   )_models).0nameviewablerefs      r+   
<dictcomp>z*ECharts._get_js_events.<locals>.<dictcomp>^   sD       7EtXh... (*3/2...r*   )codeargs)rG   callback)r   r(   r0   itemsappendr   r9   )	r1   rR   	js_eventsrH   specsrG   rT   rU   modelss	    `       r+   _get_js_eventszECharts._get_js_eventsZ   s    %%	 .4466 	h 	hLE5', h h#d   IM   % ''%XSW^dEeEeEe(f(fggggh Ir*   c                   t                                          |          }d|vr|S |d         pi }t          |t                    s|j        |j        }}t          j        |                                          x|d<   }| j        s(|r&t          |
                    dd                    |d<   | j        s(|r&t          |
                    dd                    |d<   n||d<   |                    d          rd|d<   |S )	Nr!   px heightwidth
responsivestretch_bothsizing_mode)r-   _process_param_changer8   r9   ra   r`   jsonloadsdump_optionsintreplacerE   )r1   r2   propsr!   whr3   s         r+   re   zECharts._process_param_changee   s   --f55LV}"$%% 	!:t{qA#':d.?.?.A.A#B#BBE&MD; ;1 ;"%aiib&9&9":":h: :! :!$QYYtR%8%8!9!9g E&M88L!! 	2#1E- r*   documentr   c                    t                                          |          }d | j                                        D             |d<   |S )Nc                4    i | ]\  }}|t          |          S r)   r(   rO   rH   queriess      r+   rS   z+ECharts._get_properties.<locals>.<dictcomp>y   s1     !
 !
 !
%3UGE4==!
 !
 !
r*   event_config)r-   _get_propertiesr/   rW   )r1   rn   rk   r3   s      r+   ru   zECharts._get_propertiesw   sS    ''11!
 !
7;7I7O7O7Q7Q!
 !
 !
n r*   r   rootOptional[Model]parentcommOptional[Comm]r   c                    t          ddt          |t                    |          | _        t	                                          ||||          }|                     d|||           |S )Npanel.models.echartsr   echarts_event)modelr   ry   )r   r8   r   _bokeh_modelr-   
_get_model_register_events)r1   r   rv   rx   ry   r~   r3   s         r+   r   zECharts._get_model~   sk     &"Iz$/L/Ld
 
 ""3fd;;oU$OOOr*   rH   strrV   r   rG   
str | Nonec                   | j         |         |                             |           d | j                                         D             }| j                                        D ]"\  }\  }}|                     i d|i||           #dS )a  
        Register anevent handler which triggers when the specified event is triggered.

        Reference: https://apache.github.io/echarts-handbook/en/concepts/event/

        Arguments
        ---------
        event: str
            The name of the event to register a handler on, e.g. 'click'.
        callback: str | CustomJS
            The event handler to be executed when the event fires.
        query: str | None
            A query that determines when the event fires.
        c                4    i | ]\  }}|t          |          S r)   rq   rr   s      r+   rS   z$ECharts.on_event.<locals>.<dictcomp>   s$    ^^^tG}}^^^r*   rt   N)r/   rX   rW   rN   _apply_update)r1   rH   rV   rG   rt   rR   r~   _s           r+   on_eventzECharts.on_event   s     	5!%(//999^^4CUC[C[C]C]^^^#|1133 	O 	OOC%rNL#A5#NNNN	O 	Or*   str | CustomJSc                    | j         |                             |||f           | j                                        D ]7\  }\  }}|                     |          }|                     i d|i||           8dS )a  
        Register a Javascript event handler which triggers when the
        specified event is triggered. The callback can be a snippet
        of Javascript code or a bokeh CustomJS object making it possible
        to manipulate other models in response to an event.

        Reference: https://apache.github.io/echarts-handbook/en/concepts/event/

        Arguments
        ---------
        event: str
            The name of the event to register a handler on, e.g. 'click'.
        code: str
            The event handler to be executed when the event fires.
        query: str | None
            A query that determines when the event fires.
        args: Viewable
            A dictionary of Viewables to make available in the namespace
            of the object.
        rY   N)r0   rX   rN   rW   r\   r   )	r1   rH   rV   rG   rU   rR   r~   r   rY   s	            r+   js_on_eventzECharts.js_on_event   s    * 	5!((%4)@AAA#|1133 	I 	IOC%++C00IrK#;UCHHHH	I 	Ir*   r'   )r4   r   r5   r6   )rn   r   )NNN)
r   r   rv   rw   rx   rw   ry   rz   r5   r   )rH   r   rV   r   rG   r   )rH   r   rV   r   rG   r   )__name__
__module____qualname____doc__param	Parameterr    optionsObjectSelectorrendererthemer   __annotations__r"   r#   r$   r.   classmethodr<   r:   rK   r\   re   ru   r   r   r   __classcell__)r3   s   @r+   r   r      s,        	 	 U_T 0_ ` ` `F eod 1   G $u#Hx>O V2 3 3 3H !E <X<X<X _# $ $ $E /3H22223;V2DGDDDD,.....#H####/ / / / / /
    [   [  	 	 	    $      6:?C	 	 	 	 	 	 	O O O O O(I I I I I I I I Ir*   r   c                    dt           j        vrd S |j        d         }|                     t                    D ]6}||j        v r+|                    |          |j        |         d         _        7d S )Nr|   idr   )r?   r@   rR   selectr   rN   r\   rY   )	root_view
root_modelrR   panes       r+   setup_js_callbacksr      s{    S[00
.
C  )) F F$,-1-@-@-E-EDLa *F Fr*   )"
__future__r   rf   r?   collectionsr   typingr   r   r   r   r	   r
   r   r   bokeh.modelsr   pyviz_commsr   utilr   rQ   r   baser   bokeh.documentr   bokeh.modelr   r   r   r   _preprocessing_hooksrX   r)   r*   r+   <module>r      s   " " " " " "  



 # # # # # #                   ! ! ! ! ! ! # # # # # #                   !''''''!!!!!!      [I [I [I [I [Ii [I [I [I|F F F 	  $ $%7 8 8 8 8 8r*   