{"version":3,"file":"InputPassword.cjs","sources":["../../../../src/lib/InputPassword/InputPassword.tsx"],"sourcesContent":["import type {ChangeEvent} from 'react';\nimport {useMemo} from 'react';\nimport {useState} from 'react';\nimport {forwardRef, useCallback} from 'react';\nimport classNames from 'classnames';\n\nimport {IconLock, IconLockOpen} from '@/internal/Icons';\nimport type {DataAttributes, LibraryProps} from '@/internal/LibraryAPI';\nimport type {NativePropsTextual, CallbackPropsTextual, ValidationProps} from '@/internal/inputs';\nimport {\n    ValidationState,\n    useValidationIcon,\n    useValidation,\n    useRevalidateOnFormChange,\n    useExternalValidation,\n} from '@/internal/inputs';\nimport {useInternalId} from '@/internal/hooks/useInternalId.ts';\nimport {useInternalRef} from '@/internal/hooks/useInternalRef.ts';\n\nimport classes from './InputPassword.module.css';\n\nexport type Props = DataAttributes &\n    LibraryProps &\n    NativePropsTextual &\n    CallbackPropsTextual &\n    ValidationProps;\n\nenum InputType {\n    password = 'password',\n    text = 'text',\n}\n\nexport const InputPassword = forwardRef<HTMLInputElement, Props>(\n    (\n        {\n            className,\n            placeholder = '',\n            disabled,\n            value,\n            onChange = () => {},\n            onFocus = () => {},\n            onBlur = () => {},\n            onKeyDown = () => {},\n            onKeyUp = () => {},\n            defaultValue,\n            id,\n            readOnly,\n            size = 16,\n            revalidateOnFormChange,\n            validation,\n            errorMessage,\n            displayIcon = true,\n            ...nativeProps\n        },\n        ref\n    ) => {\n        const hasValidators =\n            Boolean(validation) ||\n            Boolean(nativeProps.required) ||\n            typeof nativeProps.maxLength === 'number' ||\n            typeof nativeProps.minLength === 'number' ||\n            typeof nativeProps.pattern === 'string';\n\n        const {validateTextual, validity, setValidity} = useValidation({validation, hasValidators});\n\n        const inputRef = useInternalRef(ref);\n        useRevalidateOnFormChange(inputRef, validateTextual, revalidateOnFormChange);\n        useExternalValidation({errorMessage, inputRef, setValidity, validation});\n\n        const ValidationIcon = useValidationIcon(validity);\n        const handleChange = useCallback(\n            (event: ChangeEvent<HTMLInputElement>) => {\n                onChange(event);\n            },\n            [onChange]\n        );\n\n        const handleInvalid = useCallback(() => {\n            setValidity(ValidationState.error);\n        }, [setValidity]);\n\n        const inputId = useInternalId(id);\n\n        const handleSelect = useCallback(\n            (event: ChangeEvent<HTMLInputElement>) => {\n                readOnly && event.target.select();\n            },\n            [readOnly]\n        );\n\n        const [type, setType] = useState<keyof typeof InputType>(InputType.password);\n\n        const Icon = useMemo(\n            () =>\n                ({\n                    [InputType.text]: IconLockOpen,\n                    [InputType.password]: IconLock,\n                })[type],\n            [type]\n        );\n\n        const handleIconClick = useCallback(() => {\n            type === InputType.password && setType(InputType.text);\n            type === InputType.text && setType(InputType.password);\n        }, [type, setType]);\n\n        return (\n            <div\n                className={classNames(\n                    classes.wrapper,\n                    {[classes.withValidationIcon]: displayIcon},\n                    className\n                )}>\n                <label\n                    tabIndex={-1}\n                    onClick={handleIconClick}\n                    className={classes.prefix}\n                    htmlFor={inputId}>\n                    <Icon />\n                </label>\n                <input\n                    {...nativeProps}\n                    size={size}\n                    id={inputId}\n                    readOnly={readOnly}\n                    placeholder={placeholder}\n                    className={classes.input}\n                    ref={inputRef}\n                    disabled={disabled}\n                    type={type}\n                    value={value}\n                    defaultValue={defaultValue}\n                    onChange={handleChange}\n                    onBlur={onBlur}\n                    onFocus={onFocus}\n                    onKeyUp={onKeyUp}\n                    onKeyDown={onKeyDown}\n                    onInvalid={handleInvalid}\n                    onInput={validateTextual}\n                    onSelect={handleSelect}\n                />\n                {displayIcon && validity && <ValidationIcon />}\n            </div>\n        );\n    }\n);\n\nInputPassword.displayName = 'InputPassword';\n"],"names":["InputPassword","forwardRef","className","placeholder","disabled","value","onChange","onFocus","onBlur","onKeyDown","onKeyUp","defaultValue","id","readOnly","size","revalidateOnFormChange","validation","errorMessage","displayIcon","nativeProps","ref","hasValidators","validateTextual","validity","setValidity","useValidation","inputRef","useInternalRef","useRevalidateOnFormChange","useExternalValidation","ValidationIcon","useValidationIcon","handleChange","useCallback","event","handleInvalid","ValidationState","inputId","useInternalId","handleSelect","type","setType","useState","Icon","useMemo","IconLockOpen","IconLock","handleIconClick","jsxs","classNames","classes","jsx"],"mappings":"usBAgCaA,EAAgBC,EAAAA,WACzB,CACI,CACI,UAAAC,EACA,YAAAC,EAAc,GACd,SAAAC,EACA,MAAAC,EACA,SAAAC,EAAW,IAAM,CAAC,EAClB,QAAAC,EAAU,IAAM,CAAC,EACjB,OAAAC,EAAS,IAAM,CAAC,EAChB,UAAAC,EAAY,IAAM,CAAC,EACnB,QAAAC,EAAU,IAAM,CAAC,EACjB,aAAAC,EACA,GAAAC,EACA,SAAAC,EACA,KAAAC,EAAO,GACP,uBAAAC,EACA,WAAAC,EACA,aAAAC,EACA,YAAAC,EAAc,GACd,GAAGC,CAAA,EAEPC,IACC,CACD,MAAMC,EACF,EAAQL,GACR,EAAQG,EAAY,UACpB,OAAOA,EAAY,WAAc,UACjC,OAAOA,EAAY,WAAc,UACjC,OAAOA,EAAY,SAAY,SAE7B,CAAC,gBAAAG,EAAiB,SAAAC,EAAU,YAAAC,CAAA,EAAeC,EAAAA,cAAc,CAAC,WAAAT,EAAY,cAAAK,EAAc,EAEpFK,EAAWC,EAAAA,eAAeP,CAAG,EACnCQ,4BAA0BF,EAAUJ,EAAiBP,CAAsB,EAC3Ec,EAAAA,sBAAsB,CAAC,aAAAZ,EAAc,SAAAS,EAAU,YAAAF,EAAa,WAAAR,EAAW,EAEvE,MAAMc,EAAiBC,EAAAA,kBAAkBR,CAAQ,EAC3CS,EAAeC,EAAAA,YAChBC,GAAyC,CACtC5B,EAAS4B,CAAK,CAClB,EACA,CAAC5B,CAAQ,CAAA,EAGP6B,EAAgBF,EAAAA,YAAY,IAAM,CACpCT,EAAYY,EAAAA,gBAAgB,KAAK,CACrC,EAAG,CAACZ,CAAW,CAAC,EAEVa,EAAUC,EAAAA,cAAc1B,CAAE,EAE1B2B,EAAeN,EAAAA,YAChBC,GAAyC,CACtCrB,GAAYqB,EAAM,OAAO,OAAA,CAC7B,EACA,CAACrB,CAAQ,CAAA,EAGP,CAAC2B,EAAMC,CAAO,EAAIC,EAAAA,SAAiC,UAAA,EAEnDC,EAAOC,EAAAA,QACT,KACK,CACI,KAAiBC,EAAAA,aACjB,SAAqBC,EAAAA,QAAA,GACvBN,CAAI,EACX,CAACA,CAAI,CAAA,EAGHO,EAAkBd,EAAAA,YAAY,IAAM,CACtCO,IAAS,YAAsBC,EAAQ,MAAA,EACvCD,IAAS,QAAkBC,EAAQ,UAAA,CACvC,EAAG,CAACD,EAAMC,CAAO,CAAC,EAElB,OACIO,EAAAA,KAAC,MAAA,CACG,UAAWC,EACPC,EAAAA,QAAQ,QACR,CAAC,CAACA,EAAAA,QAAQ,kBAAkB,EAAGhC,CAAA,EAC/BhB,CAAA,EAEJ,SAAA,CAAAiD,EAAAA,IAAC,QAAA,CACG,SAAU,GACV,QAASJ,EACT,UAAWG,EAAAA,QAAQ,OACnB,QAASb,EACT,eAACM,EAAA,CAAA,CAAK,CAAA,CAAA,EAEVQ,EAAAA,IAAC,QAAA,CACI,GAAGhC,EACJ,KAAAL,EACA,GAAIuB,EACJ,SAAAxB,EACA,YAAAV,EACA,UAAW+C,EAAAA,QAAQ,MACnB,IAAKxB,EACL,SAAAtB,EACA,KAAAoC,EACA,MAAAnC,EACA,aAAAM,EACA,SAAUqB,EACV,OAAAxB,EACA,QAAAD,EACA,QAAAG,EACA,UAAAD,EACA,UAAW0B,EACX,QAASb,EACT,SAAUiB,CAAA,CAAA,EAEbrB,GAAeK,GAAY4B,MAACrB,EAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAGxD,CACJ,EAEA9B,EAAc,YAAc"}