
    bi]-                        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y)    )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<   y)Optionstrnamer   valueN)__name__
__module____qualname____annotations__     O/opt/aeropuerto/back/api/venv/lib/python3.12/site-packages/rich_toolkit/menu.pyr   r      s    
Ir"   r   c                  0    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d,d
       Zed-d       Zed-d       ZdZdZ	 	 	 d.dddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d/ fdZd,dZed0d       Zd1d2dZed3d       Zed4d       Zed4d       Zd5dZd5dZd6dZ d5dZ!d7dZ"d8dZ#ed-d       Z$d9d Z%d:d!Z&d;d"Z'd;d#Z(d< fd$Z)ed,d%       Z*d& Z+d' Z,ed4d(       Z-d=d)Z.ed>d*       Z/d4d+Z0 xZ1S )?Menujkhlu   ●u   ○u   ■u   □zFilter: c                ~    | j                   r| j                  r| j                  sy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.   s5     }}D$8$83t||$%Z00r"   c                J    | j                   r| j                  S | j                  S )z%Prefix for the active/checked option.)r,   checked_charcurrent_selection_charr0   s    r#   active_prefixzMenu.active_prefix5   s!     %)MMt  Rt7R7RRr"   c                J    | j                   r| j                  S | j                  S )z&Prefix for inactive/unchecked options.)r,   unchecked_charselection_charr0   s    r#   inactive_prefixzMenu.inactive_prefix:   s!     '+mmt""L9L9LLr"   u
     ↑ moreu
     ↓ moreNr   )stylecursor_offsetmax_visiblec                  |r|rt        d      t        j                  |      | _        || _        || _        || _        d| _        t               | _	        |	| _
        || _        t        |      D 
ci c]  \  }
}t        |      |
 c}}
| _        d| _        d | _        d| _        || _        |t'        | j(                        z   }t+        j,                  | ||	       t.        | Y          y c c}}
w )Nz'multiple and inline cannot both be Truer   r   r;   metadata)
ValueErrorr   from_markuplabelinliner-   r,   selectedsetr.   r@   _options	enumerateid_option_index_padding_bottomvalid_scroll_offset_max_visibler/   filter_promptr   __init__super)r1   rC   optionsrD   r-   r,   r;   r<   r=   r@   idxopt	__class__s               r#   rP   zMenu.__init__C   s     FGG%%e,
. !$ ;DW;MNxsCbgslN 
 $%+6%D,>,>(??UX> Os   2C,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getcharr-   LEFT_KEY	RIGHT_KEYDOWN_KEYUP_KEY	LEFT_KEYS
RIGHT_KEYS	DOWN_KEYSUP_KEYSrD   )r1   char	left_keys
right_keys	down_keysup_keys	next_keys	prev_keyss           r#   get_keyzMenu.get_keyl   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   )r-   rG   textlowerr1   options     r#   rR   zMenu.options   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      )rN   rD   r   r-   heightmax)r1   consolereserved_linesavailable_heights       r#   get_max_visiblezMenu.get_max_visible   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   )rz   r/   rR   rM   min)r1   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   rM   r0   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)rz   rM   r/   rR   r1   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   )rz   rE   rM   r   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   Nr   r0   s    r#   _reset_scrollzMenu._reset_scroll   s
    r"   c                2    | j                   t        |         S )z@Return the index of an option in _options using identity lookup.)rJ   rI   rp   s     r#   _get_option_indexzMenu._get_option_index   s    !!"V*--r"   c                    | j                   sy| j                  | j                   | j                           }| xj                  |hz  c_        y)z4Toggle the checked state of the current cursor item.N)rR   r   rE   r.   )r1   option_indexs     r#   _toggle_currentzMenu._toggle_current   s9    ||--dll4==.IJ&r"   c                V    | j                  | j                  |         | j                  v S )z+Check if a filtered-list option is checked.)r   rR   r.   )r1   filtered_indexs     r#   is_option_checkedzMenu.is_option_checked   s%    %%dll>&BCt||SSr"   c                <    | j                  |      | j                  v S )z8Check if an option is checked using its object identity.)r   r.   rp   s     r#   is_option_checked_by_refzMenu.is_option_checked_by_ref   s    %%f-==r"   c                      j                   r-dj                   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  B   K   | ]  }j                   |   d      ywr   N)rG   ).0ir1   s     r#   	<genexpr>z+Menu.result_display_name.<locals>.<genexpr>   s     T!T]]1-f5Ts   r   )r,   joinsortedr.   rR   rE   r0   s   `r#   result_display_namezMenu.result_display_name   sB     ==99Tvdll?STTT||DMM*622r"   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 )NrY   r   rZ   r   )rE   r/   rR   r   )r1   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                  j                  d             |S )N result)r;   )r   appendrC   r   rw   	get_style)r1   result_texts     r#   render_resultzMenu.render_result  s_    f4::&3$$,,((2 	 	

 r"   c                v    | j                   r| j                  n| j                  }| j                  r|d   g}||v S Nr   )rD   rb   rc   r-   r1   r   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   )rD   ra   rd   r-   r   s      r#   is_prev_keyzMenu.is_prev_key  s5    !%t~~$,,G9Dd{r"   c                >   d | j                   }| j                  r|dk(  r| j                          y | 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 )Nr   rY   rZ   r   c              3  8   K   | ]  \  }}|d    k(  r|  ywr   r!   )r   indexrq   current_selections      r#   r   z"Menu.handle_key.<locals>.<genexpr>5  s*      %vf~):: s   r   )rn   r,   r   r   r   r   rR   rE   rQ   
