
    Be                        d 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mZ ddlmZ dd	lmZ d
dlmZ erddlmZ  G d de          ZdS )z7
Layout component to lay out objects in a set of tabs.
    )annotations)defaultdict)TYPE_CHECKINGClassVarListMappingTypeN)SpacerTabPanel   )Tabs)
Layoutable   )NamedListPanel)Modelc                      e Zd ZU dZ ej        dd          Z ej        dd          Z ej        dg dd	          Z	 ej
        d
d          Z ej
        d
d          ZeZded<   dZded<   ddiZded<   dgZded<   d
d
d
ddZded<   d
d
dZded<    fdZ fdZd-d. fd$Zed%             Zd& Z fd'Z fd(Zd) Z fd*Zd+ Zd-d,Z  xZ!S )/r   un  
    The `Tabs` layout allows switching between multiple objects by clicking
    on the corresponding tab header.

    Tab labels may be defined explicitly as part of a tuple or will be
    inferred from the `name` parameter of the tab’s contents.

    Like `Column` and `Row`, `Tabs` has a list-like API with methods to
    `append`, `extend`, `clear`, `insert`, `pop`, `remove` and `__setitem__`,
    which make it possible to interactively update and modify the tabs.

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

    :Example:

    >>> pn.Tabs(('Scatter', plot1), some_pane_with_a_name)
    Fz5
        Whether it should be possible to close tabs.)defaultdocz2
        Dynamically populate only the active tab.above)r   belowleftrightz?
        The location of the tabs relative to the tab contents.)r   objectsr   N)r   N)r   boundszClassVar[Type[Model]]_bokeh_modelverticalzClassVar[str | None]
_directiontabsz[
    var ids = [];
    for (var t of value) {{ ids.push(t.id) }};
    var value = ids;
    zClassVar[Mapping[str, str]]_js_transformsclosablezClassVar[List[str]]_manual_params)r    dynamicnamer   z"ClassVar[Mapping[str, str | None]]_rename)r"   r   _source_transformsc                     t                      j        |i | t          t                    | _        dt          |           dz
  f| j        j        _        | j        	                    | j
        ddg           d S )Nr   r"   active)super__init__r   dict	_renderedlenparamr(   r   watch_update_active)selfr   params	__class__s      1lib/python3.11/site-packages/panel/layout/tabs.pyr*   zTabs.__init__L   sp    ',V,,,$T**$&D		!#4
 
,y(.CDDDDD    c                    dt          |j                  dz
  f| j        j        _        t                                          |           d S )Nr'   r   )r-   newr.   r(   r   r)   _update_names)r1   eventr3   s     r4   r8   zTabs._update_namesR   s@    $&EIq(8#9
 e$$$$$r5   rootModel | NonereturnNonec                    t                                          |           |rP|j        d         | j        v r| j        |j        d         = |j        d         | j        v r| j        |j        d         = d S d S d S )Nid)r)   _cleanupref_panelsr,   )r1   r:   r3   s     r4   r@   zTabs._cleanupW   s     	3x~--L$0x~//N48D>222		3 	3 0/r5   c                4    t           j        | j        rdgng z   S )Nr(   )r   _preprocess_paramsr"   )r1   s    r4   rD   zTabs._preprocess_params_   s    0$,4VXJJTVWWr5   c                    | j                             |          \  }}|r9	 fd|D             }n# t          $ r dfcY S w xY w| j        fd|D             }|fS )z%
        Handle closed tabs.
        c                :    g | ]}                     |          S  )index).0tabolds     r4   
