+
    jHàjº™  ã                   ó„  a € Rˆ th0 t R t^ RIt^ RIt^ RIHtHt ^ RIHt ^ RI	H
t
 ^ RIHtHtHtHtHtHtHt ^ RIHtHt ]]]]]R,          3,          ,          ,          t]! 4       t]! RR7       ! R	 R
4      4       t ! R R]]
4      t]R‰,          t]! RRR7      t] ^ k ]! RRR7      t] ^k R R lt R R lt!R R lt" ! R R]
4      t#]! 4       t$R R lt%R R lt&R R lt'R R  lt(R! R" lt)R#^/R$ R% llt*R& R' lt+R( R) lt,R* R+ lt-R, R- lt.]/! R.4      t0R/ R0 lt1R1 R2 lt2R3 R4 lt3R5 R6 lt4] ! R7 R84      4       t5R9 R: lt6R; R< lt7R= R> lt8R? R@ lt9RA RB lt:RŠw  t;t<t=t>R‹w  t?t@tAtBRC RD ltCRŒRE RF lltDRG RH ltERI RJ ltF^
]>^]>^]@^ ]?/tGR�RK RL lltHRM RN ltI]J! RO4      ];]J! RP4      ];]J! RQ4      ]<]J! RR4      ]<]J! RS4      ]=/tKRT RU ltLRV RW ltM]! 4       tN]! 4       tO]/! ]>]?]@]A]=04      tPRX RY ltQRZ R[ ltRR\^R]RR^RR_RR`RRaR/Rb ltSRcRRdR/Re Rf lltTRg Rh ltURi Rj ltVRŒRcRRkRR_RR`RRlR/Rm Rn llltWRo Rp ltXRq]P²                  Rr]P´                  Rs]P¶                  Rt]P¸                  /t]]P¼                  ! Ru4      t_Rv Rw lt`Rx Ry ltaRz R{ ltbR| R} ltcRlR/R~ R lltdRŒR€R�R_R/R‚ Rƒ lllteR„ R… ltfRŽR† R‡ lltgR# )�zŸCurses checklist / radiolist / single-select menus with keyboard navigation and fuzzy ``/``
search, plus a numbered text fallback for terminals without curses.N)Ú
ContextVarÚToken)Ú	dataclass)ÚEnum)ÚCallableÚListÚOptionalÚSequenceÚSetÚTupleÚUnion)ÚColorsÚcolorT)Úfrozenc                   óT   a € ] tR t^t o RtRt]t]V 3R lR l4       t	V 3R lt
RtV tR# )ÚMenuNavigationStartz;Navigation instructions returned when a scoped menu begins.Fc                ó    <€ V ^8„  d   QhRS[ /# ©é   Úreturn©Úbool)ÚformatÚ__classdict__s   "€Ú9/home/ubuntu/.hermes/hermes-agent/hermes_cli/curses_ui.pyÚ__annotate__Ú MenuNavigationStart.__annotate__   s   ø€ ÷ 3ñ 3™tñ 3ó    c                ó&   € V P                   \        J# ©N)Úreplay_valueÚ
_NO_REPLAY)Úselfs   &r   Úshould_replayÚ!MenuNavigationStart.should_replay   s   € à× Ñ ¬
Ð2Ð2r   c                ó2   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   # )r   Ú
allow_backr    )r   Úobject)r   r   s   "€r   r   r      s   ø‡ ‚ ñ Ññ	 ñ
 Ñ%ò r   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r&   r!   r    Úpropertyr#   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r   s   @r   r   r      s+   ø‡ € áEà€JØ%€Là÷3ó ð3÷ ƒ r   r   c                   ó&   € ] tR t^tRtRtRtRtRtR# )ÚMenuNavigationEventÚbeginÚresolveÚcancelÚbackr(   N)	r)   r*   r+   r,   ÚBEGINÚRESOLVEÚCANCELÚBACKr0   r(   r   r   r4   r4      s   † Ø€EØ€GØ€FØ„Dr   r4   Úhermes_menu_navigation_handler©ÚdefaultÚhermes_numbered_back_enabledFc                ó0   € V ^8„  d   QhR\         R\        /# )r   Úhandlerr   )ÚMenuNavigationHandlerr   )r   s   "r   r   r   +   s   € ÷ 1ñ 1Ô)>ð 1Ä5ñ 1r   c                ó,   € \         P                  V 4      # )zEScope setup-style cancel/back behavior to the current CLI invocation.)Ú_MENU_NAVIGATION_HANDLERÚset)rB   s   &r   Úset_menu_navigation_handlerrG   +   s   € ä#×'Ñ'¨Ó0Ð0r   c                ó(   € V ^8„  d   QhR\         RR/# )r   Útokenr   N)r   )r   s   "r   r   r   0   s   € ÷ *ñ *¬ð *°4ñ *r   c                ó0   € \         P                  V 4       R# )z<Restore the menu navigation handler active before ``token``.N)rE   Úreset)rI   s   &r   Úreset_menu_navigation_handlerrL   0   s   € ä×"Ñ" 5Ö)r   c                ó(   € V ^8„  d   QhR\         RR/# )r   Úeventr   N)r4   )r   s   "r   r   r   5   s   € ÷ ñ Ô%8ð ¸Tñ r   c                 óJ   € \         P                  4       pVe   V! V 4       R # R # r   )rE   Úget)rN   rB   s   & r   Ú_notify_scoped_navigationrQ   5   s"   € Ü&×*Ñ*Ó,€GØÒÙ�Žñ r   c                   ó   € ] tR t^;tRtRtRtR# )Ú_NumberedNavigationr7   r8   r(   N)r)   r*   r+   r,   r;   r<   r0   r(   r   r   rS   rS   ;   s   † Ø€FØ„Dr   rS   c                óT   € V ^8„  d   QhR\         R\        R,          \        ,          /# )r   Úprompt_textr   N)ÚstrÚintr'   )r   s   "r   r   r   C   s#   € ÷ 2ñ 2¤sð 2¬s°T­z¼FÕ/Bñ 2r   c                ó†  €  \        V 4      p\        T\        4      '       d%   \        \	        TP                  4      4       \        # TP                  4       '       g   R# \        TP                  4       RR7      pTf   \        # T^,
          #   \        \        3 d#    \        \        P
                  4       \        u # i ; i)z®Numbered-fallback choice as a 0-based index; ``None`` for empty input, ``_NAV_ABORT`` when
cancelled / backed out / interrupted / non-integer (scoped navigation is notified).Nr>   )Ú_read_numbered_inputÚKeyboardInterruptÚEOFErrorrQ   r4   r;   Ú
_NAV_ABORTÚ
isinstancerS   ÚvalueÚstripÚ
_parse_int)rU   ÚvalÚidxs   &  r   Ú_read_numbered_choicerc   C   s—   € ðÜ" ;Ó/ˆô �#Ô*×+Ò+Ü!Ô"5°c·i±iÓ"@ÔAÜÐØ�9‰9�;Š;ÙÜ
�S—Y‘Y“[¨$Ô
/€CØšŒ:Ð1¨#°­'Ð1øô œxÐ(ô Ü!Ô"5×"<Ñ"<Ô=ÜÒðús   ‚B Â0C Â?C c                óF   € V ^8„  d   QhR\         R\         \        ,          /# )r   rU   r   )rV   rS   )r   s   "r   r   r   T   s$   € ÷ Lñ L¤cð L¬cÔ4GÕ.Gñ Lr   c                óØ  € \         P                  4       f   \        V 4      # ^ RIHp ^ RIHp ^ RIHp ^ RI	H
p ^ RIHp V! 4        V! 4       pVP                  VP                  4      VP                  VP                  4      R R l4       4       p\         P                  4       '       d%   VP                  VP"                  4      R R	 l4       pV! 4       P%                  V! V 4      VR
7      # )z™Plain ``input()`` outside setup flows; inside a scoped flow prompt_toolkit supplies portable
Escape / Ctrl+C / Left bindings on POSIX and native Windows.)ÚPromptSession)ÚANSI)ÚKeyBindings)ÚKeys)Ú!install_modify_other_keys_aliasesc                ó   € V ^8„  d   QhRR/# ©r   r   Nr(   )r   s   "r   r   Ú*_read_numbered_input.<locals>.__annotate__e   s   € ÷ :ñ :˜$ñ :r   c                 óZ   € V P                   P                  \        P                  R 7       R# ©)ÚresultN)ÚappÚexitrS   r;   ©rN   s   &r   Ú_cancelÚ%_read_numbered_input.<locals>._cancelc   s   € ð 	�	‰	�‰Ô1×8Ñ8ˆÖ9r   c                ó   € V ^8„  d   QhRR/# rl   r(   )r   s   "r   r   rm   j   s   € ÷ 	<ñ 	<˜Dñ 	<r   c                 óZ   € V P                   P                  \        P                  R 7       R# ro   )rq   rr   rS   r<   rs   s   &r   Ú_backÚ#_read_numbered_input.<locals>._backi   s   € à�I‰I�N‰NÔ"5×":Ñ":ˆNÖ;r   )Úkey_bindings)rE   rP   ÚinputÚprompt_toolkitrf   Úprompt_toolkit.formatted_textrg   Úprompt_toolkit.key_bindingrh   Úprompt_toolkit.keysri   Úhermes_cli.pt_input_extrasrj   ÚaddÚEscapeÚControlCÚ_NUMBERED_BACK_ENABLEDÚLeftÚprompt)	rU   rf   rg   rh   ri   rj   Úbindingsrt   rx   s	   &        r   rY   rY   T   s¾   € ô  ×#Ñ#Ó%Ò-Ü�[Ó!Ð!Ý,Ý2Ý6Ý(õ MÙ%Ô'Ù‹}€Hà‡\�\�$—+‘+ÓØ‡\�\�$—-‘-Ó ô:ó !ó ð:ô ×!Ñ!×#Ò#Ø	�‰�d—i‘iÓ	 ô	<ó 
!ð	<á‹?×!Ñ!¡$ {Ó"3À(Ð!ÓKÐKr   c                ó0   € V ^8„  d   QhR\         R\        /# ©r   Úitemr   ©Ú	RadioItemrV   )r   s   "r   r   r   o   s   € ÷ Uñ Uœ9ð U¬ñ Ur   c                ób   € \        V \        4      '       d   V # RP                  R V  4       4      # )z:Flatten a radiolist item to searchable/plain display text.Ú c              3   ó*   "  € T F	  w  rVx € K  	  R # 5ir   r(   )Ú.0ÚtextÚ_styles   &  r   Ú	<genexpr>Ú#radio_item_plain.<locals>.<genexpr>q   s   é € Ð5TÉt¹|¸tµdËtùs   ‚©r]   rV   Újoin©rŠ   s   &r   Úradio_item_plainr˜   o   s(   € ä˜d¤C×(Ò(ˆ4ÐT¨b¯g©gÑ5TÉtÓ5TÓ.TÐTr   c                óF   € V ^8„  d   QhR\         \        ,          R\        /# )r   ÚstyleÚ	is_cursor)r   rV   r   )r   s   "r   r   r   t   s   € ÷ ñ ¤h¬s¥mð Ä4ñ r   c               óT  € V P                  4       pV'       d3   V P                  V'       d   V P                  ^4      ,          # ^ ,          # VR8X  d   V'       d   V P                  ^4      # VR8X  d   V'       d   V P                  ^4      # VR8X  d   V'       d    V P                  ^4      # VR8w  d   V P                  # V P
                  pV'       d    W@P                  ^4      ,          pV# V#   T P                   d    T P                  u # i ; i  T P                   d     T# i ; i)z*Map a segment style to a curses attribute.ÚyellowÚgreenÚredÚdim)Ú
has_colorsÚA_BOLDÚ
color_pairÚerrorÚA_NORMALÚA_DIM)Úcursesrš   r›   r¡   Úattrs   &&$  r   Ú_curses_style_attrr©   t   s	  € à×"Ñ"Ó$€JßØ�}‰}¿
 × 1Ñ 1°!Ó 4ÕJÐJÈÕJÐJØ�ÔŸZØ× Ñ  Ó#Ð#Ø�ÔŸJØ× Ñ  Ó#Ð#Ø�„~Ÿ*ð	!Ø×$Ñ$ QÓ'Ð'ð �„~Ø�‰ÐØ�<‰<€Dßð	Ø×%Ñ% aÓ(Õ(ˆDð €Kˆ4€Køð �|‰|ô 	!Ø—=‘=Ò ð	!ûð �|‰|ô 	ØØ€Kð	ús$   ÂC/ ÃD Ã/DÄDÄD'Ä&D'c          
      óL   € V ^8„  d   QhR\         R\         R\        R\         RR/# )r   ÚyÚxr‘   Únr   N©rW   rV   )r   s   "r   r   r   �   s/   € ÷ ñ œð ¤ð ¬3ð ´3ð Àñ r   c                óf   € ^ RI p V P                  WW4V4       R#   TP                   d     R# i ; i)zQ``stdscr.addnstr`` that swallows ``curses.error`` (drawing past the screen edge).N)r§   Úaddnstrr¤   )Ústdscrr«   r¬   r‘   r­   r¨   r§   s   &&&&&& r   Ú_addnstrr²   �   s0   € ãðØ�‰�q˜T dÖ+øØ�<‰<ô Úðús   † ›0¯0Úhint_rowc          
      óL   € V ^8„  d   QhR\         R\         R\        R\        RR/# )r   ÚtitleÚhintÚmax_xr³   r   N)rV   rW   )r   s   "r   r   r   –   s8   € ÷ Añ A¬ð A´3ð A¼sð AÔQTð AÐ]añ Ar   c               óì   € ^ RI pVP                  VP                  4       '       d   VP                  ^4      M^ ,          p\	        V ^ ^ W^,
          V4       \	        W^ W#^,
          VP
                  4       R# )z>Bold/yellow menu title on row 0, dim key hint on ``hint_row``.N)r§   r¢   r¡   r£   r²   r¦   )r±   rµ   r¶   r·   r³   r§   Úhattrs   &&&&$  r   Ú_draw_title_and_hintrº   –   sX   € ãØ�M‰M°V×5FÑ5F×5HÒ5H˜V×.Ñ.¨qÔ1ÈaÕP€EÜˆV�Q˜˜5¨!¥)¨UÔ3ÜˆV˜q $°­	°6·<±<Ö@r   c                ó@   € V ^8„  d   QhR\         R\         R\         RR/# )r   r«   r¬   r·   r   N©rW   )r   s   "r   r   r   ž   s(   € ÷ 	ñ 	œcð 	¤cð 	¼Cð 	ÀDñ 	r   c           	     óœ   € TpV FC  w  rgV^,
          V,
          pV^ 8:  d    R# VRV p	\        WWYW‡4       V\        V	4      ,          pKE  	  R# )zTDraw ``(text, attr)`` segments left to right from column ``x``, clipped at the edge.N)r²   Úlen)
r±   r«   r¬   Úsegmentsr·   Úcolr‘   r¨   Ú	remainingÚchunks
   &&&&&     r   Ú_draw_segmentsrÃ   ž   sP   € à
€CÛ‰
ˆØ˜A•I •Oˆ	Ø˜Œ>ÚØ�Z�iÐ ˆÜ�˜C¨	Ô8ØŒs�5‹zÕŠó r   c                ó@   € V ^8„  d   QhR\         R\        R\         RR/# )r   r«   r‘   r·   r   Nr®   )r   s   "r   r   r   ª   s(   € ÷ 2ñ 2¤cð 2´ð 2¼Sð 2ÀTñ 2r   c                ól  a€ ^ RI oSP                  4       '       d   SP                  ^4      MSP                  p. p\	        VP                  R4      4       FN  w  rgV'       d   VP                  RV34       V'       g   K*  VP                  V3R l\        V4       4       4       KP  	  \        W^ WS4       R# )ub   Draw a description line, highlighting â˜… in yellow and ``[||||    ]`` gauges by how much is used.Nu   â˜…c              3   óH   <"  € T F  w  rV\        SVR R7      3x € K  	  R# 5i)F©r›   N©r©   )r�   rÂ   rš   r§   s   &  €r   r“   Ú)_draw_description_line.<locals>.<genexpr>³   s)   øé € ð á$=‘L�Eð Ô*¨6°5ÀEÔJÕKÛ$=ùó   ƒ")
r§   r¡   r£   r¥   Ú	enumerateÚsplitÚappendÚextendÚ_gauge_bar_segmentsrÃ   )	r±   r«   r‘   r·   Ú	star_attrr¿   ÚiÚpartr§   s	   &&&&    @r   Ú_draw_description_linerÓ   ª   sŽ   ø€ ãØ(.×(9Ñ(9×(;Ò(;�×!Ñ! !Ô$ÀÇÁ€IØ€HÜ˜TŸZ™Z¨Ó.Ö/‰ˆßØ�O‰O˜U IÐ.Ô/ß‰4Ø�O‰Oô ä$7¸Ô$=óö ñ	 0ô �6˜a Ö1r   c                óX   € V ^8„  d   QhR\         R\         R\        R\         R\        RR/# )r   r«   r¬   rŠ   r·   r›   r   N)rW   rŒ   r   )r   s   "r   r   r   º   s<   € ÷ ñ ÜðÜðÜ"+ðÜ47ðÜGKðØPTñr   c               óÜ   aa€ ^ RI o\        V\        4      '       d7   \        SRSR7      p\	        WW#\        ^ V^,
          V,
          4      V4       R# \        WVVV3R lV 4       V4       R# )zBDraw a plain or segmented radiolist item starting at column ``x``.NrÇ   c              3   óH   <"  € T F  w  rV\        SVSR 7      3x € K  	  R# 5i)rÇ   NrÈ   )r�   r‘   rš   r§   r›   s   &  €€r   r“   Ú#_draw_radio_item.<locals>.<genexpr>Ä   s$   øé € Ð`Ñ[_ÉKÈDˆ$Ô" 6¨5¸IÔFÕ	GÓ[_ùrÊ   )r§   r]   rV   r©   r²   ÚmaxrÃ   )r±   r«   r¬   rŠ   r·   r›   r¨   r§   s   &&&&&d @r   Ú_draw_radio_itemrÙ   º   s\   ù€ ó Ü�$œ×ÒÜ! &¨$¸)ÔDˆÜ�˜A¤S¨¨E°A­I¸­MÓ%:¸DÔAÙÜØ�1Ý`Ñ[_Ó`Øör   c          
      óL   € V ^8„  d   QhR\         R\        R\         R\        RR/# )r   r«   Úliner·   r›   r   N)rW   rV   r   )r   s   "r   r   r   È   s7   € ÷ cñ cœsð c¬#ð c´cð cÌð cÐRVñ cr   c               óP   € ^ RI p\        W^ W#^,
          \        VRVR7      4       R# )z<Draw a plain menu row, bold green when it is the cursor row.NrÇ   )r§   r²   r©   )r±   r«   rÛ   r·   r›   r§   s   &&&&$ r   Ú_draw_plain_rowrÝ   È   s"   € ãÜˆV˜˜4¨¥Ô,>¸vÀtÐW`Ô,aÖbr   z-_/. c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   ÚtargetÚindexr   )rV   rW   r   )r   s   "r   r   r   Ñ   s&   € ÷ Lñ Lœð L¤Sð L¬Tñ Lr   c                óî   € V^ 8X  d   R# W^,
          ,          W,          r2V\         9   ;'       gG    W"P                  4       8H  ;'       d-    W3P                  4       8g  ;'       d    W3P                  4       8H  # )zSMirrors ``isBoundary`` in the TS scorer: start, after a separator, or lower->Upper.T)Ú_WORD_BOUNDARYÚlowerÚupper)rß   rà   ÚprevÚcurs   &&  r   Ú_is_boundaryrç   Ñ   sd   € à�„zÙØ˜q•yÕ! 6¥=ˆ#Ø”>Ñ!÷ Lð LØ—
‘
“Ñ×JÐJ ¯	©	«Ñ!3×JÐJ¸¿y¹y»{Ñ8JðLr   c          	      óV   € V ^8„  d   QhR\         R\         R\         R\        R,          /# )r   Úorigrã   rI   r   N©rV   Úfloat)r   s   "r   r   r   Ú   s,   € ÷ %ñ %”sð %¤3ð %¬sð %´u¸tµ|ñ %r   c                óB  € RRrC. pV F°  pVP                  Wd^,           4      pV^ 8  d    R# VP                  V4       V^,          pV^ 8¼  d   Wt^,           8X  d   V^,          pM'V^ 8¼  d!   V\        Wt,
          ^,
          ^4      ,          p\        W4      '       d
   V^,          pV^ 8X  d
   V^,          pTpK²  	  V'       d6   V^ ,          ^ 8X  d(   VR,          \	        V4      ^,
          8X  d
   V^,          pW8X  d
   V^,          pV\	        V4      R,          ,
          # )zêScore one token against a target; None if not a subsequence. Faithful port of ``fuzzyScore``
in ui-tui / web ``fuzzy.ts`` so all surfaces rank identically; matches run against ``lower``,
boundary detection uses ``orig`` for camelCase.ç        Ng{®Gáz„?éÿÿÿÿ)ÚfindrÍ   Úminrç   r¾   )ré   rã   rI   Úscorerå   Ú	positionsÚchrb   s   &&&     r   Ú_token_scorerô   Ú   sû   € ð �rˆ4Ø€IÛˆØ�j‰j˜ A�XÓ&ˆØ�Œ7ÚØ×Ñ˜ÔØ��
ˆØ�1Œ9˜ q¥œØ�Q�J‰EØ�QŒYØ”S˜� a�¨Ó+Õ+ˆEÜ˜×"Ò"Ø�Q�JˆEØ�!Œ8Ø�Q�JˆEØŠñ ÷ �Y˜q•\ QÔ&¨9°R­=¼CÀ	»NÈQÕ<NÔ+NØ��
ˆØ„~Ø��ˆØ”3�u“: Õ$Õ$Ð$r   c                óJ   € V ^8„  d   QhR\         R\         R\        R,          /# )r   ÚlabelÚqueryr   Nrê   )r   s   "r   r   r   ö   s%   € ÷ 3ñ 3œð 3¤Cð 3¬E°D­Lñ 3r   c                óÂ   € V P                  4       pVP                  4       P                  4        Uu. uF  p\        WV4      NK  	  ppRV9   d   R# \        V4      # u upi )zXMulti-token AND score (``fuzzyScoreMulti``): sum of per-token scores, None if any fails.N)rã   rÌ   rô   Úsum)rö   r÷   rã   rI   Úscoress   &&   r   Ú_fuzzy_scorerû   ö   sT   € à�K‰K‹M€EØ=B¿[¹[»]×=PÑ=PÔ=RÓSÑ=R°EŒl˜5¨Ö/Ñ=R€FÐSØ˜6”>ˆ4Ð2¤s¨6£{Ð2ùò Ts   ±Ac                óh   € V ^8„  d   QhR\         \        ,          R\        R\         \        ,          /# )r   Úitemsr÷   r   )ÚlistrV   rW   )r   s   "r   r   r   ý   s)   € ÷ "ñ "œ4¤�9ð "¬Sð "´T¼#µYñ "r   c                ó6  € VP                  4       pV'       g   \        \        \        V 4      4      4      # \	        V 4       UUu. uF  w  r4\        WB4      ;pf   K  W53NK  	  pppVP                  R R7       V UUu. uF  w  r7VNK	  	  upp# u uppi u uppi )zVItem indices matching *query*, best-first; ties keep catalog order. Empty query = all.c                 ó(   € V ^,          ) V ^ ,          3# ©é   r(   )Úpairs   &r   Ú<lambda>Ú!_filter_indices.<locals>.<lambda>  s   €  4¨¥7 (¨D°­GÑ!4r   )Úkey)r_   rþ   Úranger¾   rË   rû   Úsort)rý   r÷   ÚqrÑ   rö   ÚsÚscoredÚ_s   &&      r   Ú_filter_indicesr  ý   s€   € à�‰‹€AßÜ”Eœ#˜e›*Ó%Ó&Ð&Ü%.¨uÔ%5ÔcÑ%5™˜¼|ÈEÓ?UÐ:U¸!Œfˆq‹fÑ%5€FÑcØ
‡K�KÑ4€KÔ5Ù Ô!™&‘$�!‹A™&Ò!Ð!ùó dùã!s   ÁBÁBÁ>Bc                   ó8   a € ] tR tRt o RtRtRtV 3R ltRtV t	R# )Ú_SearchStatei  z3Mutable search state shared by curses picker loops.FrŽ   c                ó2   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   # )r   Úactiver÷   ©r   rV   )r   r   s   "€r   r   Ú_SearchState.__annotate__  s   ø‡ ‚ ñ Ññ ñ �Oò	 r   r(   N)
r)   r*   r+   r,   r-   r  r÷   r/   r0   r1   r2   s   @r   r  r    s   ø‡ € á=Ø€FØ€E÷	 ƒ r   r  c                ót   € V ^8„  d   QhR\         \        ,          R\        R\        \        \        3,          /# )r   ÚfilteredÚcursorr   )rþ   rW   Útuple)r   s   "r   r   r     s2   € ÷ Xñ X¤¤S¥	ð X´3ð X¼5ÄÄcÀ½?ñ Xr   c                ó`   € V '       g   V^ 3# W9   d   WP                  V4      3# V ^ ,          ^ 3# )z?Return ``(cursor, cursor_pos)`` inside the filtered index list.)rà   )r  r  s   &&r   Ú_reconcile_cursorr    s6   € çØ�qˆyÐØ/5Ô/AˆF—N‘N 6Ó*Ð+ÐWÈÐQRÍÐUVÐGWÐWr   c          
      ój   € V ^8„  d   QhR\         \        ,          R\        R\        R\        R\        /# )r   r  r  Ú
