
    }tf                    4   d Z ddlmZ ddlZddlZddlZddlmZ ej                  r
ddl	Z	ddl
mZ g dZ ej                  d      Z ej                  d	      Zdd
	 	 	 	 	 	 	 ddZddddd	 	 	 	 	 	 	 	 	 ddZ eej$                  ej&                  f      	 ddd
	 	 	 	 	 	 	 	 	 dd       ZdZdZej.                  ej0                  ej0                  ej2                  e   gej6                  ej0                  ej2                  e   f   f   ZddZddZddZy)z$Experimental features for anywidget.    )annotationsN   )MimeBundleDescriptor)
WidgetBase)	dataclasswidgetr   _TT)cssc                ,    | d<   ||d<   dfd}|S )a  Decorator to register a widget class as a mimebundle.

    Parameters
    ----------
    esm : str | pathlib.Path
        The path or contents of an ES Module for the widget.
    css : None | str | pathlib.Path, optional
        The path or contents of a CSS file for the widget.
    **kwargs
        Additional keyword arguments to pass to the

    Returns
    -------
    Callable
        A decorator that registers the widget class as a mimebundle.
    _esm_cssc           	     4    t        | dt        di        | S )N_repr_mimebundle_ )setattrr   )clskwargss    `/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/anywidget/experimental.py
_decoratorzwidget.<locals>._decorator1   s    (*>*H*HI
    )r   r	   returnr	   r   )esmr   r   r   s     ` r   r   r      s)    , F6N
v r   TFr   
eq_defaultorder_defaultkw_only_defaultfield_specifiersc                    d S )Nc                    | S Nr   )as    r   <lambda>z)__dataclass_transform__.<locals>.<lambda>A   s    Q r   r   r   s       r   __dataclass_transform__r$   :   s
     r   )r   c               0    dfd}|  ||       S |S )a  Turns class into a dataclass, makes it evented, and registers it as a widget.

    Parameters
    ----------
    cls : T | None
        The class to decorate.
    esm : str | pathlib.Path
        The path or contents of an ES Module for the widget.
    css : None | str | pathlib.Path, optional
        The path or contents of a CSS file for the widget.
    dataclass_kwargs : typing.Any
        Additional keyword arguments to pass to the dataclass decorator.

    Returns
    -------
    type
        The evented dataclass.

    Examples
    --------
    >>> @dataclass(esm="index.js")
    ... class Counter:
    ...     value: int = 0
    ...
    >>> counter = Counter()
    >>> counter.value = 1
    >>> counter
    c                    t        j                  | fi } t        j                  |       }  t	              |       } | S )N)r   r   )dataclassesr   psygnaleventedr   )r   r   dataclass_kwargsr   s    r   r   zdataclass.<locals>._decoratori   s?    ##C<+;<ooc"&f#&s+
r   )r   r
   r   r
   r   )r   r   r   r*   r   s    ``` r   r   r   D   s    J "o:c?=:=r   _anywidget_command_anywidget_commandsc                (    t        | t        d       | S )z+Mark a function as a command for anywidget.T)r   _ANYWIDGET_COMMAND)cmds    r   commandr0   {   s    C#T*Jr   c                    i }| j                   D ]T  }t        |d      s|j                  j                         D ](  \  }}t	        |      st        |t        d      s$|||<   * V t        | t        |       y )N__dict__F)	__mro__hasattrr2   itemscallablegetattrr.   r   _ANYWIDGET_COMMANDS)
widget_clscmdsbasenameattrs        r   _collect_anywidget_commandsr>      st    )+D"" "tZ(----/ 	"JD$~'$0BE"J!T
	"" J+T2r   c                     t        j                  dt        t               t        i             sy	 	 	 	 	 	 	 	 d fd} j                  |       y)zMRegister a custom message reducer for a widget if it implements the protocol.zdict[str, _AnyWidgetCommand]Nc                    t        |t              r|j                  d      dk7  ry |d      } ||d   |      \  }}| j                  |d   d|d|       y )Nkindzanywidget-commandr<   msgidzanywidget-command-response)rC   rA   response)
isinstancedictgetsend)selfrB   buffersr/   rD   r:   r   s        r   handle_anywidget_commandz>_register_anywidget_commands.<locals>.handle_anywidget_command   sj     #t$;N(N3v;E
G<'		$i4$
 	
r   )rI   r   rB   zstr | list | dictrJ   zlist[bytes]r   None)typingcastr7   typer8   on_msg)r   rK   r:   s   ` @r   _register_anywidget_commandsrQ      sc     ;;&V126D 

0
;F
	
  MM*+r   )r   str | pathlib.Pathr   None | str | pathlib.Pathr   
typing.Anyr   typing.Callable[[T], T])
r   boolr   rV   r   rV   r   z3tuple[type | typing.Callable[..., typing.Any], ...]r   ztyping.Callable[[_T], _T]r!   )
r   zT | Noner   rR   r   rS   r*   rT   r   rU   )r/   _AnyWidgetCommandr   rW   )r9   rO   r   rL   )r   r   r   rL   ) __doc__
__future__r   r'   rM   r(   _descriptorr   TYPE_CHECKINGpathlib
_protocolsr   __all__TypeVarr	   r
   r   r$   Fieldfieldr   r.   r8   CallableAnyListbytesTuplerW   r0   r>   rQ   r   r   r   <module>rg      s   * "    -	&
9V^^DFNN3 &*	 
# 	
 J !MO  	
 J  ;+<+<k>O>O*PQ*> &*	*>	*> 
*> 
#	*>
 #*> *> R*>Z * + OOZZV[[/0
LLV[[//02 	3,r   