
    <9ja                        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     R/media/conek/DATA/Code/OCR/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                J   |	| _         || _        || _        || _        || _        || _        || _        || _        d| _        d| _	        d | _
        || _        d | _        || _        t        j                  | |
|       t         | =          |r|| _	        t#        |      | _        y y )Nr    )stylemetadata)namer   _placeholderdefaultdefault_as_placeholderrequiredpasswordinline_heighttextvalidrequired_message_validation_message
_validatorr   __init__superlen_cursor_index)r   r   placeholderr%   r&   r'   r-   r(   r)   r#   r!   	validatorr   r"   	__class__s                 r   r0   zInput.__init__3   s      	
'&<#  	
 026 /8UX>DI!$UD r   c                |    | j                   r| j                   S | j                  r| j                  r| j                  S yNr    )r$   r&   r%   r   s    r   r4   zInput.placeholderZ   s3    $$$&&4<<<<r   c                P    | j                   r| j                   S | j                  sJ y N)r.   r,   r9   s    r   validation_messagezInput.validation_messaged   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   r2   r
   cursor_left)r   r?   left_offsets      r   cursor_offsetzInput.cursor_offsetm   sK    ;;aA;;4::djj/A-K$*:*:[*HIIr   c                     y)NTr   r9   s    r   should_show_cursorzInput.should_show_cursorx   s    r   c                $    | j                          y r;   )on_validater9   s    r   on_blurzInput.on_blur|   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/   pydanticrJ   r   errorsget)r   r   rJ   es       r   rG   zInput.on_validate   s    

  "DJ'+'<'<'X@XD$??0//6 $( 
 # "
 ,-88:a=+<+<UDW+X(s   B C/B<<Cc                >    | j                   xs | j                  xs dS r8   )r+   r%   r9   s    r   r   zInput.value   s    yy.DLL.B.r   c                |    ddl m}  || j                        }| g|_        |j	                          | j
                  S )Nr   )	Container)r!   )	containerrS   r!   elementsrunr   )r   rS   rT   s      r   askz	Input.ask   s0    (DJJ/	"V	zzr   )NNNTFNFFNNNN)r   r   r4   r   r%   r   r&   boolr'   rX   r-   r   r(   rX   r)   rX   r#   r   r!   zOptional[BaseStyle]r5   zOptional[Validator]r   r   r"   r   )r   str)r   r   )r   r
   )r   rX   )r   r   r   r   __annotations__r0   propertyr4   r<   rC   rE   rH   rG   r   rW   __classcell__)r6   s   @r   r   r   0   s.   E=  $%)!%'+*."%))-#%,%, #%, 	%,
 !%%, %, (%, %, %, %, #%, '%, %, %,N     J J  2 / /	r   r   N)
__future__r   typingr   r   r   r   _input_handlerr	   elementr
   r   styles.baser   r   r   r   r   r   <module>rb      s8    " 9 9 , *&   Fug ur   