cursor_posÚdeltar   )rþ   rW   )r   s   "r   r   r     s<   € ÷ Rñ R¤D¬¥Ið R´sð RÌð RÔTWð RÔ\_ñ Rr   c                óT   € V '       d    WV,           \        V 4      ,          ,          # T# )zEMove through the filtered index list, wrapping like the legacy menus.)r¾   )r  r  r  r  s   &&&&r   Ú_move_filtered_cursorr    s    € ç=Eˆ8 %Õ'¬3¨x«=Õ8Õ9ÐQÈ6ÐQr   c          
      óT   € V ^8„  d   QhR\         R\         R\         R\         R\         /# )r   Úscroll_offsetr  Úvisible_rowsÚ
total_rowsr   r¼   )r   s   "r   r   r     s;   € ÷ Iñ IÜðIÜ$'ðIÜ7:ðIÜHKðIÜPSñIr   c                ó°   € \        ^V4      pW8  d   Tp MWV,           8¼  d   W,
          ^,           p \        ^ \        V \        ^ W2,
          4      4      4      # )z2Clamp scroll offset so the cursor remains visible.)rØ   rð   )r   r  r!  r"  s   &&&&r   Ú_scroll_for_cursorr$    sQ   € ô �q˜,Ó'€LØÔ!Ø"‰Ø	 |Õ3Ô	3Ø"Õ1°AÕ5ˆÜˆq”#�m¤S¨¨JÕ,EÓ%FÓGÓHÐHr   c          	      óh   € V ^8„  d   QhR\         R\        R\        \        \        \        3,          /# )r   r  Úsearchr   )rW   r  r  r   )r   s   "r   r   r   %  s0   € ÷ ñ ÜðÜ".ðÜ38¼¼tÄTÐ9IÕ3Jñr   c                ó’  € VP                   '       g   R# V^8X  d)   \        VP                  4      pRVn         RVn        RRV3# WP                  ^
