
    bi                        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e      Z G d	 d
ee      Zy)    )annotations)TYPE_CHECKINGAnyOptionalProtocol   )TextInputHandler)CursorOffsetElement)	BaseStylec                      e Zd ZdZddZy)	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())
    c                     y)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 )selfvalues     P/opt/aeropuerto/back/api/venv/lib/python3.12/site-packages/rich_toolkit/input.pyvalidate_pythonzValidator.validate_python!   s     	    N)r   r   returnr   )__name__
__module____qualname____doc__r   r   r   r   r   r      s    &r   r   c                       e Zd ZU dZded<   	 	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZedd       Zedd       Zedd       Z	edd       Z
d	 Zd
 Zedd       ZddZ xZS )InputNOptional[str]labelc                   |	| _         || _        || _        || _        || _        || _        || _        || _        d| _        d | _	        || _
        d | _        || _        t        j                  | |
|       t        | 9          y )N )stylemetadata)namer   _placeholderdefaultdefault_as_placeholderrequiredpasswordinlinetextvalidrequired_message_validation_message
_validatorr   __init__super)r   r   placeholderr%   r&   r'   r,   r(   r)   r#   r!   	validatorr"   	__class__s                r   r/   zInput.__init__3   s     	
'&<#  	
 026 /8UX>r   c                j    | j                   r| j                  r| j                  S | j                  xs dS Nr    )r&   r%   r$   r   s    r   r1   zInput.placeholderT   s,    &&4<<<<  &B&r   c                P    | j                   r| j                   S | j                  sJ y N)r-   r+   r6   s    r   validation_messagezInput.validation_message[   s&    ##+++zzzr   c                    | j                   rdnd}d}| j                   r$| j                  rt        | j                        dz   }t        || j                  |z         S )Nr      r   )topleft)r)   r   lenr
   cursor_left)r   r<   left_offsets      r   cursor_offsetzInput.cursor_offsetd   sK    ;;aA;;4::djj/A-K$*:*:[*HIIr   c                     y)NTr   r6   s    r   should_show_cursorzInput.should_show_cursoro   s    r   c                $    | j                          y r8   )on_validater6   s    r   on_blurzInput.on_blurs   s    r   c                   | j                   j                         }|s)| j                  rd| _        | j                  xs d| _        y | j                  r"ddlm} 	 | j                  j                  |       d | _        d| _        y # |$ r9}d| _        |j                         d   j                  dd      | _        Y d }~y d }~ww xY w)NFzThis field is requiredr   )ValidationErrormsgzValidation failedT)r   stripr'   r+   r,   r-   r.   pydanticrH   r   errorsget)r   r   rH   es       r   rE   zInput.on_validatev   s    

  "DJ'+'<'<'X@XD$??0//6 $( 
 # "
 ,-88:a=+<+<UDW+X(s   B C/B<<Cc                >    | j                   xs | j                  xs dS r5   )r*   r%   r6   s    r   r   zInput.value   s    yy.DLL.B.r   c                |    ddl m}  || j                        }| g|_        |j	                          | j
                  S )Nr   )	Container)r!   )	containerrQ   r!   elementsrunr   )r   rQ   rR   s      r   askz	Input.ask   s0    (DJJ/	"V	zzr   )NNNTFNFFNNN)r   r   r1   r   r%   r   r&   boolr'   rV   r,   r   r(   rV   r)   rV   r#   r   r!   zOptional[BaseStyle]r2   zOptional[Validator]r"   r   )r   str)r   r   )r   r
   )r   rV   )r   r   r   r   __annotations__r/   propertyr1   r9   rA   rC   rF   rE   r   rU   __classcell__)r3   s   @r   r   r   0   s!   E=  $%)!%'+*."%))- # 	
 !%  (    # ' B ' '   J J  2 / /	r   r   N)
__future__r   typingr   r   r   r   _input_handlerr	   elementr
   r   styles.baser   r   r   r   r   r   <module>r`      s8    " 9 9 , *&   Flg lr   