{"version":3,"file":"refine-ui13.cjs","sources":["../lib/components/FormField/index.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport * as LabelPrimitive from '@radix-ui/react-label';\r\nimport { Slot } from '@radix-ui/react-slot';\r\nimport {\r\n  Controller,\r\n  ControllerProps,\r\n  FieldPath,\r\n  FieldValues,\r\n  FormProvider,\r\n  useFormContext,\r\n} from 'react-hook-form';\r\n\r\nimport { cn } from '@/lib/utils';\r\nimport { Label } from '@/lib/components/Label';\r\n\r\nconst Form = FormProvider;\r\n\r\ntype FormFieldContextValue<\r\n  TFieldValues extends FieldValues = FieldValues,\r\n  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\r\n> = {\r\n  name: TName;\r\n};\r\n\r\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\r\n  {} as FormFieldContextValue\r\n);\r\n\r\nconst FormField = <\r\n  TFieldValues extends FieldValues = FieldValues,\r\n  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\r\n>({\r\n  ...props\r\n}: ControllerProps<TFieldValues, TName>) => {\r\n  return (\r\n    <FormFieldContext.Provider value={{ name: props.name }}>\r\n      <Controller {...props} />\r\n    </FormFieldContext.Provider>\r\n  );\r\n};\r\n\r\nconst useFormField = () => {\r\n  const fieldContext = React.useContext(FormFieldContext);\r\n  const itemContext = React.useContext(FormItemContext);\r\n  const { getFieldState, formState } = useFormContext();\r\n\r\n  const fieldState = getFieldState(fieldContext.name, formState);\r\n\r\n  if (!fieldContext) {\r\n    throw new Error('useFormField should be used within <FormField>');\r\n  }\r\n\r\n  const { id } = itemContext;\r\n\r\n  return {\r\n    id,\r\n    name: fieldContext.name,\r\n    formItemId: `${id}-form-item`,\r\n    formDescriptionId: `${id}-form-item-description`,\r\n    formMessageId: `${id}-form-item-message`,\r\n    ...fieldState,\r\n  };\r\n};\r\n\r\ntype FormItemContextValue = {\r\n  id: string;\r\n};\r\n\r\nconst FormItemContext = React.createContext<FormItemContextValue>(\r\n  {} as FormItemContextValue\r\n);\r\n\r\nconst FormItem = React.forwardRef<\r\n  HTMLDivElement,\r\n  React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => {\r\n  const id = React.useId();\r\n\r\n  return (\r\n    <FormItemContext.Provider value={{ id }}>\r\n      <div ref={ref} className={cn('space-y-sm', className)} {...props} />\r\n    </FormItemContext.Provider>\r\n  );\r\n});\r\nFormItem.displayName = 'FormItem';\r\n\r\nconst FormLabel = React.forwardRef<\r\n  React.ElementRef<typeof LabelPrimitive.Root>,\r\n  React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\r\n>(({ className, ...props }, ref) => {\r\n  const { error, formItemId } = useFormField();\r\n\r\n  return (\r\n    <Label\r\n      ref={ref}\r\n      className={cn(error && 'text-destructive', className)}\r\n      htmlFor={formItemId}\r\n      {...props}\r\n    />\r\n  );\r\n});\r\nFormLabel.displayName = 'FormLabel';\r\n\r\nconst FormControl = React.forwardRef<\r\n  React.ElementRef<typeof Slot>,\r\n  React.ComponentPropsWithoutRef<typeof Slot>\r\n>(({ ...props }, ref) => {\r\n  const { error, formItemId, formDescriptionId, formMessageId } =\r\n    useFormField();\r\n\r\n  return (\r\n    <Slot\r\n      ref={ref}\r\n      id={formItemId}\r\n      aria-describedby={\r\n        !error\r\n          ? `${formDescriptionId}`\r\n          : `${formDescriptionId} ${formMessageId}`\r\n      }\r\n      aria-invalid={!!error}\r\n      {...props}\r\n    />\r\n  );\r\n});\r\nFormControl.displayName = 'FormControl';\r\n\r\nconst FormDescription = React.forwardRef<\r\n  HTMLParagraphElement,\r\n  React.HTMLAttributes<HTMLParagraphElement>\r\n>(({ className, ...props }, ref) => {\r\n  const { formDescriptionId } = useFormField();\r\n\r\n  return (\r\n    <p\r\n      ref={ref}\r\n      id={formDescriptionId}\r\n      className={cn('text-xs text-quarterary', className)}\r\n      {...props}\r\n    />\r\n  );\r\n});\r\nFormDescription.displayName = 'FormDescription';\r\n\r\nconst FormMessage = React.forwardRef<\r\n  HTMLParagraphElement,\r\n  React.HTMLAttributes<HTMLParagraphElement>\r\n>(({ className, children, ...props }, ref) => {\r\n  const { error, formMessageId } = useFormField();\r\n  const body = error ? String(error?.message) : children;\r\n\r\n  if (!body) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <p\r\n      ref={ref}\r\n      id={formMessageId}\r\n      className={cn('text-destructive text-sm font-medium', className)}\r\n      {...props}\r\n    >\r\n      {body}\r\n    </p>\r\n  );\r\n});\r\nFormMessage.displayName = 'FormMessage';\r\n\r\nexport {\r\n  useFormField,\r\n  Form,\r\n  FormItem,\r\n  FormLabel,\r\n  FormControl,\r\n  FormDescription,\r\n  FormMessage,\r\n  FormField,\r\n};\r\n"],"names":["Form","FormProvider","FormFieldContext","React","FormField","props","Controller","useFormField","fieldContext","itemContext","FormItemContext","getFieldState","formState","useFormContext","fieldState","id","FormItem","className","ref","cn","FormLabel","error","formItemId","Label","FormControl","formDescriptionId","formMessageId","Slot","FormDescription","FormMessage","children","body"],"mappings":"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"}