^39   d   R# WP                  ^^39   d   VP                  RR Vn        MFV^8X  d	   RVn        M7^ Tu;8:  d   ^8  d'   M M#V;P                  \        V4      ,          un        MR# R# )	zRHandle a key while the search prompt is active -> ``(handled, confirm, changed)``.FrŽ   TN)FFF)TTFrî   )TFT)r  r   r÷   Ú	KEY_ENTERÚKEY_BACKSPACEÚchr)Ú
curses_modr  r&  Ú	had_querys   &&& r   Ú_handle_active_search_keyr-  %  sº   € ð �=�=ˆ=Ø"Ð"Ø
ˆb„yô ˜Ÿ™Ó&ˆ	ØˆŒØˆŒØ�U˜IÐ%Ð%Ø
×#Ñ# R¨Ð,Ô,Ø Ð Ø
×'Ñ'¨¨aÐ0Ô0Ø—|‘| C RÐ(ˆ�Ø	�ŒØˆ�Ø	ˆsŽ�S�Ø�Šœ˜C›Õ Žà"Ð"ØÐr   c                ó   € V ^8„  d   QhRR/# rl   r(   )r   s   "r   r   r   >  s   € ÷ ñ �Tñ r   c                 óÔ   €  \         P                  P                  4       '       d1   ^ RIp V P	                  \         P                  V P
                  4       R# R#   \         d     R# i ; i)z¥Drain stray stdin bytes after ``curses.wrapper()`` and before the next ``input()``:
``curses.endwin()`` restores the terminal but does NOT drain the OS input buffer.N)ÚsysÚstdinÚisattyÚtermiosÚtcflushÚTCIFLUSHÚ	Exception)r3  s    r   Úflush_stdinr7  >  sN   € ðÜ�9‰9×Ñ×ÒÛØ�O‰OœCŸI™I w×'7Ñ'7Ö8ñ øô ô Úðús   ‚#A ¦.A ÁA'Á&A'c                ó$   € V ^8„  d   QhR\         /# r   ©rV   )r   s   "r   r   r   N  s   € ÷ 4ñ 4œSñ 4r   c                ó4   € \        W P                  4       4      # )z¨Read one keypress and normalize it to a ``NAV_*`` action: lone ESC (no continuation byte
within a short window) and ``q`` cancel; unknown sequences map to ``NAV_NONE``.)Ú_decode_menu_keyÚgetch)r±   s   &r   Úread_menu_keyr=  N  s   € ô ˜F§L¡L£NÓ3Ð3r   c                ó$   € V ^8„  d   QhR\         /# )r   r^   r9  )r   s   "r   r   r   T  s   € ÷ ñ ”cñ r   c                 ó@   €  \        V 4      #   \         d    Tu # i ; ir   )rW   Ú
ValueError)r^   r?   s   &&r   r`   r`   T  s%   € ðÜ�5‹zÐøÜô ØŠðús   ‚
 �œc                ój   € V ^8„  d   QhR\         R\        \        \        \        3,          R,          /# )r   Úrawr   N)rV   r  rW   )r   s   "r   r   r   [  s*   € ÷ 	+ñ 	+œ#ð 	+¤%¬¬S´#¨Õ"6¸Õ"=ñ 	+r   c                ój  € V P                  R4      p\        V^ ,          P                  R^4      ^ ,          4      pV'       g   R# \        V4      ^8”  d   V^,          P                  R4      M. pV'       d   \        V^ ,          ^4      M^p\        V4      ^8”  d   \        V^,          ^4      M^pW$V3# )zSKitty/CSI-u key -> ``(codepoint, modifier, event_type)``; None without a codepoint.Ú;Ú:N)rÌ   r`   r¾   )rB  ÚpartsÚ	codepointÚ
