o
    !h-                     @  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   S/var/www/html/pro-man-master/venv/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,   _options_padding_bottomvalidlenfilter_promptr   __init__super)selfr$   r%   r'   r)   r"   r#   r,   	__class__r   r   r5   #   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enternextprev)clickgetcharr)   LEFT_KEY	RIGHT_KEYDOWN_KEYUP_KEY	LEFT_KEYS
RIGHT_KEYS	DOWN_KEYSUP_KEYSr'   )r7   char	left_keys
right_keys	down_keysup_keys	next_keys	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r7   r   r   
<listcomp>^   s
    z Menu.options.<locals>.<listcomp>)r)   r0   rV   r   rV   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/   r3   r%   )r7   rX   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)r7   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'   rG   rH   r)   r7   rX   keysr   r   r   is_next_key~      
zMenu.is_next_keyc                 C  rc   rd   )r'   rF   rI   r)   re   r   r   r   is_prev_key   rh   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   )rT   indexrU   current_selectionr   r   	<genexpr>   s    z"Menu.handle_key.<locals>.<genexpr>r   )	rg   r[   ri   r%   r/   r6   
handle_keyr>   	enumerate)r7   rX   matching_indexr8   rk   r   rn      s"   



	zMenu.handle_keyc                 C  s"   | j r| jrt| jdkrdS dS )Nr   FT)r)   rR   r3   r%   rV   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)r2   rV   r   r   r   validation_message   s   
zMenu.validation_messagec                 C  s   |    d S N)on_validaterV   r   r   r   on_blur   s   zMenu.on_blurc                 C  s   t | jdk| _d S rd   )r3   r%   r2   rV   r   r   r   rt      s   zMenu.on_validatec                 C  s   | j S rs   )r)   rV   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   )	containerrw   r"   r,   elementsrunr%   r/   )r7   rw   rx   r   r   r   ask   s
   zMenu.askr   c                 C  s    d}t | j| j }t||dS )N   )topleft)r3   r4   cursor_leftr   )r7   r}   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
   )r:   r;   )r:   r&   )rX   rY   r:   rZ   )r:   r   )rX   r   r:   r(   )rX   r   r:   rZ   )r:   r(   )r:   r   )r:   r   ) r   r   r   r   rD   rH   rE   rI   rB   rF   rC   rG   current_selection_charselection_charr4   r5   rQ   propertyr%   r[   rb   rg   ri   rn   rq   rr   ru   rt   rv   r{   r#   __classcell__r   r   r8   r   r      s@    







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