@k3-universe/react-kit 0.0.14 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
1
  import { FieldValues } from 'react-hook-form';
2
2
  import { FormBuilderProps } from '../types';
3
- export declare function FormBuilder<TFieldValues extends FieldValues = FieldValues>({ sections, schema, defaultValues, onSubmit, onCancel, onReset, onFieldChange, submitLabel, cancelLabel, resetLabel, isSubmitting, className, formClassName, actionsClassName, showActions, customActions, showActionsSeparator, }: FormBuilderProps<TFieldValues>): import("react/jsx-runtime").JSX.Element;
3
+ export declare function FormBuilder<TFieldValues extends FieldValues = FieldValues>({ sections, schema, defaultValues, onSubmit, onCancel, onReset, onFieldChange, submitLabel, cancelLabel, resetLabel, isSubmitting, className, formClassName, actionsClassName, showActions, customActions, showActionsSeparator, form, }: FormBuilderProps<TFieldValues>): import("react/jsx-runtime").JSX.Element;
4
4
  //# sourceMappingURL=FormBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/kit/builder/form/components/FormBuilder.tsx"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,WAAW,EAAa,MAAM,iBAAiB,CAAC;AAQjF,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,UAAU,CAAC;AAElB,wBAAgB,WAAW,CAAC,YAAY,SAAS,WAAW,GAAG,WAAW,EAAE,EAC1E,QAAQ,EACR,MAAM,EACN,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,aAAa,EACb,WAAsB,EACtB,WAAsB,EACtB,UAAoB,EACpB,YAAoB,EACpB,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,WAAkB,EAClB,aAAa,EACb,oBAA2B,GAC5B,EAAE,gBAAgB,CAAC,YAAY,CAAC,2CAolBhC"}