handle_keyrY   rH   r-   r   r   )r1   r   previous_filter_textmatching_indexr   rU   s       @r#   r   zMenu.handle_key!  s    +/#yy==SCZ  "C ""6*c"""6*||$(LL$?$G!Gs#!)24<<)@
 N +DM DII1E$E **, %Fr"   c                <    | j                   du r| j                  ryyy )NFz!Please select at least one optionzThis field is required)rL   r,   r0   s    r#   validation_messagezMenu.validation_messageD  s    ::}}:+r"   c                $    | j                          y N)on_validater0   s    r#   on_blurzMenu.on_blurM  s    r"   c                    | j                   rt        | j                        dkD  | _        y t        | j                        dkD  | _        y r   )r,   r/   r.   rL   rR   r0   s    r#   r   zMenu.on_validateP  s3    ==T\\*Q.DJT\\*Q.DJr"   c                    | j                   S r   )r-   r0   s    r#   should_show_cursorzMenu.should_show_cursorV  s    ###r"   c                :   ddl m}  || j                  | j                        }| g|_        |j                          | j                  r3t        | j                        D cg c]  }| j                  |   d    c}S | j                  | j                     d   S c c}w )Nr   )	Containerr?   r   )	containerr   r;   r@   elementsrunr,   r   r.   rG   rR   rE   )r1   r   r   r   s       r#   askzMenu.askZ  sy    (DJJG	"V	==7=dll7KL!DMM!$W-LL||DMM*733 Ms    Bc                d    d}t        | j                        | j                  z   }t        ||      S )N   )topleft)r/   rO   cursor_leftr   )r1   r   left_offsets      r#   r<   zMenu.cursor_offseth  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)rz   r/   rR   r   s     r#   _needs_scrollingzMenu._needs_scrollings  s-    **,4<< ;..r"   )returnzOptional[str])r   r   )FFF)rC   r   rR   List[Option[ReturnValue]]rD   boolr-   r   r,   r   r;   zOptional[BaseStyle]r<   intr=   Optional[int]r@   r   )r   r   r   )rw   zOptional[Console]r   r   )r   zTuple[int, int])r   r   )r   None)rq   Option[ReturnValue]r   r   )r   r   r   r   )rq   r   r   r   )r   zLiteral['next', 'prev']r   r   )r   r   )r   r   r   r   )r   r   r   r   )r   z%Union[ReturnValue, List[ReturnValue]])r   r   )2r   r   r   r   r_   rc   r`   rd   r]   ra   r^   rb   r5   r9   r4   r8   rO   propertyr2   r6   r:   MORE_ABOVE_INDICATORMORE_BELOW_INDICATORrP   rl   rR   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r<   r   __classcell__)rU   s   @r#   r%   r%   "   s   !**C0I&&,G!**C0I",,c2J"NLNM1 1 S S M M
 ('  %' &*%)'' +' 	'
 ' ' #' ' #' 'R6  (: 
 
 ' ' E EB .'T> 3 3)!-F  / $ $4 7 7/r"   r%   )
__future__r   typingr   r   r   r   r   r	   r
   r   r[   rich.consoler   r   	rich.textr   typing_extensionsr   r   r   _input_handlerr   elementr   r   styles.baser   r   r   r%   r!   r"   r#   <module>r      si    "	 	 	  0  5 5 , *&m$Y, 
V/7;!17 V/r"   