UNPKG

@yamada-ui/password-input

Version:

Yamada UI password input component

1 lines 5.03 kB
{"version":3,"sources":["../src/use-password-input.tsx"],"sourcesContent":["import type { HTMLUIProps, PropGetter } from \"@yamada-ui/core\"\nimport type { FormControlOptions } from \"@yamada-ui/form-control\"\nimport type { PointerEvent } from \"react\"\nimport { layoutStyleProperties } from \"@yamada-ui/core\"\nimport {\n formControlProperties,\n useFormControlProps,\n} from \"@yamada-ui/form-control\"\nimport { useControllableState } from \"@yamada-ui/use-controllable-state\"\nimport { handlerAll, pickObject, splitObject } from \"@yamada-ui/utils\"\nimport { useCallback } from \"react\"\n\ninterface UsePasswordInputOptions {\n /**\n * Determines whether the password input is visible by default.\n *\n * @default false\n *\n * @deprecated Use `defaultVisible` instead.\n */\n defaultIsVisible?: boolean\n /**\n * Determines whether the password input is visible by default.\n *\n * @default false\n */\n defaultVisible?: boolean\n /**\n * Determines the visibility of the password input.\n *\n * @default false\n *\n * @deprecated Use `visible` instead.\n */\n isVisible?: boolean\n /**\n * Determines the visibility of the password input.\n *\n * @default false\n */\n visible?: boolean\n /**\n * Callback function that is triggered when the visibility of the password input changes.\n */\n onVisibleChange?: (visible: boolean) => void\n}\n\nexport interface UsePasswordInputProps\n extends Omit<\n HTMLUIProps<\"input\">,\n \"disabled\" | \"readOnly\" | \"required\" | \"size\"\n >,\n FormControlOptions,\n UsePasswordInputOptions {}\n\nexport const usePasswordInput = (props: UsePasswordInputProps) => {\n const {\n defaultIsVisible,\n defaultVisible = defaultIsVisible,\n isVisible,\n visible: visibleProp = isVisible,\n onVisibleChange,\n ...rest\n } = useFormControlProps(props)\n const { \"aria-readonly\": ariaReadonly, ...formControlProps } = pickObject(\n rest,\n formControlProperties,\n )\n const [containerProps, inputProps] = splitObject(rest, layoutStyleProperties)\n const { disabled } = formControlProps\n const [visible, setVisible] = useControllableState({\n defaultValue: defaultVisible,\n value: visibleProp,\n onChange: onVisibleChange,\n })\n\n const onPointerDown = useCallback(\n (ev: PointerEvent<HTMLDivElement>) => {\n if (disabled || ev.button !== 0) return\n\n ev.preventDefault()\n\n setVisible((prev) => !prev)\n },\n [disabled, setVisible],\n )\n\n const getContainerProps: PropGetter = useCallback(\n (props = {}, ref = null) => ({\n ref,\n ...containerProps,\n ...formControlProps,\n ...props,\n }),\n [containerProps, formControlProps],\n )\n\n const getInputProps: PropGetter<\"input\"> = useCallback(\n (props = {}, ref = null) => ({\n ref,\n type: visible ? \"text\" : \"password\",\n ...inputProps,\n \"aria-readonly\": ariaReadonly,\n ...formControlProps,\n ...props,\n }),\n [visible, inputProps, ariaReadonly, formControlProps],\n )\n\n const getIconProps: PropGetter = useCallback(\n (props = {}, ref = null) => ({\n ref,\n \"aria-label\": \"Toggle password visibility\",\n tabIndex: -1,\n ...formControlProps,\n ...props,\n onPointerDown: handlerAll(props.onPointerDown, onPointerDown),\n }),\n [formControlProps, onPointerDown],\n )\n\n return {\n setVisible,\n visible,\n getContainerProps,\n getIconProps,\n getInputProps,\n }\n}\n\nexport type UsePasswordInputReturn = ReturnType<typeof usePasswordInput>\n"],"mappings":";;;AAGA,SAAS,6BAA6B;AACtC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,4BAA4B;AACrC,SAAS,YAAY,YAAY,mBAAmB;AACpD,SAAS,mBAAmB;AA6CrB,IAAM,mBAAmB,CAAC,UAAiC;AAChE,QAAM;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,IACA,SAAS,cAAc;AAAA,IACvB;AAAA,IACA,GAAG;AAAA,EACL,IAAI,oBAAoB,KAAK;AAC7B,QAAM,EAAE,iBAAiB,cAAc,GAAG,iBAAiB,IAAI;AAAA,IAC7D;AAAA,IACA;AAAA,EACF;AACA,QAAM,CAAC,gBAAgB,UAAU,IAAI,YAAY,MAAM,qBAAqB;AAC5E,QAAM,EAAE,SAAS,IAAI;AACrB,QAAM,CAAC,SAAS,UAAU,IAAI,qBAAqB;AAAA,IACjD,cAAc;AAAA,IACd,OAAO;AAAA,IACP,UAAU;AAAA,EACZ,CAAC;AAED,QAAM,gBAAgB;AAAA,IACpB,CAAC,OAAqC;AACpC,UAAI,YAAY,GAAG,WAAW,EAAG;AAEjC,SAAG,eAAe;AAElB,iBAAW,CAAC,SAAS,CAAC,IAAI;AAAA,IAC5B;AAAA,IACA,CAAC,UAAU,UAAU;AAAA,EACvB;AAEA,QAAM,oBAAgC;AAAA,IACpC,CAACA,SAAQ,CAAC,GAAG,MAAM,UAAU;AAAA,MAC3B;AAAA,MACA,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAGA;AAAA,IACL;AAAA,IACA,CAAC,gBAAgB,gBAAgB;AAAA,EACnC;AAEA,QAAM,gBAAqC;AAAA,IACzC,CAACA,SAAQ,CAAC,GAAG,MAAM,UAAU;AAAA,MAC3B;AAAA,MACA,MAAM,UAAU,SAAS;AAAA,MACzB,GAAG;AAAA,MACH,iBAAiB;AAAA,MACjB,GAAG;AAAA,MACH,GAAGA;AAAA,IACL;AAAA,IACA,CAAC,SAAS,YAAY,cAAc,gBAAgB;AAAA,EACtD;AAEA,QAAM,eAA2B;AAAA,IAC/B,CAACA,SAAQ,CAAC,GAAG,MAAM,UAAU;AAAA,MAC3B;AAAA,MACA,cAAc;AAAA,MACd,UAAU;AAAA,MACV,GAAG;AAAA,MACH,GAAGA;AAAA,MACH,eAAe,WAAWA,OAAM,eAAe,aAAa;AAAA,IAC9D;AAAA,IACA,CAAC,kBAAkB,aAAa;AAAA,EAClC;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":["props"]}