<listcomp>z'Tabs._process_close.<locals>.<listcomp>n   s#    6663		#666r5   Nc                     g | ]
}|         S rG   rG   )rI   irK   s     r4   rL   z'Tabs._process_close.<locals>.<listcomp>r   s    (((a3q6(((r5   )_modelsget	Exceptionr   )r1   rA   attrrK   r7   model_indss      `    r4   _process_closezTabs._process_closeg   s     <##C((q 	)!6666#666 ! ! !Dy   !,C((((4(((CCxs   1 AAc           	        || j                             |g           v r"| j         |                             |           d S |dk    r|                     ||||          \  }}|d S t	                                          |||||||           d S Nr   )	_changingrP   removerV   r)   _comm_change)	r1   r   rA   commsubpathrR   rK   r7   r3   s	           r4   r[   zTabs._comm_changeu   s    4>%%c2....N3&&t,,,F6>>**3c3??HC{S#tWdCEEEEEr5   c                   || j                             |g           v r"| j         |                             |           d S |dk    r|                     ||||          \  }}|d S t	                                          ||||||           d S rX   )rY   rP   rZ   rV   r)   _server_change)r1   r   rA   r]   rR   rK   r7   r3   s          r4   r_   zTabs._server_change   s    4>%%c2....N3&&t,,,F6>>**3c3??HC{sC$SAAAAAr5   c                    |D ]<}|j         dk    s| j        r(|j         dk    r| j                            d            d S =d S )Nr"   r(   r   )r#   r"   r.   trigger)r1   eventsr9   s      r4   r0   zTabs._update_active   sY     	 	EzY&&4<&EJ(<R<R
""9---	 	r5   c                `    d |D             }t                                          ||          S )Nc                    g | ]	}|j         
S rG   )child)rI   re   s     r4   rL   z-Tabs._compute_sizing_mode.<locals>.<listcomp>   s    666EEK666r5   )r)   _compute_sizing_mode)r1   childrenpropsr3   s      r4   rf   zTabs._compute_sizing_mode   s0    66X666ww++He<<<r5   c                R    |D ]#}|j         dk    r|j        D ]}|j        |_        $d S )Nr    )r#   r   r7   r    )	r1   rb   rS   r   r:   parentr\   r9   re   s	            r4   _manual_updatezTabs._manual_update   sE     	/ 	/EzZ''"Z / /E%*YENN	/ 	/r5   c           	     R   ddl m}m} g g }	}t          | j                  t          |           k    r3t          dt          | j                  t          |           fz            t          t          | j        |                     D ]\  }
\  }} |||          }|| j        |
<    |j	        d         }| j
        |         }| j        |         }|D ]g}|| j        v r|                    |           |                    t          |          d           |                    t          |          d           ht          |           }t          t          | j        |                     D ]\  }
\  }}t          |          }| j        o
|
| j        k    }|                    |          }t'          |d          o*t)          |j        t,                    o|j        j        dgk    }||v r(||v r$||z  r	| j        s|s|                    |           |r$|s"||v r||         }|	                    |           n|rHt-          di d	 |j                                                                        D             }dg|_        nm	 |                    ||||          x||<   }nN# |$ rF}|j        |j        | ur|d|_        |                     ||d|
         |||          cY d}~c S d}~ww xY wt?          ||j         || j!        
          x}||<   |                    |           ||	fS )z
        Returns new child models for the layout while reusing unchanged
        models and cleaning up any dropped objects.
        r   )RerenderErrorpanelztTab names do not match objects, ensure that the Tabs.objects are not modified directly. Found %d names, expected %d.)r#   r?   Nre   hiddenc                B    i | ]\  }}|t           j        v r	||dv||S )N)r#   design)r   r.   )rI   kvs      r4   
<dictcomp>z%Tabs._get_objects.<locals>.<dictcomp>   sH     $A $A $ATQ'(J,<'<'<$%-?$?$? %&q$?$?$?r5   )titler#   re   r    rG   )"	pane.baserm   rn   r-   _names
ValueError	enumeratezipr   rA   rB   r,   r@   popr?   listr"   r(   rP   hasattr
isinstancere   BkSpacertagsappendr.   valuesitems
_get_modellayout_get_objects
BkTabPanelr#   r    )r1   rS   old_objectsr   r:   r\   rm   rn   
new_models
old_modelsrN   r#   panerA   panelsrenderedobjcurrent_objectsprefro   prev_hiddenre   es                          r4   r   zTabs._get_objects   s   
 	54444444!#RJ
t{s4yy(( F "$+..D		:; < < <  )T[$)?)?@@ 	# 	#OA|d5D)))D"DLOOhtnc">#& 	( 	(Cdl""LLJJr#ww%%%LLC$''''t**(T[$)?)?@@ %	% %	%OA|dd88D\6a4;&6FJJt$$Ew'' /Ju{H,M,M / XJ.  ##{* )748L )7DO )7!!%((( Z6 Zdh.>.> !!%(((( Z  B B $A $ATZ5F5F5H5H5N5N5P5P $A $A $A B B 'Z

Z-1__S$t-T-TTHTNUU$ Z Z Zx+0D0D#AH,,UOBQB4GdTXYYYYYYYYYY	Z $.%$-$ $ $ EF4L e$$$$:%%s    JK)#9K$K)$K))N)r:   r;   r<   r=   )"__name__
__module____qualname____doc__r.   Booleanr    r"   ObjectSelectortabs_locationIntegerheightwidthBkTabsr   __annotations__r   r   r!   r$   r%   r*   r8   r@   propertyrD   rV   r[   r_   r0   rf   rk   r   __classcell__)r3   s   @r4   r   r      s         $ u}U 18 9 9 9H emE 05 6 6 6G )E(!D!D!D KBC C CM U]4	:::FEM$y999E*0L0000'1J111139 < 3	N 	 	 	 	 ,6,N6666 T4F3 3G    
 D> >    E E E E E% % % % %
3 3 3 3 3 3 3 X X XX  F F F F FB B B B B  = = = = =/ / /A& A& A& A& A& A& A& A&r5   r   )r   
__future__r   collectionsr   typingr   r   r   r   r	   r.   bokeh.modelsr
   r   r   r   models.tabsr   r   viewabler   baser   bokeh.modelr   rG   r5   r4   <module>r      s,    # " " " " " # # # # # #               C C C C C C C C ( ( ( ( ( ( ! ! ! ! ! !             "!!!!!!G& G& G& G& G&> G& G& G& G& G&r5   