Ë
    :vžj|  ã                   ó¢   — d Z ddlmZmZmZ ddlmZ ddlmZm	Z	m
Z
mZ  G d„ de	«      Ze G d„ d	e«      «       Zd
„ Ze G d„ de«      «       Zd„ Zy)z]Link and DirectionalLink classes.

Propagate changes between widgets on the javascript side.
é   )ÚWidgetÚregisterÚwidget_serialization)Ú
CoreWidgeté    )ÚUnicodeÚTupleÚInstanceÚ
TraitErrorc                   ó0   ‡ — e Zd ZdZdZˆ fd„Zˆ fd„Zˆ xZS )ÚWidgetTraitTuplez<Traitlet for validating a single (Widget, 'trait_name') pairzA (Widget, 'trait_name') pairc                 ó�   •— t        ‰| �  t        t        «      t	        «       fi |¤Ž d|vr|j                  dd«      sd| _        y y y )NÚdefault_valueÚ
allow_noneF© )ÚsuperÚ__init__r
   r   r   ÚgetÚdefault_args)ÚselfÚkwargsÚ	__class__s     €úo/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/ipywidgets/widgets/widget_link.pyr   zWidgetTraitTuple.__init__   sF   ø€ Ü‰Ñœ¤&Ó)¬7«9Ñ?¸Ò?Ø &Ñ(°·±¸LÈ%Ô1Pð
 !#ˆDÕð 2QÐ(ó    c                 ó.  •— t         ‰| �  ||«      }|\  }}|j                  «       j                  |«      }dj	                  |j
                  j                  |«      }|€t        d|z  «      ‚|j                  j                  d«      st        d|z  «      ‚|S )Nz{}.{}zNo such trait: %sÚsyncz%s cannot be synced)	r   Úvalidate_elementsÚtraitsr   Úformatr   Ú__name__Ú	TypeErrorÚmetadata)r   ÚobjÚvalueÚwidgetÚ
trait_nameÚtraitÚ
trait_reprr   s          €r   r   z"WidgetTraitTuple.validate_elements   s�   ø€ Ü‘Ñ)¨#¨uÓ5ˆØ"Ñˆ�
Ø—‘“×#Ñ# JÓ/ˆØ—^‘^ F×$4Ñ$4×$=Ñ$=¸zÓJˆ
ð ˆ=ÜÐ/°*Ñ<Ó=Ð=Ø—‘×#Ñ# FÔ+ÜÐ1°JÑ>Ó?Ð?Øˆr   )r    Ú
__module__Ú__qualname__Ú__doc__Ú	info_textr   r   Ú__classcell__©r   s   @r   r   r      s   ø„ ÙFà/€Iô#÷ð r   r   c                   óÄ   ‡ — e Zd ZdZ ed«      j                  d¬«      Z  ed¬«      j
                  dddie¤ŽZ	  ed¬«      j
                  dddie¤ŽZ
ˆ fd	„Zd
„ Zˆ xZS )ÚLinkz“Link Widget

    source: a (Widget, 'trait_name') tuple for the source trait
    target: a (Widget, 'trait_name') tuple that should be updated
    Ú	LinkModelT©r   z&The target (widget, 'trait_name') pair)Úhelpr   z&The source (widget, 'trait_name') pairc                 ó8   •— ||d<   ||d<   t        ‰| �  di |¤Ž y )NÚsourceÚtargetr   )r   r   )r   r5   r6   r   r   s       €r   r   zLink.__init__7   s'   ø€ Ø!ˆˆxÑØ!ˆˆxÑÜ‰ÑÑ"˜6Ó"r   c                 ó$   — | j                  «        y )N)Úclose)r   s    r   ÚunlinkzLink.unlink=   s   € Ø�
‰
�r   r   )r    r)   r*   r+   r   ÚtagÚ_model_namer   r   r6   r5   r   r9   r-   r.   s   @r   r0   r0   +   sr   ø„ ññ ˜+Ó&×*Ñ*°Ð*Ó5€KØPÑÐ#KÔL×PÑPÑsÐVZÐsÐ^rÑs€FØPÑÐ#KÔL×PÑPÑsÐVZÐsÐ^rÑs€Fô#ör   r0   c                 ó   — t        | |«      S )a›  Link two widget attributes on the frontend so they remain in sync.

    The link is created in the front-end and does not rely on a roundtrip
    to the backend.

    Parameters
    ----------
    source : a (Widget, 'trait_name') tuple for the first trait
    target : a (Widget, 'trait_name') tuple for the second trait

    Examples
    --------

    >>> c = link((widget1, 'value'), (widget2, 'value'))
    )r0   )Úattr1Úattr2s     r   Újslinkr?   A   s   € ô  ��uÓÐr   c                   ó@   — e Zd ZdZ ed«      j                  d¬«      Zy)ÚDirectionalLinkz½A directional link

    source: a (Widget, 'trait_name') tuple for the source trait
    target: a (Widget, 'trait_name') tuple that should be updated
    when the source trait changes.
    ÚDirectionalLinkModelTr2   N)r    r)   r*   r+   r   r:   r;   r   r   r   rA   rA   T   s"   „ ññ Ð0Ó1×5Ñ5¸4Ð5Ó@�Kr   rA   c                 ó   — t        | |«      S )aŸ  Link a source widget attribute with a target widget attribute.

    The link is created in the front-end and does not rely on a roundtrip
    to the backend.

    Parameters
    ----------
    source : a (Widget, 'trait_name') tuple for the source trait
    target : a (Widget, 'trait_name') tuple for the target trait

    Examples
    --------

    >>> c = dlink((src_widget, 'value'), (tgt_widget, 'value'))
    )rA   )r5   r6   s     r   ÚjsdlinkrD   _   s   € ô  ˜6 6Ó*Ð*r   N)r+   r%   r   r   r   Úwidget_corer   Ú	traitletsr   r	   r
   r   r   r0   r?   rA   rD   r   r   r   Ú<module>rG      sj   ðñ÷
 ;Ñ :Ý #ç :Ó :ô�uô ð8 
ôˆ:ó ó 
ðò*ð& 
ôA�dó Aó 
ðAó+r   