mod_fieldsÚmodifierÚ
event_types   &     r   Ú_parse_csi_u_keyrK  [  s�   € à�I‰I�c‹N€EÜ˜5 �8Ÿ>™>¨#¨qÓ1°!Õ4Ó5€IßÙÜ(+¨E«
°Q¬��q•—‘ Ô$¸B€Jß/9Œz˜* Q�-¨Ô+¸q€HÜ14°Z³À1Ô1D”˜J q�M¨1Ô-È!€JØ 
Ð*Ð*r   c                óF   € V ^8„  d   QhR\         R\        \        ,          /# )r   rB  r   ©rV   rþ   rW   )r   s   "r   r   r   g  s"   € ÷ Jñ JœCð J¤D¬¥Iñ Jr   c           	     óŽ   € V P                  R4       Uu. uF%  p\        VP                  R^4      ^ ,          4      NK'  	  up# u upi )z4Semicolon-delimited CSI numbers for modifyOtherKeys.rD  rE  )rÌ   r`   )rB  rÒ   s   & r   Ú_parse_csi_numbersrO  g  s7   € à:=¿)¹)ÀC¼.ÓI¹.°$ŒJ�t—z‘z # qÓ)¨!Õ,Ö-¹.ÑIÐIùÒIs   ”+Ac                ó<   € V ^8„  d   QhR\         R\         R\        /# )r   rG  rI  r   r®   )r   s   "r   r   r   o  s&   € ÷ 	_ñ 	_¤Cð 	_´3ð 	_¼sñ 	_r   c                óô   € V \         9   d   \         V ,          # \        \        ^V4      ^,
          ^,          4      pV ^8X  g   V R9   d   V'       d   \        # V ^8X  g   V R9   d   V'       d   \        # \
        # )z;Map CSI-u/modifyOtherKeys codepoints to setup menu actions.)éc   éC   )éd   éD   )Ú_ENHANCED_NAVr   rØ   ÚNAV_INTERRUPTÚ
NAV_CANCELÚNAV_NONE)rG  rI  Úhas_ctrls   && r   Ú_enhanced_key_actionr[  o  sc   € à”MÔ!Ü˜YÕ'Ð'ô ”S˜˜HÓ%¨Õ)¨QÕ.Ó/€HØ�A„~˜) xÔ/·HÜÐØ" aœ¨I¸Ô,BÇxŒ:Ð^ÔV^Ð^r   c                óT   € V ^8„  d   QhR\         \        \        R,          3,          /# rl   )r  rV   rW   )r   s   "r   r   r   {  s    € ÷ 
ñ 
œe¤C¬¨t­ OÕ4ñ 
r   c                ó  € . p\        ^ 4       Fg  pV P                  4       p^@Tu;8:  d   ^~8:  d   M MRP                  V4      V3u # ^ Tu;8:  d   ^?8:  g   M  MVP                  \	        V4      4       Ki  	  RP                  V4      R3# )z4Read CSI/SS3 parameter bytes through the final byte.rŽ   N)r  r<  r–   rÍ   r*  )r±   rB  r  r^   s   &   r   Ú_read_csi_tailr^  {  su   € à€CÜ�2ŽYˆØ—‘“ˆØ�5Ö ˜D× Ø—7‘7˜3“< Ð&Ò&Ø�uÖ$ Ö$ÙØ�
‰
”3�u“:Öñ ð �7‰7�3‹<˜ÐÐr   ÚAÚkÚBÚjÚDc                ó$   € V ^8„  d   QhR\         /# r   r9  )r   s   "r   r   r   Œ  s   € ÷ ñ ¤sñ r   c                óò  € V P                  4       pVR8X  d   \        # V\        R4      \        R4      39  d   \        # \	        V 4      w  r#V\
        9   d   \
        V,          # V\        R4      8X  d-   \        V4      pVe   Vw  rVpV^8X  d   \        # \        WV4      # V\        R4      8X  dD   \        V4      p\        V4      ^8¼  d)   V^ ,          ^8X  d   \        V^,          V^,          4      # \        # )zRDecode the bytes after an ESC: lone ESC cancels, CSI/SS3 sequences map to actions.Ú[ÚOÚuÚ~rî   )
r<  rX  ÚordrY  r^  Ú_CSI_FINAL_NAVrK  r[  rO  r¾   )	r±   ÚnxtÚ
raw_paramsÚfinalÚenhancedrG  rI  rJ  Úparamss	   &        r   Ú_decode_escape_sequencerq  Œ  s×   € à
�,‰,‹.€CØ
ˆb„yÜÐØ
”3�s“8œS ›XÐ&Ô&ÜˆÜ& vÓ.Ñ€JØ”ÔÜ˜eÕ$Ð$Ø”�C“ÔÜ# JÓ/ˆØÒØ.6Ñ+ˆI Ø˜QŒÜ�Ü'¨	Ó<Ð<Ø”�C“ÔÜ# JÓ/ˆÜˆv‹;˜!Ô  q¥	¨R¤Ü'¨¨q­	°6¸!µ9Ó=Ð=Ü€Or   c                ó0   € V ^8„  d   QhR\         R\        /# )r   r  r   r®   )r   s   "r   r   r   ¤  s   € ÷ ñ ¤#ð ¬#ñ r   c                óô  € ^ RI pVP                  \        \        R4      \        VP                  \
        \        R4      \
        VP                  \        ^\        ^\        VP                  \        ^
\        ^\        \        R4      \        \        R4      \        /pW9   d	   W1,          # V^8w  d   \        #  V P                  ^<4       \        V 4      V P                  R4       #   T P                  R4       i ; i)zXNormalize an already-read keypress to a menu action (lets loops peek the raw key first).Nr`  rb  Ú r	  rî   )r§   ÚKEY_UPÚNAV_UPrj  ÚKEY_DOWNÚNAV_DOWNÚKEY_LEFTÚNAV_BACKrW  rX  r(  Ú
NAV_SELECTÚ
NAV_TOGGLErY  Útimeoutrq  )r±   r  r§   Úplains   &&  r   r;  r;  ¤  s²   € ãà�‰”vœs 3›x¬°·±Ä(ÌCÐPSËHÔV^Ø�‰œ 1¤mØ	Œ:Ø×Ñœ* b¬*°b¼*ÜˆC‹”*œc #›h¬
ð4€Eð „|Ø�zÐØ
ˆb„yÜˆðØ�‰�rÔÜ& vÓ.à�‰�rÕøˆ�‰�rÕús   Â7C$ Ã$C7c                ó(   € V ^8„  d   QhR\         RR/# )r   Úextra_color_pairsr   Nr   )r   s   "r   r   r   Á  s   € ÷ Tñ T¬Dð T°Tñ Tr   c                 óê  € V P                  ^ 4       V P                  4       '       dµ   V P                  4        V P                  4        V P	                  ^V P
                  R4       V P	                  ^V P                  R4        V P	                  ^V P                  R4       V'       d3   T P	                  ^V P                  ^8”  d   ^MV P                  R4       R# R# R#   T P                   d     LQi ; i)é    Nrî   )Úcurs_setr¡   Ústart_colorÚuse_default_colorsÚ	init_pairÚCOLOR_GREENÚCOLOR_YELLOWÚ	COLOR_REDr¤   ÚCOLORSÚCOLOR_WHITE)r§   r€  s   &&r   Ú_init_colorsrŒ  Á  sÏ   € Ø
‡O�O�AÔØ×Ñ×ÒØ×ÑÔØ×!Ñ!Ô#Ø×Ñ˜˜F×.Ñ.°Ô3Ø×Ñ˜˜F×/Ñ/°Ô4ð	Ø×Ñ˜Q × 0Ñ 0°"Ô5÷ Ø×Ñ˜Q V§]¡]°QÔ%6¡¸F×<NÑ<NÐPRÖSñ ñ øð �|‰|ô 	Ùð	ús   ÂC ÃC2Ã1C2c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   r  r&  Ú
use_search)rW   r  r   )r   s   "r   r   r   Ð  s!   € ÷ 0ñ 0¤Cð 0´ð 0Ì4ñ 0r   c                óØ  € V'       g   \        W4      R3# VP                  '       dK   V^8X  dD   \        W4      pV\        8X  d   RVn        RVn        \        R3# V\
        8X  d	   \        R3# TR3# VP                  '       d=   \        WV4      w  rgpV'       d	   \        V3# V'       d	   \        V3# \        W4      V3# V\        R4      8X  d   RVn        \        R3# \        W4      R3# )z¥Turn a raw key into ``(action, changed)`` honoring an active ``/`` search prompt; ``action``
may be ``_CONSUMED`` (redraw only), ``changed`` means the query changed.FrŽ   TÚ/)	r;  r  rX  r÷   Ú	_CONSUMEDrY  r-  r{  rj  )	r§   r±   r  r&  rŽ  ÚactionÚhandledÚconfirmÚchangeds	   &&&&&    r   Ú
_route_keyr–  Ð  sà   € ÷ Ü Ó,¨eÐ3Ð3Ø‡}‡}€}˜ œô " &Ó.ˆØ”ZÔØ!ˆFŒMØˆFŒLÜ˜d�?Ð"Ø#¤xÔ/”	¸eÐCÐC°V¸eÐCÐCØ‡}‡}€}ä$=¸fÈ6Ó$RÑ!ˆ˜'ßÜ˜wÐ&Ð&ß$”	È'ÐQÐQÔ*:¸6Ó*GÈ'ÐQÐQØ
Œc�#‹h„ØˆŒÜ˜%ÐÐÜ˜FÓ(¨%Ð/Ð/r   Úreserve_bottomÚdraw_footerr€  Ú
searchableÚsearch_labelsÚ
selectablec                ó®  a aaaaaaaaaaaaaaaa€ \         P                  4       oV3R loS'       d   S! \        P                  4      MRpVe"   \	        V\
        4      '       g   \        R4      h\        T;'       d    VP                  4      oVe@   VP                  '       d.   S! \        P                  VP                  4       VP                  # \        P                  P                  4       '       g   V	# T
