o
    [۷iH                     @  sv   d dl mZ d dlmZ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 G dd deZG d	d
 d
eeZdS )    )annotations)TYPE_CHECKINGAnyOptionalProtocol   )TextInputHandler)CursorOffsetElement)	BaseStylec                   @  s   e Zd ZdZdddZdS )		Validatora  Protocol for validators that can validate input values.

    Any object with a validate_python method can be used as a validator.
    This includes Pydantic's TypeAdapter or custom validators.

    Example with Pydantic TypeAdapter:
        >>> from pydantic import TypeAdapter
        >>> validator = TypeAdapter(int)
        >>> input_field = Input(validator=validator)

    Example with custom validator:
        >>> class MyValidator:
        ...     def validate_python(self, value):
        ...         if not value.startswith("x"):
        ...             raise ValueError("Must start with x")
        ...         return value
        >>> input_field = Input(validator=MyValidator())
    valuer   returnc                 C     dS )zValidate a Python value and return the validated result.

        Args:
            value: The value to validate

        Returns:
            The validated value

        Raises:
            ValidationError: If validation fails
        N )selfr   r   r   H/home/ubuntu/vllm_env/lib/python3.10/site-packages/rich_toolkit/input.pyvalidate_python!   s   zValidator.validate_pythonN)r   r   r   r   )__name__
__module____qualname____doc__r   r   r   r   r   r      s    r   c                      s   e Zd ZU dZded< 												d+d, fddZed-ddZed.ddZed/dd Z	ed0d!d"Z
d#d$ Zd%d& Zed-d'd(Zd-d)d*Z  ZS )1InputNOptional[str]labelTFplaceholderdefaultdefault_as_placeholderboolrequiredrequired_messagepasswordinlinenamestyleOptional[BaseStyle]	validatorOptional[Validator]r   metadatar   c                   s   |	| _ || _|| _|| _|| _|| _|| _|| _d| _d | _	|| _
d | _|| _tj| |
|d t   |r@|| _t|| _d S d S )N )r$   r(   )r#   r   _placeholderr   r   r   r!   r"   textvalidr    _validation_message
_validatorr
   __init__superlen_cursor_index)r   r   r   r   r   r   r    r!   r"   r#   r$   r&   r   r(   	__class__r   r   r/   3   s&   
zInput.__init__r   strc                 C  s"   | j r| j S | jr| jr| jS dS Nr)   )r*   r   r   r   r   r   r   r   Y   s
   zInput.placeholderc                 C  s   | j r| j S | jsJ d S N)r-   r,   r7   r   r   r   validation_messagec   s   
zInput.validation_messager	   c                 C  s>   | j rdnd}d}| j r| jrt| jd }t|| j| dS )Nr      r   )topleft)r"   r   r1   r	   cursor_left)r   r;   left_offsetr   r   r   cursor_offsetl   s
   zInput.cursor_offsetc                 C  r   )NTr   r7   r   r   r   should_show_cursorw   s   zInput.should_show_cursorc                 C  s   |    d S r8   )on_validater7   r   r   r   on_blur{   s   zInput.on_blurc              
   C  s   | j  }|s| jrd| _| jpd| _d S | jrHddlm} z| j	| W n! |yG } zd| _|
 d dd| _W Y d }~d S d }~ww d | _d| _d S )NFzThis field is requiredr   )ValidationErrormsgzValidation failedT)r   stripr   r,   r    r-   r.   pydanticrC   r   errorsget)r   r   rC   er   r   r   rA   ~   s"   


zInput.on_validatec                 C  s   | j p| jpdS r6   )r+   r   r7   r   r   r   r      s   zInput.valuec                 C  s.   ddl m} || jd}| g|_|  | jS )Nr   )	Container)r$   )	containerrJ   r$   elementsrunr   )r   rJ   rK   r   r   r   ask   s
   z	Input.ask)NNNTFNFFNNNN)r   r   r   r   r   r   r   r   r   r   r    r   r!   r   r"   r   r#   r   r$   r%   r&   r'   r   r   r(   r   )r   r5   )r   r   )r   r	   )r   r   )r   r   r   r   __annotations__r/   propertyr   r9   r?   r@   rB   rA   r   rN   __classcell__r   r   r3   r   r   0   s8   
 &	
r   N)
__future__r   typingr   r   r   r   _input_handlerr   elementr	   r
   styles.baser   r   r   r   r   r   r   <module>   s    #