1
+ {"version":3,"file":"FormBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/kit/builder/form/components/FormBuilder.tsx"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,WAAW,EAAa,MAAM,iBAAiB,CAAC;AAQjF,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,UAAU,CAAC;AAElB,wBAAgB,WAAW,CAAC,YAAY,SAAS,WAAW,GAAG,WAAW,EAAE,EAC1E,QAAQ,EACR,MAAM,EACN,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,aAAa,EACb,WAAsB,EACtB,WAAsB,EACtB,UAAoB,EACpB,YAAoB,EACpB,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,WAAkB,EAClB,aAAa,EACb,oBAA2B,EAC3B,IAAI,GACL,EAAE,gBAAgB,CAAC,YAAY,CAAC,2CAqhBhC"}
@@ -0,0 +1,18 @@
1
+ import { Control, FieldValues, Path, UseFormGetValues, UseFormSetValue } from 'react-hook-form';
2
+ import { FormBuilderFieldConfig } from '../types';
3
+ interface DependencyState {
4
+ disabled?: boolean;
5
+ hidden?: boolean;
6
+ }
7
+ export interface FormBuilderContextValue<TFieldValues extends FieldValues = FieldValues> {
8
+ control: Control<TFieldValues>;
9
+ getValues: UseFormGetValues<TFieldValues>;
10
+ setValue: UseFormSetValue<TFieldValues>;
11
+ onFieldChange?: (name: Path<TFieldValues> | string, value: unknown, allValues: TFieldValues) => void;
12
+ handleFieldDependencies: (field: FormBuilderFieldConfig<TFieldValues, string | Path<TFieldValues>>) => DependencyState;
13
+ handleFieldChange: (field: FormBuilderFieldConfig<TFieldValues, string | Path<TFieldValues>>, value: unknown, ...extras: unknown[]) => void;
14
+ }
15
+ declare const FormBuilderContext: import('react').Context<FormBuilderContextValue<FieldValues> | null>;
16
+ export declare function useFormBuilderContext<TFieldValues extends FieldValues = FieldValues>(): FormBuilderContextValue<TFieldValues>;
17
+ export { FormBuilderContext };
18
+ //# sourceMappingURL=FormBuilderContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormBuilderContext.d.ts","sourceRoot":"","sources":["../../../../../src/kit/builder/form/components/FormBuilderContext.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,WAAW,EACX,IAAI,EACJ,gBAAgB,EAChB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEvD,UAAU,eAAe;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB,CAAC,YAAY,SAAS,WAAW,GAAG,WAAW;IACrF,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,SAAS,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC1C,QAAQ,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IACxC,aAAa,CAAC,EAAE,CACd,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,MAAM,EACjC,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,YAAY,KACpB,IAAI,CAAC;IACV,uBAAuB,EAAE,CACvB,KAAK,EAAE,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,KACrE,eAAe,CAAC;IACrB,iBAAiB,EAAE,CACjB,KAAK,EAAE,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EACxE,KAAK,EAAE,OAAO,EACd,GAAG,MAAM,EAAE,OAAO,EAAE,KACjB,IAAI,CAAC;CACX;AAED,QAAA,MAAM,kBAAkB,sEAAmE,CAAC;AAE5F,wBAAgB,qBAAqB,CAAC,YAAY,SAAS,WAAW,GAAG,WAAW,2CAMnF;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { FieldValues, Path, Control, UseFormGetValues } from 'react-hook-form';
2
+ import { SectionNode } from '../../section/types';
3
+ import { FormBuilderFieldConfig, FormBuilderSectionConfig } from '../types';
4
+ interface BuildSectionNodesOptions<TFieldValues extends FieldValues> {
5
+ sections: Array<FormBuilderSectionConfig<TFieldValues>>;
6
+ control: Control<TFieldValues>;
7
+ handleFieldDependencies: (field: FormBuilderFieldConfig<TFieldValues, string | Path<TFieldValues>>) => {
8
+ disabled?: boolean;
9
+ hidden?: boolean;
10
+ } | Record<string, never>;
11
+ handleFieldChange: (field: FormBuilderFieldConfig<TFieldValues, string | Path<TFieldValues>>, value: unknown, ...extras: unknown[]) => void;
12
+ onFieldChange?: (name: Path<TFieldValues> | string, value: unknown, allValues: TFieldValues) => void;
13
+ getValues: UseFormGetValues<TFieldValues>;
14
+ }
15
+ export declare function buildSectionNodes<TFieldValues extends FieldValues>(options: BuildSectionNodesOptions<TFieldValues>): SectionNode[];
16
+ export {};
17
+ //# sourceMappingURL=sectionNodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sectionNodes.d.ts","sourceRoot":"","sources":["../../../../../src/kit/builder/form/components/sectionNodes.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEtD,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAA;AAEhF,UAAU,wBAAwB,CAAC,YAAY,SAAS,WAAW;IACjE,QAAQ,EAAE,KAAK,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC,CAAA;IACvD,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;IAC9B,uBAAuB,EAAE,CACvB,KAAK,EAAE,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,KACrE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACrE,iBAAiB,EAAE,CACjB,KAAK,EAAE,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EACxE,KAAK,EAAE,OAAO,EACd,GAAG,MAAM,EAAE,OAAO,EAAE,KACjB,IAAI,CAAA;IACT,aAAa,CAAC,EAAE,CACd,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,MAAM,EACjC,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,YAAY,KACpB,IAAI,CAAA;IACT,SAAS,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAA;CAC1C;AAED,wBAAgB,iBAAiB,CAAC,YAAY,SAAS,WAAW,EAChE,OAAO,EAAE,wBAAwB,CAAC,YAAY,CAAC,GAC9C,WAAW,EAAE,CAyFf"}
@@ -1,8 +1,8 @@
1
1
  import { default as React } from 'react';
2
- import { Control, DeepPartial, FieldValues, Path, UseFormGetValues, UseFormSetValue, DefaultValues } from 'react-hook-form';
2
+ import { Control, DeepPartial, FieldValues, Path, UseFormGetValues, UseFormReturn, UseFormSetValue, DefaultValues } from 'react-hook-form';
3
3
  import { z } from 'zod';
4
4
  import { Accept } from 'react-dropzone';
5
- import { SectionFlexOptions, SectionGridOptions, SectionLayout, SectionNode } from '../section/types';
5
+ import { SectionFlexOptions, SectionGridOptions, SectionLayout } from '../section/types';
6
6
  import { AutocompleteFetcher, AutocompleteOption } from '../../components/autocomplete/types';
7
7
  import { FileRecord, FileUploaderLayout } from '../../components/fileuploader/types';
8
8
  export type FieldType = 'text' | 'email' | 'password' | 'number' | 'textarea' | 'select' | 'autocomplete' | 'checkbox' | 'switch' | 'radio' | 'date' | 'date_picker' | 'date_range' | 'month' | 'month_range' | 'time' | 'time_range' | 'date_time' | 'date_time_range' | 'file' | 'object' | 'array';
@@ -170,6 +170,7 @@ export interface FormBuilderProps<TFieldValues extends FieldValues = FieldValues
170
170
  showActions?: boolean;
171
171
  customActions?: React.ReactNode;
172
172
  showActionsSeparator?: boolean;
173
+ form?: UseFormReturn<TFieldValues>;
173
174
  }