;'       d    SRJ;'       d    \        S4      S8H  oVVV3R lp ^ RIo \$        .oTTTTTTTT TTTTTTT3R lpSP'                  T4       \)        4        S^ ,          \$        Jd
   S^ ,          # T	#   \"         d    T! 4       u # i ; i  \*         d    S! \        P,                  4       T	u # SP.                   d    T! 4       u # i ; i)a{  Shared curses single-/multi-select event loop: non-TTY guard, ``curses.wrapper`` setup,
clear/refresh cycle, scroll math, key dispatch with cursor wrap, KeyboardInterrupt /
curses-unavailable fallback.

``draw_row`` always receives the ORIGINAL item index; ``on_action`` returns ``_KEEP`` to
continue or any other value to resolve; a ``draw_footer`` row budget must be included in
``reserve_bottom``; with ``searchable``, ``/`` filters over ``search_labels`` (length ==
``item_count``) and results are original indices. ``selectable(i)`` (default: every row)
marks rows the cursor skips, e.g. section headings: drawn, never landed on.
c                 ó(   <€ Se   S! V .VO5!   R # R # r   r(   )rN   r^   Únavigation_handlers   &*€r   Ú_notifyÚ!_run_curses_menu.<locals>._notifyú  s   ø€ ØÒ)Ù˜uÐ- uÖ-ñ *r   Nz7menu navigation 'begin' must return MenuNavigationStartc                  óÎ   <€ \         P                  S4      p  S! 4       p\         P                  V 4       S! \        P                  V4       V#   \         P                  T 4       i ; ir   )r„   rF   rK   r4   r:   )Ú
back_tokenrp   rŸ  r&   Úfallbacks     €€€r   Ú_run_fallbackÚ'_run_curses_menu.<locals>._run_fallback  sU   ø€ Ü+×/Ñ/°
Ó;ˆ
ð	5Ù“ZˆFä"×(Ñ(¨Ô4ÙÔ#×+Ñ+¨VÔ4Øˆøô #×(Ñ(¨Õ4ús   ˜A ÁA$c                 ó2  <€ \        SS4       S^ \        4       r2p V P                  4        V P                  4       w  rES#'       d   \	        S!VP
                  4      M\        \        S4      4      pS"f   TM!V Uu. uF  pS"! V4      '       g   K  VNK  	  upp\        W�4      w  rW9   d   VP                  V4      M^ p
S! WWSSR7      p\        ^WK,
          S,
          4      p\        W*V\        V4      4      pS#'       d;   VP
                  '       d)   V'       g!   \        W^ RV^,
          SP                  4       \        WbW,,            4       F)  w  r×WÛ,           pWäS,
          8¼  d    MS! WWwV8H  V4       K+  	  Se
   S! WV4       V P!                  4        \#        SW P%                  4       VS#4      w  ppV'       d`   ^ pVP&                  '       dL   \	        S!VP
                  4      p\        S"f   TM!V Uu. uF  pS"! V4      '       g   K  VNK  	  upV4      w  ppV\(        \*        39   d    V\(        8X  d   RM^p\-        W�V	V4      pEK2  V\.        J g:   V\0        9  g/   V\2        8X  d	   S'       d   V\4        8X  d   S#'       d   V'       g   EKx  V\6        \8        39   d   S! \:        P<                  4       M!V\2        8X  d   S! \:        P>                  4       S! Wñ4      pV\@        Jg   EKÖ  S! \:        PB                  V4       VS ^ &   R# u upi u upi )r‚  N)r&  Úback_enabledz  No matchesrî   )"rŒ  r  ÚclearÚgetmaxyxr  r÷   rþ   r  r  rà   rØ   r$  r¾   r²   r¦   rË   Úrefreshr–  r<  r  rv  rx  r  r‘  Ú
_RESOLVINGrz  r{  rX  rW  r4   r;   r<   Ú_KEEPr:   )$r±   r  r   r&  Úmax_yr·   r  rÑ   ÚnavÚ_nav_posr  Úitems_startr!  Údraw_ir«   r’  r•  Ú
refilteredr  r  ÚoutcomerŸ  r&   r§   r˜  Údraw_headerÚdraw_rowr€  Úinitial_cursorÚ
item_countÚ	on_actionr—  Úresult_holderrš  r›  rŽ  s$   &                    €€€€€€€€€€€€€€€r   Ú_drawÚ_run_curses_menu.<locals>._draw  s™  ø€ Ü˜Ð!2Ô3Ø,:¸A¼|»~ 6ˆFØØ—‘”Ø%Ÿ™Ó0‘�çDN”O M°6·<±<Ô@Üœe JÓ/Ó0ð ð #-Ò"4‘hÁhÓ:`ÁhÀÑR\Ð]^×R_¿1¸1ÁhÑ:`�Ü#4°SÓ#AÑ �Ø7=Ô7I˜XŸ^™^¨FÔ3Èq�
Ù)Ø 5ÀjôR�ä" 1 eÕ&9¸NÕ&JÓK�Ü 2Ø!¨|¼SÀ»]ó!L�ç &§,§, ,·sÜ˜V°!°^ÀUÈQÅYÐPV×P\ÑP\Ô]Ü!*¨8ÀMÕD`Ð+aÖ!b‘I�FØÕ,�AØ NÕ2Ô2ÙÙ˜V¨°©;¸Ö>ñ	 "cð
 Ò*Ù ¨uÔ5Ø—‘Ô Ü",¨V°V¿\¹\»^ÈVÐU_Ó"`‘�˜ßØ$%�MØ—}—}�}Ü%4°]ÀFÇLÁLÓ%Q˜
Ü$5Ø*4Ò*<™JÉjÓBjÉjÈÑ\fÐgh×\iÇ1À1ÉjÑBjØ"ó%$™	˜ ð œf¤hÐ/Ô/Ø"(¬FÔ"2™B¸�EÜ2°3ÀÈ%ÓP�FÚØœYÓ&¨&¼
Ô*BØœhÔ&¯zØœjÔ(¯ZÇÚØœj¬-Ð8Ô8ÙÔ/×6Ñ6Õ7ØœxÔ'ÙÔ/×4Ñ4Ô5Ù# FÓ3�Ø¤%Ö'ÙÔ/×7Ñ7¸ÔAØ'.�M !Ñ$ÙùòU ;aùò0 Cks   Á:LÂLÇ7LÈL)rE   rP   r4   r9   r]   r   Ú	TypeErrorr   r&   r#   r:   r    r0  r1  r2  r¾   r§   ÚImportErrorr¬  Úwrapperr7  rZ   r;   r¤   )r¶  r·  r´  rµ  r¸  r—  r˜  r€  r£  Úcancel_valuer™  rš  r›  Ústartr¤  rº  rŸ  r&   r§   rž  r¹  rŽ  s   ddddddddd$$dd   @@@@@@r   Ú_run_curses_menurÁ  ê  s�  ÿÿø€ ô 2×5Ñ5Ó7Ðõ.÷ >PÑÔ2×8Ñ8Ô9ÐUY€EØÒ¤¨EÔ3F×!GÒ!GÜÐQÓRÐRÜ�e×0Ð0 × 0Ñ 0Ó1€JØÒ˜U×0×0Ð0ÙÔ#×+Ñ+¨U×-?Ñ-?Ô@Ø×!Ñ!Ð!ô �9‰9×Ñ×ÒØÐØ×^Ð^ °TÐ 9×^Ð^¼cÀ-Ó>PÐT^Ñ>^€J÷ðÛð@Ü˜ˆ÷4	÷ 4	ó 4	ðl 	�‰�uÔÜŒØ#0°Õ#3¼5Ó#@ˆ}˜QÕÐRÀlÐRøô{ ô Ù‹Òðûô| ô ÙÔ#×*Ñ*Ô+ØÒØ�<‰<ô Ù‹Òðús7   Ä&E= Ä+AF Å;F Å=FÆFÆ#GÆ:GÇ	GÇGÚcancel_returnsÚ	status_fnc                ó  € V ^8„  d   QhR\         R\        \         ,          R\        \        ,          R\        \        ,          R,          R\        \
        \        \        ,          .\         3,          ,          R\        \        ,          /# )r   rµ   rý   ÚselectedrÂ  NrÃ  r   ©rV   rþ   rF   rW   r   r   )r   s   "r   r   r   [  se   € ÷ $%ñ $%Üð$%ÜœC•yð$%Ü,/´­Hð$%ÜILÌSÍÐTXÍð$%äœ¤#¤c¥( ¬S Õ1Õ2ð$%ä>AÄ#½hñ$%r   c               ó  a aaaaa€ Sf   \        S4      o\        S4      oVV3R lpVV3R lpVV3R lp\        ^ \        S4      \        S RRR4      YWS'       d   ^M^S'       d   TMR\	        S4      VVVVV 3R lSR	7
      # )
zæCurses multi-select checklist -> set of selected indices. ``cancel_returns`` (default: the
original *selected*) is returned on ESC/q; ``status_fn(chosen)`` renders on the bottom row
for live aggregate info such as token estimates.Nc                 ón   <€ R V'       d   RMR  RVS9   d   RMR  RSV,           2p\        WWTVR7       R# )rt  õ   â†’z [u   âœ“z] rÇ   N©rÝ   )r±   r«   rÑ   r›   r·   rÛ   Úchosenrý   s   &&&&& €€r   Ú	_draw_rowÚ#curses_checklist.<locals>._draw_rowe  s>   ø€ ØŸI‘5¨3Ð/¨r¸1À¼;±%ÈCÐ1PÐPRÐSXÐYZÕS[ÐR\Ð]ˆÜ˜ 4¸)×Dr   c                 ó2  <€ ^ RI pS! S4      pV'       d‚   \        ^ V\        V4      ,
          ^,
          4      pVP                  VP	                  4       '       d   VP                  ^4      M^ ,          p\        W^,
          WTW%,
          ^,
          V4       R# R# )r‚  N)r§   rØ   r¾   r¦   r¡   r£   r²   )	r±   r­  r·   r§   Ústatus_textÚsxÚsattrrË  rÃ  s	   &&&    €€r   Ú_draw_footerÚ&curses_checklist.<locals>._draw_footeri  su   ø€ ÛÙ Ó'ˆßÜ�Q˜¤ KÓ 0Õ0°1Õ4Ó5ˆBØ—L‘L¸F×<MÑ<M×<OÒ<O F×$5Ñ$5°aÔ$8ÐUVÕWˆEÜ�V Q�Y¨¸½Àa½ÈÖOñ r   c                 óz   <€ V \         8X  d   SP                  V04       \        # V \        8X  d   \	        S4      # S# r   )r|  Úsymmetric_difference_updater¬  r{  rF   )r’  r  rÂ  rË  s   &&€€r   Ú
_on_actionÚ$curses_checklist.<locals>._on_actionq  s8   ø€ Ø”ZÔØ×.Ñ.°¨xÔ8ÜˆLØ”ZÔÜ�v“;ÐØÐr   zSPACE toggle  ENTER confirmú
ESC cancelFc                  ó"   <€ \        SSSS S4      # r   )Ú_numbered_fallback)rÂ  rý   rÅ  rÃ  rµ   s   €€€€€r   r  Ú"curses_checklist.<locals>.<lambda>~  s   ø€ Ô+¨E°5¸(ÀNÐT]Ô^r   )
r¶  r·  r´  rµ  r¸  r—  r˜  r€  r£  r¿  )rF   rÁ  r¾   Ú_simple_headerr   )	rµ   rý   rÅ  rÂ  rÃ  rÌ  rÒ  rÖ  rË  s	   fffdd   @r   Úcurses_checklistrÝ  [  sw   ý€ ð ÒÜ˜X›ˆÜ�‹]€FöEöPöô Ø¤S¨£ZÜ" 5Ð*GÈÐW\Ó]ØÇyÁ!ÐVWß$-‘L°4Ì4ÐPYË?ß^Ð^Ø#ô%ð %r   c          
      óT   € V ^8„  d   QhR\         R\        R\        R\         R\        /# )r   r™  r”  r7   r§  r   r  )r   s   "r   r   r   ‚  s1   € ÷ ñ ¤Tð ´Cð Äð ÔTXð Ô]`ñ r   c                ó®   € V'       d(   V e$   V P                   '       d   RV P                   R2pMRT RV'       d   RMR V 2pV'       d
   VR,          pV# )zLKey-hint row for menus, swapping to the search prompt while ``/`` is active.z
  Search: u+   â–Ž  BACKSPACE edit  Ctrl+U clear  ESC stopu     â†‘â†“ navigate  ú  z
