
    [Fi#                        d dl mZ d dl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y)    )annotations)TYPE_CHECKINGGenericListOptionalTupleTypeVarN)ConsoleRenderableType)Text)AnyLiteral	TypedDict   )TextInputHandler)CursorOffsetElement)	BaseStyleReturnValuec                  "    e Zd ZU ded<   ded<   y)Optionstrnamer   valueN)__name__
__module____qualname____annotations__     c/var/www/html/BankruptcyAI-uat/bankruptcy-ai/venv/lib/python3.12/site-packages/rich_toolkit/menu.pyr   r      s    
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	 	 d#d
dd
d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d$ fdZd%dZed&d       Zd'd(dZed)d       Zed*d       Zed*d       Zd+dZd+dZd,dZd-dZd.dZd.dZd/ fdZd*dZ ed%d       Z!d Z"d Z#ed*d       Z$d0d Z%ed1d!       Z&d*d"Z' xZ(S )2Menujkhlu   ●u   ○zFilter: u
     ↑ moreu
     ↓ moreNr   )stylecursor_offsetmax_visiblec               4   t        j                  |      | _        || _        || _        d| _        || _        || _        d| _        d | _	        d| _
        || _        |t        | j                        z   }t        j                  | ||       t         	| =          y )Nr   r   r(   metadata)r   from_markuplabelinlineallow_filteringselectedr-   _options_padding_bottomvalid_scroll_offset_max_visiblelenfilter_promptr   __init__super)
selfr/   optionsr0   r1   r(   r)   r*   r-   	__class__s
            r!   r:   zMenu.__init__'   s     %%e,
.  
 $%+6%D,>,>(??UX>r    c                   t        j                         }|dk(  ry| j                  r;| j                  g| j                  gg\  }}| j
                  g| j                  gg\  }}n0| j                  | j                  }}| j                  | j                  }}| j                  r||fn||f\  }}||v ry||v ry| j                  r|S y )Nenternextprev)clickgetcharr1   LEFT_KEY	RIGHT_KEYDOWN_KEYUP_KEY	LEFT_KEYS
RIGHT_KEYS	DOWN_KEYSUP_KEYSr0   )r<   char	left_keys
right_keys	down_keysup_keys	next_keys	prev_keyss           r!   get_keyzMenu.get_keyI   s    }}4<&*mm_t~~6F$G!Iz#'==/DKK=!AIw$(NNDOOzI!%wI (,{{Z#G8L 		9 99Kr    c                    | j                   rG| j                  D cg c]1  }| j                  j                         |d   j                         v r|3 c}S | j                  S c c}w )Nr   )r1   r3   textlower)r<   options     r!   r=   zMenu.optionsd   s]     #mm99??$v(<(<(>>   }}s   6A c                    | j                   | j                   S | j                  ry|
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      )r7   r0   r
   r1   heightmax)r<   consolereserved_linesavailable_heights       r!   get_max_visiblezMenu.get_max_visibleo   si     ($$$;;?iG aN">>N:1&''r    c                    | j                         }t        | j                        }|||k  rd|fS | j                  }t	        ||z   |      }||fS )z1Returns (start, end) indices for visible options.r   )rb   r8   r=   r6   min)r<   r*   total_optionsstartends        r!   visible_options_rangezMenu.visible_options_range   s^     **,DLL)-;">}%%##%+%}5s|r    c                     | j                   dkD  S )z9Check if there are more options above the visible window.r   r6   r<   s    r!   has_more_abovezMenu.has_more_above   s     ""Q&&r    c                r    | j                         }|y| j                  |z   t        | j                        k  S )z9Check if there are more options below the visible window.F)rb   r6   r8   r=   r<   r*   s     r!   has_more_belowzMenu.has_more_below   s:     **,""[03t||3DDDr    c                    | j                         }|y| j                  | j                  k  r| j                  | _        y| j                  | j                  |z   k\  r| j                  |z
  dz   | _        yy)z<Adjust scroll offset to ensure the selected item is visible.Nr   )rb   r2   r6   rn   s     r!   _ensure_selection_visiblezMenu._ensure_selection_visible   sn    **, ==4..."&--D ]]d11K??"&--+"="AD @r    c                    d| _         y)z/Reset scroll offset (used when filter changes).r   Nrj   rk   s    r!   _reset_scrollzMenu._reset_scroll   s
    r    c                8   |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| _         | j                          y )NrB   r   rC   r   )r2   r8   r=   rq   )r<   keys     r!   _update_selectionzMenu._update_selection   sw    &=MMQMF]MMQM==1-1DM==C--DM 	&&(r    c                    t               }|j                  | j                         |j                  d       |j                  | j                  | j                     d   | j
                  j                  d             |S )N r   result)r(   )r   appendr/   r=   r2   r_   	get_style)r<   result_texts     r!   render_resultzMenu.render_result   sk    f4::&3LL'/,,((2 	 	

 r    c                v    | j                   r| j                  n| j                  }| j                  r|d   g}||v S Nr   )r0   rK   rL   r1   r<   ru   keyss      r!   is_next_keyzMenu.is_next_key   s5    "&++t4>>G9Dd{r    c                v    | j                   r| j                  n| j                  }| j                  r|d   g}||v S r   )r0   rJ   rM   r1   r   s      r!   is_prev_keyzMenu.is_prev_key   s5    !%t~~$,,G9Dd{r    c                   d | j                   }| j                  |      r| j                  d       nZ| j                  |      r| j                  d       n7| j                  r| j                  | j
                     d   t        |   |       r/t        fdt        | j                        D        d      }|| _        | j                  r1| j                   |k7  r!| j                          | j                          y y y )NrB   rC   r   c              3  8   K   | ]  \  }}|d    k(  r|  yw)r   Nr   ).0indexrY   current_selections      r!   	<genexpr>z"Menu.handle_key.<locals>.<genexpr>   s*      %vf~):: s   r   )rW   r   rv   r   r=   r2   r;   
