o
    Zh/#                     @  s  d dl mZ d dlZd dlmZ d dlmZmZ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 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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-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 g dZ6					dVdWd#d$Z7e	d%Z8ddg dfdXd)d*Z9			+	,			-		dYdZd8d9Z:			:	d[d\d<d=Z;			:	,			d]d^dAdBZ<			:	,			d]d_dFdGZ=dddHdI dfd`dLdMZ>dadQdRZ?dbdTdUZ@dS )c    )annotationsN)get_running_loop)AnyCallableSequenceTypeVar)Application)get_app)Buffer)	Completerrun_in_executor_with_context)FilterOrBool)AnyFormattedText)
focus_nextfocus_previous)load_key_bindings)KeyBindingsmerge_key_bindings)Layout)AnyContainerHSplit)	Dimension)	BaseStyle)	Validator)	BoxButtonCheckboxListDialogLabelProgressBar	RadioListTextAreaValidationToolbar)yes_no_dialogbutton_dialoginput_dialogmessage_dialogradiolist_dialogcheckboxlist_dialogprogress_dialog YesNotitler   textyes_textstrno_textstyleBaseStyle | NonereturnApplication[bool]c                 C  sJ   ddd}ddd}t | t|ddt||d	t||d	gdd
}t||S )z8
    Display a Yes/No dialog.
    Return a boolean.
    r5   Nonec                   S     t  jdd d S )NTresultr	   exit r=   r=   W/var/www/html/lang_env/lib/python3.10/site-packages/prompt_toolkit/shortcuts/dialogs.pyyes_handler9      z"yes_no_dialog.<locals>.yes_handlerc                   S  r8   )NFr9   r;   r=   r=   r=   r>   
no_handler<   r@   z!yes_no_dialog.<locals>.no_handlerTr/   Zdont_extend_heightr/   handlerr.   bodybuttonswith_backgroundNr5   r7   )r   r   r   _create_app)r.   r/   r0   r2   r3   r?   rA   dialogr=   r=   r>   r$   -   s   






r$   _TrG   list[tuple[str, _T]]Application[_T]c                   s:   ddd t | t|dd fd	d
|D dd}t||S )zx
    Display a dialog with button choices (given as a list of tuples).
    Return the value associated with button.
    vrL   r5   r7   c                 S  s   t  j| d d S Nr9   r;   )rO   r=   r=   r>   button_handlerZ   r@   z%button_dialog.<locals>.button_handlerTrB   c                   s$   g | ]\}}t |t |d qS )rC   )r   	functoolspartial).0trO   rQ   r=   r>   
<listcomp>`   s    z!button_dialog.<locals>.<listcomp>rE   N)rO   rL   r5   r7   )r   r   rJ   )r.   r/   rG   r3   rK   r=   rV   r>   r%   O   s   




r%   OKCancelFok_textcancel_text	completerCompleter | None	validatorValidator | Nonepasswordr   defaultApplication[str]c	                   s   d fdd}	dfdd	}
t ||
d
 t |td
}t|d||||	dt| tt|ddt gtdddd |gdd}t||S )zV
    Display a text input box.
    Return the given text, or None when cancelled.
    bufr
   r5   boolc                   s   t  j  dS )NT)r	   layoutZfocus)rc   )	ok_buttonr=   r>   acceptz   s   zinput_dialog.<locals>.acceptr7   c                        t  j jd d S rP   )r	   r<   r/   r=   )	textfieldr=   r>   
ok_handler~      z input_dialog.<locals>.ok_handlerrC   F)r/   	multiliner`   r\   r^   Zaccept_handlerTrB      )	preferredmaxpaddingrE   N)rc   r
   r5   rd   rI   )	r   _return_noner"   r   r   r   r#   DrJ   )r.   r/   rZ   r[   r\   r^   r`   r3   ra   rg   rj   Zcancel_buttonrK   r=   )rf   ri   r>   r&   j   s2   	


r&   OkApplication[None]c                 C  s,   t | t|ddt|tdgdd}t||S )zM
    Display a simple message box and wait until the user presses enter.
    TrB   rC   rE   )r   r   r   rr   rJ   )r.   r/   rZ   r3   rK   r=   r=   r>   r'      s   	

r'   values,Sequence[tuple[_T, AnyFormattedText]] | None	_T | Nonec           	        h   |du rg }d fdd}t ||d t| tt|dd gd	d
t||dt|tdgdd}t||S )z
    Display a simple list of element the user can choose amongst.

    Only one element can be selected at a time using Arrow keys and Enter.
    The focus can be moved between the list and the Ok/Cancel button with tab.
    Nr5   r7   c                     rh   rP   )r	   r<   current_valuer=   Z