174
- export type { SectionNode };
175
+ export type { SectionNode } from '../section/types';
175
176
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/kit/builder/form/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/kit/builder/form/types.ts"],"names":[],"mappings":"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"}
@@ -1900,7 +1900,7 @@
1900
1900
  border-color: var(--color-blue-200);
1901
1901
  }
1902
1902
 
1903
- .border-border\/40 {
1903
+ .border-border, .border-border\/40 {
1904
1904
  border-color: var(--border);
1905
1905
  }
1906
1906
 
@@ -4808,8 +4808,8 @@
4808
4808
  }
4809
4809
 
4810
4810
  @media (prefers-color-scheme: dark) {
4811
- .dark\:border-input {
4812
- border-color: var(--input);
4811
+ .dark\:border-border {
4812
+ border-color: var(--border);
4813
4813
  }
4814
4814
 
4815
4815
  .dark\:bg-destructive\/60 {
@@ -1903,7 +1903,7 @@
1903
1903
  border-color: var(--color-blue-200);
1904
1904
  }
1905
1905
 
1906
- .border-border\/40 {
1906
+ .border-border, .border-border\/40 {
1907
1907
  border-color: var(--border);
1908
1908
  }
1909
1909
 
@@ -4815,8 +4815,8 @@
4815
4815
  }
4816
4816
 
4817
4817
  @media (prefers-color-scheme: dark) {
4818
- .dark\:border-input {
4819
- border-color: var(--input);
4818
+ .dark\:border-border {
4819
+ border-color: var(--border);
4820
4820
  }
4821
4821
 
4822
4822
  .dark\:bg-destructive\/60 {
@@ -5468,7 +5468,7 @@
5468
5468
  --destructive: oklch(63.68% .2078 25.3313);
5469
5469
  --destructive-foreground: oklch(100% 0 0);
5470
5470
  --border: oklch(91.97% .004 286.32);
5471
- --input: oklch(91.97% .004 286.32);
5471
+ --input: oklch(100% 0 0);
5472
5472
  --ring: oklch(52.34% .1347 144.167);
5473
5473
  --chart-1: oklch(52.34% .1347 144.167);
5474
5474
  --chart-2: oklch(67.31% .1624 144.208);
@@ -1900,7 +1900,7 @@
1900
1900
  border-color: var(--color-blue-200);
1901
1901
  }
1902
1902
 
1903
- .border-border\/40 {
1903
+ .border-border, .border-border\/40 {
1904
1904
  border-color: var(--border);
1905
1905
  }
1906
1906
 
@@ -4808,8 +4808,8 @@
4808
4808
  }
4809
4809
 
4810
4810
  @media (prefers-color-scheme: dark) {
4811
- .dark\:border-input {
4812
- border-color: var(--input);
4811
+ .dark\:border-border {
4812
+ border-color: var(--border);
4813
4813
  }
4814
4814
 
4815
4815
  .dark\:bg-destructive\/60 {
@@ -1900,7 +1900,7 @@
1900
1900
  border-color: var(--color-blue-200);
1901
1901
  }
1902
1902
 
1903
- .border-border\/40 {
1903
+ .border-border, .border-border\/40 {
1904
1904
  border-color: var(--border);
1905
1905
  }
1906
1906
 
@@ -4808,8 +4808,8 @@
4808
4808
  }
4809
4809
 
4810
4810
  @media (prefers-color-scheme: dark) {
4811
- .dark\:border-input {
4812
- border-color: var(--input);
4811
+ .dark\:border-border {
4812
+ border-color: var(--border);
4813
4813
  }
4814
4814
 
4815
4815
  .dark\:bg-destructive\/60 {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@k3-universe/react-kit",
3
- "version": "0.0.14",
3
+ "version": "0.0.15",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -4,9 +4,9 @@ import { zodResolver } from '@hookform/resolvers/zod';
4
4
  import { z } from 'zod';
5
5
  import { cn } from '../../../../shadcn/lib/utils';
6
6
  import { Button } from '../../../../shadcn/ui/button';
7
- import { FormBuilderField } from './FormBuilderField';
8
7
  import SectionBuilder from '../../section/SectionBuilder';
9
- import type { SectionNode } from '../../section/types';
8
+ import { buildSectionNodes } from './sectionNodes';
9
+ import { FormBuilderContext, type FormBuilderContextValue } from './FormBuilderContext';
10
10
  import type {
11
11
  FormBuilderProps,
12
12
  FormBuilderFieldConfig,
@@ -31,6 +31,7 @@ export function FormBuilder<TFieldValues extends FieldValues = FieldValues>({
31
31
  showActions = true,
32
32
  customActions,
33
33
  showActionsSeparator = true,
34
+ form,
34
35
  }: FormBuilderProps<TFieldValues>) {
35
36
  // Generate schema from field configs if not provided
36
37
  const generatedSchema = useMemo(() => {
@@ -335,14 +336,16 @@ export function FormBuilder<TFieldValues extends FieldValues = FieldValues>({
335
336
  return values;
336
337
  }, [sections, defaultValues]);
337
338
 
338
- const form = useForm<TFieldValues>({
339
+ const internalForm = useForm<TFieldValues>({
339
340
  // Dynamic schema shape: cast to any to satisfy resolver generics
340
341
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
341
342
  resolver: zodResolver(generatedSchema as any) as unknown as import('react-hook-form').Resolver<TFieldValues, any, TFieldValues>,
342
343
  defaultValues: generatedDefaultValues as unknown as import('react-hook-form').DefaultValues<TFieldValues>,
343
344
  });
344
345
 
345
- const { control, handleSubmit, reset, setValue, getValues } = form;
346
+ const activeForm = form ?? internalForm;
347
+
348
+ const { control, handleSubmit, reset, setValue, getValues } = activeForm;
346
349
 
347
350
  // Determine dependency fields to watch
348
351
  const dependencyFields = useMemo(() => {
@@ -482,149 +485,84 @@ export function FormBuilder<TFieldValues extends FieldValues = FieldValues>({
482
485
  }, [reset, generatedDefaultValues, onReset]);
483
486
 
484
487
  // Build SectionBuilder nodes from form sections/fields
485
- const sectionNodes: SectionNode[] = useMemo(() => {
486
- const buildLeavesFromFields = (fields?: FormBuilderFieldConfig<TFieldValues, string | Path<TFieldValues>>[]): SectionNode['children'] =>
487
- (fields ?? [])
488
- .map((field) => {
489
- const fieldState = handleFieldDependencies(field);
490
- if (field.hidden || fieldState.hidden) return null;
491
-
492
- const spanMd = Math.max(1, Math.min(12, field.gridCols ?? 1));
493
-
494
- return {
495
- key: field.name,
496
- span: { base: 1, md: spanMd },
497
- className: field.wrapperClassName,
498
- hidden: field.hidden,
499
- content: (
500
- <FormBuilderField
501
- key={field.name}
502
- field={{
503
- ...field,
504
- disabled: field.disabled || fieldState.disabled,
505
- }}
506
- control={control}
507
- onChange={(value, ...extras) => {
508
- handleFieldChange(field, value, ...extras);
509
- onFieldChange?.(field.name as unknown as string, value, getValues());
510
- }}
511
- onFieldChange={onFieldChange}
512
- />
513
- ),
514
- };
515
- })
516
- .filter(Boolean) as SectionNode['children'];
517
-
518
- const buildSectionNode = (
519
- section: FormBuilderSectionConfig<TFieldValues>,
520
- sectionIndex: number,
521
- ): SectionNode => {
522
- const baseNode: SectionNode = {
523
- id: section.id ?? `section-${sectionIndex}`,
524
- title: section.title,
525
- subtitle: section.description,
526
- variant: section.variant ?? 'plain',
527
- className: section.className,
528
- layout: section.layout ?? (section.tabs && section.tabs.length > 0 ? 'tabs' : 'grid'),
529
- grid: section.grid ?? { cols: 1, mdCols: 2, gap: 'gap-4' },
530
- flex: section.flex,
531
- hidden: section.hidden,
532
- };
533
-
534
- // Tabs layout
535
- if (baseNode.layout === 'tabs' && section.tabs && section.tabs.length > 0) {
536
- baseNode.defaultTabId = section.defaultTabId ?? section.tabs[0]?.id;
537
- baseNode.tabsListClassName = section.tabsListClassName;
538
- baseNode.tabsContentClassName = section.tabsContentClassName;
539
- baseNode.tabs = section.tabs.map((tab, _tabIdx) => {
540
- // Each tab can contain multiple sub-sections; wrap them under a container node
541
- const nestedNodes = tab.sections.map((subSection, subIdx) => buildSectionNode(subSection, subIdx));
542
- const containerNode: SectionNode = {
543
- id: `${baseNode.id}-tab-${tab.id}`,
544
- title: undefined,
545
- subtitle: undefined,
546
- variant: 'plain',
547
- layout: 'grid',
548
- grid: section.grid ?? { cols: 1, mdCols: 2, gap: 'gap-4' },
549
- children: nestedNodes,
550
- } as SectionNode;
551
- return {
552
- id: tab.id,
553
- label: tab.label,
554
- className: tab.className,
555
- contentClassName: tab.contentClassName,
556
- node: containerNode,
557
- };
558
- });
559
- return baseNode;
560
- }
561
-
562
- // Regular non-tab section with direct fields
563
- baseNode.children = buildLeavesFromFields(section.fields);
564
- return baseNode;
565
- };
488
+ const sectionNodes = useMemo(
489
+ () =>
490
+ buildSectionNodes({
491
+ sections,
492
+ control,
493
+ handleFieldDependencies,
494
+ handleFieldChange,
495
+ onFieldChange,
496
+ getValues,
497
+ }),
498
+ [sections, control, handleFieldDependencies, handleFieldChange, onFieldChange, getValues],
499
+ );
566
500
 
567
- return sections.map((section, sectionIndex) => buildSectionNode(section, sectionIndex));
568
- }, [
569
- sections,
570
- control,
571
- handleFieldDependencies,
572
- handleFieldChange,
573
- onFieldChange,
574
- getValues,
575
- ]);
501
+ const contextValue = useMemo(
502
+ () => ({
503
+ control,
504
+ getValues,
505
+ setValue,
506
+ onFieldChange,
507
+ handleFieldDependencies,
508
+ handleFieldChange,
509
+ }) satisfies FormBuilderContextValue<TFieldValues>,
510
+ [control, getValues, setValue, onFieldChange, handleFieldDependencies, handleFieldChange],
511
+ );
576
512
 
577
513
  return (
578
- <div className={cn('space-y-6', className)}>
579
- <form
580
- onSubmit={handleSubmit(handleFormSubmit)}
581
- className={cn('space-y-6', formClassName)}
582
- >
583
- <SectionBuilder sections={sectionNodes} />
584
-
585
- {showActions && (
586
- <div
587
- className={cn(
588
- 'flex flex-col sm:flex-row gap-3',
589
- showActionsSeparator && 'pt-6',
590
- showActionsSeparator && 'border-t',
591
- actionsClassName
592
- )}
593
- >
594
- <Button
595
- type="submit"
596
- disabled={isSubmitting}
597
- className="sm:order-last"
514
+ <FormBuilderContext.Provider value={contextValue as unknown as FormBuilderContextValue<FieldValues>}>
515
+ <div className={cn('space-y-6', className)}>
516
+ <form
517
+ onSubmit={handleSubmit(handleFormSubmit)}
518
+ className={cn('space-y-6', formClassName)}
519
+ >
520
+ <SectionBuilder sections={sectionNodes} />
521
+
522
+ {showActions && (
523
+ <div
524
+ className={cn(
525
+ 'flex flex-col sm:flex-row gap-3',
526
+ showActionsSeparator && 'pt-6',
527
+ showActionsSeparator && 'border-t',
528
+ actionsClassName
529
+ )}
598
530
  >
599
- {isSubmitting ? 'Submitting...' : submitLabel}
600
- </Button>
601
-
602
- {onCancel && (
603
- <Button
604
- type="button"
605
- variant="outline"
606
- onClick={onCancel}
607
- disabled={isSubmitting}
608
- >
609
- {cancelLabel}
610
- </Button>
611
- )}
612
-
613
- {onReset && (
614
531
  <Button
615
- type="button"
616
- variant="outline"
617
- onClick={handleReset}
532
+ type="submit"
618
533
  disabled={isSubmitting}
534
+ className="sm:order-last"
619
535
  >
620
- {resetLabel}
536
+ {isSubmitting ? 'Submitting...' : submitLabel}
621
537
  </Button>
622
- )}
623
538
 
624
- {customActions}
625
- </div>
626
- )}
627
- </form>
628
- </div>
539
+ {onCancel && (
540
+ <Button
541
+ type="button"
542
+ variant="outline"
543
+ onClick={onCancel}
544
+ disabled={isSubmitting}
545
+ >
546
+ {cancelLabel}
547
+ </Button>
548
+ )}
549
+
550
+ {onReset && (
551
+ <Button
552
+ type="button"
553
+ variant="outline"
554
+ onClick={handleReset}
555
+ disabled={isSubmitting}
556
+ >
557
+ {resetLabel}
558
+ </Button>
559
+ )}
560
+
561
+ {customActions}
562
+ </div>
563
+ )}
564
+ </form>
565
+ </div>
566
+ </FormBuilderContext.Provider>
629
567
  );
630
568
  }
@@ -0,0 +1,45 @@
1
+ import { createContext, useContext } from 'react';
2
+ import type {
3
+ Control,
4
+ FieldValues,
5
+ Path,
6
+ UseFormGetValues,
7
+ UseFormSetValue,
8
+ } from 'react-hook-form';
9
+ import type { FormBuilderFieldConfig } from '../types';
10
+
11
+ interface DependencyState {
12
+ disabled?: boolean;
13
+ hidden?: boolean;
14
+ }
15
+
16
+ export interface FormBuilderContextValue<TFieldValues extends FieldValues = FieldValues> {
17
+ control: Control<TFieldValues>;
18
+ getValues: UseFormGetValues<TFieldValues>;
19
+ setValue: UseFormSetValue<TFieldValues>;
20
+ onFieldChange?: (
21
+ name: Path<TFieldValues> | string,
22
+ value: unknown,
23
+ allValues: TFieldValues
24
+ ) => void;
25
+ handleFieldDependencies: (
26
+ field: FormBuilderFieldConfig<TFieldValues, string | Path<TFieldValues>>
27
+ ) => DependencyState;
28
+ handleFieldChange: (
29
+ field: FormBuilderFieldConfig<TFieldValues, string | Path<TFieldValues>>,
30
+ value: unknown,
31
+ ...extras: unknown[]
32
+ ) => void;
33
+ }
34
+
35
+ const FormBuilderContext = createContext<FormBuilderContextValue<FieldValues> | null>(null);
36
+
37
+ export function useFormBuilderContext<TFieldValues extends FieldValues = FieldValues>() {
38
+ const value = useContext(FormBuilderContext) as FormBuilderContextValue<TFieldValues> | null;
39
+ if (!value) {
40
+ throw new Error('FormBuilderGroup must be used within a FormBuilder.');
41
+ }
42
+ return value;
43
+ }
44
+
45
+ export { FormBuilderContext };
@@ -0,0 +1,116 @@
1
+ import type { FieldValues, Path, Control, UseFormGetValues } from 'react-hook-form'
2
+ import type { SectionNode } from '../../section/types'
3
+ import { FormBuilderField } from './FormBuilderField'
4
+ import type { FormBuilderFieldConfig, FormBuilderSectionConfig } from '../types'
5
+
6
+ interface BuildSectionNodesOptions<TFieldValues extends FieldValues> {
7
+ sections: Array<FormBuilderSectionConfig<TFieldValues>>
8
+ control: Control<TFieldValues>
9
+ handleFieldDependencies: (
10
+ field: FormBuilderFieldConfig<TFieldValues, string | Path<TFieldValues>>
11
+ ) => { disabled?: boolean; hidden?: boolean } | Record<string, never>
12
+ handleFieldChange: (
13
+ field: FormBuilderFieldConfig<TFieldValues, string | Path<TFieldValues>>,
14
+ value: unknown,
15
+ ...extras: unknown[]
16
+ ) => void
17
+ onFieldChange?: (
18
+ name: Path<TFieldValues> | string,
19
+ value: unknown,
20
+ allValues: TFieldValues
21
+ ) => void
22
+ getValues: UseFormGetValues<TFieldValues>
23
+ }
24
+
25
+ export function buildSectionNodes<TFieldValues extends FieldValues>(
26
+ options: BuildSectionNodesOptions<TFieldValues>
27
+ ): SectionNode[] {
28
+ const {
29
+ sections,
30
+ control,
31
+ handleFieldDependencies,
32
+ handleFieldChange,
33
+ onFieldChange,
34
+ getValues,
35
+ } = options
36
+
37
+ const buildLeavesFromFields = (
38
+ fields?: Array<FormBuilderFieldConfig<TFieldValues, string | Path<TFieldValues>>>
39
+ ): SectionNode['children'] =>
40
+ (fields ?? [])
41
+ .map((field) => {
42
+ const fieldState = handleFieldDependencies(field)
43
+ if (field.hidden || fieldState.hidden) return null
44
+
45
+ const spanMd = Math.max(1, Math.min(12, field.gridCols ?? 1))
46
+
47
+ return {
48
+ key: field.name,
49
+ span: { base: 1, md: spanMd },
50
+ className: field.wrapperClassName,
51
+ hidden: field.hidden,
52
+ content: (
53
+ <FormBuilderField
54
+ key={field.name}
55
+ field={{
56
+ ...field,
57
+ disabled: field.disabled || fieldState.disabled,
58
+ }}
59
+ control={control}
60
+ onChange={(value, ...extras) => {
61
+ handleFieldChange(field, value, ...extras)
62
+ onFieldChange?.(field.name as Path<TFieldValues> | string, value, getValues())
63
+ }}
64
+ onFieldChange={onFieldChange}
65
+ />
66
+ ),
67
+ }
68
+ })
69
+ .filter(Boolean) as SectionNode['children']
70
+
71
+ const buildSectionNode = (
72
+ section: FormBuilderSectionConfig<TFieldValues>,
73
+ sectionIndex: number,
74
+ ): SectionNode => {
75
+ const baseNode: SectionNode = {
76
+ id: section.id ?? `section-${sectionIndex}`,
77
+ title: section.title,
78
+ subtitle: section.description,
79
+ variant: section.variant ?? 'plain',
80
+ className: section.className,
81
+ layout: section.layout ?? (section.tabs && section.tabs.length > 0 ? 'tabs' : 'grid'),
82
+ grid: section.grid ?? { cols: 1, mdCols: 2, gap: 'gap-4' },
83
+ flex: section.flex,
84
+ hidden: section.hidden,
85
+ }
86
+
87
+ if (baseNode.layout === 'tabs' && section.tabs && section.tabs.length > 0) {
88
+ baseNode.defaultTabId = section.defaultTabId ?? section.tabs[0]?.id
89
+ baseNode.tabsListClassName = section.tabsListClassName
90
+ baseNode.tabsContentClassName = section.tabsContentClassName
91
+ baseNode.tabs = section.tabs.map((tab, _tabIdx) => {
92
+ const nestedNodes = tab.sections.map((subSection, subIdx) => buildSectionNode(subSection, subIdx))
93
+ const containerNode: SectionNode = {
94
+ id: `${baseNode.id}-tab-${tab.id}`,
95
+ variant: 'plain',
96
+ layout: 'grid',
97
+ grid: section.grid ?? { cols: 1, mdCols: 2, gap: 'gap-4' },
98
+ children: nestedNodes,
99
+ }
100
+ return {
101
+ id: tab.id,
102
+ label: tab.label,
103
+ className: tab.className,
104
+ contentClassName: tab.contentClassName,
105
+ node: containerNode,
106
+ }
107
+ })
108
+ return baseNode
109
+ }
110
+
111
+ baseNode.children = buildLeavesFromFields(section.fields)
112
+ return baseNode
113
+ }
114
+
115
+ return sections.map((section, sectionIndex) => buildSectionNode(section, sectionIndex))
116
+ }