handle_keyrB   	enumerater1   rs   rq   )r<   ru   previous_filter_textmatching_indexr   r>   s       @r!   r   zMenu.handle_key   s    +/#yyC ""6*c"""6*||$(LL$?$G!Gs#!)24<<)@
 N +DM DII1E$E **, %Fr    c                f    | j                   r%| j                  rt        | j                        dk(  ryy)Nr   FT)r1   rW   r8   r=   rk   s    r!   _handle_enterzMenu._handle_enter  s'    DII#dll2Cq2Hr    c                "    | j                   du ryy )NFzThis field is required)r5   rk   s    r!   validation_messagezMenu.validation_message  s    ::+r    c                $    | j                          y N)on_validaterk   s    r!   on_blurzMenu.on_blur  s    r    c                >    t        | j                        dkD  | _        y r   )r8   r=   r5   rk   s    r!   r   zMenu.on_validate  s    &*
r    c                    | j                   S r   )r1   rk   s    r!   should_show_cursorzMenu.should_show_cursor  s    ###r    c                    ddl m}  || j                  | j                        }| g|_        |j                          | j                  | j                     d   S )Nr   )	Containerr,   r   )	containerr   r(   r-   elementsrunr=   r2   )r<   r   r   s      r!   askzMenu.ask  sD    (DJJG	"V	||DMM*733r    c                d    d}t        | j                        | j                  z   }t        ||      S )N   )topleft)r8   r9   cursor_leftr   )r<   r   left_offsets      r!   r)   zMenu.cursor_offset$  s1    
 $,,-0@0@@+66r    c                X    | j                         }|yt        | j                        |kD  S )zBCheck if scrolling is needed (more options than can be displayed).F)rb   r8   r=   rn   s     r!   _needs_scrollingzMenu._needs_scrolling/  s-    **,4<< ;..r    )FF)r/   r   r=   List[Option[ReturnValue]]r0   boolr1   r   r(   zOptional[BaseStyle]r)   intr*   Optional[int]r-   r   )returnzOptional[str])r   r   r   )r_   zOptional[Console]r   r   )r   zTuple[int, int])r   r   )r   None)ru   zLiteral['next', 'prev']r   r   )r   r   )ru   r   r   r   )ru   r   r   r   )r   r   )r   r   ))r   r   r   r   rH   rL   rI   rM   rF   rJ   rG   rK   current_selection_charselection_charr9   MORE_ABOVE_INDICATORMORE_BELOW_INDICATORr:   rU   propertyr=   rb   rh   rl   ro   rq   rs   rv   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M ('  %  &*%)   +  	 
   #    #   D6  (: 
 
 ' ' E EB )
->  + $ $	4 7 7/r    r#   )
__future__r   typingr   r   r   r   r   r	   rD   rich.consoler
   r   	rich.textr   typing_extensionsr   r   r   _input_handlerr   elementr   r   styles.baser   r   r   r#   r   r    r!   <module>r      s^    " I I  0  5 5 , *&m$Y, 
[/7;!17 [/r    