{"version":3,"file":"useTextfield.hook.cjs","sources":["../../../../../src/components/forms/text-field/hooks/useTextfield.hook.tsx"],"sourcesContent":["import { type FocusEventHandler, type MouseEventHandler, useCallback, useId, useRef, useState } from 'react'\r\nimport type { TextFieldProps } from '@components/forms/text-field/types/TextField.props.ts'\r\nimport type { UseTextFieldReturn } from '@components/forms/text-field/hooks/types'\r\n\r\nexport const useTextField = (\r\n    props: TextFieldProps & {\r\n        type?: string\r\n        onMouseDown?: MouseEventHandler<HTMLInputElement>\r\n        onFocus?: FocusEventHandler<HTMLInputElement>\r\n        onBlur?: FocusEventHandler<HTMLInputElement>\r\n    }\r\n): UseTextFieldReturn => {\r\n    const {\r\n        label,\r\n        error,\r\n        startIcon,\r\n        endAction,\r\n        type,\r\n        onMouseDown,\r\n        onFocus,\r\n        onBlur,\r\n        id\r\n    } = props\r\n\r\n    const generatedId = useId()\r\n    const inputId = id ?? (label ? generatedId : undefined)\r\n    const helperId = `${generatedId}-helper`\r\n    const hasError = Boolean(error)\r\n    const isPassword = type === 'password'\r\n\r\n    const [showPassword, setShowPassword] = useState(false)\r\n    const pointerDownRef = useRef(false)\r\n\r\n    const handleMouseDown = useCallback(\r\n        (e: React.MouseEvent<HTMLInputElement>) => {\r\n            pointerDownRef.current = true\r\n            onMouseDown?.(e)\r\n        },\r\n        [onMouseDown],\r\n    )\r\n\r\n    const handleFocus = useCallback(\r\n        (e: React.FocusEvent<HTMLInputElement>) => {\r\n            if (pointerDownRef.current) {\r\n                e.currentTarget.setAttribute('data-mouse-focus', '')\r\n                pointerDownRef.current = false\r\n            }\r\n            onFocus?.(e)\r\n        },\r\n        [onFocus],\r\n    )\r\n\r\n    const handleBlur = useCallback(\r\n        (e: React.FocusEvent<HTMLInputElement>) => {\r\n            pointerDownRef.current = false\r\n            e.currentTarget.removeAttribute('data-mouse-focus')\r\n            onBlur?.(e)\r\n        },\r\n        [onBlur],\r\n    )\r\n\r\n    const hasStartIcon = Boolean(startIcon)\r\n    const hasEndAction = isPassword || Boolean(endAction)\r\n    const resolvedType = isPassword ? (showPassword ? 'text' : 'password') : type\r\n\r\n    return {\r\n        inputId,\r\n        helperId,\r\n        hasError,\r\n        isPassword,\r\n        showPassword,\r\n        setShowPassword,\r\n        handleMouseDown,\r\n        handleFocus,\r\n        handleBlur,\r\n        hasStartIcon,\r\n        hasEndAction,\r\n        resolvedType,\r\n    }\r\n}\r\n"],"names":["useTextField","props","label","error","startIcon","endAction","type","onMouseDown","onFocus","onBlur","id","generatedId","useId","inputId","helperId","hasError","isPassword","showPassword","setShowPassword","useState","pointerDownRef","useRef","handleMouseDown","useCallback","handleFocus","handleBlur"],"mappings":"yGAIaA,EACTC,GAMqB,CACrB,KAAM,CACF,MAAAC,EACA,MAAAC,EACA,UAAAC,EACA,UAAAC,EACA,KAAAC,EACA,YAAAC,EACA,QAAAC,EACA,OAAAC,EACA,GAAAC,CAAA,EACAT,EAEEU,EAAcC,EAAAA,MAAA,EACdC,EAAUH,IAAOR,EAAQS,EAAc,QACvCG,EAAW,GAAGH,CAAW,UACzBI,EAAW,EAAQZ,EACnBa,EAAaV,IAAS,WAEtB,CAACW,EAAcC,CAAe,EAAIC,EAAAA,SAAS,EAAK,EAChDC,EAAiBC,EAAAA,OAAO,EAAK,EAE7BC,EAAkBC,EAAAA,YACnB,GAA0C,CACvCH,EAAe,QAAU,GACzBb,IAAc,CAAC,CACnB,EACA,CAACA,CAAW,CAAA,EAGViB,EAAcD,EAAAA,YACf,GAA0C,CACnCH,EAAe,UACf,EAAE,cAAc,aAAa,mBAAoB,EAAE,EACnDA,EAAe,QAAU,IAE7BZ,IAAU,CAAC,CACf,EACA,CAACA,CAAO,CAAA,EAGNiB,EAAaF,EAAAA,YACd,GAA0C,CACvCH,EAAe,QAAU,GACzB,EAAE,cAAc,gBAAgB,kBAAkB,EAClDX,IAAS,CAAC,CACd,EACA,CAACA,CAAM,CAAA,EAOX,MAAO,CACH,QAAAI,EACA,SAAAC,EACA,SAAAC,EACA,WAAAC,EACA,aAAAC,EACA,gBAAAC,EACA,gBAAAI,EACA,YAAAE,EACA,WAAAC,EACA,aAdiB,EAAQrB,EAezB,aAdiBY,GAAc,EAAQX,EAevC,aAdiBW,EAAcC,EAAe,OAAS,WAAcX,CAcrE,CAER"}