/ search  rŽ   u     â†� previous)r  r÷   )r&  r™  r”  r7   r§  r¶   s   &&&&& r   Ú_search_hintrá  ‚  sV   € ç�fÒ(¨V¯]¯]¨]Ø˜FŸL™L˜>Ð)WÐX‰à*¨7¨)°2Çj±lÐVXÐ5YÐZ`ÐYaÐbˆßØÐ#Õ#ˆØ€Kr   c                óH   € V ^8„  d   QhR\         R\         R\         R\        /# )r   rµ   r”  r7   r™  )rV   r   )r   s   "r   r   r   �  s(   € ÷ ñ œ#ð ¬ð ´Sð Ädñ r   c                ó$   a aaa€ RVVVV 3R llpV# )zR``draw_header`` callback: title on row 0, key hint on row 1, items start on row 3.c                 ó@   <€ \        VSSSV4      p\        V S	WR4       ^# )é   )rá  rº   )
r±   r­  r·   r&  r§  r¶   r7   r”  r™  rµ   s
   &&&&& €€€€r   Ú_draw_headerÚ$_simple_header.<locals>._draw_header�  s$   ø€ Ü˜F J°¸ÀÓNˆÜ˜V U¨DÔ8Ùr   ©NFr(   )rµ   r”  r7   r™  ræ  s   ffff r   rÜ  rÜ  �  s   û€ ÷ò ð
 Ðr   ÚdescriptionÚheadingsc                ó  € V ^8„  d   QhR\         R\        \        ,          R\        R\        R,          R\         R,          R\        R\        \         ,          R,          R	\
        \        \        \         3,          ,          R
\        /	# )r   rµ   rý   rÅ  rÂ  Nré  r™  rš  rê  r   )rV   rþ   rŒ   rW   r   r   Údict)r   s   "r   r   r   —  s   € ÷ 9=ñ 9=Üð9=ÜœI•ð9=Ü25ð9=ÜNQÐTXÍjð9=ä�t•ð9=ä04ð9=ô œ•9˜tÕ#ð9=ô 7?¼tÄCÌÀH½~Õ6Nð9=ô [^ñ9=r   c               óˆ  a aaaaa€ V'       d   \        S SSVSVSVR7      # Sf   SoV'       d   VP                  4       M. oS'       d+   Ve   \        V4      MS Uu. uF  p\        V4      NK  	  uppR	VVVV 3R llp	VV3R lp
V3R lp\	        S\        S4      T	Y«RVVVV 3R lSSS'       d   VR7
      # RR7
      # u upi )
a.  Curses single-select radio list -> selected index.

Items are plain strings or ``(text, style)`` segment sequences (``None``/``"yellow"``/
``"dim"``); the cursor row is forced green. ``description`` is shown between title and list
so context survives the curses screen clear. With ``searchable``, ``/`` filters over
``search_labels`` (default: display labels); the return value is always the ORIGINAL index.
``headings`` (``{item_index: text}``) draws a dim section title above that item; it is never
selectable and is hidden while a search query is active.
)rÂ  ré  r™  rš  Nc                 ó‚  <€ ^p\        \        ^\        S4      4      ^4      p\        ^ V^,
          V,
          4      pSRV p\        S4      V8”  d+   V'       d#   \        S4      V,
          ^,           p	RV	 R2VR&   V F  p
\        WW¢4       V^,          pK  	  \	        VSRRV4      p\        V SW²VR7       V^,           # ©r  Nz  ... z* more description lines (enlarge terminal)zENTER/SPACE selectrØ  )r³   rî   ©rð   rØ   r¾   rÓ   rá  rº   )r±   r­  r·   r&  r§  ÚrowÚchoice_rowsÚdescription_rowsÚvisible_descriptionÚhiddenÚdliner¶   Ú
desc_linesrý   r™  rµ   s   &&&&&       €€€€r   ræ  Ú&curses_radiolist.<locals>._draw_header°  sÉ   ø€ Øˆô œ#˜a¤ U£Ó,¨aÓ0ˆÜ˜q %¨!¥)¨kÕ"9Ó:ÐØ(Ð):Ð*:Ð;ÐÜˆz‹?Ð-Ô-×2EÜ˜“_Ð'7Õ7¸!Õ;ˆFØ(.¨v¨hÐ6`Ð&aÐ Ñ#Û(ˆEÜ" 6°Ô=Ø�1�HŠCñ )ô ˜F JÐ0DÀlÐT`ÓaˆÜ˜V U¨DÀ#ÕFØ�Q�wˆr   c           	      ó    <€ VS	8X  d   R MRV'       d   RMRreRV RV R2p\        WWtVR7       \        W\        V4      SV,          WCR7       R# )õ   â—�õ   â—‹rÉ  rt  ú (ú) rÇ   N)rÝ   rÙ   r¾   )
r±   r«   rÑ   r›   r·   ÚradioÚarrowÚprefixrý   rÅ  s
   &&&&&   €€r   rÌ  Ú#curses_radiolist.<locals>._draw_rowÁ  sM   ø€ Ø#$¨¤=‘x°hÏIÁÐ[^ˆuØ�U�G˜2˜e˜W BÐ'ˆÜ˜ 6¸IÕFÜ˜¤C¨£K°°qµ¸5×Vr   c                 ó.   <€ V \         \        39   d   V# S# r   ©r{  r|  )r’  r  rÂ  s   &&€r   rÖ  Ú$curses_radiolist.<locals>._on_actionÇ  s   ø€ Ø¤J´
Ð#;Ô;ˆvÐOÀÐOr   Tc                  ó    <€ \        SSSS 4      # r   ©Ú_radio_numbered_fallback)rÂ  rý   rÅ  rµ   s   €€€€r   r  Ú"curses_radiolist.<locals>.<lambda>Î  s   ø€ Ô1°%¸ÀÈ.ÔYr   )
r¶  r·  r´  rµ  r¸  r€  r£  r¿  r™  rš  rè  )Ú_radiolist_with_headingsÚ
splitlinesrþ   r˜   rÁ  r¾   )rµ   rý   rÅ  rÂ  ré  r™  rš  rê  rŠ   ræ  rÌ  rÖ  r÷  s   fffd$d$$    @r   Úcurses_radiolistr  —  sÍ   ý€ ÷ Ü'Ø�5˜( H¸^ÐYdØ!°ô@ð 	@ð ÒØ!ˆß-8�×'Ñ'Ô)¸b€Jßà#0Ò#<ŒD�ÔÙ5:Ó;±U¨TÔ" 4Ö(±UÑ;ð 	÷ò ö"WõPô Ø¬C°«JÀLØØßYØ#°
ß'1�mô=ð =ð 8<ô=ð =ùò9 <s   ÁB?c                óü   € V ^8„  d   QhR\         R\        \        ,          R\        R\        \        \         3,          R\        R,          R\         R,          R\
        R	\        \         ,          R,          R
\        /	# )r   rµ   rý   rÅ  rê  rÂ  Nré  r™  rš  r   )rV   rþ   rŒ   rW   rì  r   )r   s   "r   r   r   Ó  su   € ÷ 90ñ 90Üð90ÜœI•ð90Ü25ð90ÜAEÄcÌ3ÀhÅð90ä˜$•Jð90ä-0°4­Zð90äEIð90ô œ•9˜tÕ#ð90ô ),ñ90r   c               ó¾  a aaaaaaa€ Sf   So. o\        \        S4      4       F0  pVS9   d   SP                  RV34       SP                  RV34       K2  	  \        S4       U	U
Uu/ uF  w  p	w  r«V
R8X  g   K  W¹bK  	  pp
p	pVe   \	        V4      MS Uu. uF  p\        V4      NK  	  uppS U
Uu. uF  w  r«V
R8X  d   RMWë,          NK  	  pp
pV'       d   VP                  4       M. oRVVVV 3R llpVVVV3R lpVV3R lp\        VP                  S^ 4      \        S4      TTTRVVVVV 3R	 lSSS'       d   TMRV3R
 lR7      # u upp
