{"version":3,"file":"PasswordInput.cjs","sources":["../../../src/components/PasswordInput/PasswordInput.tsx"],"sourcesContent":["import cx from 'clsx';\nimport { useId, useUncontrolled } from '@raikou/hooks';\nimport {\n  BoxProps,\n  createVarsResolver,\n  ElementProps,\n  extractStyleProps,\n  factory,\n  Factory,\n  getSize,\n  StylesApiProps,\n  useProps,\n  useResolvedStylesApi,\n  useStyles,\n} from '../../core';\nimport { ActionIcon } from '../ActionIcon';\nimport { __BaseInputProps, __InputStylesNames, Input, InputVariant } from '../Input';\nimport { PasswordToggleIcon } from './PasswordToggleIcon';\nimport {\n  PasswordInputInnerInputStyle,\n  PasswordInputInputStyle,\n  PasswordInputRootStyle,\n  PasswordInputVisibilityToggleStyle,\n} from './PasswordInput.css';\n\nexport type PasswordInputStylesNames =\n  | 'root'\n  | 'visibilityToggle'\n  | 'innerInput'\n  | __InputStylesNames;\nexport type PasswordInputCssVariables = {\n  root: '--psi-icon-size' | '--psi-button-size';\n};\n\nexport interface PasswordInputProps\n  extends BoxProps,\n    __BaseInputProps,\n    StylesApiProps<PasswordInputFactory>,\n    ElementProps<'input', 'size'> {\n  /** A component to replace visibility toggle icon */\n  visibilityToggleIcon?: React.FC<{ reveal: boolean }>;\n\n  /** Props passed down to the visibility toggle button */\n  visibilityToggleButtonProps?: Record<string, any>;\n\n  /** Determines whether input content should be visible */\n  visible?: boolean;\n\n  /** Determines whether input content should be visible by default */\n  defaultVisible?: boolean;\n\n  /** Called when visibility changes */\n  onVisibilityChange?: (visible: boolean) => void;\n}\n\nexport type PasswordInputFactory = Factory<{\n  props: PasswordInputProps;\n  ref: HTMLInputElement;\n  stylesNames: PasswordInputStylesNames;\n  vars: PasswordInputCssVariables;\n  variant: InputVariant;\n}>;\n\nconst defaultProps: Partial<PasswordInputProps> = {\n  visibilityToggleIcon: PasswordToggleIcon,\n};\n\nconst varsResolver = createVarsResolver<PasswordInputFactory>((_, { size }) => ({\n  root: {\n    '--psi-icon-size': getSize(size, 'psi-icon-size'),\n    '--psi-button-size': getSize(size, 'psi-button-size'),\n  },\n}));\n\nexport const PasswordInput = factory<PasswordInputFactory>((_props, ref) => {\n  const props = useProps('PasswordInput', defaultProps, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    vars,\n    required,\n    error,\n    leftSection,\n    disabled,\n    id,\n    variant,\n    inputContainer,\n    description,\n    label,\n    size,\n    errorProps,\n    descriptionProps,\n    labelProps,\n    withAsterisk,\n    inputWrapperOrder,\n    wrapperProps,\n    radius,\n    rightSection,\n    rightSectionWidth,\n    rightSectionPointerEvents,\n    leftSectionWidth,\n    visible,\n    defaultVisible,\n    onVisibilityChange,\n    visibilityToggleIcon,\n    visibilityToggleButtonProps,\n    rightSectionProps,\n    leftSectionProps,\n    leftSectionPointerEvents,\n    withErrorStyles,\n    mod,\n    ...others\n  } = props;\n\n  const uuid = useId(id);\n\n  const [_visible, setVisibility] = useUncontrolled({\n    value: visible,\n    defaultValue: defaultVisible,\n    finalValue: false,\n    onChange: onVisibilityChange,\n  });\n\n  const toggleVisibility = () => setVisibility(!_visible);\n\n  const getStyles = useStyles<PasswordInputFactory>({\n    name: 'PasswordInput',\n    classes: {\n      root: PasswordInputRootStyle,\n      input: PasswordInputInputStyle,\n      innerInput: PasswordInputInnerInputStyle,\n      visibilityToggle: PasswordInputVisibilityToggleStyle,\n    },\n    props,\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    varsResolver,\n  });\n\n  const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<PasswordInputFactory>({\n    classNames,\n    styles,\n    props,\n  });\n\n  const { styleProps, rest } = extractStyleProps(others);\n  const VisibilityToggleIcon = visibilityToggleIcon!;\n\n  const visibilityToggleButton = (\n    <ActionIcon<'button'>\n      {...getStyles('visibilityToggle')}\n      disabled={disabled}\n      radius={radius}\n      aria-hidden={!visibilityToggleButtonProps}\n      tabIndex={-1}\n      {...visibilityToggleButtonProps}\n      variant={visibilityToggleButtonProps?.variant ?? 'subtle'}\n      color=\"gray\"\n      unstyled={unstyled}\n      onTouchEnd={(event) => {\n        event.preventDefault();\n        visibilityToggleButtonProps?.onTouchEnd?.(event);\n        toggleVisibility();\n      }}\n      onMouseDown={(event) => {\n        event.preventDefault();\n        visibilityToggleButtonProps?.onMouseDown?.(event);\n        toggleVisibility();\n      }}\n      onKeyDown={(event) => {\n        visibilityToggleButtonProps?.onKeyDown?.(event);\n        if (event.key === ' ') {\n          event.preventDefault();\n          toggleVisibility();\n        }\n      }}\n    >\n      <VisibilityToggleIcon reveal={_visible} />\n    </ActionIcon>\n  );\n\n  return (\n    <Input.Wrapper\n      required={required}\n      id={uuid}\n      label={label}\n      error={error}\n      description={description}\n      size={size}\n      classNames={resolvedClassNames}\n      styles={resolvedStyles}\n      __staticSelector=\"PasswordInput\"\n      errorProps={errorProps}\n      descriptionProps={descriptionProps}\n      unstyled={unstyled}\n      withAsterisk={withAsterisk}\n      inputWrapperOrder={inputWrapperOrder}\n      inputContainer={inputContainer}\n      variant={variant}\n      labelProps={{ ...labelProps, htmlFor: uuid }}\n      mod={mod}\n      {...getStyles('root')}\n      {...styleProps}\n      {...wrapperProps}\n    >\n      <Input<'div'>\n        component=\"div\"\n        error={error}\n        leftSection={leftSection}\n        size={size}\n        classNames={{\n          ...resolvedClassNames,\n          input: cx(PasswordInputInputStyle, resolvedClassNames.input),\n        }}\n        styles={resolvedStyles}\n        radius={radius}\n        disabled={disabled}\n        __staticSelector=\"PasswordInput\"\n        rightSectionWidth={rightSectionWidth}\n        rightSection={rightSection ?? visibilityToggleButton}\n        variant={variant}\n        unstyled={unstyled}\n        leftSectionWidth={leftSectionWidth}\n        rightSectionPointerEvents={rightSectionPointerEvents || 'all'}\n        rightSectionProps={rightSectionProps}\n        leftSectionProps={leftSectionProps}\n        leftSectionPointerEvents={leftSectionPointerEvents}\n        withAria={false}\n        withErrorStyles={withErrorStyles}\n      >\n        <input\n          required={required}\n          data-invalid={!!error || undefined}\n          data-with-left-section={!!leftSection || undefined}\n          {...getStyles('innerInput')}\n          disabled={disabled}\n          id={uuid}\n          ref={ref}\n          {...rest}\n          autoComplete={rest.autoComplete || 'off'}\n          type={_visible ? 'text' : 'password'}\n        />\n      </Input>\n    </Input.Wrapper>\n  );\n});\n\nPasswordInput.displayName = '@raikou/core/PasswordInput';\n"],"names":["PasswordToggleIcon","createVarsResolver","getSize","factory","useProps","useId","useUncontrolled","useStyles","PasswordInputRootStyle","PasswordInputInputStyle","PasswordInputInnerInputStyle","PasswordInputVisibilityToggleStyle","useResolvedStylesApi","extractStyleProps","jsx","ActionIcon","Input","cx"],"mappings":"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"}