o
    1 i                     @  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   ^/home/app/PaddleOCR-VL-test/.venv_paddleocr/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d/d d!Z
d"d# Zd$d% Zed,d&d'Zd,d(d)Z  ZS )0InputNOptional[str]labelTFplaceholderdefaultdefault_as_placeholderboolrequiredrequired_messagepasswordinlinenamestyleOptional[BaseStyle]	validatorOptional[Validator]metadatar   c                   sl   |	| _ || _|| _|| _|| _|| _|| _|| _d| _d | _	|| _
d | _|| _tj| |
|d t   d S )N )r$   r(   )r#   r   _placeholderr   r   r   r!   r"   textvalidr    _validation_message
_validatorr
   __init__super)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r	| jS | jpdS Nr)   )r   r   r*   r   r   r   r   r   T   s   
zInput.placeholderc                 C  s   | j r| j S | jsJ d S N)r-   r,   r5   r   r   r   validation_message[   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   lenr	   Zcursor_left)r   r9   Zleft_offsetr   r   r   cursor_offsetd   s
   zInput.cursor_offsetc                 C  r   )NTr   r5   r   r   r   should_show_cursoro   s   zInput.should_show_cursorc                 C  s   |    d S r6   )on_validater5   r   r   r   on_blurs   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.   Zpydanticr@   r   errorsget)r   r   r@   er   r   r   r>   v   s"   


zInput.on_validatec                 C  s   | j p| jpdS r4   )r+   r   r5   r   r   r   r      s   zInput.valuec                 C  s.   ddl m} || jd}| g|_|  | jS )Nr   )	Container)r$   )	containerrF   r$   elementsrunr   )r   rF   rG   r   r   r   ask   s
   z	Input.ask)NNNTFNFFNNN)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   r3   )r   r   )r   r	   )r   r   )r   r   r   r   __annotations__r/   propertyr   r7   r<   r=   r?   r>   r   rJ   __classcell__r   r   r1   r   r   0   s6   
 !
r   N)
__future__r   typingr   r   r   r   Z_input_handlerr   elementr	   r
   Zstyles.baser   r   r   r   r   r   r   <module>   s    #