o
    tf                     @  s  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dZed	Zdd
d6ddZdddddd7d d!Zeejejfd"	d8dd
d9d&d'Zd(Zd)Zejejejeje gejejeje f f Zd:d,d-Zd;d1d2Zd<d4d5ZdS )=z$Experimental features for anywidget.    )annotationsN   )MimeBundleDescriptor)
WidgetBase)	dataclasswidgetr   _TT)cssesmstr | pathlib.Pathr
   None | str | pathlib.Pathkwargs
typing.Anyreturntyping.Callable[[T], T]c                   s*   |  d< |dur| d< d	 fd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.
    Z_esmNZ_cssclsr   r   c                   s   t | dtdi   | S )N_repr_mimebundle_ )setattrr   r   r   r   _/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/anywidget/experimental.py
_decorator1   s   zwidget.<locals>._decorator)r   r   r   r   r   )r   r
   r   r   r   r   r   r      s
   r   TFr   
eq_defaultorder_defaultkw_only_defaultfield_specifiersr   boolr   r   r   3tuple[type | typing.Callable[..., typing.Any], ...]typing.Callable[[_T], _T]c                 C  s   dd S )Nc                 S  s   | S Nr   )ar   r   r   <lambda>A   s    z)__dataclass_transform__.<locals>.<lambda>r   r   r   r   r   __dataclass_transform__:   s   r%   )r   r   T | Nonedataclass_kwargsc                  s&   d fdd}| dur|| 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
    r   r	   r   c                   s0   t j| fi } t| } t d| } | S )N)r   r
   )dataclassesr   psygnalZeventedr   r   r
   r'   r   r   r   r   i   s   
zdataclass.<locals>._decoratorN)r   r	   r   r	   r   )r   r   r
   r'   r   r   r*   r   r   D   s   %r   Z_anywidget_commandZ_anywidget_commandscmd_AnyWidgetCommandc                 C  s   t | td | S )z+Mark a function as a command for anywidget.T)r   _ANYWIDGET_COMMAND)r+   r   r   r   command{   s   r.   
widget_clstypeNonec                 C  s\   i }| j D ] }t|dsq|j D ]\}}t|r$t|tdr$|||< qqt| t| d S )N__dict__F)	__mro__hasattrr2   itemscallablegetattrr-   r   _ANYWIDGET_COMMANDS)r/   cmdsbasenameattrr   r   r   _collect_anywidget_commands   s   

r=   r   c                   s>   t dttti   sdS d fdd}| dS )zMRegister a custom message reducer for a widget if it implements the protocol.zdict[str, _AnyWidgetCommand]Nselfr   msgstr | list | dictbufferslist[bytes]r   r1   c                   sX   t |tr|ddkrd S  |d  }||d |\}}| |d d|d| d S )Nkindzanywidget-commandr;   r?   idzanywidget-command-response)rD   rC   response)
isinstancedictgetsend)r>   r?   rA   r+   rE   r9   r   r   r   handle_anywidget_command   s   z>_register_anywidget_commands.<locals>.handle_anywidget_command)r>   r   r?   r@   rA   rB   r   r1   )typingcastr7   r0   r8   Zon_msg)r   rK   r   rJ   r   _register_anywidget_commands   s   rN   )r   r   r
   r   r   r   r   r   )
r   r   r   r   r   r   r   r    r   r!   r"   )
r   r&   r   r   r
   r   r'   r   r   r   )r+   r,   r   r,   )r/   r0   r   r1   )r   r   r   r1   ) __doc__
__future__r   r(   rL   r)   Z_descriptorr   TYPE_CHECKINGpathlibZ
_protocolsr   __all__TypeVarr   r	   r   r%   Fieldfieldr   r-   r8   CallableAnyListbytesTupler,   r.   r=   rN   r   r   r   r   <module>   sD    

%
-

