
    `i]-                    
   d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
 d dlZd dlmZmZ d dlmZ d dlmZmZmZ ddlmZ dd	lmZmZ erdd
lmZ  e	d          Z G d deee                   Z G d dee         ee          ZdS )    )annotations)TYPE_CHECKINGGenericListOptionalSetTupleTypeVarUnionN)ConsoleRenderableType)Text)AnyLiteral	TypedDict   )TextInputHandler)CursorOffsetElement)	BaseStyleReturnValuec                  $    e Zd ZU ded<   ded<   dS )Optionstrnamer   valueN)__name__
__module____qualname____annotations__     e/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/rich_toolkit/menu.pyr   r      s'         IIIr"   r   c                  (    e Zd Zej        dgZej        dgZej        dgZ	ej
        dgZdZdZdZdZd	ZedKd            ZedLd            ZedLd            ZdZdZ	 	 	 dMdddddN fd%ZdKd&ZedOd'            ZdPdQd*ZedRd,            ZedSd-            ZedSd.            ZdTd0ZdTd1ZdUd4Z dTd5Z!dVd7Z"dWd8Z#edLd9            Z$dXd<Z%dYd>Z&dZd?Z'dZd@Z(d[ fdAZ)edKdB            Z*dC Z+dD Z,edSdE            Z-d\dGZ.ed]dI            Z/dSdJZ0 xZ1S )^Menujkhlu   ●u   ○u   ■u   □zFilter: returnOptional[str]c                `    | j         r| j        r| j        sdS dt          | j                   dS )zEReturn a hint like '(3 selected)' when filtering hides checked items.N(z
 selected))multipleallow_filteringcheckedlenselfs    r#   selection_count_hintzMenu.selection_count_hint.   sA     } 	D$8 	 	403t|$$0000r"   r   c                ,    | j         r| j        n| j        S )z%Prefix for the active/checked option.)r.   checked_charcurrent_selection_charr2   s    r#   active_prefixzMenu.active_prefix5   s     %)MRt  t7RRr"   c                ,    | j         r| j        n| j        S )z&Prefix for inactive/unchecked options.)r.   unchecked_charselection_charr2   s    r#   inactive_prefixzMenu.inactive_prefix:   s     '+mLt""9LLr"   u
     ↑ moreu
     ↓ moreFNr   )stylecursor_offsetmax_visiblelabeloptionsList[Option[ReturnValue]]inlineboolr/   r.   r=   Optional[BaseStyle]r>   intr?   Optional[int]metadatar   c                  |r|rt          d          t          j        |          | _        || _        || _        || _        d| _        t                      | _	        |	| _
        || _        d t          |          D             | _        d| _        d | _        d| _        || _        |t%          | j                  z   }t)          j        | ||	           t-                                                       d S )Nz'multiple and inline cannot both be Truer   c                4    i | ]\  }}t          |          |S r!   )id).0idxopts      r#   
<dictcomp>z!Menu.__init__.<locals>.<dictcomp>^   s$    NNNxsCbggsNNNr"   r   r=   rH   )
ValueErrorr   from_markupr@   rC   r/   r.   selectedsetr0   rH   _options	enumerate_option_index_padding_bottomvalid_scroll_offset_max_visibler1   filter_promptr   __init__super)r3   r@   rA   rC   r/   r.   r=   r>   r?   rH   	__class__s             r#   r]   zMenu.__init__C   s      	H 	HFGGG%e,,
. !$ NN9W;M;MNNN 
 $%+6%D,>(?(??UX>>>>r"   c                   t          j                    }|dk    rdS | j        r'| j        g| j        gg\  }}| j        g| j        gg\  }}n| j        | j        }}| j	        | j
        }}| j        r||fn||f\  }}||v rdS ||v rdS | j        r|S d S )Nenternextprev)clickgetcharr/   LEFT_KEY	RIGHT_KEYDOWN_KEYUP_KEY	LEFT_KEYS
