U
    -e/#                     @  s6  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 dddddddgZ6dMddd d d!d"d#d$dZ7e	d%Z8ddg dfddd&d!d'd(d)dZ9dNddd d d-d.d/d!d d0d1
d2dZ:dOddd d!d4d5d6dZ;dPddd d d7d8d!d'd9d:dZ<dQddd d d7d;d!d<d=d>dZ=ddd?d@ dfdddAd!d4dBdCdZ>dDd!dEdFdGdHZ?dIdJdKdLZ@dS )R    )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Nor   strzBaseStyle | NonezApplication[bool])titletextyes_textno_textstylereturnc                 C  sR   dd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.
    Noner4   c                   S  s   t  jdd d S )NTresultr	   exit r;   r;   a/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/prompt_toolkit/shortcuts/dialogs.pyyes_handler9   s    z"yes_no_dialog.<locals>.yes_handlerc                   S  s   t  jdd d S )NFr7   r9   r;   r;   r;   r<   
no_handler<   s    z!yes_no_dialog.<locals>.no_handlerTr0   Zdont_extend_heightr0   handlerr/   bodybuttonswith_background)r   r   r   _create_app)r/   r0   r1   r2   r3   r=   r>   dialogr;   r;   r<   r$   -   s    



_Tzlist[tuple[str, _T]]zApplication[_T])r/   r0   rD   r3   r4   c                   s@   dd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.
    rH   r5   )vr4   c                 S  s   t  j| d d S Nr7   r9   )rI   r;   r;   r<   button_handlerZ   s    z%button_dialog.<locals>.button_handlerTr?   c                   s$   g | ]\}}t |t |d qS )r@   )r   	functoolspartial).0trI   rK   r;   r<   
<listcomp>`   s   z!button_dialog.<locals>.<listcomp>rB   )r   r   rF   )r/   r0   rD   r3   rG   r;   rP   r<   r%   O   s    


OKCancelFzCompleter | NonezValidator | Noner   zApplication[str])
r/   r0   ok_textcancel_text	completer	validatorpasswordr3   defaultr4   c	                   s   ddd fd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.
    r
   bool)bufr4   c                   s   t  j  dS )NT)r	   layoutZfocus)r[   )	ok_buttonr;   r<   acceptz   s    zinput_dialog.<locals>.acceptr5   r6   c                     s   t  j jd d S rJ   )r	   r:   r0   r;   )	textfieldr;   r<   
ok_handler~   s    z input_dialog.<locals>.ok_handlerr@   F)r0   	multilinerX   rV   rW   Zaccept_handlerTr?      )	preferredmaxpaddingrB   )	r   _return_noner"   r   r   r   r#   DrF   )r/   r0   rT   rU   rV   rW   rX   r3   rY   r^   r`   Zcancel_buttonrG   r;   )r]   r_   r<   r&   j   s2    	

OkzApplication[None])r/   r0   rT   r3   r4   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.
    Tr?   r@   rB   )r   r   r   rg   rF   )r/   r0   rT   r3   rG   r;   r;   r<   r'      s    	
z,Sequence[tuple[_T, AnyFormattedText]] | Nonez	_T | None)r/   r0   rT   rU   valuesrY   r3   r4   c           	        sl   |dkrg }d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   r6   c                     s   t  j jd d S rJ   )r	   r:   current_valuer;   Z
radio_listr;   r<   r`      s    z$radiolist_dialog.<locals>.ok_handler)rj   rY   Tr?   rb   re   r@   rB   )r!   r   r   r   r   rg   rF   )	r/   r0   rT   rU   rj   rY   r3   r`   rG   r;   rl   r<   r(      s     

zSequence[_T] | NonezApplication[list[_T]])r/   r0   rT   rU   rj   default_valuesr3   r4   c           	        sl   |dkrg }d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 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   r6   c                     s   t  j jd d S rJ   )r	   r:   Zcurrent_valuesr;   Zcb_listr;   r<   r`      s    z'checkboxlist_dialog.<locals>.ok_handler)rj   rm   Tr?   rb   re   r@   rB   )r   r   r   r   r   rg   rF   )	r/   r0   rT   rU   rj   rm   r3   r`   rG   r;   rn   r<   r)      s     

c                  G  s   d S Nr;   )ar;   r;   r<   <lambda>      rq   z>Callable[[Callable[[int], None], Callable[[str], None]], None])r/   r0   run_callbackr3   r4   c                   s   t  t tdtdddtttt|dttddg| dd	}t	|| d
dd fddddd fdddd fd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(	 )rc   )Z	focusableheightr0   rb   re   T)rC   r/   rE   intr5   )valuer4   c                   s   t | _   d S ro   )rv   
percentage
invalidate)rw   )appprogressbarr;   r<   set_percentage!  s    
z'progress_dialog.<locals>.set_percentager.   )r0   r4   c                   s    jj|     d S ro   )call_soon_threadsafebufferZinsert_textry   ru   )rz   loop	text_arear;   r<   log_text%  s    z!progress_dialog.<locals>.log_textr6   c                     s   z W 5     X d S ro   )r:   r;   )rz   r   rs   r|   r;   r<   start+  s    zprogress_dialog.<locals>.startc                     s   t   d S ro   r   r;   )r   r;   r<   pre_run1  s    z progress_dialog.<locals>.pre_run)r   r    r"   rh   r   r   r   r   exactrF   Zpre_run_callablesappend)r/   r0   rs   r3   rG   r   r;   )rz   r   r   r{   rs   r|   r   r   r<   r*      s.    
r   zApplication[Any])rG   r3   r4   c                 C  sB   t  }|dt |dt tt| tt |gd|ddS )Ntabzs-tabT)r\   Zkey_bindingsZmouse_supportr3   Zfull_screen)r   addr   r   r   r   r   r   )rG   r3   Zbindingsr;   r;   r<   rF   9  s    rF   r5   r6   c                   C  s   t    dS )z!Button handler that returns None.Nr9   r;   r;   r;   r<   rg   H  s    rg   )r+   r+   r,   r-   N)	r+   r+   rR   rS   NNFNr+   )r+   r+   ri   N)r+   r+   ri   rS   NNN)r+   r+   ri   rS   NNN)A
__future__r   rL   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   rh   Zprompt_toolkit.stylesr   Zprompt_toolkit.validationr   Zprompt_toolkit.widgetsr   r   r   r   r   r    r!   r"   r#   __all__r$   rH   r%   r&   r'   r(   r)   r*   rF   rg   r;   r;   r;   r<   <module>   s   ,              "5           (       (: