{"version":3,"sources":["../../../../src/components/organisms/Form/renderers.tsx"],"names":["jsx","FieldGroup","FormTextField","FormTextAreaField","FormCheckBoxField","FormComboboxField","FormMultiCheckboxField"],"mappings":"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","file":"renderers.cjs","sourcesContent":["import type { FieldValues, UseFormReturn } from \"react-hook-form\";\nimport {\n  FormTextField,\n  type FormTextFieldProps,\n} from \"../../molecules/TextField\";\nimport {\n  FormTextAreaField,\n  type FormTextAreaFieldProps,\n} from \"../../molecules/TextAreaField\";\nimport {\n  FormComboboxField,\n  type FormComboBoxFieldProps,\n  type Option,\n} from \"../../molecules/ComboBoxField\";\nimport type { PathOf } from \"./paths\";\nimport {\n  FormCheckBoxField,\n  type FormCheckBoxFieldProps,\n} from \"../../molecules/CheckBoxField\";\nimport {\n  FormMultiCheckboxField,\n  type FormMultiCheckboxFieldProps,\n} from \"../../molecules/MultiCheckBoxField\";\nimport { FieldGroup } from \"../../molecules/FieldGroup\";\n\nexport type ComponentKind = \"input\" | \"textarea\" | \"combobox\" | \"checkbox\" | \"multicheckbox\";\n\ntype BaseFieldRef<T extends FieldValues> = {\n  name: PathOf<T>;\n  label?: string;\n  colSpan?: number;\n  containerClassName?: string;\n};\n\nexport type Direction = \"col\" | \"floating\" | \"row\" | null | undefined;\n\nexport type InputFieldRef<T extends FieldValues> = BaseFieldRef<T> & {\n  component: \"input\";\n  inputProps?: Omit<FormTextFieldProps, \"name\">;\n};\n\nexport type TextAreaFieldRef<T extends FieldValues> = BaseFieldRef<T> & {\n  component: \"textarea\";\n  textareaProps?: Omit<FormTextAreaFieldProps, \"name\">;\n};\n\nexport type ComboboxOption = { label: string; value: string };\nexport type ComboboxFieldRef<T extends FieldValues> = BaseFieldRef<T> & {\n  component: \"combobox\";\n  items: ComboboxOption[];\n  comboProps?: Omit<FormComboBoxFieldProps, \"name\">;\n};\n\nexport type CheckBoxFieldRef<T extends FieldValues> = BaseFieldRef<T> & {\n  component: \"checkbox\";\n  checkboxProps?: Omit<FormCheckBoxFieldProps, \"name\">;\n};\n\nexport type MultiCheckboxFieldRef<T extends FieldValues> = BaseFieldRef<T> & {\n  component: \"multicheckbox\";\n  options: Option[]; // same Option used by your ComboBoxField\n  multiCheckboxProps?: Omit<FormMultiCheckboxFieldProps, \"name\" | \"options\">;\n};\n\nexport type FieldRef<T extends FieldValues> =\n  | InputFieldRef<T>\n  | TextAreaFieldRef<T>\n  | ComboboxFieldRef<T>\n  | CheckBoxFieldRef<T>\n  | MultiCheckboxFieldRef<T>;\n\nexport type FieldPropsBase<T extends FieldValues, F extends FieldRef<T>> = {\n  field: F;\n  methods: UseFormReturn<T>;\n  path: string;\n  direction?: Direction;\n};\n\nexport type FieldPropsFor<\n  K extends ComponentKind,\n  T extends FieldValues\n> = K extends \"input\"\n  ? FieldPropsBase<T, InputFieldRef<T>>\n  : K extends \"textarea\"\n  ? FieldPropsBase<T, TextAreaFieldRef<T>>\n  : K extends \"combobox\"\n  ? FieldPropsBase<T, ComboboxFieldRef<T>>\n  : K extends \"checkbox\"\n  ? FieldPropsBase<T, CheckBoxFieldRef<T>>\n  : K extends \"multicheckbox\"\n  ? FieldPropsBase<T, MultiCheckboxFieldRef<T>>\n  : never;\n\nexport type Renderers<T extends FieldValues> = {\n  input?: (p: FieldPropsFor<\"input\", T>) => React.ReactNode;\n  textarea?: (p: FieldPropsFor<\"textarea\", T>) => React.ReactNode;\n  combobox?: (p: FieldPropsFor<\"combobox\", T>) => React.ReactNode;\n  checkbox?: (p: FieldPropsFor<\"checkbox\", T>) => React.ReactNode;\n  multicheckbox?: (p: FieldPropsFor<\"multicheckbox\", T>) => React.ReactNode;\n};\n\nfunction getError<T extends FieldValues>(\n  methods: UseFormReturn<T>,\n  path: string\n) {\n  const tokens = path.match(/[^.[\\]]+/g) ?? [];\n  let cur: unknown = methods.formState.errors as unknown;\n  for (const tk of tokens) {\n    cur =\n      cur && typeof cur === \"object\"\n        ? (cur as Record<string, unknown>)[tk]\n        : undefined;\n    if (!cur) break;\n  }\n  const msg = (cur as { message?: unknown } | undefined)?.message;\n  return typeof msg === \"string\" ? msg : undefined;\n}\n\ntype RendererDefaults = {\n  input?: Omit<FormTextFieldProps, \"name\">;\n  textarea?: Omit<FormTextAreaFieldProps, \"name\">;\n  combobox?: Omit<FormComboBoxFieldProps, \"name\" | \"items\">;\n  checkbox?: Omit<FormCheckBoxFieldProps, \"name\">;\n  multicheckbox?: Omit<FormMultiCheckboxFieldProps, \"name\" | \"options\">;\n};\n\nexport function createDefaultRenderers<T extends FieldValues>({\n  defaultDirection,\n  defaults,\n}: {\n  defaults?: RendererDefaults;\n  defaultDirection?: Direction;\n}): Renderers<T> {\n  return {\n    input: ({ field, methods, path, direction }) => {\n      const labelBehaviour =\n        direction || defaultDirection === \"floating\"\n          ? \"floating\"\n          : \"placeholder\";\n      return (\n        <FieldGroup\n          name={path}\n          label={field.label ?? \"\"}\n          direction={direction || defaultDirection}\n        >\n          <FormTextField\n            name={path}\n            id={path}\n            label={field.label}\n            error={getError(methods, path)}\n            {...defaults?.input}\n            {...field.inputProps}\n            labelBehavior={\n              labelBehaviour ||\n              defaults?.input?.labelBehavior ||\n              field.inputProps?.labelBehavior\n            }\n          />\n        </FieldGroup>\n      );\n    },\n    textarea: ({ field, methods, path, direction }) => {\n      const labelBehaviour =\n        direction || defaultDirection === \"floating\"\n          ? \"floating\"\n          : \"placeholder\";\n      return (\n        <FieldGroup\n          name={path}\n          label={field.label ?? \"\"}\n          direction={direction || defaultDirection}\n        >\n          <FormTextAreaField\n            name={path}\n            id={path}\n            label={field.label}\n            error={getError(methods, path)}\n            {...defaults?.textarea}\n            {...field.textareaProps}\n            labelBehavior={\n              labelBehaviour ||\n              defaults?.textarea?.labelBehavior ||\n              field.textareaProps?.labelBehavior\n            }\n          />\n        </FieldGroup>\n      );\n    },\n    checkbox: ({ field, methods, path }) => (\n      <FormCheckBoxField\n        containerClassName={field.containerClassName}\n        name={path}\n        label={field.label ?? \"\"}\n        error={getError(methods, path)}\n        {...defaults?.checkbox}\n        {...field.checkboxProps}\n      />\n    ),\n    combobox: ({ field, methods, path, direction }) => {\n      return (\n        <FieldGroup\n          name={path}\n          label={field.label ?? \"\"}\n          direction={direction || defaultDirection}\n        >\n          <FormComboboxField\n            name={path}\n            id={path}\n            label={field.label}\n            items={field.items || []}\n            error={getError(methods, path)}\n            labelBehaviour={\n              direction === \"floating\" ? \"floating\" : \"placeholder\"\n            }\n            {...defaults?.combobox}\n            {...field.comboProps}\n          />\n        </FieldGroup>\n      );\n    },\n    multicheckbox: ({ field, methods, path }) => {\n      const f = field as MultiCheckboxFieldRef<T>;\n      return (\n        <FieldGroup name=\"path\" label={f.label ?? \"\"}>\n          <FormMultiCheckboxField\n            name={path}\n            label={f.label ?? \"\"}\n            options={f.options}\n            error={getError(methods, path)}\n            {...defaults?.multicheckbox}\n            {...f.multiCheckboxProps}\n          />\n        </FieldGroup>\n      );\n    },\n  };\n}\n"]}