{"version":3,"file":"index.cjs","sources":["../../../src/components/Form/index.tsx"],"sourcesContent":["import * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport * as React from \"react\";\nimport {\n  Controller,\n  ControllerProps,\n  FieldPath,\n  FieldValues,\n  FormProvider,\n  useFormContext,\n} from \"react-hook-form\";\n\nimport { cn } from \"@/components/utils\";\nimport { Label } from \"../Label\";\n\nconst Form = FormProvider;\n\ntype FormFieldContextValue<\n  TFieldValues extends FieldValues = FieldValues,\n  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n  name: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n  {} as FormFieldContextValue\n);\n\nconst FormField = <\n  TFieldValues extends FieldValues = FieldValues,\n  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n  ...props\n}: ControllerProps<TFieldValues, TName>) => {\n  return (\n    <FormFieldContext.Provider value={{ name: props.name }}>\n      <Controller {...props} />\n    </FormFieldContext.Provider>\n  );\n};\n\nconst useFormField = () => {\n  const fieldContext = React.useContext(FormFieldContext);\n  const itemContext = React.useContext(FormItemContext);\n  const { getFieldState, formState } = useFormContext();\n\n  const fieldState = getFieldState(fieldContext.name, formState);\n\n  if (!fieldContext) {\n    throw new Error(\"useFormField should be used within <FormField>\");\n  }\n\n  const { id } = itemContext;\n\n  return {\n    id,\n    name: fieldContext.name,\n    formItemId: `${id}-form-item`,\n    formDescriptionId: `${id}-form-item-description`,\n    formMessageId: `${id}-form-item-message`,\n    ...fieldState,\n  };\n};\n\ntype FormItemContextValue = {\n  id: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n  {} as FormItemContextValue\n);\n\nconst FormItem = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n  const id = React.useId();\n\n  return (\n    <FormItemContext.Provider value={{ id }}>\n      <div ref={ref} className={cn(\"space-y-2\", className)} {...props} />\n    </FormItemContext.Provider>\n  );\n});\nFormItem.displayName = \"FormItem\";\n\nconst FormLabel = React.forwardRef<\n  React.ElementRef<typeof LabelPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => {\n  const { formItemId } = useFormField();\n\n  return (\n    <Label\n      ref={ref}\n      //   className={cn(error && 'text-destructive', className)}\n      htmlFor={formItemId}\n      {...props}\n    />\n  );\n});\nFormLabel.displayName = \"FormLabel\";\n\nconst FormControl = React.forwardRef<\n  React.ElementRef<typeof Slot>,\n  React.ComponentPropsWithoutRef<typeof Slot>\n>(({ ...props }, ref) => {\n  const { error, formItemId, formDescriptionId, formMessageId } =\n    useFormField();\n\n  return (\n    <Slot\n      ref={ref}\n      id={formItemId}\n      aria-describedby={\n        !error\n          ? `${formDescriptionId}`\n          : `${formDescriptionId} ${formMessageId}`\n      }\n      aria-invalid={!!error}\n      {...props}\n    />\n  );\n});\nFormControl.displayName = \"FormControl\";\n\nconst FormDescription = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => {\n  const { formDescriptionId } = useFormField();\n\n  return (\n    <p\n      ref={ref}\n      id={formDescriptionId}\n      className={cn(\"text-sm text-muted-foreground\", className)}\n      {...props}\n    />\n  );\n});\nFormDescription.displayName = \"FormDescription\";\n\nconst FormMessage = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, children, ...props }, ref) => {\n  const { error, formMessageId } = useFormField();\n  const body = error ? String(error?.message) : children;\n\n  if (!body) {\n    return null;\n  }\n\n  return (\n    <p\n      ref={ref}\n      id={formMessageId}\n      className={cn(\"text-sm font-normal text-destructive\", className)}\n      {...props}\n    >\n      {body}\n    </p>\n  );\n});\nFormMessage.displayName = \"FormMessage\";\n\nexport {\n  Form,\n  FormControl,\n  FormDescription,\n  FormField,\n  FormItem,\n  FormLabel,\n  FormMessage,\n  useFormField,\n};\n"],"names":["Form","FormProvider","FormFieldContext","React","createContext","useFormField","fieldContext","useContext","itemContext","FormItemContext","getFieldState","formState","useFormContext","fieldState","name","Error","id","formItemId","formDescriptionId","formMessageId","FormItem","forwardRef","className","props","ref","useId","Provider","value","children","cn","displayName","FormLabel","jsxRuntimeExports","jsx","Label","htmlFor","FormControl","error","Slot","FormDescription","FormMessage","body","String","message","Controller"],"mappings":"klBAeMA,EAAOC,EAAAA,aASPC,EAAmBC,EAAMC,cAC7B,CAAC,GAgBGC,EAAe,KACb,MAAAC,EAAeH,EAAMI,WAAWL,GAChCM,EAAcL,EAAMI,WAAWE,IAC/BC,cAAEA,EAAAC,UAAeA,GAAcC,EAAeA,iBAE9CC,EAAaH,EAAcJ,EAAaQ,KAAMH,GAEpD,IAAKL,EACG,MAAA,IAAIS,MAAM,kDAGZ,MAAAC,GAAEA,GAAOR,EAER,MAAA,CACLQ,KACAF,KAAMR,EAAaQ,KACnBG,WAAY,GAAGD,cACfE,kBAAmB,GAAGF,0BACtBG,cAAe,GAAGH,yBACfH,EAAA,EAQDJ,EAAkBN,EAAMC,cAC5B,CAAC,GAGGgB,EAAWjB,EAAMkB,YAGrB,EAAGC,eAAcC,GAASC,KACpB,MAAAR,EAAKb,EAAMsB,uCAGdhB,EAAgBiB,SAAhB,CAAyBC,MAAO,CAAEX,MACjCY,iCAAC,MAAI,CAAAJ,MAAUF,UAAWO,EAAAA,GAAG,YAAaP,MAAgBC,KAC5D,IAGJH,EAASU,YAAc,WAEjB,MAAAC,EAAY5B,EAAMkB,YAGtB,EAAGC,eAAcC,GAASC,KACpB,MAAAP,WAAEA,GAAeZ,IAGrB,SAAA2B,kBAAAC,IAACC,EAAAA,MAAA,CACCV,MAEAW,QAASlB,KACLM,GAAA,IAIVQ,EAAUD,YAAc,YAElB,MAAAM,EAAcjC,EAAMkB,YAGxB,KAAME,GAASC,KACf,MAAMa,MAAEA,EAAOpB,WAAAA,EAAAC,kBAAYA,EAAmBC,cAAAA,GAC5Cd,IAGA,SAAA2B,kBAAAC,IAACK,EAAAA,KAAA,CACCd,MACAR,GAAIC,EACJ,mBACGoB,EAEG,GAAGnB,KAAqBC,IADxB,GAAGD,IAGT,iBAAgBmB,KACZd,GAAA,IAIVa,EAAYN,YAAc,cAEpB,MAAAS,EAAkBpC,EAAMkB,YAG5B,EAAGC,eAAcC,GAASC,KACpB,MAAAN,kBAAEA,GAAsBb,IAG5B,SAAA2B,kBAAAC,IAAC,IAAA,CACCT,MACAR,GAAIE,EACJI,UAAWO,EAAAA,GAAG,gCAAiCP,MAC3CC,GAAA,IAIVgB,EAAgBT,YAAc,kBAExB,MAAAU,EAAcrC,EAAMkB,YAGxB,EAAGC,YAAWM,cAAaL,GAASC,KACpC,MAAMa,MAAEA,EAAAlB,cAAOA,GAAkBd,IAC3BoC,EAAOJ,EAAQK,OAAO,MAAAL,OAAA,EAAAA,EAAOM,SAAWf,EAE9C,OAAKa,IAKHT,kBAAAC,IAAC,IAAA,CACCT,MACAR,GAAIG,EACJG,UAAWO,EAAAA,GAAG,uCAAwCP,MAClDC,EAEHK,SAAAa,IAVI,IAUJ,IAIPD,EAAYV,YAAc,+FAzIR,KAIbP,KAGAU,EAAAA,kBAAAA,IAAA/B,EAAiBwB,SAAjB,CAA0BC,MAAO,CAAEb,KAAMS,EAAMT,MAC9Cc,SAAAK,EAAAA,kBAAAA,IAACW,EAAYA,WAAA,IAAGrB"}