o
    1 i-                     @  s   d dl mZ d dlmZmZmZmZmZ d dlZd dl	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rDdd
lmZ edZG dd deee ZG dd dee eeZdS )    )annotations)TYPE_CHECKINGGenericListOptionalTypeVarN)RenderableType)Text)AnyLiteral	TypedDict   )TextInputHandler)CursorOffsetElement)	BaseStyleReturnValuec                   @  s   e Zd ZU ded< ded< dS )Optionstrnamer   valueN)__name__
__module____qualname____annotations__ r   r   ]/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/rich_toolkit/menu.pyr      s   
 r   c                      s   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?d	d
dd@ fddZdAddZedBdd ZdCd$d%ZdDd'd(ZdEd)d*ZdEd+d,ZdF fd-d.ZdGd/d0ZedAd1d2Zd3d4 Zd5d6 ZedGd7d8ZdHd:d;ZedId=d>Z  ZS )JMenujkhlu   ●u   ○zFilter: FNr   )stylecursor_offsetlabelr   optionsList[Option[ReturnValue]]inlineboolallow_filteringr"   Optional[BaseStyle]r#   intmetadatar
   c                  sb   t || _|| _|| _d| _|| _|| _d| _d | _	|t
| j }tj| ||d t   d S )Nr   r   r"   r,   )r	   from_markupr$   r'   r)   selectedr,   _optionsZ_padding_bottomvalidlenfilter_promptr   __init__super)selfr$   r%   r'   r)   r"   r#   r,   	__class__r   r   r4   #   s   zMenu.__init__returnOptional[str]c                 C  s   t  }|dkr
dS | jr"| jg| jgg\}}| jg| jgg\}}n| j| j}}| j	| j
}}| jr7||fn||f\}}||v rCdS ||v rIdS | jrN|S d S )NZenternextprev)clickZgetcharr)   LEFT_KEY	RIGHT_KEYDOWN_KEYUP_KEY	LEFT_KEYS
RIGHT_KEYS	DOWN_KEYSUP_KEYSr'   )r6   charZ	left_keysZ
right_keysZ	down_keysZup_keysZ	next_keysZ	prev_keysr   r   r   get_key@   s"   zMenu.get_keyc                   s     j r fdd jD S  jS )Nc                   s&   g | ]} j  |d   v r|qS )r   )textlower).0optionr6   r   r   
<listcomp>^   s
    z Menu.options.<locals>.<listcomp>)r)   r0   rM   r   rM   r   r%   [   s
   
zMenu.optionskeyLiteral['next', 'prev']Nonec                 C  sf   |dkr|  j d7  _ n|dkr|  j d8  _ | j dk r$t| jd | _ | j t| jkr1d| _ d S d S )Nr<   r   r=   r   )r/   r2   r%   )r6   rO   r   r   r   _update_selectionf   s   

zMenu._update_selectionr   c                 C  sB   t  }|| j |d |j| j| j d | jdd |S )N r   result)r"   )r	   appendr$   r%   r/   console	get_style)r6   Zresult_textr   r   r   render_resultr   s   

zMenu.render_resultc                 C  *   | j r| jn| j}| jr|d g}||v S Nr   )r'   rD   rE   r)   r6   rO   keysr   r   r   is_next_key~      
zMenu.is_next_keyc                 C  rY   rZ   )r'   rC   rF   r)   r[   r   r   r   is_prev_key   r^   zMenu.is_prev_keyc                   s   d  |  |r| d n| |r| d n| jr#| j| j d  t |  r?t fddt| jD d}|| _d S d S )Nr<   r=   r   c                 3  s$    | ]\}}|d   kr|V  qdS )r   Nr   )rK   indexrL   Zcurrent_selectionr   r   	<genexpr>   s    z"Menu.handle_key.<locals>.<genexpr>r   )	r]   rR   r_   r%   r/   r5   
handle_keyr<   	enumerate)r6   rO   Zmatching_indexr7   ra   r   rc      s"   



	zMenu.handle_keyc                 C  s"   | j r| jrt| jdkrdS dS )Nr   FT)r)   rI   r2   r%   rM   r   r   r   _handle_enter   s   zMenu._handle_enterc                 C  s   | j du rdS d S )NFzThis field is required)r1   rM   r   r   r   validation_message   s   
zMenu.validation_messagec                 C  s   |    d S N)on_validaterM   r   r   r   on_blur   s   zMenu.on_blurc                 C  s   t | jdk| _d S rZ   )r2   r%   r1   rM   r   r   r   rh      s   zMenu.on_validatec                 C  s   | j S rg   )r)   rM   r   r   r   should_show_cursor   s   zMenu.should_show_cursorr   c                 C  s<   ddl m} || j| jd}| g|_|  | j| j d S )Nr   )	Containerr-   r   )	containerrk   r"   r,   elementsrunr%   r/   )r6   rk   rl   r   r   r   ask   s
   zMenu.askr   c                 C  s    d}t | j| j }t||dS )N   )topleft)r2   r3   Zcursor_leftr   )r6   rq   Zleft_offsetr   r   r   r#      s   zMenu.cursor_offset)FF)r$   r   r%   r&   r'   r(   r)   r(   r"   r*   r#   r+   r,   r
   )r9   r:   )r9   r&   )rO   rP   r9   rQ   )r9   r   )rO   r   r9   r(   )rO   r   r9   rQ   )r9   r(   )r9   r   )r9   r   ) r   r   r   r   rA   rE   rB   rF   r?   rC   r@   rD   Zcurrent_selection_charZselection_charr3   r4   rH   propertyr%   rR   rX   r]   r_   rc   re   rf   ri   rh   rj   ro   r#   __classcell__r   r   r7   r   r      s@    











r   )
__future__r   typingr   r   r   r   r   r>   Zrich.consoler   Z	rich.textr	   Ztyping_extensionsr
   r   r   Z_input_handlerr   elementr   r   Zstyles.baser   r   r   r   r   r   r   r   <module>   s    