
    e                        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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  G d de          ZdS )    )annotations)TYPE_CHECKINGCallableClassVarListMappingN)ColumnCustomJS   )Reactive   )NamedListPanel)Card)Model)Viewablec                  ^    e Zd ZU dZ ej        dd          Z ej        g d          Z ej        d          Z	 ej        d          Z
 ej        d	d
          ZeZdZded<   ddddddddZded<   dZg dZ fdZ fdZd&dZ fdZd&d' fdZd Zd Zd  Zd! Z	 d&d(d%Z xZS ))	Accordionu  
    The `Accordion` layout is a type of `Card` layout that allows switching
    between multiple objects by clicking on the corresponding card header.

    The labels for each card will default to the `name` parameter of the card’s
    contents, but may also be defined explicitly as part of a tuple.

    Like `Column` and `Row`, `Accordion` has a list-like API that allows
    interactively updating and modifying the cards using the methods `append`,
    `extend`, `clear`, `insert`, `pop`, `remove` and `__setitem__`.

    Reference: https://panel.holoviz.org/reference/layouts/Accordion.html

    :Example:

    >>> pn.Accordion(some_pane_with_a_name, ("Plot", some_plot))
    z#cccz,
        Color for currently active headers.)defaultdocz)
        List of indexes of active cards.z9
        A valid CSS color to apply to the expand button.)r   z5
        A valid CSS color for the header background.FzG
        Whether to toggle between active cards or allow multiple cardsverticalzClassVar[str | None]
_directionNchildren)activeactive_header_backgroundheader_backgroundobjectsdynamictoggleheader_colorz"ClassVar[Mapping[str, str | None]]_renamez
    for (var child of accordion.children) {
      if ((child.id !== cb_obj.id) && (child.collapsed == cb_obj.collapsed) && !cb_obj.collapsed) {
        child.collapsed = !cb_obj.collapsed
      }
    }
    )	r   r   widthsizing_modewidth_policyheight_policyr   	min_width	max_widthc                     t                      j        |i | d| _        | j                            | j        dg           | j                            | j        | j                   d S )NFr   )super__init___updating_activeparamwatch_update_active_update_cards_synced_properties)selfr   params	__class__s      6lib/python3.11/site-packages/panel/layout/accordion.pyr)   zAccordion.__init__O   sh    ',V,,, %
,xj999
+T-DEEEEE    c                r    |                     dd            t                                          |          S )Nr   )popr(   _process_property_change)r0   propsr2   s     r3   r7   z"Accordion._process_property_changeU   s/    		*d###ww//666r4   c           	         ddl m}m} g g }	}t           j                  t                     k    r5t          dt           j                   dt                      d          t          t           j                             D ]\  }
\  }} |||          }| j        |
<    |D ]M}| j        vrB j	        t          |                                       |            j	        t          |          = N fd j                                                                        D             }|j        d         }t!                     }d	 _        t          t           j                             D ]\  }
\  }}t%          ||
          }|                                         |
                     t          |           j	        v r- j	        t          |                   } |j        j        di | nJt+          |fdgdgd|}|j                             j        dg           | j	        t          |          <   ||j        v r)|j        |         d         }|	                    |           n	 |                    ||||          } j        r.t9          d|i j                  }|                    d|           nN# |$ rF}|j        |j         ur|d|_                              ||d|
         |||          cY d}~c S d}~ww xY w|                    |           d _                                           !                                  "                                 ||	fS )z
        Returns new child models for the layout while reusing unchanged
        models and cleaning up any dropped objects.
        r   )RerenderErrorpanelziAccordion names do not match objects, ensure that the Accordion.objects are not modified directly. Found z names, expected .)namec                .    i | ]\  }}|j         v ||S  r/   .0kvr0   s      r3   
<dictcomp>z*Accordion._get_objects.<locals>.<dictcomp>o   7     
 
 
QD+++ q+++r4   idT)title	accordionzaccordion-header)css_classesheader_css_classes	collapsed)argscodeNFr?   )#panel.pane.baser:   r;   len_names
ValueError	enumeratezipr   _panelsrG   _cleanupr+   valuesitemsreflistr*   dictupdate_apply_styler   r,   _set_active_modelsappend
_get_modelr   r
   _togglejs_on_changelayout_get_objectsr.   r-   )r0   modelold_objectsr   rootcommr:   r;   