p	i u upi u upp
i )zí``curses_radiolist`` with dim, unselectable section titles (``{item_index: text}``) drawn
above the given items. Headings carry an empty search label, so any query hides them. Returns
the ORIGINAL item index, exactly like the plain list.NÚhrÑ   rŽ   c                 ó‚  <€ ^p\        \        ^\        S4      4      ^4      p\        ^ V^,
          V,
          4      pSRV p\        S4      V8”  d+   V'       d#   \        S4      V,
          ^,           p	RV	 R2VR&   V F  p
\        WW¢4       V^,          pK  	  \	        VSRRV4      p\        V SW²VR7       V^,           # rï  rð  )r±   r­  r·   r&  r§  rñ  rò  ró  rô  rõ  rö  r¶   r÷  Úrowsr™  rµ   s   &&&&&       €€€€r   ræ  Ú._radiolist_with_headings.<locals>._draw_headerç  sÇ   ø€ ØˆÜœ#˜a¤ T£Ó+¨QÓ/ˆÜ˜q %¨!¥)¨kÕ"9Ó:ÐØ(Ð):Ð*:Ð;ÐÜˆz‹?Ð-Ô-×2EÜ˜“_Ð'7Õ7¸!Õ;ˆFØ(.¨v¨hÐ6`Ð&aÐ Ñ#Û(ˆEÜ" 6°Ô=Ø�1�HŠCñ )ô ˜F JÐ0DÀlÐT`ÓaˆÜ˜V U¨DÀ#ÕFØ�Q�wˆr   c           	      óF  <€ ^ RI pSV,          w  rgVR8X  d>   \        W^ RSV,           2V^,
          VP                  VP                  ,          4       R# VS8X  d   RMRV'       d   RMRr˜RV	 RV R	2p
\	        WW¤VR
7       \        W\        V
4      SV,          WCR
7       R# )r‚  Nr  z   rú  rû  rÉ  rt  rü  rý  rÇ   )r§   r²   r¦   r¢   rÝ   rÙ   r¾   )r±   r«   Úrr›   r·   r§   Úkindrb   rþ  rÿ  r   rê  rý   r  rÅ  s   &&&&&      €€€€r   rÌ  Ú+_radiolist_with_headings.<locals>._draw_rowö  s”   ø€ ÛØ˜•G‰	ˆØ�3Œ;Ü�V  S¨°#­¨Ð#8¸%À!½)ÀVÇ\Á\ÐTZ×TaÑTaÕEaÔbÙØ#&¨(¤?‘x¸ÏiÁ(Ð]`ˆuØ�U�G˜2˜e˜W BÐ'ˆÜ˜ 6¸IÕFÜ˜¤C¨£K°°sµ¸U×Xr   c                 óJ   <€ V \         \        39   d   SV,          ^,          # S# r  r  )r’  r  rÂ  r  s   &&€€r   rÖ  Ú,_radiolist_with_headings.<locals>._on_action  s$   ø€ Ø”j¤*Ð-Ô-Ø˜•< •?Ð"ØÐr   Tc                  ó$   <€ \        SSSS SR 7      # ))rê  r  )rÂ  rê  rý   rÅ  rµ   s   €€€€€r   r  Ú*_radiolist_with_headings.<locals>.<lambda>	  s   ø€ Ô1°%¸ÀÈ.ÐckÕlr   c                 ó*   <€ SV ,          ^ ,          R8H  # )r‚  rÑ   r(   )r  r  s   &€r   r  r    s   ø€ ˜T !�W Q�Z¨3Ò.r   )r¶  r·  r´  rµ  r¸  r€  r£  r¿  r™  rš  r›  rè  )	r  r¾   rÍ   rË   rþ   r˜   r
  rÁ  rP   )rµ   rý   rÅ  rê  rÂ  ré  r™  rš  rÑ   r  r  rb   Úrow_of_itemrŠ   ÚlabelsÚ
row_labelsræ  rÌ  rÖ  r÷  r  s   ffffd$d$           @@r   r	  r	  Ó  sB  ÿ€ ð ÒØ!ˆØ"$€DÜ”3�u“:ÖˆØ�Œ=Ø�K‰K˜˜a˜Ô!Ø�‰�S˜!�HÖñ ô 1:¸$´ÕO±™n˜a¡ $À4È3Á;”6�3’6±€KÒOØ%2Ò%>Œd�=Ô!Ù7<Ó=±u¨tÔ$ TÖ*±uÑ=ð áFJÔKÁd¹¸˜ œ‘"¨­Ò4Ád€JÑKß-8�×'Ñ'Ô)¸b€J÷ò ÷	Yð 	Yöô
 Ø"—‘ x°Ó3ÄÀDÃ	ÐWcØ jÀDßlÐlØ#°
ß$.‘j°DÜ.ô0ð 0ùôK Pùâ=ùÛKs   Á(EÁ;EÂEÂ4Er�   r    rž   rŸ   z\[(?=[| ]{10}\])\|* *\]c                ó0   € V ^8„  d   QhR\         R\         /# )r   Úbarr   r9  )r   s   "r   r   r     s   € ÷ ñ œ#ð ¤#ñ r   c                óŠ   € V ^R pV'       d"   VP                  R4      \        V4      ,          MRpVR8”  d   R# VR8”  d   R# R# )	zQMap a ``[||||    ]`` cell to green/yellow/red from how full it is (what is USED).Ú|rí   gš™™™™™é?rŸ   g      à?r�   rž   rî   )Úcountr¾   )r  ÚinnerÚuseds   &  r   Ú_gauge_bar_styler%    s?   € à��"ˆI€Eß,1ˆ5�;‰;�sÓœc %›jÖ(°s€DØˆc„zÙØˆc„zÙÙr   c                óv   € V ^8„  d   QhR\         R\        \        \         \         R,          3,          ,          /# )r   r‘   r   N)rV   rþ   r  )r   s   "r   r   r      s,   € ÷ "ñ "œcð "¤d¬5´´c¸Dµj°Õ+AÕ&Bñ "r   c                óª  € . p^ p\         P                  V 4       Fƒ  pVP                  4       V8”  d$   VP                  WVP                  4        R34       VP                  VP	                  4       \        VP	                  4       4      34       VP                  4       pK…  	  V\        V 4      8  d   VP                  WR R34       T;'       g    V R3.# )z>Split *text* so each ``[||||    ]`` is its own styled segment.N)Ú_GAUGE_BAR_REÚfinditerrÀ  rÍ   Úgroupr%  Úendr¾   )r‘   ÚsegsÚlastÚmatchs   &   r   rÏ   rÏ      s°   € à)+€DØ€DÜ×'Ñ'¨Ö-ˆØ�;‰;‹=˜4ÔØ�K‰K˜ 5§;¡;£=Ð1°4Ð8Ô9Ø�‰�U—[‘[“]Ô$4°U·[±[³]Ó$CÐDÔEØ�y‰y‹{Šñ	 .ð
 Œc�$‹iÔØ�‰�T˜%�[ $Ð'Ô(Ø×!Ð!�T˜4�L�>Ð!r   c                ó0   € V ^8„  d   QhR\         R\         /# )r   r‘   r   r9  )r   s   "r   r   r   .  s   € ÷ ñ ¤3ð ¬3ñ r   c                óD   € RP                  R \        V 4       4       4      # )zKColor ``[||||    ]`` runs in a header/legend line (numbered-fallback path).rŽ   c              3   ón   "  € T F+  w  rV\         9   d   \        V\         V,          4      MTx € K-  	  R # 5ir   ©Ú_ANSI_STYLEr   )r�   rÂ   rš   s   &  r   r“   Ú+colorize_gauge_bars_ansi.<locals>.<genexpr>0  s1   é € ð á5‰LˆEð -2´[Ô,@Œˆe”[ Õ'Ô(ÀeÔKÛ5ùó   ‚35)r–   rÏ   )r‘   s   &r   Úcolorize_gauge_bars_ansir6  .  s%   € à�7‰7ñ ä/°Ô5óó ð r   c                ó0   € V ^8„  d   QhR\         R\        /# r‰   r‹   )r   s   "r   r   r   6  s   € ÷ cñ c¤ð c¬sñ cr   c                ób   € \        V \        4      '       d   V # RP                  R V  4       4      # )zHApply ANSI colors to a rich radiolist item (numbered fallback / prints).rŽ   c              3   ón   "  € T F+  w  rV\         9   d   \        V\         V,          4      MTx € K-  	  R # 5ir   r2  )r�   r‘   rš   s   &  r   r“   Ú)format_radio_item_ansi.<locals>.<genexpr>:  s/   é € ð cÙ]aÉkÈd¨5´KÔ+?Œˆd”K Õ&Ô'ÀTÔIÓ]aùr5  r•   r—   s   &r   Úformat_radio_item_ansir;  6  s6   € ä�$œ×ÒØˆØ�7‰7ñ cÙ]aócó cð cr   c                ó®   € V ^8„  d   QhR\         R\        \        ,          R\        R\        R\        \
        \        \         3,          ,          R\        /# )r   rµ   rý   rÅ  rÂ  rê  r   )rV   rþ   rŒ   rW   r   rì  )r   s   "r   r   r   >  sU   € ÷ Jñ JÜðJÜœI•ðJÜ25ðJÜGJðJä”tœC¤˜H•~Õ&ðJä25ñJr   c               óˆ  € \        \        RV  2\        P                  4      4       \        \        R\        P                  4      4       \        V4       F†  w  rVV'       d3   WT9   d-   \        \        RWE,           2\        P                  4      4       WR8X  d   \        R\        P                  4      MRp\        RV RV^,           R R\        V4       24       Kˆ  	  \        4        \        \        R	V^,            R
2\        P                  4      4      pV\        J d   V# Ve   ^ Tu;8:  d   \        V4      8  d   V#  T# )zZText-based numbered fallback for radio selection (section titles printed, never numbered).ú
  z&  Select by number, Enter to confirm.
