{"version":3,"file":"PinInput.cjs","sources":["../../../src/components/PinInput/PinInput.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { assignRef, useId, useUncontrolled } from '@raikou/hooks';\nimport {\n  BoxProps,\n  createVarsResolver,\n  ElementProps,\n  Factory,\n  factory,\n  getSize,\n  RaikouRadius,\n  RaikouSize,\n  RaikouSpacing,\n  StylesApiProps,\n  useProps,\n  useResolvedStylesApi,\n  useStyles,\n} from '../../core';\nimport { Group } from '../Group';\nimport { Input, InputProps } from '../Input';\nimport { createPinArray } from './create-pin-array/create-pin-array';\nimport { PinInputInputStyle, PinInputRootStyle } from './PinInput.css';\n\nconst regex = {\n  number: /^[0-9]+$/,\n  alphanumeric: /^[a-zA-Z0-9]+$/i,\n};\n\nexport type PinInputStylesNames = 'root' | 'pinInput' | 'input';\n\nexport type PinInputCssVariables = {\n  root: '--pin-input-size';\n};\n\nexport interface PinInputProps\n  extends BoxProps,\n    StylesApiProps<PinInputFactory>,\n    ElementProps<'div', 'onChange'> {\n  /** Hidden input `name` attribute */\n  name?: string;\n\n  /** Hidden input `form` attribute */\n  form?: string;\n\n  /** Key of `theme.spacing` or any valid CSS value to set `gap` between inputs, numbers are converted to rem, `'md'` by default */\n  gap?: RaikouSpacing;\n\n  /** Key of `theme.radius` or any valid CSS value to set `border-radius`, numbers are converted to rem, `theme.defaultRadius` by default */\n  radius?: RaikouRadius;\n\n  /** Controls inputs `width` and `height`, `'sm'` by default */\n  size?: RaikouSize;\n\n  /** If set, the first input is focused when component is mounted, `false` by default */\n  autoFocus?: boolean;\n\n  /** Controlled component value */\n  value?: string;\n\n  /** Uncontrolled component default value */\n  defaultValue?: string;\n\n  /** Called when value changes */\n  onChange?: (value: string) => void;\n\n  /** Called when all inputs have value */\n  onComplete?: (value: string) => void;\n\n  /** Inputs placeholder, `'○'` by default */\n  placeholder?: string;\n\n  /** Determines whether focus should be moved automatically to the next input once filled, `true` by default */\n  manageFocus?: boolean;\n\n  /** Determines whether `autocomplete=\"one-time-code\"` attribute should be set on all inputs, `true` by default */\n  oneTimeCode?: boolean;\n\n  /** Base id used for all inputs. By default, inputs' ids are generated randomly. */\n  id?: string;\n\n  /** If set, `disabled` attribute is added to all inputs */\n  disabled?: boolean;\n\n  /** If set, adds error styles and `aria-invalid` attribute to all inputs */\n  error?: boolean;\n\n  /** Determines which values can be entered, `'alphanumeric'` by default */\n  type?: 'alphanumeric' | 'number' | RegExp;\n\n  /** Changes input type to `\"password\"`, `false` by default */\n  mask?: boolean;\n\n  /** Number of inputs, `4` by default */\n  length?: number;\n\n  /** If set, the user cannot edit the value */\n  readOnly?: boolean;\n\n  /** Inputs `type` attribute, inferred from the `type` prop if not specified */\n  inputType?: React.HTMLInputTypeAttribute;\n\n  /** `inputmode` attribute, inferred from the `type` prop if not specified */\n  inputMode?:\n    | 'none'\n    | 'text'\n    | 'tel'\n    | 'url'\n    | 'email'\n    | 'numeric'\n    | 'decimal'\n    | 'search'\n    | undefined;\n\n  /** `aria-label` for the inputs */\n  ariaLabel?: string;\n\n  /** Props passed down to the hidden input */\n  hiddenInputProps?: React.ComponentPropsWithoutRef<'input'>;\n\n  /** Assigns ref of the root element */\n  rootRef?: React.ForwardedRef<HTMLDivElement>;\n\n  /** Props added to the input element depending on its index */\n  getInputProps?: (index: number) => InputProps & ElementProps<'input', 'size'>;\n}\n\nexport type PinInputFactory = Factory<{\n  props: PinInputProps;\n  ref: HTMLInputElement;\n  stylesNames: PinInputStylesNames;\n  vars: PinInputCssVariables;\n}>;\n\nconst defaultProps: Partial<PinInputProps> = {\n  gap: 'sm',\n  length: 4,\n  manageFocus: true,\n  oneTimeCode: true,\n  placeholder: '○',\n  type: 'alphanumeric',\n  ariaLabel: 'PinInput',\n};\n\nconst varsResolver = createVarsResolver<PinInputFactory>((_, { size }) => ({\n  root: {\n    '--pin-input-size': getSize(size ?? defaultProps.size, 'pin-input-size'),\n  },\n}));\n\nexport const PinInput = factory<PinInputFactory>((props, ref) => {\n  const {\n    name,\n    form,\n    className,\n    value,\n    defaultValue,\n    variant,\n    gap,\n    style,\n    size,\n    classNames,\n    styles,\n    unstyled,\n    length,\n    onChange,\n    onComplete,\n    manageFocus,\n    autoFocus,\n    error,\n    radius,\n    disabled,\n    oneTimeCode,\n    placeholder,\n    type,\n    mask,\n    readOnly,\n    inputType,\n    inputMode,\n    ariaLabel,\n    vars,\n    id,\n    hiddenInputProps,\n    rootRef,\n    getInputProps,\n    ...others\n  } = useProps('PinInput', defaultProps, props);\n\n  const uuid = useId(id);\n\n  const getStyles = useStyles<PinInputFactory>({\n    name: 'PinInput',\n    classes: {\n      root: PinInputRootStyle,\n      pinInput: PinInputInputStyle,\n    },\n    props,\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    varsResolver,\n  });\n\n  const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<PinInputFactory>({\n    classNames,\n    styles,\n    props,\n  });\n\n  const [focusedIndex, setFocusedIndex] = useState(-1);\n\n  const [_value, setValues] = useUncontrolled<string[]>({\n    value: value ? createPinArray(length ?? 0, value) : undefined,\n    defaultValue: defaultValue?.split('').slice(0, length ?? 0),\n    finalValue: createPinArray(length ?? 0, ''),\n    onChange:\n      typeof onChange === 'function'\n        ? (val) => {\n            onChange(val.join('').trim());\n          }\n        : undefined,\n  });\n  const _valueToString = _value.join('').trim();\n\n  const inputsRef = useRef<Array<HTMLInputElement>>([]);\n\n  const validate = (code: string) => {\n    const re = type instanceof RegExp ? type : type && type in regex ? regex[type] : null;\n\n    return re?.test(code);\n  };\n\n  const focusInputField = (\n    dir: 'next' | 'prev',\n    index: number,\n    event?: React.KeyboardEvent<HTMLInputElement>\n  ) => {\n    if (!manageFocus) {\n      event?.preventDefault();\n      return;\n    }\n\n    if (dir === 'next') {\n      const nextIndex = index + 1;\n      const canFocusNext = nextIndex < (length ?? 0);\n      if (canFocusNext) {\n        event?.preventDefault();\n        inputsRef.current[nextIndex].focus();\n      }\n    }\n\n    if (dir === 'prev') {\n      const nextIndex = index - 1;\n      const canFocusNext = nextIndex > -1;\n      if (canFocusNext) {\n        event?.preventDefault();\n        inputsRef.current[nextIndex].focus();\n      }\n    }\n  };\n\n  const setFieldValue = (val: string, index: number) => {\n    const values = [..._value];\n    values[index] = val;\n    setValues(values);\n  };\n\n  const handleChange = (event: React.ChangeEvent<HTMLInputElement>, index: number) => {\n    const inputValue = event.target.value;\n    const nextCharOrValue =\n      inputValue.length === 2 ? inputValue.split('')[inputValue.length - 1] : inputValue;\n\n    const isValid = validate(nextCharOrValue);\n\n    if (nextCharOrValue.length < 2) {\n      if (isValid) {\n        setFieldValue(nextCharOrValue, index);\n        focusInputField('next', index);\n      } else {\n        setFieldValue('', index);\n      }\n    } else if (isValid) {\n      setValues(createPinArray(length ?? 0, inputValue));\n    }\n  };\n\n  const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>, index: number) => {\n    const { ctrlKey, metaKey, key, shiftKey, target } = event;\n    const inputValue = (target as HTMLInputElement).value;\n\n    if (inputMode === 'numeric') {\n      const canTypeSign =\n        key === 'Backspace' ||\n        key === 'Tab' ||\n        key === 'Control' ||\n        key === 'Delete' ||\n        (ctrlKey && key === 'v') ||\n        (metaKey && key === 'v')\n          ? true\n          : !Number.isNaN(Number(key));\n\n      if (!canTypeSign) {\n        event.preventDefault();\n      }\n    }\n\n    if (key === 'ArrowLeft' || (shiftKey && key === 'Tab')) {\n      focusInputField('prev', index, event);\n    } else if (key === 'ArrowRight' || key === 'Tab' || key === ' ') {\n      focusInputField('next', index, event);\n    } else if (key === 'Delete') {\n      setFieldValue('', index);\n    } else if (key === 'Backspace') {\n      if (index !== 0) {\n        setFieldValue('', index);\n        if (length === index + 1) {\n          if ((event.target as HTMLInputElement).value === '') {\n            focusInputField('prev', index, event);\n          }\n        } else {\n          focusInputField('prev', index, event);\n        }\n      }\n    } else if (inputValue.length > 0 && key === _value[index]) {\n      focusInputField('next', index, event);\n    }\n  };\n\n  const handleFocus = (event: React.FocusEvent<HTMLInputElement>, index: number) => {\n    event.target.select();\n    setFocusedIndex(index);\n  };\n\n  const handleBlur = () => {\n    setFocusedIndex(-1);\n  };\n\n  const handlePaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n    event.preventDefault();\n    const copyValue = event.clipboardData.getData('text/plain').replace(/[\\n\\r\\s]+/g, '');\n    const isValid = validate(copyValue.trim());\n\n    if (isValid) {\n      const copyValueToPinArray = createPinArray(length ?? 0, copyValue);\n      setValues(copyValueToPinArray);\n      focusInputField('next', copyValueToPinArray.length - 2);\n    }\n  };\n\n  useEffect(() => {\n    if (_valueToString.length !== length) {\n      return;\n    }\n    onComplete?.(_valueToString);\n  }, [length, _valueToString]);\n\n  useEffect(() => {\n    if (length !== _value.length) {\n      setValues(createPinArray(length ?? 0, _value.join('')));\n    }\n  }, [length, _value]);\n\n  useEffect(() => {\n    if (value === '') {\n      setValues(createPinArray(length ?? 0, value));\n    }\n  }, [value]);\n\n  useEffect(() => {\n    if (disabled) {\n      setFocusedIndex(-1);\n    }\n  }, [disabled]);\n\n  return (\n    <>\n      <Group\n        {...others}\n        {...getStyles('root')}\n        ref={rootRef}\n        role=\"group\"\n        id={uuid}\n        gap={gap}\n        unstyled={unstyled}\n        wrap=\"nowrap\"\n        variant={variant}\n        __size={size}\n        dir=\"ltr\"\n      >\n        {_value.map((char: string, index: number) => (\n          <Input\n            component=\"input\"\n            {...getStyles('pinInput', {\n              style: {\n                '--input-padding': '0',\n                '--input-text-align': 'center',\n              } as React.CSSProperties,\n            })}\n            classNames={resolvedClassNames}\n            styles={resolvedStyles}\n            size={size}\n            __staticSelector=\"PinInput\"\n            id={`${uuid}-${index + 1}`}\n            key={`${uuid}-${index}`}\n            inputMode={inputMode || (type === 'number' ? 'numeric' : 'text')}\n            onChange={(event) => handleChange(event, index)}\n            onKeyDown={(event) => handleKeyDown(event, index)}\n            onFocus={(event) => handleFocus(event, index)}\n            onBlur={handleBlur}\n            onPaste={handlePaste}\n            type={inputType || (mask ? 'password' : type === 'number' ? 'tel' : 'text')}\n            radius={radius}\n            error={error}\n            variant={variant}\n            disabled={disabled}\n            ref={(node) => {\n              index === 0 && assignRef(ref, node);\n              inputsRef.current[index] = node!;\n            }}\n            autoComplete={oneTimeCode ? 'one-time-code' : 'off'}\n            placeholder={focusedIndex === index ? '' : placeholder}\n            value={char}\n            autoFocus={autoFocus && index === 0}\n            unstyled={unstyled}\n            aria-label={ariaLabel}\n            readOnly={readOnly}\n            {...getInputProps?.(index)}\n          />\n        ))}\n      </Group>\n\n      <input type=\"hidden\" name={name} form={form} value={_valueToString} {...hiddenInputProps} />\n    </>\n  );\n});\n\nPinInput.displayName = '@raikou/core/PinInput';\n"],"names":["createVarsResolver","getSize","factory","useProps","useId","useStyles","PinInputRootStyle","PinInputInputStyle","useResolvedStylesApi","useState","useUncontrolled","createPinArray","useRef","useEffect","jsxs","Fragment","jsx","Group","createElement","Input","assignRef"],"mappings":"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"}