§
    =xÅj¨-  ã                  ó
  — 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__© ó    úBC:\Projects\Historical\venv\Lib\site-packages\rich_toolkit/menu.pyr   r      s'   € € € € € € Ø€I€I�IØÐÐÑÐÐ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Ø0•3�t”|Ñ$Ô$Ð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ÐRˆtÔ Ð °tÔ7RÐ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ÐLˆtÔ"Ð"¸Ô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ÐN©x¨s°C�b ™gœg sÐNÐNÐNr"   r   ©r=   rH   )Ú
ValueErrorr   Úfrom_markupr@   rC   r/   r.   ÚselectedÚsetr0   Ú_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ÐN½9ÀWÑ;MÔ;MÐNÑNÔNˆÔà ˆÔØˆŒ
ð $%ˆÔØ+6ˆÔà%­¨DÔ,>Ñ(?Ô(?Ñ?ˆåÔ˜ U°XÐ>Ñ>Ô>Ð>Ý‰Œ×ÒÑÔÐÐÐ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_keyj   sÌ   € ÝŒ}‰Œˆà�4Š<ˆ<Ø�7àÔð 	>Ø&*¤m _°t´~Ð6FÐ$GÑ!ˆI�zØ#'¤= /°D´K°=Ð!AÑˆI�w�wà$(¤N°D´O�zˆIØ!%¤°´�wˆIð (,¤{ÐLˆZ˜Ð#Ð#¸ÀGÐ8Lñ 	ˆ	�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àˆ?Ý‘i”iˆGð ˆØÔð 	 Ø˜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   € ð ×*Ò*Ñ,Ô,ˆÝ˜DœLÑ)Ô)ˆàÐ -°;Ò">Ð">Ø�}Ð%Ð%àÔ#ˆÝ�%˜+Ñ% }Ñ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ØÔ" [Ñ0µ3°t´|Ñ3DÔ3DÒ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Ô1°KÑ?Ò?Ð?Ø"&¤-°+Ñ"=ÀÑ"AˆDÔÐÐð @Ð?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Ø×-Ò-¨d¬l¸4¼=Ô.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$   € à×%Ò% d¤l°>Ô&BÑCÔCÀtÄ|Ð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Ø—9’9ÐTÐTÐTÐT½vÀdÄlÑ?SÔ?SÐTÑTÔTÑTÔTÐTØŒ|˜DœMÔ*¨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‘   € Ø�&Š=ˆ=ØˆMŒM˜QÑˆMŒMˆMØ�FŠ]ˆ]ØˆMŒM˜QÑˆMŒMàŒ=˜1ÒÐÝ ¤Ñ-Ô-°Ñ1ˆDŒMàŒ=�C ¤Ñ-Ô-Ò-Ð-ØˆDŒMð 	×&Ò&Ñ(Ô(Ð(Ð(Ð(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   € Ý‘f”fˆà×Ò˜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   € Ø"&¤+ÐAˆtŒˆ°4´>ˆàÔð 	Ø˜”G�9ˆDà�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Œ~ˆ~°$´,ˆàÔð 	Ø˜”G�9ˆDà�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>3  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ÐàŒ=ð 	˜S CšZ˜ZØ× Ò Ñ"Ô"Ð"ØˆFà×Ò˜CÑ Ô ð 	$Ø×"Ò" 6Ñ*Ô*Ð*Ð*Ø×Ò˜cÑ"Ô"ð 	$Ø×"Ò" 6Ñ*Ô*Ð*Ð*àŒ|ð HØ$(¤L°´Ô$?ÀÔ$GÐ!å‰GŒG×Ò˜sÑ#Ô#Ð#àð 
	+Ý!ðð ð ð å)2°4´<Ñ)@Ô)@ðñ ô ð
 ñô ˆNð +ˆDŒMð Ôð 	- D¤IÐ1EÒ$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_messageB  s*   € àŒ:˜ÐÐØŒ}ð ;Ø:Ð:Ø+Ð+àˆtr"   c                ó.   — |                       ¦   «          d S ©N)Úon_validater2   s    r#   Úon_blurzMenu.on_blurK  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_validateN  s@   € ØŒ=ð 	/Ý˜Tœ\Ñ*Ô*¨QÒ.ˆDŒJˆJˆJå˜Tœ\Ñ*Ô*¨QÒ.ˆDŒJˆJˆJr"   c                ó   — | j         S rË   )r/   r2   s    r#   Úshould_show_cursorzMenu.should_show_cursorT  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>b  s%   ø€ ÐLÐLÐL°!�D”M !Ô$ WÔ-ÐLÐLÐLr"   r   )Ú	containerrÓ   r=   rH   ÚelementsÚrunr.   r­   r0   rA   rS   )r3   rÓ   rÕ   s   `  r#   ÚaskzMenu.askX  s‡   ø€ Ø(Ð(Ð(Ð(Ð(Ð(à�I D¤J¸¼ÐGÑGÔGˆ	à"˜Vˆ	Ôà�Š‰ŒˆàŒ=ð 	MØLÐLÐLÐLµv¸d¼lÑ7KÔ7KÐLÑLÔLÐLàŒ|˜DœMÔ*¨7Ô3Ð3r"   r   c                ó¶   — d}|                       | j                             | j        | j        d | j        …         z   ¦  «        ¦  «        }t          ||¬¦  «        S )Né   )ÚtopÚleft)Ú_get_text_widthr=   Údisplay_textr\   ry   Ú_cursor_indexr   )r3   rÛ   Úleft_offsets      r#   r>   zMenu.cursor_offsetf  sc   € ð
 ˆà×*Ò*ØŒJ×#Ò#ØÔ" T¤YÐ/C°Ô1CÐ/CÔ%DÑDñô ñ
ô 
ˆõ  ¨+Ð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_scrollingu  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Ð0€IØÔ&¨Ð,€GØ!Ô*¨CÐ0€IØ"Ô,¨cÐ2€Jà"ÐØ€NØ€LØ€NØ€Màð1ð 1ð 1ñ „Xð1ð ðSð Sð Sñ „XðSð ðMð Mð Mñ „XðMð
 (ÐØ'Ðð Ø %Øð%ð &*ØØ%)ð%ð %ð %ð %ð %ð %ð %ð %ðNð ð ð ð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à ,Ð ,Ð ,Ð ,Ð ,Ð ,à *Ð *Ð *Ð *Ð *Ð *Ð *Ð *àð 'Ø&Ð&Ð&Ð&Ð&Ð&àˆg�mÑ$Ô$€ðð ð ð ð ˆY˜ Ô,ñ ô ð ð
X/ð X/ð X/ð X/ð X/ˆ7�;ÔÐ!1°7ñ X/ô X/ð X/ð X/ð X/r"   