radio_listr=   r>   rj      rk   z$radiolist_dialog.<locals>.ok_handler)rv   ra   TrB   rm   rp   rC   rE   rI   )r!   r   r   r   r   rr   rJ   )	r.   r/   rZ   r[   rv   ra   r3   rj   rK   r=   r{   r>   r(          


r(   default_valuesSequence[_T] | NoneApplication[list[_T]]c           	        ry   )z
    Display a simple list of element the user can choose multiple values amongst.

    Several elements can be selected at a time using Arrow keys and Enter.
    The focus can be moved between the list and the Ok/Cancel button with tab.
    Nr5   r7   c                     rh   rP   )r	   r<   Zcurrent_valuesr=   Zcb_listr=   r>   rj      rk   z'checkboxlist_dialog.<locals>.ok_handler)rv   r}   TrB   rm   rp   rC   rE   rI   )r   r   r   r   r   rr   rJ   )	r.   r/   rZ   r[   rv   r}   r3   rj   rK   r=   r   r>   r)      r|   r)   c                  G  s   d S Nr=   )ar=   r=   r>   <lambda>  s    r   run_callback>Callable[[Callable[[int], None], Callable[[str], None]], None]c                   s   t  t tdtdddtttt|dttddg| dd	}t	|| d fddd fddd fdddfdd} j
|  S )zz
    :param run_callback: A function that receives as input a `set_percentage`
        function and it does the work.
    Fl    d(	 )rn   )Z	focusableheightr/   rm   rp   T)rF   r.   rH   valueintr5   r7   c                   s   t | _   d S r   )r   
percentage
invalidate)r   )appprogressbarr=   r>   set_percentage!  s   
z'progress_dialog.<locals>.set_percentager/   r1   c                   s    jj|     d S r   )Zcall_soon_threadsafebufferZinsert_textr   r   )r   loop	text_arear=   r>   log_text%  s   z!progress_dialog.<locals>.log_textc                     s$   z W     d S     w r   )r<   r=   )r   r   r   r   r=   r>   start+  s   zprogress_dialog.<locals>.startc                     s   t   d S r   r   r=   )r   r=   r>   pre_run1  s   z progress_dialog.<locals>.pre_runN)r   r   r5   r7   )r/   r1   r5   r7   rI   )r   r    r"   rs   r   r   r   r   exactrJ   Zpre_run_callablesappend)r.   r/   r   r3   rK   r   r=   )r   r   r   r   r   r   r   r   r>   r*      s.   
r*   rK   r   Application[Any]c                 C  sB   t  }|dt |dt tt| tt |gd|ddS )Ntabzs-tabT)re   Zkey_bindingsZmouse_supportr3   Zfull_screen)r   addr   r   r   r   r   r   )rK   r3   Zbindingsr=   r=   r>   rJ   9  s   rJ   r7   c                   C  s   t    dS )z!Button handler that returns None.Nr;   r=   r=   r=   r>   rr   H  s   rr   )r+   r+   r,   r-   N)r.   r   r/   r   r0   r1   r2   r1   r3   r4   r5   r6   )
r.   r   r/   r   rG   rM   r3   r4   r5   rN   )	r+   r+   rX   rY   NNFNr+   )r.   r   r/   r   rZ   r1   r[   r1   r\   r]   r^   r_   r`   r   r3   r4   ra   r1   r5   rb   )r+   r+   rt   N)
r.   r   r/   r   rZ   r1   r3   r4   r5   ru   )r+   r+   rt   rY   NNN)r.   r   r/   r   rZ   r1   r[   r1   rv   rw   ra   rx   r3   r4   r5   rN   )r.   r   r/   r   rZ   r1   r[   r1   rv   rw   r}   r~   r3   r4   r5   r   )
r.   r   r/   r   r   r   r3   r4   r5   ru   )rK   r   r3   r4   r5   r   rI   )A
__future__r   rR   Zasyncior   typingr   r   r   r   Zprompt_toolkit.applicationr   Z"prompt_toolkit.application.currentr	   Zprompt_toolkit.bufferr
   Zprompt_toolkit.completionr   Zprompt_toolkit.eventloopr   Zprompt_toolkit.filtersr   Zprompt_toolkit.formatted_textr   Z)prompt_toolkit.key_binding.bindings.focusr   r   Z#prompt_toolkit.key_binding.defaultsr   Z'prompt_toolkit.key_binding.key_bindingsr   r   Zprompt_toolkit.layoutr   Z prompt_toolkit.layout.containersr   r   Zprompt_toolkit.layout.dimensionr   rs   Zprompt_toolkit.stylesr   Zprompt_toolkit.validationr   Zprompt_toolkit.widgetsr   r   r   r   r   r    r!   r"   r#   __all__r$   rL   r%   r&   r'   r(   r)   r*   rJ   rr   r=   r=   r=   r>   <module>   s    ,5((
: