
    Mh/#                       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	 	 	 	 	 dLdMd#Z7 e	d$          Z8ddg dfdNd(Z9	 	 	 	 	 	 	 	 	 dOdPd6Z:	 	 	 	 dQdRd9Z;	 	 	 	 	 	 	 dSdTd=Z<	 	 	 	 	 	 	 dSdUdAZ=dddB dfdVdEZ>dWdIZ?dXdKZ@dS )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 YesNotitler   textyes_textstrno_textstyleBaseStyle | NonereturnApplication[bool]c           	         d	d}d	d}t          | t          |d          t          ||          t          ||          gd          }t          ||          S )
z8
    Display a Yes/No dialog.
    Return a boolean.
    r6   Nonec                 J    t                                          d           d S )NTresultr
   exit     `/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/prompt_toolkit/shortcuts/dialogs.pyyes_handlerz"yes_no_dialog.<locals>.yes_handler9   s     		d#####r@   c                 J    t                                          d           d S )NFr;   r=   r?   r@   rA   
no_handlerz!yes_no_dialog.<locals>.no_handler<   s     		e$$$$$r@   Tr0   dont_extend_heightr0   handlerr/   bodybuttonswith_backgroundr6   r9   )r   r    r   _create_app)r/   r0   r1   r3   r4   rB   rD   dialogs           rA   r%   r%   -   s    $ $ $ $% % % % 666+666444
   F vu%%%r@   _TrK   list[tuple[str, _T]]Application[_T]c                    d
dt          | t          |d          fd|D             d	          }t          ||          S )zx
    Display a dialog with button choices (given as a list of tuples).
    Return the value associated with button.
    vrP   r6   r9   c                J    t                                          |            d S Nr;   r=   )rT   s    rA   button_handlerz%button_dialog.<locals>.button_handlerZ   s     		a     r@   TrE   c           	     ^    g | ])\  }}t          |t          j        |                     *S )rG   )r   	functoolspartial).0trT   rW   s      rA   
<listcomp>z!button_dialog.<locals>.<listcomp>`   sG     
 
 
1 9#4^Q#G#GHHH
 
 
r@   rI   )rT   rP   r6   r9   )r   r    rN   )r/   r0   rK   r4   rO   rW   s        @rA   r&   r&   O   s}    ! ! ! ! 666
 
 
 

 
 
   F vu%%%r@   OKCancelFok_textcancel_text	completerCompleter | None	validatorValidator | Nonepasswordr   defaultApplication[str]c	           
     X   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.
    bufr   r6   boolc                T    t                      j                                       dS )NT)r
   layoutfocus)rj   	ok_buttons    rA   acceptzinput_dialog.<locals>.acceptz   s#    		y)))tr@   r9   c                 V    t                                           j                   d S rV   )r
   r>   r0   )	textfields   rA   
ok_handlerz input_dialog.<locals>.ok_handler~   s#    		in-----r@   rG   F)r0   	multilinerf   rb   rd   accept_handlerTrE      )	preferredmaxpaddingrI   )rj   r   r6   rk   rM   )	r   _return_noner#   r   r   r    r$   DrN   )r/   r0   r`   ra   rb   rd   rf   r4   rg   rp   rs   cancel_buttonrO   ro   rr   s                @@rA   r'   r'   j   s	         . . . . . . GZ888I\BBBM  I 4D999!##
 q)))
 
 
 M*  F vu%%%r@   OkApplication[None]c                    t          | t          |d          t          |t                    gd          }t	          ||          S )zM
    Display a simple message box and wait until the user presses enter.
    TrE   rG   rI   )r   r    r   r{   rN   )r/   r0   r`   r4   rO   s        rA   r(   r(      sS     666Wl;;;<	  F vu%%%r@   values,Sequence[tuple[_T, AnyFormattedText]] | None	_T | Nonec           	     
  	 |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.
    Nr6   r9   c                 V    t                                           j                   d S rV   )r
   r>   current_value)
radio_lists   rA   rs   z$radiolist_dialog.<locals>.ok_handler   s$    		j677777r@   )r   rg   TrE   rv   ry   rG   rI   rM   )r"   r   r   r    r   r{   rN   )
r/   r0   r`   ra   r   rg   r4   rs   rO   r   s
            @rA   r)   r)      s     ~8 8 8 8 8 8 &':::J666
