
    f/#                       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	 	 	 	 	 d"	 	 	 	 	 	 	 	 	 	 	 d#dZ7 e	d      Z8ddg df	 	 	 	 	 	 	 	 	 d$dZ9	 	 	 	 	 	 	 	 	 d%	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d&dZ:	 	 	 	 d'	 	 	 	 	 	 	 	 	 d(dZ;	 	 	 	 	 	 	 d)	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d*dZ<	 	 	 	 	 	 	 d)	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d+dZ=ddd df	 	 	 	 	 	 	 	 	 d,dZ>d-d Z?d.d!Z@y)/    )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 c           	         dd}dd}t        | t        |d      t        ||      t        ||      gd      }t        ||      S )z8
    Display a Yes/No dialog.
    Return a boolean.
    c                 8    t               j                  d       y )NTresultr
   exit     [/var/www/cvtools/html/venv/lib/python3.12/site-packages/prompt_toolkit/shortcuts/dialogs.pyyes_handlerz"yes_no_dialog.<locals>.yes_handler9   s    	d#r4   c                 8    t               j                  d       y )NFr/   r1   r3   r4   r5   
no_handlerz!yes_no_dialog.<locals>.no_handler<   s    	e$r4   Ttextdont_extend_heightr:   handlertitlebodybuttonswith_backgroundreturnNone)r   r    r   _create_app)r?   r:   yes_textno_textstyler6   r8   dialogs           r5   r%   r%   -   sR    $% 6+64
 F vu%%r4   _Tc                    dd}t        | t        |d      |D cg c]&  \  }}t        |t        j                  ||            ( c}}d      }t        ||      S c c}}w )zx
    Display a dialog with button choices (given as a list of tuples).
    Return the value associated with button.
    c                8    t               j                  |        y Nr/   r1   )vs    r5   button_handlerz%button_dialog.<locals>.button_handlerZ   s    	a r4   Tr9   r<   r>   )rO   rK   rD   rE   )r   r    r   	functoolspartialrF   )r?   r:   rA   rI   rP   trO   rJ   s           r5   r&   r&   O   si    ! 6  
1 9#4#4^Q#GH
 F vu%%
s   +Ac	           
        dfd}	dfd}
t        ||
      t        |t              }t        |d||||	      t        | t	        t        |d      t               gt        dd	      
      |gd      }t        ||      S )zV
    Display a text input box.
    Return the given text, or None when cancelled.
    c                L    t               j                  j                         y)NT)r
   layoutfocus)buf	ok_buttons    r5   acceptzinput_dialog.<locals>.acceptz   s    	y)r4   c                 N    t               j                   j                         y rN   )r
   r2   r:   )	textfields   r5   
ok_handlerz input_dialog.<locals>.ok_handler~   s    	inn-r4   r<   F)r:   	multilinepassword	completer	validatoraccept_handlerTr9      )	preferredmaxpaddingr>   )rX   r   rD   boolrC   )	r   _return_noner#   r   r   r    r$   DrF   )r?   r:   ok_textcancel_textr`   ra   r_   rI   defaultrZ   r]   cancel_buttonrJ   rY   r\   s                @@r5   r'   r'   j   s     . GZ8I\BMI 4D9!#
 q)
 M*F vu%%r4   c                n    t        | t        |d      t        |t              gd      }t	        ||      S )zM
    Display a simple message box and wait until the user presses enter.
    Tr9   r<   r>   )r   r    r   ri   rF   )r?   r:   rk   rI   rJ   s        r5   r(   r(      s:     6Wl;<	F vu%%r4   c           	        	 |g }d		fd}t        ||      	t        | t        t        |d      	gd      t	        ||      t	        |t
              g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.
    c                 N    t               j                   j                         y rN   )r
   r2   current_value)
radio_lists   r5   r]   z$radiolist_dialog.<locals>.ok_handler   s    	j667r4   )valuesrm   Tr9   rc   rf   r<   r>   rC   )r"   r   r   r    r   ri   rF   )
r?   r:   rk   rl   rt   rm   rI   r]   rJ   rs   s
            @r5   r)   r)      sx     ~8 &':J6
C

 4\:
 F vu%%r4   c           	        	 |g }d		fd}t        ||      	t        | t        t        |d      	gd      t	        ||      t	        |t
              g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.
    c                 N    t               j                   j                         y rN   )r
   r2   current_values)cb_lists   r5   r]   z'checkboxlist_dialog.<locals>.ok_handler   s    	g445r4   )rt   default_valuesTr9   rc   rf   r<   r>   rC   )r   r   r   r    r   ri   rF   )