rà  u   (â—�)u   (â—‹)rt  ú>2ú. z  Choice [default ú]: )Úprintr   r   ÚYELLOWÚDIMrË   ÚGREENr;  rc   r\   r¾   )	rµ   rý   rÅ  rÂ  rê  rÑ   rö   Úmarkerrb   s	   &&&&$    r   r  r  >  sý   € ô 
Œ%�$�u�g�¤§¡Ó
.Ô/Ü	Œ%Ð9¼6¿:¹:Ó
FÔGÜ˜eÖ$‰ˆß˜œÜ”%˜"˜X�[˜MÐ*¬F¯J©JÓ7Ô8Ø45´M”�z¤6§<¡<Ô0ÀzˆÜ��6�(˜!˜A �E "˜: RÔ(>¸uÓ(EÐ'FÐGÖHñ	 %ô
 
„GÜ
¤Ð(:¸8Àa½<¸.ÈÐ&LÌfÏjÉjÓ YÓ
Z€CØ
ŒjÓØÐØ’/ a¨3Ö&;´°U³Ô&;ˆ3ÐIÐ&;ÀÐIr   Úcancel_labelÚCancelc                ó„   € V ^8„  d   QhR\         R\        \         ,          R\        R\         R\        R\        R,          /# )r   rµ   rý   Údefault_indexrG  r™  r   N)rV   rþ   rW   r   )r   s   "r   r   r   P  sD   € ÷ ?ñ ?Üð?ÜœC•yð?Ü14ð?ÜKNð?äð?ä!$ t¥ñ?r   c               ó  a aa€ \        V4      V.,           o\        V4      oV3R lpV3R lp\        \        V\        S4      ^,
          4      \        S4      \	        S RRV4      YVVVV 3R lRTV'       d   \        S4      R7	      # RR7	      # )z¬Curses single-select menu -> selected index or None on cancel. With ``searchable``, ``/``
opens a type-to-filter prompt; the return value is always the original item index.c                 óV   <€ R V'       d   RMR  R SV,           2p\        WWTVR7       R# )rt  rÉ  rÇ   NrÊ  )r±   r«   rÑ   r›   r·   rÛ   Ú	all_itemss   &&&&& €r   rÌ  Ú'curses_single_select.<locals>._draw_rowX  s*   ø€ ØŸI‘5¨3Ð/¨q°¸1µ°Ð?ˆÜ˜ 4¸)×Dr   c                 ób   <€ V \         8X  d   VS8¼  d   R # T# V \        \        39   d   R # \        # r   )r{  rX  rW  r¬  )r’  r  Ú
cancel_idxs   &&€r   rÖ  Ú(curses_single_select.<locals>._on_action\  s2   ø€ Ø”ZÔØ! ZÔ/�4Ð;°VÐ;Ø”j¤-Ð0Ô0ÙÜˆr   zENTER confirmzESC/q cancelc                  ó   <€ \        SS S4      # r   )Ú_numbered_single_fallback)rM  rP  rµ   s   €€€r   r  Ú&curses_single_select.<locals>.<lambda>g  s   ø€ Ô2°5¸)ÀZÔPr   N)	r¶  r·  r´  rµ  r¸  r£  r¿  r™  rš  )rþ   r¾   rÁ  rð   rÜ  )	rµ   rý   rJ  rG  r™  rÌ  rÖ  rM  rP  s	   f&&$$  @@r   Úcurses_single_selectrU  P  s‚   ú€ ô
 �U“˜|˜nÕ,€IÜ�U“€JõEõô Ü˜=¬#¨i«.¸1Õ*<Ó=Ì#ÈiË.Ü" 5¨/¸>È:ÓVØÞPØ jß)3”d˜9“oô?ð ?ð :>ô?ð ?r   c          	      ól   € V ^8„  d   QhR\         R\        \         ,          R\        R\        R,          /# )r   rµ   rý   rP  r   NrM  )r   s   "r   r   r   l  s9   € ÷ \ñ \¤Sð \´´cµð \Ìð \ÔPSÐVZÕPZñ \r   c                ó*  € \        RV  R24       \        V^4       F  w  r4\        RV RV 24       K  	  \        4        \        R\        V4       R24      p\	        V\
        4      '       d&   ^ Tu;8:  d   \        \        V4      V4      8  d   V#  R# )z/Text-based numbered fallback for single-select.r>  Ú
rà  r@  z  Choice [1-rA  N)rB  rË   rc   r¾   r]   rW   rð   )rµ   rý   rP  rÑ   rö   rb   s   &&&   r   rS  rS  l  s‰   € ä	ˆD���rÐ
ÔÜ˜e QÖ'‰ˆÜ��1�#�R˜�wÐÖ ñ (ä	„GÜ
 ,¬s°5«z¨l¸#Ð >Ó
?€CÜ˜S¤#×&Ò&¨1°Ö+Q´c¼#¸e»*ÀjÓ6QÔ+Qˆ3Ð[Ð+QÐW[Ð[r   c                ó  € V ^8„  d   QhR\         R\        \         ,          R\        \        ,          R\        \        ,          R\        \
        \        \        ,          .\         3,          ,          R\        \        ,          /# )r   rµ   rý   rÅ  rÂ  rÃ  r   rÆ  )r   s   "r   r   r   v  s`   € ÷ ñ ÜðÜœC•yðÜ,/´­HðÜFIÌ#Åhðäœ¤#¤c¥( ¬S Õ1Õ2ðä>AÄ#½hñr   c           	     óÂ  € \        V4      p\        \        RV  2\        P                  4      4       \        \        R\        P
                  4      4        \        V4       FC  w  rgWe9   d   \        R\        P                  4      MRp\        RV RV^,           R RV 24       KE  	  V'       d	   V! V4      MR	p	V	'       d'   \        \        RV	 2\        P
                  4      4       \        4        \        \        R
\        P
                  4      4      p
V
\        J d   V# V
f   V# ^ T
u;8:  d   \        V4      8  d   M MVP                  V
04       \        4        EK  )z8Text-based toggle fallback for terminals without curses.r>  z&  Toggle by number, Enter to confirm.
u   [âœ“]z[ ]rà  rt  r?  r@  rŽ   z"  Toggle # (or Enter to confirm): )rF   rB  r   r   rC  rD  rË   rE  rc   r\   r¾   rÕ  )rµ   rý   rÅ  rÂ  rÃ  rË  rÑ   rö   rF  rÏ  rb   s   &&&&&      r   rÚ  rÚ  v  s  € ô �‹]€FÜ	Œ%�$�u�g�¤§¡Ó
.Ô/Ü	Œ%Ð9¼6¿:¹:Ó
FÔGØ
Ü! %Ö(‰HˆAØ56´[”U˜7¤F§L¡LÔ1ÀeˆFÜ�B�v�h˜a  A¥ b˜z¨¨E¨7Ð3Ö4ñ )÷ ,5‘i Ô'¸"ˆßÜ”%˜$˜{˜mÐ,¬f¯j©jÓ9Ô:ÜŒÜ#¤EÐ*NÔPV×PZÑPZÓ$[Ó\ˆØ”*ÓØ!Ð!ØŠ;ØˆMØ�Ö ”c˜%“j× Ø×.Ñ.°¨uÔ5Ü�r   c                ó¢   € V ^8„  d   Qh/ ^ \         9   d   \        \        R,          ,          ;R&   ^\         9   d   \        \        ,          ;R&   # )r   NrE   r„   )Ú__conditional_annotations__r   rC   r   )r   s   "r   r   r      sM   € ÷ Gñ G÷J4ò 4œ*Ô%:¸TÕ%AÕBñ 4ñKG÷N eÒ dœ
¤4Õ(Ñ dòOGr   ).zMenuNavigationStart | None)ÚupÚdownr8   Úselect)Útoggler7   Ú	interruptÚnone)r‚  r  r   )ir\  r-   Úrer0  Úcontextvarsr   r   Údataclassesr   Úenumr   Útypingr   r   r   r	   r
   r   r   Úhermes_cli.colorsr   r   rV   r  rŒ   r'   r!   r   r4   rC   rE   r„   rG   rL   rQ   rS   r\   rc   rY   r˜   r©   r²   rº   rÃ   rÓ   rÙ   rÝ   Ú	frozensetrâ   rç   rô   rû   r  r  r  r  r$  r-  r7  rv  rx  rz  r{  r|  rX  rW  rY  r=  r`   rK  rO  rV  r[  r^  rj  rk  rq  r;  r¬  r‘  r«  rŒ  r–  rÁ  rÝ  rá  rÜ  r  r	  rC  rD  rE  ÚREDr3  Úcompiler(  r%  rÏ   r6  r;  r  rU  rS  rÚ  r   )r\  s   @r   Ú<module>rl     s\  øðöGã 	Û 
ß )Ý !Ý ß H× HÑ Hç +ð �(˜5  c¨D¥j Õ1Õ2Õ2€	Ù‹X€
ñ �$Ô÷3ð 3ó ð3ô˜#˜tô ð !Ð!BÕCÐ ÙEOØ$¨dôF4Ð ó 4á+5Ð6TÐ^cÔ+dÐ Ó dõ1õ
*õ
ô˜$ô ñ
 ‹X€
õ2õ"Lõ6Uõ
õ2ðAÐWX÷ Aõ	õ2õ õcñ ˜7Ó#€õLõ%õ83õ"ð ÷ð ó ðõXõRõ
Iõõ2ð *HÑ &€ˆ�(˜JØ2YÑ /€
ˆJ˜ xõ4÷õ	+õJð
 �Z  Z°°ZÀÀZÐP€÷	_õ
ñ ˆƒHˆf‘c˜#“h ©¨C«°(¹CÀ»HÀhÑPSÐTWÓPXÐZbðd€õõ0ñ, 	‹€Ù‹H€	ñ ˜
 J°
¸MÈ8ÐTÓU€
õTõ0ð4nØTUðnàðnà(-ðnàRWðnð ðnð $(ônðb$%Ø[_ð$%à59÷$%õNõñ9=Ø[_ð9=à"ð9=à7<ð9=ð '+ð9=ð RV÷9=ð 9=õx90ðx ˜Ÿ™¨¨v¯z©z¸7ÀFÇLÁLÐRWÐY_×YcÑYcÐd€ð —
’
Ð5Ó6€õõ"õõcðJà)-÷Jñ$?ØQYð?à÷?ð ?õ8\÷ñ r   