C
 
 

 444\:::
   F vu%%%r@   default_valuesSequence[_T] | NoneApplication[list[_T]]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.
    Nr6   r9   c                 V    t                                           j                   d S rV   )r
   r>   current_values)cb_lists   rA   rs   z'checkboxlist_dialog.<locals>.ok_handler   s$    		g455555r@   )r   r   TrE   rv   ry   rG   rI   rM   )r   r   r   r    r   r{   rN   )
r/   r0   r`   ra   r   r   r4   rs   rO   r   s
            @rA   r*   r*      s     ~6 6 6 6 6 6 &HHHG666@
 
 

 444\:::
   F vu%%%r@   c                     d S Nr?   )as    rA   <lambda>r     s    4 r@   run_callback>Callable[[Callable[[int], None], Callable[[str], None]], None]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
                            |           S )zz
    :param run_callback: A function that receives as input a `set_percentage`
        function and it does the work.
    Fl    d(	 )rw   )	focusableheight)r0   rv   ry   T)rJ   r/   rL   valueintr6   r9   c                X    t          |           _                                         d S r   )r   
percentage
invalidate)r   appprogressbars    rA   set_percentagez'progress_dialog.<locals>.set_percentage!  s'    !$Ur@   r0   r2   c                p                         j        j        |                                             d S r   )call_soon_threadsafebufferinsert_textr   )r0   r   loop	text_areas    rA   log_textz!progress_dialog.<locals>.log_text%  s5    !!)"2">EEEr@   c                 |    	                                                d S #                                    w xY wr   )r>   )r   r   r   r   s   rA   startzprogress_dialog.<locals>.start+  s=    	L222HHJJJJJCHHJJJJs   % ;c                 &    t                      d S r   r   )r   s   rA   pre_runz progress_dialog.<locals>.pre_run1  s    $U+++++r@   )r   r   r6   r9   )r0   r2   r6   r9   rM   )r   r!   r#   r|   r   r   r   r    exactrN   pre_run_callablesappend)r/   r0   r   r4   rO   r   r   r   r   r   r   r   r   s     `   @@@@@@@rA   r+   r+      sm    D--K 6"""	  I Et$$$%%Iqwqzz222
 
 
 
 
F fe
$
$C                     , , , , , ,   )))Jr@   rO   r   Application[Any]c                "   t                      } |                    d          t                      |                    d          t                     t	          t          |           t          t                      |g          d|d          S )Ntabzs-tabT)rm   key_bindingsmouse_supportr4   full_screen)r   addr   r   r	   r   r   r   )rO   r4   bindingss      rA   rN   rN   9  s    }}HHLL
###HLL.)))f~~'):)<)<h(GHH   r@   r9   c                 F    t                                                       dS )z!Button handler that returns None.Nr=   r?   r@   rA   r{   r{   H  s    IINNr@   )r,   r,   r-   r.   N)r/   r   r0   r   r1   r2   r3   r2   r4   r5   r6   r7   )
r/   r   r0   r   rK   rQ   r4   r5   r6   rR   )	r,   r,   r^   r_   NNFNr,   )r/   r   r0   r   r`   r2   ra   r2   rb   rc   rd   re   rf   r   r4   r5   rg   r2   r6   rh   )r,   r,   r~   N)
r/   r   r0   r   r`   r2   r4   r5   r6   r   )r,   r,   r~   r_   NNN)r/   r   r0   r   r`   r2   ra   r2   r   r   rg   r   r4   r5   r6   rR   )r/   r   r0   r   r`   r2   ra   r2   r   r   r   r   r4   r5   r6   r   )
r/   r   r0   r   r   r   r4   r5   r6   r   )rO   r   r4   r5   r6   r   rM   )A
__future__r   rY   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   r|   prompt_toolkit.stylesr   prompt_toolkit.validationr   prompt_toolkit.widgetsr   r   r   r   r    r!   r"   r#   r$   __all__r%   rP   r&   r'   r(   r)   r*   r+   rN   r{   r?   r@   rA   <module>r      st   " " " " " "     $ $ $ $ $ $ 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 6 6 6 6 6 6 ( ( ( ( ( ( / / / / / / A A A A A A / / / / / / : : : : : : P P P P P P P P A A A A A A S S S S S S S S ( ( ( ( ( ( A A A A A A A A : : : : : : + + + + + + / / / / / /
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
   !"& & & & &> WT]] !$&"	& & & & &8 !"&"&""1& 1& 1& 1& 1&j !"	& & & & &( !;?"$& $& $& $& $&P !;?*."$& $& $& $& $&P !"7 7 7 7 7t        r@   