a
    Ad                     @   s   d dl ZG dd dZejej_G dd deejZG dd dejZG dd	 d	eejZ	G d
d deej
ZG dd deejZG dd deejZG dd deejZG dd deejZG dd deejZG dd dejZdS )    Nc                   @   s   e Zd Zdd ZdS )FormComponentc                 C   s   t jjS N)gr
componentsFormself r	   =/var/www/html/stable-diffusion-webui/modules/ui_components.pyget_expected_parent   s    z!FormComponent.get_expected_parentN)__name__
__module____qualname__r   r	   r	   r	   r
   r      s   r   c                       s(   e Zd ZdZ fddZdd Z  ZS )
ToolButtonz@Small button with single emoji as text, fits inside gradio formsc                    s,   | dg }t j|ddg|i| d S )Nelem_classestool)popsuper__init__)r   argskwargsclasses	__class__r	   r
   r      s    zToolButton.__init__c                 C   s   dS )Nbuttonr	   r   r	   r	   r
   get_block_name   s    zToolButton.get_block_namer   r   r   __doc__r   r   __classcell__r	   r	   r   r
   r      s   r   c                       s(   e Zd ZdZ fddZdd Z  ZS )ResizeHandleRow+Same as gr.Row but fits inside gradio formsc                    s"   t  jf i | | jd d S )Nzresize-handle-row)r   r   r   appendr   r   r   r	   r
   r      s    zResizeHandleRow.__init__c                 C   s   dS Nrowr	   r   r	   r	   r
   r      s    zResizeHandleRow.get_block_namer   r	   r	   r   r
   r      s   r   c                   @   s   e Zd ZdZdd ZdS )FormRowr    c                 C   s   dS r#   r	   r   r	   r	   r
   r   &   s    zFormRow.get_block_nameNr   r   r   r   r   r	   r	   r	   r
   r%   #   s   r%   c                   @   s   e Zd ZdZdd ZdS )
FormColumnz.Same as gr.Column but fits inside gradio formsc                 C   s   dS )Ncolumnr	   r   r	   r	   r
   r   -   s    zFormColumn.get_block_nameNr&   r	   r	   r	   r
   r'   *   s   r'   c                   @   s   e Zd ZdZdd ZdS )	FormGroupz-Same as gr.Group but fits inside gradio formsc                 C   s   dS )Ngroupr	   r   r	   r	   r
   r   4   s    zFormGroup.get_block_nameNr&   r	   r	   r	   r
   r)   1   s   r)   c                   @   s   e Zd ZdZdd ZdS )FormHTMLz,Same as gr.HTML but fits inside gradio formsc                 C   s   dS )Nhtmlr	   r   r	   r	   r
   r   ;   s    zFormHTML.get_block_nameNr&   r	   r	   r	   r
   r+   8   s   r+   c                   @   s   e Zd ZdZdd ZdS )FormColorPickerz3Same as gr.ColorPicker but fits inside gradio formsc                 C   s   dS )Ncolorpickerr	   r   r	   r	   r
   r   B   s    zFormColorPicker.get_block_nameNr&   r	   r	   r	   r
   r-   ?   s   r-   c                       s(   e Zd ZdZ fddZdd Z  ZS )DropdownMultiz*Same as gr.Dropdown but always multiselectc                    s   t  jf ddi| d S )NmultiselectTr   r   r"   r   r	   r
   r   H   s    zDropdownMulti.__init__c                 C   s   dS Ndropdownr	   r   r	   r	   r
   r   K   s    zDropdownMulti.get_block_namer   r	   r	   r   r
   r/   F   s   r/   c                       s(   e Zd ZdZ fddZdd Z  ZS )DropdownEditablez,Same as gr.Dropdown but allows editing valuec                    s   t  jf ddi| d S )Nallow_custom_valueTr1   r"   r   r	   r
   r   Q   s    zDropdownEditable.__init__c                 C   s   dS r2   r	   r   r	   r	   r
   r   T   s    zDropdownEditable.get_block_namer   r	   r	   r   r
   r4   O   s   r4   c                       sD   e Zd ZdZdZ fddZdd Zdd Zd	d
 Zdd Z	  Z
S )InputAccordionzA gr.Accordion that can be used as an input - returns True if open, False if closed.

    Actaully just a hidden checkbox, but creates an accordion that follows and is followed by the state of the checkbox.
    r   c                    s   | d| _| jd u r2dtj | _t jd7  _i || j ddd}t j|fi | | jd d| j d | gd	 i || j| d
ddg|d}tjf i || _	d S )Nelem_idzinput-accordion-   z	-checkboxF)r7   visiblez*function(checked){ inputAccordionChecked("z", checked); })fn_jsinputslabel	Accordionzinput-accordion)r7   r=   r   open)
getaccordion_idr6   global_indexr   r   changer   r>   	accordion)r   valuer   Zkwargs_checkboxZkwargs_accordionr   r	   r
   r   `   s*    


zInputAccordion.__init__c                 C   s   t j| jd dddS )a  Allows you to put something into the label of the accordion.

        Use it like this:

        ```
        with InputAccordion(False, label="Accordion") as acc:
            with acc.extra():
                FormHTML(value="hello", min_width=0)

            ...
        ```
        z-extrazinput-accordion-extrar   )r7   r   	min_width)r   ColumnrA   r   r	   r	   r
   extrax   s    zInputAccordion.extrac                 C   s   | j   | S r   )rD   	__enter__r   r	   r	   r
   rI      s    
zInputAccordion.__enter__c                 C   s   | j ||| d S r   )rD   __exit__)r   exc_typeexc_valexc_tbr	   r	   r
   rJ      s    zInputAccordion.__exit__c                 C   s   dS )Ncheckboxr	   r   r	   r	   r
   r      s    zInputAccordion.get_block_name)r   r   r   r   rB   r   rH   rI   rJ   r   r   r	   r	   r   r
   r6   X   s   r6   )gradior   r   r   DropdownButtonr   Rowr   r%   rG   r'   Groupr)   HTMLr+   ColorPickerr-   r/   r4   Checkboxr6   r	   r	   r	   r
   <module>   s   
		