o
    Þ­jH  ã                   @  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 )zíValidate 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   úO/var/www/html/CropPilot/venv/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    #