{"version":3,"file":"InputWrapper.cjs","sources":["../../../../src/components/Input/InputWrapper/InputWrapper.tsx"],"sourcesContent":["import { Fragment } from 'react';\nimport { useId } from '@raikou/hooks';\nimport {\n  Box,\n  BoxProps,\n  createVarsResolver,\n  ElementProps,\n  factory,\n  Factory,\n  getFontSize,\n  RaikouSize,\n  rem,\n  StylesApiProps,\n  useProps,\n  useStyles,\n} from '../../../core';\nimport {\n  InputDescription,\n  InputDescriptionCssVariables,\n  InputDescriptionStylesNames,\n} from '../InputDescription/InputDescription';\nimport {\n  InputError,\n  InputErrorCssVariables,\n  InputErrorStylesNames,\n} from '../InputError/InputError';\nimport {\n  InputLabel,\n  InputLabelCssVariables,\n  InputLabelStylesNames,\n} from '../InputLabel/InputLabel';\nimport { InputWrapperProvider } from '../InputWrapper.context';\nimport { getInputOffsets } from './get-input-offsets/get-input-offsets';\nimport {\n  InputDescriptionStyle,\n  InputErrorStyle,\n  InputLabelStyle,\n  InputRequiredStyle,\n  InputRootStyle,\n} from '../Input.css';\n\nexport type InputWrapperCssVariables = InputLabelCssVariables &\n  InputErrorCssVariables &\n  InputDescriptionCssVariables;\n\nexport type InputWrapperStylesNames =\n  | 'root'\n  | InputLabelStylesNames\n  | InputDescriptionStylesNames\n  | InputErrorStylesNames;\n\nexport interface __InputWrapperProps {\n  /** Contents of `Input.Label` component. If not set, label is not rendered. */\n  label?: React.ReactNode;\n\n  /** Contents of `Input.Description` component. If not set, description is not rendered. */\n  description?: React.ReactNode;\n\n  /** Contents of `Input.Error` component. If not set, error is not rendered. */\n  error?: React.ReactNode;\n\n  /** Adds required attribute to the input and a red asterisk on the right side of label, `false` by default */\n  required?: boolean;\n\n  /** Determines whether the required asterisk should be displayed. Overrides `required` prop. Does not add required attribute to the input. `false` by default */\n  withAsterisk?: boolean;\n\n  /** Props passed down to the `Input.Label` component */\n  labelProps?: Record<string, any>;\n\n  /** Props passed down to the `Input.Description` component */\n  descriptionProps?: Record<string, any>;\n\n  /** Props passed down to the `Input.Error` component */\n  errorProps?: Record<string, any>;\n\n  /** Input container component, `React.Fragment` by default */\n  inputContainer?: (children: React.ReactNode) => React.ReactNode;\n\n  /** Controls order of the elements, `['label', 'description', 'input', 'error']` by default */\n  inputWrapperOrder?: ('label' | 'input' | 'description' | 'error')[];\n}\n\nexport interface InputWrapperProps\n  extends __InputWrapperProps,\n    BoxProps,\n    StylesApiProps<InputWrapperFactory>,\n    ElementProps<'div'> {\n  __staticSelector?: string;\n\n  /** Props passed to Styles API context, replaces Input.Wrapper props */\n  __stylesApiProps?: Record<string, any>;\n\n  /** Static id used as base to generate `aria-` attributes, by default generates random id */\n  id?: string;\n\n  /** Controls size of `Input.Label`, `Input.Description` and `Input.Error` components */\n  size?: RaikouSize | (string & {});\n\n  /** `Input.Label` root element, `'label'` by default */\n  labelElement?: 'label' | 'div';\n}\n\nexport type InputWrapperFactory = Factory<{\n  props: InputWrapperProps;\n  ref: HTMLDivElement;\n  stylesNames: InputWrapperStylesNames;\n  vars: InputWrapperCssVariables;\n}>;\n\nconst defaultProps: Partial<InputWrapperProps> = {\n  labelElement: 'label',\n  inputContainer: (children) => children,\n  inputWrapperOrder: ['label', 'description', 'input', 'error'],\n};\n\nconst varsResolver = createVarsResolver<InputWrapperFactory>((_, { size }) => ({\n  label: {\n    '--input-label-size': getFontSize(size),\n    '--input-asterisk-color': undefined,\n  },\n\n  error: {\n    '--input-error-size': size === undefined ? undefined : `calc(${getFontSize(size)} - ${rem(2)})`,\n  },\n\n  description: {\n    '--input-description-size':\n      size === undefined ? undefined : `calc(${getFontSize(size)} - ${rem(2)})`,\n  },\n}));\n\nexport const InputWrapper = factory<InputWrapperFactory>((_props, ref) => {\n  const props = useProps('InputWrapper', defaultProps, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    vars,\n    size,\n    variant,\n    __staticSelector,\n    inputContainer,\n    inputWrapperOrder,\n    label,\n    error,\n    description,\n    labelProps,\n    descriptionProps,\n    errorProps,\n    labelElement,\n    children,\n    withAsterisk,\n    id,\n    required,\n    __stylesApiProps,\n    mod,\n    ...others\n  } = props;\n\n  const getStyles = useStyles<InputWrapperFactory>({\n    name: ['InputWrapper', __staticSelector],\n    props: __stylesApiProps || props,\n    classes: {\n      root: InputRootStyle,\n      label: InputLabelStyle,\n      required: InputRequiredStyle,\n      description: InputDescriptionStyle,\n      error: InputErrorStyle,\n    },\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    varsResolver,\n  });\n\n  const sharedProps = {\n    size,\n    variant,\n    __staticSelector,\n  };\n\n  const idBase = useId(id);\n  const isRequired = typeof withAsterisk === 'boolean' ? withAsterisk : required;\n  const errorId = errorProps?.id || `${idBase}-error`;\n  const descriptionId = descriptionProps?.id || `${idBase}-description`;\n  const inputId = idBase;\n  const hasError = !!error && typeof error !== 'boolean';\n  const hasDescription = !!description;\n  const _describedBy = `${hasError ? errorId : ''} ${hasDescription ? descriptionId : ''}`;\n  const describedBy = _describedBy.trim().length > 0 ? _describedBy.trim() : undefined;\n  const labelId = labelProps?.id || `${idBase}-label`;\n\n  const _label = label && (\n    <InputLabel\n      key=\"label\"\n      labelElement={labelElement}\n      id={labelId}\n      htmlFor={inputId}\n      required={isRequired}\n      {...sharedProps}\n      {...labelProps}\n    >\n      {label}\n    </InputLabel>\n  );\n\n  const _description = hasDescription && (\n    <InputDescription\n      key=\"description\"\n      {...descriptionProps}\n      {...sharedProps}\n      size={descriptionProps?.size || sharedProps.size}\n      id={descriptionProps?.id || descriptionId}\n    >\n      {description}\n    </InputDescription>\n  );\n\n  const _input = <Fragment key=\"input\">{inputContainer!(children)}</Fragment>;\n\n  const _error = hasError && (\n    <InputError\n      {...errorProps}\n      {...sharedProps}\n      size={errorProps?.size || sharedProps.size}\n      key=\"error\"\n      id={errorProps?.id || errorId}\n    >\n      {error}\n    </InputError>\n  );\n\n  const content = inputWrapperOrder!.map((part) => {\n    switch (part) {\n      case 'label':\n        return _label;\n      case 'input':\n        return _input;\n      case 'description':\n        return _description;\n      case 'error':\n        return _error;\n      default:\n        return null;\n    }\n  });\n\n  return (\n    <InputWrapperProvider\n      value={{\n        getStyles,\n        describedBy,\n        inputId,\n        labelId,\n        ...getInputOffsets(inputWrapperOrder!, { hasDescription, hasError }),\n      }}\n    >\n      <Box\n        ref={ref}\n        variant={variant}\n        size={size}\n        mod={[{ error: !!error }, mod]}\n        {...getStyles('root')}\n        {...others}\n      >\n        {content}\n      </Box>\n    </InputWrapperProvider>\n  );\n});\n\nInputWrapper.displayName = '@raikou/core/InputWrapper';\n"],"names":["createVarsResolver","getFontSize","rem","factory","useProps","useStyles","InputRootStyle","InputLabelStyle","InputRequiredStyle","InputDescriptionStyle","InputErrorStyle","useId","jsx","InputLabel","InputDescription","Fragment","createElement","InputError","InputWrapperProvider","getInputOffsets","Box"],"mappings":"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"}