new_models
old_modelsir=   paneobjr1   rY   current_objectschild_paramscardcbes   `                    r3   re   zAccordion._get_objectsY   s
   
 	98888888!#RJ
t{s4yy((Ct{##C C69$iiC C C  
  )T[$)?)?@@ 	# 	#OA|d5D)))D"DLOO 	* 	*C$,&&RWW%..t444LC)
 
 
 
!Z..006688
 
 

 htnt** $(T[$)?)?@@ 	% 	%OA|dd333L 1 1! 4 4555$xx4<''|BtHH-!
!11L1111!,(:';  #	  
  !1K=AAA)-RXX&dl""S)!,!!%(((( OOCudCCE{ <%K+?dlSSS**;;;;$   x+0D0D#AH,,rr2Ct         	 e$$$$ %:%%s   8AKL9LLLc                `    d |D             }t                                          ||          S )Nc                6    g | ]}|j         d d         D ]}|S )r   N)r   )rB   childsubchilds      r3   
<listcomp>z2Accordion._compute_sizing_mode.<locals>.<listcomp>   s3    VVV5>RSRTRTCUVVxHVVVVr4   )r(   _compute_sizing_mode)r0   r   r8   r2   s      r3   ry   zAccordion._compute_sizing_mode   s0    VV(VVVww++He<<<r4   rh   Model | NonereturnNonec                    | j                                         D ]}|                    |           t                                          |           d S N)rU   rW   rV   r(   )r0   rh   r;   r2   s      r3   rV   zAccordion._cleanup   sS    \((** 	! 	!ENN4    r4   c                z    |dk    rd}n|t          |           dz
  k    rd}nd}t          ||| j        v          S )Nr   )   r   r   r   r   )r   r   r   r   )r   r   r   r   )marginrL   )rP   r[   r   )r0   rl   r   s      r3   r]   zAccordion._apply_style   sM    66!FF3t99Q;!FF!F6q/CDDDDr4   c                   | j         rd S d| _         	 | j        rU|rS|d         j        sFt          | j                                                                      |d         j                  g}ngg }t          | j	                  D ]P\  }}t          |          | j        vr| j        t          |                   j        s|                    |           Q| j        r|r|| _        d| _         d S # d| _         w xY w)NTr   F)r*   r   newrZ   rU   rW   indexrn   rS   r   rG   rL   r`   r   )r0   eventsr   rl   rm   s        r3   r^   zAccordion._set_active   s     	F $	*{ )v )fQim )t|224455;;F1IMJJK(66 ) )GAt$xxt|33 !\"T((3= )a(((; %& %$$)D!!!ED!))))s   CC. .	C7c                    | j         rd S d| _         	 t          | j                  D ]B\  }}t          |          | j        vr|| j        v| j        t          |                   _        C	 d| _         d S # d| _         w xY w)NTF)r*   rS   r   rG   rU   r   rL   )r0   r   rl   rm   s       r3   r-   zAccordion._update_active   s      	F $	*$T\22 H H4d884<//34DK3GRXX&00H
 %*D!!!ED!))))s   AA3 3	A<c                      fd j                                                                         D             } j                                        D ]} |j         j        di | d S )Nc                .    i | ]\  }}|j         v ||S r?   r@   rA   s      r3   rE   z+Accordion._update_cards.<locals>.<dictcomp>   rF   r4   r?   )r+   rW   rX   rU   r\   )r0   r   r1   r;   s   `   r3   r.   zAccordion._update_cards   s    
 
 
 
!Z..006688
 
 
 \((** 	) 	)EEK((((((	) 	)r4   selector(type | Callable[[Viewable], bool] | NoneList[Viewable]c                    t          j        | |          }| j        r6| j                                        D ]}||                    |          z  }|S |S r~   )r   selectrU   rW   )r0   r   selectedrq   s       r3   r   zAccordion.select   s^     ?422< 	++-- 2 2DKK111Or4   r~   )rh   rz   r{   r|   )r   r   r{   r   )__name__
__module____qualname____doc__r+   Stringr   r   r   r   r   Booleanr   BkColumn_bokeh_modelr   __annotations__r    rb   r/   r)   r7   re   ry   rV   r]   r^   r-   r.   r   __classcell__)r2   s   @r3   r   r      s"         $  ,u|F A/  0  0  0 UZ ), - - -F  5< %< = = =L % *8 9 9 9 U]5 /J K K KF L'1J1111 D!j43 3G    G  F F F F F7 7 7 7 7C& C& C& C&J= = = = =      
E E E* * *(
* 
* 
*) ) ) DH        r4   r   )
__future__r   typingr   r   r   r   r   r+   bokeh.modelsr	   r   r
   reactiver   baser   rq   r   bokeh.modelr   viewabler   r   r?   r4   r3   <module>r      s    " " " " " "               5 5 5 5 5 5 5 5                         $!!!!!!######M M M M M M M M M Mr4   