o
    ۷i                     @  s   d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
mZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ e
rJddlmZ e G dd deZdS )zGPredefined button to copy a shareable link to the current Gradio Space.    )annotationsN)Sequence)Path)TYPE_CHECKINGLiteral)document)utils)	Component)Button)get_blocks_context)Timerc                      sn   e Zd ZdZdZdZ		d.ddded	dddddddd
ddddd/ fd(d)Zd*d+ Z		d.d0d,d-Z
  ZS )1DeepLinkButtonz
    Creates a button that copies a shareable link to the current Gradio Space.
    The link includes the current session hash as a query parameter.
    Tr   Share via LinkLink Copied!N	secondarylgzlink.svgvalueinputsvariantsizeiconlinkvisibleinteractiveelem_idelem_classesrenderkeypreserved_by_keyscale	min_widtheverystrcopied_valuer   7Component | Sequence[Component] | set[Component] | Noner   Literal['primary', 'secondary']r   Literal['sm', 'md', 'lg']r   str | Path | Noner   
str | Noner   bool | Literal['hidden']r   boolr   r   list[str] | str | Noner   r   (int | str | tuple[int | str, ...] | Noner   r    
int | Noner!   r"   Timer | float | Nonec                  sf   || _ t j|f|||||||	d| j |||||||d |  |  jd7  _t r1|   dS dS )z
        Parameters:
            value: The text to display on the button.
            copied_value: The text to display on the button after the link has been copied.
        zgradio-share-link-button-r      N)r$   super__init__	n_createdr   activate)selfr   r$   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   	__class__ X/home/ubuntu/vllm_env/lib/python3.10/site-packages/gradio/components/deep_link_button.pyr2       s2   
zDeepLinkButton.__init__c                   sF      j j} jdg  g|d  j fddg  gddd dS )z.Attach the click event to copy the share link.N)fnr   outputsjsc                     s   t dp jS )Nr0   )timesleepr   r8   r5   r8   r9   <lambda>Y   s    z)DeepLinkButton.activate.<locals>.<lambda>F)r:   r   r;   queueshow_api)get_share_linkr   r$   click)r5   _jsr8   r?   r9   r4   R   s   

zDeepLinkButton.activatec                 C  s<   t  rdnd}td| dd|d|d| jS )Nz)currentUrl.searchParams.delete('__sign'); a  
        () => {
            const sessionHash = window.__gradio_session_hash__;
            fetch(`gradio_api/deep_link?session_hash=${sessionHash}`)
                .then(response => {
                    if (!response.ok) {
                        throw new Error('Network response was not ok');
                    }
                    return response.text();
                })
                .then(data => {
                    const currentUrl = new URL(window.location.href);
                    const cleanData = data.replace(/^"|"$/g, '');
                    if (cleanData) {
                        currentUrl.searchParams.set('deep_link', cleanData);
                    }
                    a<  
                    navigator.clipboard.writeText(currentUrl.toString());
                })
                .catch(error => {
                    console.error('Error fetching deep link:', error);
                    return "Error";
                });

            return "BUTTON_COPIED_VALUE";
        }
        BUTTON_DEFAULT_VALUEBUTTON_COPIED_VALUEID)r   	get_spacetextwrapdedentreplacer   )r5   r   r$   delete_sign_liner8   r8   r9   rC   `   s   

zDeepLinkButton.get_share_link)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.   r"   r/   )r   r#   r$   r#   )__name__
__module____qualname____doc__is_templater3   r   get_icon_pathr2   r4   rC   __classcell__r8   r8   r6   r9   r      s4    2r   )rR   
__future__r   rK   r=   collections.abcr   pathlibr   typingr   r   gradio_client.documentationr   gradior   gradio.components.baser	   gradio.components.buttonr
   gradio.contextr   gradio.componentsr   r   r8   r8   r8   r9   <module>   s     