RIGHT_KEYS	DOWN_KEYSUP_KEYSrC   )r3   char	left_keys
right_keys	down_keysup_keys	next_keys	prev_keyss           r#   get_keyzMenu.get_keyl   s    }4<<7 	>&*m_t~6F$G!Iz#'=/DK=!AIww$(NDOzI!%wI (,{LZ##G8L 		9 9696 	Ktr"   c                F      j         r fd j        D             S  j        S )Nc                z    g | ]7}j                                         |d                                          v 5|8S )r   )textlower)rL   optionr3   s     r#   
<listcomp>z Menu.options.<locals>.<listcomp>   sJ       9??$$v(<(<(>(>>> >>>r"   )r/   rU   r2   s   `r#   rA   zMenu.options   sE     	   "m    }r"   consoleOptional[Console]c                    | j         | j         S | j        rdS |t                      }d}| j        r|dz  }|j        |z
  }t          d|          S )a  Calculate the maximum number of visible options based on terminal height.

        Args:
            console: Console to get terminal height from. If None, uses default.

        Returns:
            Maximum number of visible options, or None if no limit needed.
        N   r      )r[   rC   r   r/   heightmax)r3   r}   reserved_linesavailable_heights       r#   get_max_visiblezMenu.get_max_visible   sm     ($$; 	4?iiG  	 aN">N:1&'''r"   Tuple[int, int]c                    |                                  }t          | j                  }|||k    rd|fS | j        }t	          ||z   |          }||fS )z1Returns (start, end) indices for visible options.Nr   )r   r1   rA   rZ   min)r3   r?   total_optionsstartends        r#   visible_options_rangezMenu.visible_options_range   se     **,,DL))-;">">}%%#%+%}55s|r"   c                    | j         dk    S )z9Check if there are more options above the visible window.r   rZ   r2   s    r#   has_more_abovezMenu.has_more_above   s     "Q&&r"   c                r    |                                  }|dS | j        |z   t          | j                  k     S )z9Check if there are more options below the visible window.NF)r   rZ   r1   rA   r3   r?   s     r#   has_more_belowzMenu.has_more_below   s=     **,,5"[03t|3D3DDDr"   Nonec                    |                                  }|dS | j        | j        k     r| j        | _        dS | j        | j        |z   k    r| j        |z
  dz   | _        dS dS )z<Adjust scroll offset to ensure the selected item is visible.Nr   )r   rS   rZ   r   s     r#   _ensure_selection_visiblezMenu._ensure_selection_visible   sz    **,,F =4..."&-D ]d1K???"&-+"="AD @?r"   c                    d| _         dS )z/Reset scroll offset (used when filter changes).r   Nr   r2   s    r#   _reset_scrollzMenu._reset_scroll   s    r"   r{   Option[ReturnValue]c                6    | j         t          |                   S )z@Return the index of an option in _options using identity lookup.)rW   rK   r3   r{   s     r#   _get_option_indexzMenu._get_option_index   s    !"V**--r"   c                    | j         sdS |                     | j         | j                           }| xj        |hz  c_        dS )z4Toggle the checked state of the current cursor item.N)rA   r   rS   r0   )r3   option_indexs     r#   _toggle_currentzMenu._toggle_current   sC    | 	F--dl4=.IJJ&r"   filtered_indexc                P    |                      | j        |                   | j        v S )z+Check if a filtered-list option is checked.)r   rA   r0   )r3   r   s     r#   is_option_checkedzMenu.is_option_checked   s$    %%dl>&BCCt|SSr"   c                :    |                      |          | j        v S )z8Check if an option is checked using its object identity.)r   r0   r   s     r#   is_option_checked_by_refzMenu.is_option_checked_by_ref   s    %%f--==r"   c                      j         r3d                     fdt           j                  D                       S  j         j                 d         S )zDReturn the display name for the result (used when the menu is done).z, c              3  >   K   | ]}j         |         d          V  dS r   NrU   rL   ir3   s     r#   	<genexpr>z+Menu.result_display_name.<locals>.<genexpr>   s/      TT!T]1-f5TTTTTTr"   r   )r.   joinsortedr0   rA   rS   r2   s   `r#   result_display_namezMenu.result_display_name   sU     = 	U99TTTTvdl?S?STTTTTT|DM*622r"   keyLiteral['next', 'prev']c                   |dk    r| xj         dz  c_         n|dk    r| xj         dz  c_         | j         dk     rt          | j                  dz
  | _         | j         t          | j                  k    rd| _         |                                  d S )Nrc   r   rd   r   )rS   r1   rA   r   )r3   r   s     r#   _update_selectionzMenu._update_selection   s    &==MMQMMMF]]MMQMM=1--1DM=C----DM 	&&(((((r"   r   c                    t                      }|                    | j                   |                    d           |                    | j        | j                            d                     |S )N result)r=   )r   appendr@   r   r}   	get_style)r3   result_texts     r#   render_resultzMenu.render_result  ss    ff4:&&&3$,((22 	 	
 	
 	

 r"   c                T    | j         r| j        n| j        }| j        r	|d         g}||v S Nr   )rC   rl   rm   r/   r3   r   keyss      r#   is_next_keyzMenu.is_next_key  s6    "&+At4> 	G9Dd{r"   c                T    | j         r| j        n| j        }| j        r	|d         g}||v S r   )rC   rk   rn   r/   r   s      r#   is_prev_keyzMenu.is_prev_key  s6    !%>t~~$, 	G9Dd{r"   c                x   d | j         }| j        r|dk    r|                                  d S |                     |          r|                     d           nk|                     |          r|                     d           n@| j        r| j        | j                 d         t                      	                    |           r5t          fdt          | j                  D             d          }|| _        | j        r5| j         |k    r,|                                  |                                  d S d S d S )Nr   rc   rd   r   c              3  :   K   | ]\  }}|d          k    |V  dS r   r!   )rL   indexr{   current_selections      r#   r   z"Menu.handle_key.<locals>.<genexpr>5  sC        %vf~)::: :::: r"   r   )ry   r.   r   r   r   r   rA   rS   r^   
handle_keyrc   rV   r/   r   r   )r3   r   previous_filter_textmatching_indexr   r_   s       @r#   r   zMenu.handle_key!  su   +/#y= 	SCZZ  """FC   	$""6****c"" 	$""6****| H$(L$?$G!GGs### 
	+!   )24<)@)@  
  N +DM  	-DI1E$E$E   **,,,,,	- 	-$E$Er"   c                .    | j         du r| j        rdS dS d S )NFz!Please select at least one optionzThis field is required)rY   r.   r2   s    r#   validation_messagezMenu.validation_messageD  s*    :} ;::++tr"   c                .    |                                   d S N)on_validater2   s    r#   on_blurzMenu.on_blurM  s    r"   c                    | j         rt          | j                  dk    | _        d S t          | j                  dk    | _        d S r   )r.   r1   r0   rY   rA   r2   s    r#   r   zMenu.on_validateP  s@    = 	/T\**Q.DJJJT\**Q.DJJJr"   c                    | j         S r   )r/   r2   s    r#   should_show_cursorzMenu.should_show_cursorV  s    ##r"   %Union[ReturnValue, List[ReturnValue]]c                     ddl m}  | j         j                  } g|_        |                                  j        r  fdt           j                  D             S  j	         j
                 d         S )Nr   )	ContainerrP   c                6    g | ]}j         |         d          S )r   r   r   s     r#   r|   zMenu.ask.<locals>.<listcomp>d  s%    LLL!DM!$W-LLLr"   r   )	containerr   r=   rH   elementsrunr.   r   r0   rA   rS   )r3   r   r   s   `  r#   askzMenu.askZ  s    ((((((IDJGGG	"V	= 	MLLLLvdl7K7KLLLL|DM*733r"   r   c                `    d}t          | j                  | j        z   }t          ||          S )N   )topleft)r1   r\   cursor_leftr   )r3   r   left_offsets      r#   r>   zMenu.cursor_offseth  s4    
 $,--0@@+6666r"   c                b    |                                  }|dS t          | j                  |k    S )zBCheck if scrolling is needed (more options than can be displayed).NF)r   r1   rA   r   s     r#   _needs_scrollingzMenu._needs_scrollings  s3    **,,54<  ;..r"   )r*   r+   )r*   r   )FFF)r@   r   rA   rB   rC   rD   r/   rD   r.   rD   r=   rE   r>   rF   r?   rG   rH   r   )r*   rB   r   )r}   r~   r*   rG   )r*   r   )r*   rD   )r*   r   )r{   r   r*   rF   )r   rF   r*   rD   )r{   r   r*   rD   )r   r   r*   r   )r*   r   )r   r   r*   rD   )r   r   r*   r   )r*   r   )r*   r   )2r   r   r   r   ri   rm   rj   rn   rg   rk   rh   rl   r7   r;   r6   r:   r\   propertyr4   r8   r<   MORE_ABOVE_INDICATORMORE_BELOW_INDICATORr]   rv   rA   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r>   r   __classcell__)r_   s   @r#   r%   r%   "   s       !*C0I&,G!*C0I",c2J"NLNM1 1 1 X1 S S S XS M M M XM
 ('  %' &*%)' ' ' ' ' ' ' 'R   6    X( ( ( ( (: 
 
 
 X
 ' ' ' X' E E E XEB B B B       . . . .' ' ' 'T T T T> > > > 3 3 3 X3) ) ) )         !- !- !- !- !- !-F    X  / / / $ $ $ X$4 4 4 4 7 7 7 X7/ / / / / / / /r"   r%   )
__future__r   typingr   r   r   r   r   r	   r
   r   re   rich.consoler   r   	rich.textr   typing_extensionsr   r   r   _input_handlerr   elementr   r   styles.baser   r   r   r%   r!   r"   r#   <module>r      s   " " " " " "	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  0 0 0 0 0 0 0 0       5 5 5 5 5 5 5 5 5 5 , , , , , , * * * * * * * * '&&&&&&gm$$    Y,   
V/ V/ V/ V/ V/7;!17 V/ V/ V/ V/ V/r"   