r?   r:   rk   rl   rt   ry   rI   r]   rJ   rx   s
            @r5   r*   r*      sx     ~6 &HG6@

 4\:
 F vu%%r4   c                      y Nr3   )as    r5   <lambda>r}     s    r4   c                  	
 t               t               	t        dt        d            t	        t        t        t        |            t        t        j                  d            	g      | d	      }t        ||      d	fd

dfdd
fddfd}j                  j                  |       S )zz
    :param run_callback: A function that receives as input a `set_percentage`
        function and it does the work.
    Fl    d(	 )rd   )	focusableheight)r:   rc   rf   T)r@   r?   rB   c                F    t        |       _        j                          y r{   )int
percentage
invalidate)valueappprogressbars    r5   set_percentagez'progress_dialog.<locals>.set_percentage!  s    !$Ur4   c                r    j                  j                  j                  |        j                          y r{   )call_soon_threadsafebufferinsert_textr   )r:   r   loop	text_areas    r5   log_textz!progress_dialog.<locals>.log_text%  s)    !!)"2"2">">Er4   c                 d    	          j                          y #  j                          w xY wr{   )r2   )r   r   run_callbackr   s   r5   startzprogress_dialog.<locals>.start+  s%    	2HHJCHHJs   	 /c                     t                y r{   r   )r   s   r5   pre_runz progress_dialog.<locals>.pre_run1  s    $U+r4   )r   r   rD   rE   )r:   strrD   rE   rC   )r   r!   r#   rj   r   r   r   r    exactrF   pre_run_callablesappend)r?   r:   r   rI   rJ   r   r   r   r   r   r   r   r   s     `   @@@@@@@r5   r+   r+      s     D-K 6"	I Et$%Iqwwqz2
 
F fe
$C ,   )Jr4   c                    t               } |j                  d      t                |j                  d      t               t	        t        |       t        t               |g      d|d      S )Ntabzs-tabT)rV   key_bindingsmouse_supportrI   full_screen)r   addr   r   r	   r   r   r   )rJ   rI   bindingss      r5   rF   rF   9  s]    }HHLL
#HLL.)f~'):)<h(GH r4   c                 4    t               j                          y)z!Button handler that returns None.Nr1   r3   r4   r5   ri   ri   H  s    INNr4   )r,   r,   YesNoN)r?   r   r:   r   rG   r   rH   r   rI   BaseStyle | NonerD   zApplication[bool])
r?   r   r:   r   rA   zlist[tuple[str, _T]]rI   r   rD   Application[_T])	r,   r,   OKCancelNNFNr,   )r?   r   r:   r   rk   r   rl   r   r`   zCompleter | Nonera   zValidator | Noner_   r   rI   r   rm   r   rD   zApplication[str])r,   r,   OkN)
r?   r   r:   r   rk   r   rI   r   rD   Application[None])r,   r,   r   r   NNN)r?   r   r:   r   rk   r   rl   r   rt   ,Sequence[tuple[_T, AnyFormattedText]] | Nonerm   z	_T | NonerI   r   rD   r   )r?   r   r:   r   rk   r   rl   r   rt   r   ry   zSequence[_T] | NonerI   r   rD   zApplication[list[_T]])
r?   r   r:   r   r   z>Callable[[Callable[[int], None], Callable[[str], None]], None]rI   r   rD   r   )rJ   r   rI   r   rD   zApplication[Any]rC   )A
__future__r   rQ   asyncior   typingr   r   r   r   prompt_toolkit.applicationr	   "prompt_toolkit.application.currentr
   prompt_toolkit.bufferr   prompt_toolkit.completionr   prompt_toolkit.eventloopr   prompt_toolkit.filtersr   prompt_toolkit.formatted_textr   )prompt_toolkit.key_binding.bindings.focusr   r   #prompt_toolkit.key_binding.defaultsr   'prompt_toolkit.key_binding.key_bindingsr   r   prompt_toolkit.layoutr    prompt_toolkit.layout.containersr   r   prompt_toolkit.layout.dimensionr   rj   prompt_toolkit.stylesr   prompt_toolkit.validationr   prompt_toolkit.widgetsr   r   r   r   r    r!   r"   r#   r$   __all__r%   rK   r&   r'   r(   r)   r*   r+   rF   ri   r3   r4   r5   <module>r      s   "  $ 3 3 2 6 ( / A / : P A S ( A : + /
 
 
 !"&&
& & 	&
 & &> T] !$&"	&&
& "& 	&
 &8 !"&"&""1&1&
1& 1& 	1&
  1&  1& 1& 1& 1& 1&j !"	&&
& & 	&
 &( !;?"$&$&
$& $& 	$&
 9$& $& $& $&P !;?*."$&$&
$& $& 	$&
 9$& ($& $& $&P !"77
7 Q7 7 7tr4   