@bluprynt/forms-viewer 1.0.0 → 3.0.0

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.
package/dist/index.cjs CHANGED
@@ -4,6 +4,7 @@ let react = require("react");
4
4
  let react_jsx_runtime = require("react/jsx-runtime");
5
5
  //#region src/constants.ts
6
6
  const ROOT = Symbol("ROOT");
7
+ const DEFAULT = Symbol("DEFAULT");
7
8
  //#endregion
8
9
  //#region src/form-context.tsx
9
10
  const FormContext = (0, react.createContext)(void 0);
@@ -246,15 +247,16 @@ const FormContent = (props) => {
246
247
  components: props.components,
247
248
  showInlineValidation
248
249
  };
249
- if (section === void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormItems, {
250
+ const selectedSection = section === DEFAULT ? resolveDefaultSection(items, visibilityMap) : section;
251
+ if (selectedSection === void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormItems, {
250
252
  items,
251
253
  ...sharedProps
252
254
  });
253
- if (section === ROOT) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormItems, {
255
+ if (selectedSection === ROOT) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormItems, {
254
256
  items: items.filter((item) => item.type !== "section"),
255
257
  ...sharedProps
256
258
  });
257
- const foundSection = findSection(items, section);
259
+ const foundSection = findSection(items, selectedSection);
258
260
  if (!foundSection || !visibilityMap.get(foundSection.id)) return null;
259
261
  const Section = props.components.section;
260
262
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Section, {
@@ -265,6 +267,10 @@ const FormContent = (props) => {
265
267
  })
266
268
  }, foundSection.id);
267
269
  };
270
+ const resolveDefaultSection = (items, visibilityMap) => {
271
+ if (items.filter((item) => item.type !== "section").some((item) => visibilityMap.get(item.id))) return ROOT;
272
+ return items.find((item) => item.type === "section" && visibilityMap.get(item.id) !== false)?.id;
273
+ };
268
274
  //#endregion
269
275
  //#region src/form-editor.tsx
270
276
  const FormEditor = ({ components, onChange }) => {
@@ -416,10 +422,10 @@ const FormFieldsValidation = ({ container: ContainerComponent, field: FieldCompo
416
422
  }, group.field?.id)) });
417
423
  };
418
424
  //#endregion
419
- //#region src/form-sections.tsx
420
- const FormSections = ({ container: Container, item: Item, defaultSectionTitle = "General", defaultSectionDescription, onSelect }) => {
421
- const { definition, section, visibilityMap, data, documentErrors } = useFormContext();
422
- const entries = (0, react.useMemo)(() => {
425
+ //#region src/use-form-sections.ts
426
+ const useFormSections = (defaultSectionTitle = "General", defaultSectionDescription) => {
427
+ const { definition, visibilityMap, data } = useFormContext();
428
+ return (0, react.useMemo)(() => {
423
429
  if (!definition) return [];
424
430
  const result = [];
425
431
  const rootFields = definition.content.filter((item) => item.type !== "section");
@@ -442,10 +448,17 @@ const FormSections = ({ container: Container, item: Item, defaultSectionTitle =
442
448
  defaultSectionTitle,
443
449
  defaultSectionDescription
444
450
  ]);
451
+ };
452
+ //#endregion
453
+ //#region src/form-sections.tsx
454
+ const FormSections = ({ container: Container, item: Item, defaultSectionTitle, defaultSectionDescription, onSelect }) => {
455
+ const { definition, data, documentErrors, section } = useFormContext();
456
+ const entries = useFormSections(defaultSectionTitle, defaultSectionDescription);
445
457
  if (!definition || !data || documentErrors && documentErrors.length > 0) return null;
446
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Container, { children: entries.map((entry) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Item, {
458
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Container, { children: entries.map((entry, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Item, {
459
+ index,
447
460
  section: entry,
448
- active: entry.id === section,
461
+ active: section === DEFAULT ? index === 0 : entry.id === section,
449
462
  select: () => onSelect?.(entry.id)
450
463
  }, entry.id === ROOT ? "root" : String(entry.id))) });
451
464
  };
@@ -466,6 +479,7 @@ const FormViewer = ({ components }) => {
466
479
  });
467
480
  };
468
481
  //#endregion
482
+ exports.DEFAULT = DEFAULT;
469
483
  Object.defineProperty(exports, "DocumentError", {
470
484
  enumerable: true,
471
485
  get: function() {
@@ -486,3 +500,4 @@ Object.defineProperty(exports, "FormValuesEditor", {
486
500
  exports.FormViewer = FormViewer;
487
501
  exports.ROOT = ROOT;
488
502
  exports.useFormContext = useFormContext;
503
+ exports.useFormSections = useFormSections;
package/dist/index.d.cts CHANGED
@@ -4,6 +4,8 @@ import { ComponentType, FC, PropsWithChildren, ReactNode } from "react";
4
4
  //#region src/constants.d.ts
5
5
  declare const ROOT: unique symbol;
6
6
  type ROOT = typeof ROOT;
7
+ declare const DEFAULT: unique symbol;
8
+ type DEFAULT = typeof DEFAULT;
7
9
  //#endregion
8
10
  //#region src/form-context.d.ts
9
11
  type FormContextValue = {
@@ -14,14 +16,14 @@ type FormContextValue = {
14
16
  validation: FormValidationResult$1 | undefined;
15
17
  documentErrors: readonly DocumentValidationError$1[] | undefined;
16
18
  fieldErrors: Map<number, FieldValidationError$1[]>;
17
- section: typeof ROOT | number | undefined;
19
+ section: typeof ROOT | typeof DEFAULT | number | undefined;
18
20
  showInlineValidation: boolean;
19
21
  };
20
22
  declare const useFormContext: () => FormContextValue;
21
23
  type FormProps = {
22
24
  definition?: FormDefinition$1;
23
25
  data?: FormDocument$1;
24
- section?: typeof ROOT | number;
26
+ section?: typeof ROOT | typeof DEFAULT | number;
25
27
  showInlineValidation?: boolean;
26
28
  children: ReactNode;
27
29
  };
@@ -166,11 +168,15 @@ type FormFieldsValidationProps = {
166
168
  };
167
169
  declare const FormFieldsValidation: FC<FormFieldsValidationProps>;
168
170
  //#endregion
169
- //#region src/form-sections.d.ts
171
+ //#region src/use-form-sections.d.ts
170
172
  type FormSectionEntry = Omit<SectionContentItem$1, 'id' | 'type'> & {
171
173
  id: typeof ROOT | number;
172
174
  };
175
+ declare const useFormSections: (defaultSectionTitle?: string, defaultSectionDescription?: string) => FormSectionEntry[];
176
+ //#endregion
177
+ //#region src/form-sections.d.ts
173
178
  type FormSectionItemProps = {
179
+ index: number;
174
180
  section: FormSectionEntry;
175
181
  active: boolean;
176
182
  select: () => void;
@@ -180,7 +186,7 @@ type FormSectionsProps = {
180
186
  item: ComponentType<FormSectionItemProps>;
181
187
  defaultSectionTitle?: string;
182
188
  defaultSectionDescription?: string;
183
- onSelect?: (id: typeof ROOT | number) => void;
189
+ onSelect?: (id: typeof ROOT | typeof DEFAULT | number) => void;
184
190
  };
185
191
  declare const FormSections: FC<FormSectionsProps>;
186
192
  //#endregion
@@ -190,5 +196,5 @@ type FormViewerProps = {
190
196
  };
191
197
  declare const FormViewer: FC<FormViewerProps>;
192
198
  //#endregion
193
- export { type ArrayEditProps, type ArrayItemDef, type ArrayViewProps, type BaseEditFieldProps, type BaseViewFieldProps, type BooleanEditProps, type BooleanViewProps, type ContentItem, type DateEditProps, type DateViewProps, DocumentError, type DocumentValidationError, type DocumentValidationErrorCode, type EditorArrayItemProps, type EditorComponentMap, type EditorFieldProps, type ErrorProps, type FieldContentItem, type FieldEntry, type FieldType, type FieldValidationError, type FieldValidationFieldEntry, type FileEditProps, type FileValue, type FileViewProps, Form, type FormDefinition, type FormDocument, FormDocumentValidation, FormEditor, FormFieldsValidation, type FormSectionEntry, type FormSectionItemProps, FormSections, type FormSnapshot, type FormValidationResult, type FormValues, FormValuesEditor, FormViewer, type NumberEditProps, type NumberViewProps, ROOT, type SectionContentItem, type SectionEditProps, type SectionViewProps, type SelectEditProps, type SelectOption, type SelectViewProps, type StringEditProps, type StringViewProps, type ViewerComponentMap, useFormContext };
199
+ export { type ArrayEditProps, type ArrayItemDef, type ArrayViewProps, type BaseEditFieldProps, type BaseViewFieldProps, type BooleanEditProps, type BooleanViewProps, type ContentItem, DEFAULT, type DateEditProps, type DateViewProps, DocumentError, type DocumentValidationError, type DocumentValidationErrorCode, type EditorArrayItemProps, type EditorComponentMap, type EditorFieldProps, type ErrorProps, type FieldContentItem, type FieldEntry, type FieldType, type FieldValidationError, type FieldValidationFieldEntry, type FileEditProps, type FileValue, type FileViewProps, Form, type FormDefinition, type FormDocument, FormDocumentValidation, FormEditor, FormFieldsValidation, type FormSectionEntry, type FormSectionItemProps, FormSections, type FormSnapshot, type FormValidationResult, type FormValues, FormValuesEditor, FormViewer, type NumberEditProps, type NumberViewProps, ROOT, type SectionContentItem, type SectionEditProps, type SectionViewProps, type SelectEditProps, type SelectOption, type SelectViewProps, type StringEditProps, type StringViewProps, type ViewerComponentMap, useFormContext, useFormSections };
194
200
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/constants.ts","../src/form-context.tsx","../src/form-document-validation.tsx","../src/types/base.ts","../src/types/editor.ts","../src/types/viewer.ts","../src/form-editor.tsx","../src/form-fields-validation.tsx","../src/form-sections.tsx","../src/form-viewer.tsx"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/constants.ts","../src/form-context.tsx","../src/form-document-validation.tsx","../src/types/base.ts","../src/types/editor.ts","../src/types/viewer.ts","../src/form-editor.tsx","../src/form-fields-validation.tsx","../src/use-form-sections.ts","../src/form-sections.tsx","../src/form-viewer.tsx"],"mappings":"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"}
package/dist/index.d.mts CHANGED
@@ -4,6 +4,8 @@ import { ComponentType, FC, PropsWithChildren, ReactNode } from "react";
4
4
  //#region src/constants.d.ts
5
5
  declare const ROOT: unique symbol;
6
6
  type ROOT = typeof ROOT;
7
+ declare const DEFAULT: unique symbol;
8
+ type DEFAULT = typeof DEFAULT;
7
9
  //#endregion
8
10
  //#region src/form-context.d.ts
9
11
  type FormContextValue = {
@@ -14,14 +16,14 @@ type FormContextValue = {
14
16
  validation: FormValidationResult$1 | undefined;
15
17
  documentErrors: readonly DocumentValidationError$1[] | undefined;
16
18
  fieldErrors: Map<number, FieldValidationError$1[]>;
17
- section: typeof ROOT | number | undefined;
19
+ section: typeof ROOT | typeof DEFAULT | number | undefined;
18
20
  showInlineValidation: boolean;
19
21
  };
20
22
  declare const useFormContext: () => FormContextValue;
21
23
  type FormProps = {
22
24
  definition?: FormDefinition$1;
23
25
  data?: FormDocument$1;
24
- section?: typeof ROOT | number;
26
+ section?: typeof ROOT | typeof DEFAULT | number;
25
27
  showInlineValidation?: boolean;
26
28
  children: ReactNode;
27
29
  };
@@ -166,11 +168,15 @@ type FormFieldsValidationProps = {
166
168
  };
167
169
  declare const FormFieldsValidation: FC<FormFieldsValidationProps>;
168
170
  //#endregion
169
- //#region src/form-sections.d.ts
171
+ //#region src/use-form-sections.d.ts
170
172
  type FormSectionEntry = Omit<SectionContentItem$1, 'id' | 'type'> & {
171
173
  id: typeof ROOT | number;
172
174
  };
175
+ declare const useFormSections: (defaultSectionTitle?: string, defaultSectionDescription?: string) => FormSectionEntry[];
176
+ //#endregion
177
+ //#region src/form-sections.d.ts
173
178
  type FormSectionItemProps = {
179
+ index: number;
174
180
  section: FormSectionEntry;
175
181
  active: boolean;
176
182
  select: () => void;
@@ -180,7 +186,7 @@ type FormSectionsProps = {
180
186
  item: ComponentType<FormSectionItemProps>;
181
187
  defaultSectionTitle?: string;
182
188
  defaultSectionDescription?: string;
183
- onSelect?: (id: typeof ROOT | number) => void;
189
+ onSelect?: (id: typeof ROOT | typeof DEFAULT | number) => void;
184
190
  };
185
191
  declare const FormSections: FC<FormSectionsProps>;
186
192
  //#endregion
@@ -190,5 +196,5 @@ type FormViewerProps = {
190
196
  };
191
197
  declare const FormViewer: FC<FormViewerProps>;
192
198
  //#endregion
193
- export { type ArrayEditProps, type ArrayItemDef, type ArrayViewProps, type BaseEditFieldProps, type BaseViewFieldProps, type BooleanEditProps, type BooleanViewProps, type ContentItem, type DateEditProps, type DateViewProps, DocumentError, type DocumentValidationError, type DocumentValidationErrorCode, type EditorArrayItemProps, type EditorComponentMap, type EditorFieldProps, type ErrorProps, type FieldContentItem, type FieldEntry, type FieldType, type FieldValidationError, type FieldValidationFieldEntry, type FileEditProps, type FileValue, type FileViewProps, Form, type FormDefinition, type FormDocument, FormDocumentValidation, FormEditor, FormFieldsValidation, type FormSectionEntry, type FormSectionItemProps, FormSections, type FormSnapshot, type FormValidationResult, type FormValues, FormValuesEditor, FormViewer, type NumberEditProps, type NumberViewProps, ROOT, type SectionContentItem, type SectionEditProps, type SectionViewProps, type SelectEditProps, type SelectOption, type SelectViewProps, type StringEditProps, type StringViewProps, type ViewerComponentMap, useFormContext };
199
+ export { type ArrayEditProps, type ArrayItemDef, type ArrayViewProps, type BaseEditFieldProps, type BaseViewFieldProps, type BooleanEditProps, type BooleanViewProps, type ContentItem, DEFAULT, type DateEditProps, type DateViewProps, DocumentError, type DocumentValidationError, type DocumentValidationErrorCode, type EditorArrayItemProps, type EditorComponentMap, type EditorFieldProps, type ErrorProps, type FieldContentItem, type FieldEntry, type FieldType, type FieldValidationError, type FieldValidationFieldEntry, type FileEditProps, type FileValue, type FileViewProps, Form, type FormDefinition, type FormDocument, FormDocumentValidation, FormEditor, FormFieldsValidation, type FormSectionEntry, type FormSectionItemProps, FormSections, type FormSnapshot, type FormValidationResult, type FormValues, FormValuesEditor, FormViewer, type NumberEditProps, type NumberViewProps, ROOT, type SectionContentItem, type SectionEditProps, type SectionViewProps, type SelectEditProps, type SelectOption, type SelectViewProps, type StringEditProps, type StringViewProps, type ViewerComponentMap, useFormContext, useFormSections };
194
200
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/constants.ts","../src/form-context.tsx","../src/form-document-validation.tsx","../src/types/base.ts","../src/types/editor.ts","../src/types/viewer.ts","../src/form-editor.tsx","../src/form-fields-validation.tsx","../src/form-sections.tsx","../src/form-viewer.tsx"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/constants.ts","../src/form-context.tsx","../src/form-document-validation.tsx","../src/types/base.ts","../src/types/editor.ts","../src/types/viewer.ts","../src/form-editor.tsx","../src/form-fields-validation.tsx","../src/use-form-sections.ts","../src/form-sections.tsx","../src/form-viewer.tsx"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -3,6 +3,7 @@ import { Fragment, createContext, useCallback, useContext, useMemo, useRef } fro
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  //#region src/constants.ts
5
5
  const ROOT = Symbol("ROOT");
6
+ const DEFAULT = Symbol("DEFAULT");
6
7
  //#endregion
7
8
  //#region src/form-context.tsx
8
9
  const FormContext = createContext(void 0);
@@ -245,15 +246,16 @@ const FormContent = (props) => {
245
246
  components: props.components,
246
247
  showInlineValidation
247
248
  };
248
- if (section === void 0) return /* @__PURE__ */ jsx(FormItems, {
249
+ const selectedSection = section === DEFAULT ? resolveDefaultSection(items, visibilityMap) : section;
250
+ if (selectedSection === void 0) return /* @__PURE__ */ jsx(FormItems, {
249
251
  items,
250
252
  ...sharedProps
251
253
  });
252
- if (section === ROOT) return /* @__PURE__ */ jsx(FormItems, {
254
+ if (selectedSection === ROOT) return /* @__PURE__ */ jsx(FormItems, {
253
255
  items: items.filter((item) => item.type !== "section"),
254
256
  ...sharedProps
255
257
  });
256
- const foundSection = findSection(items, section);
258
+ const foundSection = findSection(items, selectedSection);
257
259
  if (!foundSection || !visibilityMap.get(foundSection.id)) return null;
258
260
  const Section = props.components.section;
259
261
  return /* @__PURE__ */ jsx(Section, {
@@ -264,6 +266,10 @@ const FormContent = (props) => {
264
266
  })
265
267
  }, foundSection.id);
266
268
  };
269
+ const resolveDefaultSection = (items, visibilityMap) => {
270
+ if (items.filter((item) => item.type !== "section").some((item) => visibilityMap.get(item.id))) return ROOT;
271
+ return items.find((item) => item.type === "section" && visibilityMap.get(item.id) !== false)?.id;
272
+ };
267
273
  //#endregion
268
274
  //#region src/form-editor.tsx
269
275
  const FormEditor = ({ components, onChange }) => {
@@ -415,10 +421,10 @@ const FormFieldsValidation = ({ container: ContainerComponent, field: FieldCompo
415
421
  }, group.field?.id)) });
416
422
  };
417
423
  //#endregion
418
- //#region src/form-sections.tsx
419
- const FormSections = ({ container: Container, item: Item, defaultSectionTitle = "General", defaultSectionDescription, onSelect }) => {
420
- const { definition, section, visibilityMap, data, documentErrors } = useFormContext();
421
- const entries = useMemo(() => {
424
+ //#region src/use-form-sections.ts
425
+ const useFormSections = (defaultSectionTitle = "General", defaultSectionDescription) => {
426
+ const { definition, visibilityMap, data } = useFormContext();
427
+ return useMemo(() => {
422
428
  if (!definition) return [];
423
429
  const result = [];
424
430
  const rootFields = definition.content.filter((item) => item.type !== "section");
@@ -441,10 +447,17 @@ const FormSections = ({ container: Container, item: Item, defaultSectionTitle =
441
447
  defaultSectionTitle,
442
448
  defaultSectionDescription
443
449
  ]);
450
+ };
451
+ //#endregion
452
+ //#region src/form-sections.tsx
453
+ const FormSections = ({ container: Container, item: Item, defaultSectionTitle, defaultSectionDescription, onSelect }) => {
454
+ const { definition, data, documentErrors, section } = useFormContext();
455
+ const entries = useFormSections(defaultSectionTitle, defaultSectionDescription);
444
456
  if (!definition || !data || documentErrors && documentErrors.length > 0) return null;
445
- return /* @__PURE__ */ jsx(Container, { children: entries.map((entry) => /* @__PURE__ */ jsx(Item, {
457
+ return /* @__PURE__ */ jsx(Container, { children: entries.map((entry, index) => /* @__PURE__ */ jsx(Item, {
458
+ index,
446
459
  section: entry,
447
- active: entry.id === section,
460
+ active: section === DEFAULT ? index === 0 : entry.id === section,
448
461
  select: () => onSelect?.(entry.id)
449
462
  }, entry.id === ROOT ? "root" : String(entry.id))) });
450
463
  };
@@ -465,6 +478,6 @@ const FormViewer = ({ components }) => {
465
478
  });
466
479
  };
467
480
  //#endregion
468
- export { DocumentError, Form, FormDocumentValidation, FormEditor, FormFieldsValidation, FormSections, FormValuesEditor, FormViewer, ROOT, useFormContext };
481
+ export { DEFAULT, DocumentError, Form, FormDocumentValidation, FormEditor, FormFieldsValidation, FormSections, FormValuesEditor, FormViewer, ROOT, useFormContext, useFormSections };
469
482
 
470
483
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["DocumentError"],"sources":["../src/constants.ts","../src/form-context.tsx","../src/form-document-validation.tsx","../src/form/utils.ts","../src/form/form-items.tsx","../src/form/form-content.tsx","../src/form-editor.tsx","../src/form-fields-validation.tsx","../src/form-sections.tsx","../src/form-viewer.tsx"],"sourcesContent":["export const ROOT: unique symbol = Symbol('ROOT')\nexport type ROOT = typeof ROOT\n","import { createContext, type FC, type ReactNode, useContext, useMemo } from 'react'\n\nimport {\n DocumentError,\n DocumentValidationError,\n FieldValidationError,\n FormDefinition,\n FormDocument,\n FormEngine,\n FormValidationResult,\n} from '@bluprynt/forms-core'\n\nimport type { ROOT } from './constants'\n\ntype FormContextValue = {\n definition: FormDefinition | undefined\n data: FormDocument | undefined\n engine: FormEngine | undefined\n visibilityMap: Map<number, boolean>\n validation: FormValidationResult | undefined\n documentErrors: readonly DocumentValidationError[] | undefined\n fieldErrors: Map<number, FieldValidationError[]>\n section: typeof ROOT | number | undefined\n showInlineValidation: boolean\n}\n\nconst FormContext = createContext<FormContextValue | undefined>(undefined)\n\nexport const useFormContext = (): FormContextValue => {\n const context = useContext(FormContext)\n if (!context) throw new Error('useFormContext must be used within a <Form> provider')\n\n return context\n}\n\ntype FormProps = {\n definition?: FormDefinition\n data?: FormDocument\n section?: typeof ROOT | number\n showInlineValidation?: boolean\n children: ReactNode\n}\n\nexport const Form: FC<FormProps> = ({ definition, data, section, showInlineValidation = true, children }) => {\n const { engine, documentErrors: definitionErrors } = useMemo(() => {\n if (!definition) return {}\n\n try {\n return { engine: new FormEngine(definition) }\n } catch (error) {\n if (error instanceof DocumentError) return { documentErrors: error.errors }\n throw error\n }\n }, [definition])\n\n const { visibilityMap, validation, documentErrors, fieldErrors } = useMemo(() => {\n const visibilityMap = engine && data ? engine.getVisibilityMap(data) : new Map<number, boolean>()\n const validation =\n engine && data\n ? engine.validate(data)\n : ({\n valid: true,\n fieldErrors: new Map<number, FieldValidationError[]>(),\n } satisfies FormValidationResult)\n\n return {\n visibilityMap,\n validation,\n documentErrors: [...(definitionErrors ?? []), ...(validation?.documentErrors ?? [])],\n fieldErrors: validation?.fieldErrors ?? new Map<number, FieldValidationError[]>(),\n } as const\n }, [engine, data, definitionErrors])\n\n const value: FormContextValue = {\n definition,\n data,\n engine,\n visibilityMap,\n validation,\n documentErrors,\n fieldErrors,\n section,\n showInlineValidation,\n } as const\n\n return <FormContext.Provider value={value}>{children}</FormContext.Provider>\n}\n","import type { ComponentType, FC, PropsWithChildren } from 'react'\n\nimport type { DocumentValidationError } from '@bluprynt/forms-core'\n\nimport { useFormContext } from './form-context'\n\ntype FormDocumentValidationProps = {\n container: ComponentType<PropsWithChildren>\n error: ComponentType<DocumentValidationError>\n}\n\nexport const FormDocumentValidation: FC<FormDocumentValidationProps> = ({\n container: ContainerComponent,\n error: ErrorComponent,\n}) => {\n const { documentErrors } = useFormContext()\n\n if (!documentErrors?.length) return null\n\n return (\n <ContainerComponent>\n {documentErrors.map((error, index) => (\n <ErrorComponent\n // biome-ignore lint/suspicious/noArrayIndexKey: index is unique in array\n key={`error-${error.code}-${error.itemId ?? ''}-${index}`}\n {...error}\n />\n ))}\n </ContainerComponent>\n )\n}\n","import type {\n ArrayItemDef,\n ContentItem,\n FieldContentItem,\n FieldType,\n FieldValidationError,\n SectionContentItem,\n} from '@bluprynt/forms-core'\n\n/**\n * Retrieves validation errors for a specific field from the pre-indexed error map.\n *\n * Uses O(1) map lookup by `fieldId`. When `itemIndex` is omitted, returns only\n * **field-level** errors (those without an `itemIndex`). When `itemIndex` is\n * provided, returns only **item-level** errors matching the given array item index.\n *\n * @param fieldErrors - Map from field id to its validation errors.\n * @param fieldId - The numeric ID of the field to retrieve errors for.\n * @param itemIndex - Optional zero-based index of the array item. When omitted, only\n * field-level errors (where `itemIndex` is `null` / `undefined`) are returned.\n * @returns Errors for the given field (and optionally item index). Empty array if none.\n *\n * @example\n * ```ts\n * // Field-level errors only (no itemIndex on the error)\n * getFieldErrors(fieldErrors, 5)\n *\n * // Errors for the third item of array field 5\n * getFieldErrors(fieldErrors, 5, 2)\n * ```\n */\nexport const getFieldErrors = (\n fieldErrors: Map<number, FieldValidationError[]>,\n fieldId: number,\n itemIndex?: number,\n): FieldValidationError[] => {\n const errors = fieldErrors.get(fieldId) ?? []\n if (itemIndex === undefined) return errors.filter((e) => e.itemIndex == null)\n return errors.filter((e) => e.itemIndex === itemIndex)\n}\n\n/**\n * Creates a synthetic {@link FieldContentItem} that represents a single item inside an array field.\n *\n * Array fields store their per-item schema in `arrayField.item` ({@link ArrayItemDef}).\n * Components that render individual array items need a standard `FieldContentItem` shape,\n * so this helper projects the item definition into one, preserving the parent field's `id`\n * while adopting the item's `type`, `label`, `description`, `validation`, and `options`.\n *\n * @param arrayField - The array field definition whose `.item` property describes the item schema.\n * @param _index - The zero-based position of the item in the array (reserved for future use,\n * e.g. per-item overrides).\n * @returns A `FieldContentItem` that can be passed directly to a typed field component.\n *\n * @example\n * ```ts\n * const arrayField: FieldContentItem = {\n * id: 10, type: 'array', label: 'Tags',\n * item: { type: 'string', label: 'Tag' },\n * }\n *\n * const itemDef = getArrayField(arrayField, 0)\n * // → { id: 10, type: 'string', label: 'Tag', ... }\n * ```\n */\nexport const getArrayField = (arrayField: FieldContentItem, _index: number): FieldContentItem => {\n const itemDef = arrayField.item as ArrayItemDef\n return {\n id: arrayField.id,\n type: itemDef.type as FieldType,\n label: itemDef.label,\n description: itemDef.description,\n validation: itemDef.validation as FieldContentItem['validation'],\n options: itemDef.options,\n }\n}\n\n/**\n * Recursively searches content items for a section with the given id.\n *\n * Walks the content tree depth-first, checking sections and their nested\n * content. Returns the first matching {@link SectionContentItem}, or\n * `undefined` if no section with that id exists.\n *\n * @param items - The content items to search through.\n * @param sectionId - The numeric id of the section to find.\n * @returns The matching section, or `undefined` if not found.\n *\n * @example\n * ```ts\n * const section = findSection(definition.content, 42)\n * if (section) {\n * // render section.content\n * }\n * ```\n */\nexport const findSection = (items: ContentItem[], sectionId: number): SectionContentItem | undefined => {\n for (const item of items) {\n if (item.type === 'section') {\n if (item.id === sectionId) return item\n const found = findSection(item.content, sectionId)\n if (found) return found\n }\n }\n return undefined\n}\n","import { type FC, Fragment } from 'react'\n\nimport type {\n ArrayItemDef,\n ContentItem,\n FieldContentItem,\n FieldValidationError,\n FormValues,\n} from '@bluprynt/forms-core'\n\nimport type { EditorArrayItemProps, EditorComponentMap, EditorFieldProps, ViewerComponentMap } from '../types'\nimport { getArrayField, getFieldErrors } from './utils'\n\ntype FormItemsProps = {\n items: ContentItem[]\n visibilityMap: Map<number, boolean>\n values: FormValues\n fieldErrors: Map<number, FieldValidationError[]>\n components: ViewerComponentMap | EditorComponentMap\n showInlineValidation: boolean\n renderFieldProps?: (field: FieldContentItem) => EditorFieldProps\n renderArrayItemProps?: (arrayField: FieldContentItem, index: number) => EditorArrayItemProps\n}\n\nexport const FormItems: FC<FormItemsProps> = ({\n items,\n visibilityMap,\n values,\n fieldErrors,\n components,\n showInlineValidation,\n renderFieldProps,\n renderArrayItemProps,\n}) => {\n const SectionComponent = components.section\n const ErrorComponent = showInlineValidation ? components.error : undefined\n\n const elements: React.ReactNode[] = []\n\n for (const item of items) {\n if (!visibilityMap.get(item.id)) continue\n\n if (item.type === 'section') {\n elements.push(\n <SectionComponent key={item.id} section={item}>\n <FormItems\n items={item.content}\n visibilityMap={visibilityMap}\n values={values}\n fieldErrors={fieldErrors}\n components={components}\n showInlineValidation={showInlineValidation}\n renderFieldProps={renderFieldProps}\n renderArrayItemProps={renderArrayItemProps}\n />\n </SectionComponent>,\n )\n } else if (item.type === 'array') {\n const errors = getFieldErrors(fieldErrors, item.id)\n const modeProps = renderFieldProps?.(item) ?? {}\n\n const ArrayComponent = components.array as React.ComponentType<Record<string, unknown>>\n const arrayValue = (values[String(item.id)] as unknown[] | undefined) ?? []\n const itemDef = item.item as ArrayItemDef\n const ItemComponent = components[\n itemDef.type as keyof Omit<ViewerComponentMap, 'array' | 'section' | 'error'>\n ] as React.ComponentType<Record<string, unknown>> | undefined\n\n elements.push(\n <ArrayComponent\n key={item.id}\n field={item}\n value={values[String(item.id)]}\n itemDef={item.item}\n errors={errors}\n {...modeProps}>\n {ItemComponent\n ? arrayValue.map((itemValue, index) => {\n const itemErrors = getFieldErrors(fieldErrors, item.id, index)\n const synthetic = getArrayField(item, index)\n const itemModeProps = renderArrayItemProps?.(item, index) ?? {}\n\n const baseProps: Record<string, unknown> = {\n field: synthetic,\n value: itemValue,\n errors: itemErrors,\n ...itemModeProps,\n }\n\n if (itemDef.type === 'select') {\n baseProps.options = itemDef.options ?? []\n }\n\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey: index is unique in array\n <Fragment key={`${item.id}-${index}`}>\n <ItemComponent {...baseProps} />\n {ErrorComponent && itemErrors.length > 0 && (\n <ErrorComponent errors={itemErrors} field={synthetic} />\n )}\n </Fragment>\n )\n })\n : null}\n </ArrayComponent>,\n )\n\n if (ErrorComponent && errors.length > 0) {\n elements.push(<ErrorComponent key={`${item.id}-error`} errors={errors} field={item} />)\n }\n } else {\n const errors = getFieldErrors(fieldErrors, item.id)\n const modeProps = renderFieldProps?.(item) ?? {}\n\n const fieldProps: Record<string, unknown> = {\n field: item,\n value: values[String(item.id)],\n errors,\n ...modeProps,\n }\n\n if (item.type === 'select') fieldProps.options = (item as FieldContentItem).options ?? []\n\n const fieldType = item.type as keyof Omit<ViewerComponentMap, 'array' | 'section' | 'error'>\n const FieldComponent = components[fieldType] as React.ComponentType<Record<string, unknown>>\n\n elements.push(<FieldComponent key={item.id} {...fieldProps} />)\n\n if (ErrorComponent && errors.length > 0)\n elements.push(<ErrorComponent key={`${item.id}-error`} errors={errors} field={item} />)\n }\n }\n\n if (elements.length === 0) return null\n\n return elements\n}\n","import type { FC } from 'react'\n\nimport type { ContentItem, FieldContentItem, FieldValidationError, FormValues } from '@bluprynt/forms-core'\n\nimport { ROOT } from '../constants'\nimport type { EditorArrayItemProps, EditorComponentMap, EditorFieldProps, ViewerComponentMap } from '../types'\nimport { FormItems } from './form-items'\nimport { findSection } from './utils'\n\ntype FormContentBaseProps = {\n items: ContentItem[]\n visibilityMap: Map<number, boolean>\n values: FormValues\n fieldErrors: Map<number, FieldValidationError[]>\n section?: typeof ROOT | number\n showInlineValidation: boolean\n}\n\ntype FormContentViewerProps = FormContentBaseProps & {\n mode: 'viewer'\n components: ViewerComponentMap\n}\n\ntype FormContentEditorProps = FormContentBaseProps & {\n mode: 'editor'\n components: EditorComponentMap\n renderFieldProps: (field: FieldContentItem) => EditorFieldProps\n renderArrayItemProps: (arrayField: FieldContentItem, index: number) => EditorArrayItemProps\n}\n\nexport type FormContentProps = FormContentViewerProps | FormContentEditorProps\n\nexport const FormContent: FC<FormContentProps> = (props) => {\n const { items, visibilityMap, values, fieldErrors, section, showInlineValidation } = props\n\n const sharedProps =\n props.mode === 'editor'\n ? {\n visibilityMap,\n values,\n fieldErrors,\n components: props.components,\n showInlineValidation,\n renderFieldProps: props.renderFieldProps,\n renderArrayItemProps: props.renderArrayItemProps,\n }\n : {\n visibilityMap,\n values,\n fieldErrors,\n components: props.components,\n showInlineValidation,\n }\n\n if (section === undefined) return <FormItems items={items} {...sharedProps} />\n\n if (section === ROOT) {\n const nonSectionItems = items.filter((item) => item.type !== 'section')\n return <FormItems items={nonSectionItems} {...sharedProps} />\n }\n\n const foundSection = findSection(items, section)\n if (!foundSection || !visibilityMap.get(foundSection.id)) return null\n\n const Section = props.components.section\n return (\n <Section key={foundSection.id} section={foundSection}>\n <FormItems items={foundSection.content} {...sharedProps} />\n </Section>\n )\n}\n","import { type FC, useCallback, useRef } from 'react'\n\nimport { FieldContentItem, FormDocument, FormEngine, FormValidationResult } from '@bluprynt/forms-core'\n\nimport { FormContent } from './form'\nimport { useFormContext } from './form-context'\nimport type { EditorArrayItemProps, EditorComponentMap, EditorFieldProps } from './types'\n\ntype FormEditorProps = {\n components: EditorComponentMap\n onChange: (data: FormDocument, validation: FormValidationResult) => void\n}\n\nexport const FormEditor: FC<FormEditorProps> = ({ components, onChange }) => {\n const { definition, data, visibilityMap, fieldErrors, section, engine, showInlineValidation, documentErrors } =\n useFormContext()\n\n const { renderFieldProps, renderArrayItemProps } = useEditorHandlers(engine, data, onChange)\n\n if (!definition || !data || (documentErrors && documentErrors.length > 0)) return null\n\n return (\n <FormContent\n mode=\"editor\"\n items={definition.content}\n visibilityMap={visibilityMap}\n values={data.values}\n fieldErrors={fieldErrors}\n components={components}\n section={section}\n showInlineValidation={showInlineValidation}\n renderFieldProps={renderFieldProps}\n renderArrayItemProps={renderArrayItemProps}\n />\n )\n}\n\nexport const useEditorHandlers = (\n engine: FormEngine | undefined,\n data: FormDocument | undefined,\n onChange: (data: FormDocument, validation: FormValidationResult) => void,\n): {\n renderFieldProps: (field: FieldContentItem) => EditorFieldProps\n renderArrayItemProps: (field: FieldContentItem, index: number) => EditorArrayItemProps\n} => {\n // Latest ref pattern\n const stateRef = useRef({ data, onChange, engine })\n stateRef.current = { data, onChange, engine }\n\n // Per-field onChange handler\n\n const fieldOnChangeMap = useRef(new Map<string, (value: unknown) => void>())\n const getFieldOnChange = useCallback((fieldId: number): ((value: unknown) => void) => {\n const key = String(fieldId)\n\n let handler = fieldOnChangeMap.current.get(key)\n if (!handler) {\n handler = (newValue: unknown) => {\n const { data, onChange, engine } = stateRef.current\n if (!data || !engine) return\n\n const document: FormDocument = { ...data, values: { ...data.values, [key]: newValue } }\n\n onChange(document, engine.validate(document))\n }\n fieldOnChangeMap.current.set(key, handler)\n }\n return handler\n }, [])\n\n // Array mutation handlers\n\n const arrayHandlersMap = useRef(\n new Map<\n string,\n {\n onAddItem: () => void\n onRemoveItem: (index: number) => void\n onMoveItem: (fromIndex: number, toIndex: number) => void\n }\n >(),\n )\n const getArrayHandlers = useCallback((fieldId: number) => {\n const key = String(fieldId)\n\n let handlers = arrayHandlersMap.current.get(key)\n if (!handlers) {\n const fire = (mutate: (arr: unknown[]) => unknown[]) => {\n const { data, onChange, engine } = stateRef.current\n if (!data || !engine) return\n\n const items = (data.values[key] as unknown[] | undefined) ?? []\n const document: FormDocument = { ...data, values: { ...data.values, [key]: mutate([...items]) } }\n\n onChange(document, engine.validate(document))\n }\n\n handlers = {\n onAddItem: () =>\n fire((values) => {\n values.push(undefined)\n return values\n }),\n onRemoveItem: (index: number) =>\n fire((values) => {\n values.splice(index, 1)\n return values\n }),\n onMoveItem: (fromIndex: number, toIndex: number) =>\n fire((values) => {\n const [moved] = values.splice(fromIndex, 1)\n values.splice(toIndex, 0, moved)\n return values\n }),\n }\n arrayHandlersMap.current.set(key, handlers)\n }\n return handlers\n }, [])\n\n // Array item onChange handler\n\n const arrayItemOnChangeMap = useRef(new Map<string, (value: unknown) => void>())\n const getArrayItemOnChange = useCallback((fieldId: number, index: number): ((value: unknown) => void) => {\n const mapKey = `${fieldId}-${index}`\n\n let handler = arrayItemOnChangeMap.current.get(mapKey)\n if (!handler) {\n handler = (newValue: unknown) => {\n const fieldKey = String(fieldId)\n\n const { data, onChange, engine } = stateRef.current\n if (!data || !engine) return\n\n const items = [...((data.values[fieldKey] as unknown[] | undefined) ?? [])]\n items[index] = newValue\n\n const document: FormDocument = { ...data, values: { ...data.values, [fieldKey]: items } }\n onChange(document, engine.validate(document))\n }\n arrayItemOnChangeMap.current.set(mapKey, handler)\n }\n return handler\n }, [])\n\n return {\n renderFieldProps: (field: FieldContentItem): EditorFieldProps => {\n if (field.type === 'array') {\n return {\n onChange: getFieldOnChange(field.id),\n ...getArrayHandlers(field.id),\n }\n }\n return { onChange: getFieldOnChange(field.id) }\n },\n renderArrayItemProps: (field: FieldContentItem, index: number): EditorArrayItemProps => ({\n onChange: getArrayItemOnChange(field.id, index),\n }),\n } as const\n}\n","import { type ComponentType, type FC, type PropsWithChildren, useMemo } from 'react'\n\nimport type { FieldEntry, FieldValidationError } from '@bluprynt/forms-core'\n\nimport { useFormContext } from './form-context'\n\nexport type FieldValidationFieldEntry = {\n field: FieldEntry | undefined\n errors: FieldValidationError[]\n}\n\ntype FormFieldsValidationProps = {\n container: ComponentType<PropsWithChildren>\n field: ComponentType<PropsWithChildren<FieldValidationFieldEntry>>\n error: ComponentType<FieldValidationError>\n}\n\nexport const FormFieldsValidation: FC<FormFieldsValidationProps> = ({\n container: ContainerComponent,\n field: FieldComponent,\n error: ErrorComponent,\n}) => {\n const { engine, data, fieldErrors, visibilityMap } = useFormContext()\n\n const groups = useMemo(() => {\n if (!engine || !data || fieldErrors.size === 0) return []\n\n const result: FieldValidationFieldEntry[] = []\n\n for (const [fieldId, errors] of fieldErrors) {\n if (visibilityMap.get(fieldId) === false) continue\n\n result.push({\n field: engine.getFieldDef(fieldId),\n errors,\n })\n }\n\n return result\n }, [engine, data, fieldErrors, visibilityMap])\n\n if (groups.length === 0) return null\n\n return (\n <ContainerComponent>\n {groups.map((group) => (\n <FieldComponent key={group.field?.id} {...group}>\n {group.errors.map((error) => (\n <ErrorComponent key={`${error.fieldId}-${error.rule}-${error.itemIndex ?? ''}`} {...error} />\n ))}\n </FieldComponent>\n ))}\n </ContainerComponent>\n )\n}\n","import { type ComponentType, type FC, type PropsWithChildren, useMemo } from 'react'\n\nimport type { SectionContentItem } from '@bluprynt/forms-core'\n\nimport { ROOT } from './constants'\nimport { useFormContext } from './form-context'\n\nexport type FormSectionEntry = Omit<SectionContentItem, 'id' | 'type'> & {\n id: typeof ROOT | number\n}\n\nexport type FormSectionItemProps = {\n section: FormSectionEntry\n active: boolean\n select: () => void\n}\n\ntype FormSectionsProps = {\n container: ComponentType<PropsWithChildren>\n item: ComponentType<FormSectionItemProps>\n defaultSectionTitle?: string\n defaultSectionDescription?: string\n onSelect?: (id: typeof ROOT | number) => void\n}\n\nexport const FormSections: FC<FormSectionsProps> = ({\n container: Container,\n item: Item,\n defaultSectionTitle = 'General',\n defaultSectionDescription,\n onSelect,\n}) => {\n const { definition, section, visibilityMap, data, documentErrors } = useFormContext()\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: invalidate section list when data changes\n const entries = useMemo(() => {\n if (!definition) return []\n\n const result: FormSectionEntry[] = []\n\n const rootFields = definition.content.filter((item) => item.type !== 'section')\n if (rootFields.some((item) => visibilityMap.get(item.id)))\n result.push({\n id: ROOT,\n title: defaultSectionTitle,\n description: defaultSectionDescription,\n content: rootFields,\n condition: undefined,\n })\n\n for (const item of definition.content) {\n if (item.type === 'section') {\n if (visibilityMap.get(item.id) === false) continue\n\n result.push(item)\n }\n }\n\n return result\n }, [definition?.content, visibilityMap, data, defaultSectionTitle, defaultSectionDescription])\n\n if (!definition || !data || (documentErrors && documentErrors.length > 0)) return null\n\n return (\n <Container>\n {entries.map((entry) => (\n <Item\n key={entry.id === ROOT ? 'root' : String(entry.id)}\n section={entry}\n active={entry.id === section}\n select={() => onSelect?.(entry.id)}\n />\n ))}\n </Container>\n )\n}\n","import type { FC } from 'react'\n\nimport { FormContent } from './form'\nimport { useFormContext } from './form-context'\nimport type { ViewerComponentMap } from './types'\n\ntype FormViewerProps = {\n components: ViewerComponentMap\n}\n\nexport const FormViewer: FC<FormViewerProps> = ({ components }) => {\n const { definition, data, visibilityMap, fieldErrors, section, showInlineValidation, documentErrors } =\n useFormContext()\n\n if (!definition || !data || (documentErrors && documentErrors.length > 0)) return null\n\n return (\n <FormContent\n mode=\"viewer\"\n items={definition.content}\n visibilityMap={visibilityMap}\n values={data.values}\n fieldErrors={fieldErrors}\n components={components}\n section={section}\n showInlineValidation={showInlineValidation}\n />\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["DocumentError"],"sources":["../src/constants.ts","../src/form-context.tsx","../src/form-document-validation.tsx","../src/form/utils.ts","../src/form/form-items.tsx","../src/form/form-content.tsx","../src/form-editor.tsx","../src/form-fields-validation.tsx","../src/use-form-sections.ts","../src/form-sections.tsx","../src/form-viewer.tsx"],"sourcesContent":["export const ROOT: unique symbol = Symbol('ROOT')\nexport type ROOT = typeof ROOT\n\nexport const DEFAULT: unique symbol = Symbol('DEFAULT')\nexport type DEFAULT = typeof DEFAULT\n","import { createContext, type FC, type ReactNode, useContext, useMemo } from 'react'\n\nimport {\n DocumentError,\n DocumentValidationError,\n FieldValidationError,\n FormDefinition,\n FormDocument,\n FormEngine,\n FormValidationResult,\n} from '@bluprynt/forms-core'\n\nimport type { DEFAULT, ROOT } from './constants'\n\ntype FormContextValue = {\n definition: FormDefinition | undefined\n data: FormDocument | undefined\n engine: FormEngine | undefined\n visibilityMap: Map<number, boolean>\n validation: FormValidationResult | undefined\n documentErrors: readonly DocumentValidationError[] | undefined\n fieldErrors: Map<number, FieldValidationError[]>\n section: typeof ROOT | typeof DEFAULT | number | undefined\n showInlineValidation: boolean\n}\n\nconst FormContext = createContext<FormContextValue | undefined>(undefined)\n\nexport const useFormContext = (): FormContextValue => {\n const context = useContext(FormContext)\n if (!context) throw new Error('useFormContext must be used within a <Form> provider')\n\n return context\n}\n\ntype FormProps = {\n definition?: FormDefinition\n data?: FormDocument\n section?: typeof ROOT | typeof DEFAULT | number\n showInlineValidation?: boolean\n children: ReactNode\n}\n\nexport const Form: FC<FormProps> = ({ definition, data, section, showInlineValidation = true, children }) => {\n const { engine, documentErrors: definitionErrors } = useMemo(() => {\n if (!definition) return {}\n\n try {\n return { engine: new FormEngine(definition) }\n } catch (error) {\n if (error instanceof DocumentError) return { documentErrors: error.errors }\n throw error\n }\n }, [definition])\n\n const { visibilityMap, validation, documentErrors, fieldErrors } = useMemo(() => {\n const visibilityMap = engine && data ? engine.getVisibilityMap(data) : new Map<number, boolean>()\n const validation =\n engine && data\n ? engine.validate(data)\n : ({\n valid: true,\n fieldErrors: new Map<number, FieldValidationError[]>(),\n } satisfies FormValidationResult)\n\n return {\n visibilityMap,\n validation,\n documentErrors: [...(definitionErrors ?? []), ...(validation?.documentErrors ?? [])],\n fieldErrors: validation?.fieldErrors ?? new Map<number, FieldValidationError[]>(),\n } as const\n }, [engine, data, definitionErrors])\n\n const value: FormContextValue = {\n definition,\n data,\n engine,\n visibilityMap,\n validation,\n documentErrors,\n fieldErrors,\n section,\n showInlineValidation,\n } as const\n\n return <FormContext.Provider value={value}>{children}</FormContext.Provider>\n}\n","import type { ComponentType, FC, PropsWithChildren } from 'react'\n\nimport type { DocumentValidationError } from '@bluprynt/forms-core'\n\nimport { useFormContext } from './form-context'\n\ntype FormDocumentValidationProps = {\n container: ComponentType<PropsWithChildren>\n error: ComponentType<DocumentValidationError>\n}\n\nexport const FormDocumentValidation: FC<FormDocumentValidationProps> = ({\n container: ContainerComponent,\n error: ErrorComponent,\n}) => {\n const { documentErrors } = useFormContext()\n\n if (!documentErrors?.length) return null\n\n return (\n <ContainerComponent>\n {documentErrors.map((error, index) => (\n <ErrorComponent\n // biome-ignore lint/suspicious/noArrayIndexKey: index is unique in array\n key={`error-${error.code}-${error.itemId ?? ''}-${index}`}\n {...error}\n />\n ))}\n </ContainerComponent>\n )\n}\n","import type {\n ArrayItemDef,\n ContentItem,\n FieldContentItem,\n FieldType,\n FieldValidationError,\n SectionContentItem,\n} from '@bluprynt/forms-core'\n\n/**\n * Retrieves validation errors for a specific field from the pre-indexed error map.\n *\n * Uses O(1) map lookup by `fieldId`. When `itemIndex` is omitted, returns only\n * **field-level** errors (those without an `itemIndex`). When `itemIndex` is\n * provided, returns only **item-level** errors matching the given array item index.\n *\n * @param fieldErrors - Map from field id to its validation errors.\n * @param fieldId - The numeric ID of the field to retrieve errors for.\n * @param itemIndex - Optional zero-based index of the array item. When omitted, only\n * field-level errors (where `itemIndex` is `null` / `undefined`) are returned.\n * @returns Errors for the given field (and optionally item index). Empty array if none.\n *\n * @example\n * ```ts\n * // Field-level errors only (no itemIndex on the error)\n * getFieldErrors(fieldErrors, 5)\n *\n * // Errors for the third item of array field 5\n * getFieldErrors(fieldErrors, 5, 2)\n * ```\n */\nexport const getFieldErrors = (\n fieldErrors: Map<number, FieldValidationError[]>,\n fieldId: number,\n itemIndex?: number,\n): FieldValidationError[] => {\n const errors = fieldErrors.get(fieldId) ?? []\n if (itemIndex === undefined) return errors.filter((e) => e.itemIndex == null)\n return errors.filter((e) => e.itemIndex === itemIndex)\n}\n\n/**\n * Creates a synthetic {@link FieldContentItem} that represents a single item inside an array field.\n *\n * Array fields store their per-item schema in `arrayField.item` ({@link ArrayItemDef}).\n * Components that render individual array items need a standard `FieldContentItem` shape,\n * so this helper projects the item definition into one, preserving the parent field's `id`\n * while adopting the item's `type`, `label`, `description`, `validation`, and `options`.\n *\n * @param arrayField - The array field definition whose `.item` property describes the item schema.\n * @param _index - The zero-based position of the item in the array (reserved for future use,\n * e.g. per-item overrides).\n * @returns A `FieldContentItem` that can be passed directly to a typed field component.\n *\n * @example\n * ```ts\n * const arrayField: FieldContentItem = {\n * id: 10, type: 'array', label: 'Tags',\n * item: { type: 'string', label: 'Tag' },\n * }\n *\n * const itemDef = getArrayField(arrayField, 0)\n * // → { id: 10, type: 'string', label: 'Tag', ... }\n * ```\n */\nexport const getArrayField = (arrayField: FieldContentItem, _index: number): FieldContentItem => {\n const itemDef = arrayField.item as ArrayItemDef\n return {\n id: arrayField.id,\n type: itemDef.type as FieldType,\n label: itemDef.label,\n description: itemDef.description,\n validation: itemDef.validation as FieldContentItem['validation'],\n options: itemDef.options,\n }\n}\n\n/**\n * Recursively searches content items for a section with the given id.\n *\n * Walks the content tree depth-first, checking sections and their nested\n * content. Returns the first matching {@link SectionContentItem}, or\n * `undefined` if no section with that id exists.\n *\n * @param items - The content items to search through.\n * @param sectionId - The numeric id of the section to find.\n * @returns The matching section, or `undefined` if not found.\n *\n * @example\n * ```ts\n * const section = findSection(definition.content, 42)\n * if (section) {\n * // render section.content\n * }\n * ```\n */\nexport const findSection = (items: ContentItem[], sectionId: number): SectionContentItem | undefined => {\n for (const item of items) {\n if (item.type === 'section') {\n if (item.id === sectionId) return item\n const found = findSection(item.content, sectionId)\n if (found) return found\n }\n }\n return undefined\n}\n","import { type FC, Fragment } from 'react'\n\nimport type {\n ArrayItemDef,\n ContentItem,\n FieldContentItem,\n FieldValidationError,\n FormValues,\n} from '@bluprynt/forms-core'\n\nimport type { EditorArrayItemProps, EditorComponentMap, EditorFieldProps, ViewerComponentMap } from '../types'\nimport { getArrayField, getFieldErrors } from './utils'\n\ntype FormItemsProps = {\n items: ContentItem[]\n visibilityMap: Map<number, boolean>\n values: FormValues\n fieldErrors: Map<number, FieldValidationError[]>\n components: ViewerComponentMap | EditorComponentMap\n showInlineValidation: boolean\n renderFieldProps?: (field: FieldContentItem) => EditorFieldProps\n renderArrayItemProps?: (arrayField: FieldContentItem, index: number) => EditorArrayItemProps\n}\n\nexport const FormItems: FC<FormItemsProps> = ({\n items,\n visibilityMap,\n values,\n fieldErrors,\n components,\n showInlineValidation,\n renderFieldProps,\n renderArrayItemProps,\n}) => {\n const SectionComponent = components.section\n const ErrorComponent = showInlineValidation ? components.error : undefined\n\n const elements: React.ReactNode[] = []\n\n for (const item of items) {\n if (!visibilityMap.get(item.id)) continue\n\n if (item.type === 'section') {\n elements.push(\n <SectionComponent key={item.id} section={item}>\n <FormItems\n items={item.content}\n visibilityMap={visibilityMap}\n values={values}\n fieldErrors={fieldErrors}\n components={components}\n showInlineValidation={showInlineValidation}\n renderFieldProps={renderFieldProps}\n renderArrayItemProps={renderArrayItemProps}\n />\n </SectionComponent>,\n )\n } else if (item.type === 'array') {\n const errors = getFieldErrors(fieldErrors, item.id)\n const modeProps = renderFieldProps?.(item) ?? {}\n\n const ArrayComponent = components.array as React.ComponentType<Record<string, unknown>>\n const arrayValue = (values[String(item.id)] as unknown[] | undefined) ?? []\n const itemDef = item.item as ArrayItemDef\n const ItemComponent = components[\n itemDef.type as keyof Omit<ViewerComponentMap, 'array' | 'section' | 'error'>\n ] as React.ComponentType<Record<string, unknown>> | undefined\n\n elements.push(\n <ArrayComponent\n key={item.id}\n field={item}\n value={values[String(item.id)]}\n itemDef={item.item}\n errors={errors}\n {...modeProps}>\n {ItemComponent\n ? arrayValue.map((itemValue, index) => {\n const itemErrors = getFieldErrors(fieldErrors, item.id, index)\n const synthetic = getArrayField(item, index)\n const itemModeProps = renderArrayItemProps?.(item, index) ?? {}\n\n const baseProps: Record<string, unknown> = {\n field: synthetic,\n value: itemValue,\n errors: itemErrors,\n ...itemModeProps,\n }\n\n if (itemDef.type === 'select') {\n baseProps.options = itemDef.options ?? []\n }\n\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey: index is unique in array\n <Fragment key={`${item.id}-${index}`}>\n <ItemComponent {...baseProps} />\n {ErrorComponent && itemErrors.length > 0 && (\n <ErrorComponent errors={itemErrors} field={synthetic} />\n )}\n </Fragment>\n )\n })\n : null}\n </ArrayComponent>,\n )\n\n if (ErrorComponent && errors.length > 0) {\n elements.push(<ErrorComponent key={`${item.id}-error`} errors={errors} field={item} />)\n }\n } else {\n const errors = getFieldErrors(fieldErrors, item.id)\n const modeProps = renderFieldProps?.(item) ?? {}\n\n const fieldProps: Record<string, unknown> = {\n field: item,\n value: values[String(item.id)],\n errors,\n ...modeProps,\n }\n\n if (item.type === 'select') fieldProps.options = (item as FieldContentItem).options ?? []\n\n const fieldType = item.type as keyof Omit<ViewerComponentMap, 'array' | 'section' | 'error'>\n const FieldComponent = components[fieldType] as React.ComponentType<Record<string, unknown>>\n\n elements.push(<FieldComponent key={item.id} {...fieldProps} />)\n\n if (ErrorComponent && errors.length > 0)\n elements.push(<ErrorComponent key={`${item.id}-error`} errors={errors} field={item} />)\n }\n }\n\n if (elements.length === 0) return null\n\n return elements\n}\n","import type { FC } from 'react'\n\nimport type { ContentItem, FieldContentItem, FieldValidationError, FormValues } from '@bluprynt/forms-core'\n\nimport { DEFAULT, ROOT } from '../constants'\nimport type { EditorArrayItemProps, EditorComponentMap, EditorFieldProps, ViewerComponentMap } from '../types'\nimport { FormItems } from './form-items'\nimport { findSection } from './utils'\n\ntype FormContentBaseProps = {\n items: ContentItem[]\n visibilityMap: Map<number, boolean>\n values: FormValues\n fieldErrors: Map<number, FieldValidationError[]>\n section?: typeof ROOT | typeof DEFAULT | number\n showInlineValidation: boolean\n}\n\ntype FormContentViewerProps = FormContentBaseProps & {\n mode: 'viewer'\n components: ViewerComponentMap\n}\n\ntype FormContentEditorProps = FormContentBaseProps & {\n mode: 'editor'\n components: EditorComponentMap\n renderFieldProps: (field: FieldContentItem) => EditorFieldProps\n renderArrayItemProps: (arrayField: FieldContentItem, index: number) => EditorArrayItemProps\n}\n\nexport type FormContentProps = FormContentViewerProps | FormContentEditorProps\n\nexport const FormContent: FC<FormContentProps> = (props) => {\n const { items, visibilityMap, values, fieldErrors, section, showInlineValidation } = props\n\n const sharedProps =\n props.mode === 'editor'\n ? {\n visibilityMap,\n values,\n fieldErrors,\n components: props.components,\n showInlineValidation,\n renderFieldProps: props.renderFieldProps,\n renderArrayItemProps: props.renderArrayItemProps,\n }\n : {\n visibilityMap,\n values,\n fieldErrors,\n components: props.components,\n showInlineValidation,\n }\n\n const selectedSection = section === DEFAULT ? resolveDefaultSection(items, visibilityMap) : section\n\n if (selectedSection === undefined) return <FormItems items={items} {...sharedProps} />\n\n if (selectedSection === ROOT) {\n const nonSectionItems = items.filter((item) => item.type !== 'section')\n return <FormItems items={nonSectionItems} {...sharedProps} />\n }\n\n const foundSection = findSection(items, selectedSection)\n if (!foundSection || !visibilityMap.get(foundSection.id)) return null\n\n const Section = props.components.section\n return (\n <Section key={foundSection.id} section={foundSection}>\n <FormItems items={foundSection.content} {...sharedProps} />\n </Section>\n )\n}\n\nconst resolveDefaultSection = (\n items: ContentItem[],\n visibilityMap: Map<number, boolean>,\n): typeof ROOT | number | undefined => {\n const rootFields = items.filter((item) => item.type !== 'section')\n if (rootFields.some((item) => visibilityMap.get(item.id))) return ROOT\n\n const firstVisibleSection = items.find((item) => item.type === 'section' && visibilityMap.get(item.id) !== false)\n\n return firstVisibleSection?.id\n}\n","import { type FC, useCallback, useRef } from 'react'\n\nimport { FieldContentItem, FormDocument, FormEngine, FormValidationResult } from '@bluprynt/forms-core'\n\nimport { FormContent } from './form'\nimport { useFormContext } from './form-context'\nimport type { EditorArrayItemProps, EditorComponentMap, EditorFieldProps } from './types'\n\ntype FormEditorProps = {\n components: EditorComponentMap\n onChange: (data: FormDocument, validation: FormValidationResult) => void\n}\n\nexport const FormEditor: FC<FormEditorProps> = ({ components, onChange }) => {\n const { definition, data, visibilityMap, fieldErrors, section, engine, showInlineValidation, documentErrors } =\n useFormContext()\n\n const { renderFieldProps, renderArrayItemProps } = useEditorHandlers(engine, data, onChange)\n\n if (!definition || !data || (documentErrors && documentErrors.length > 0)) return null\n\n return (\n <FormContent\n mode=\"editor\"\n items={definition.content}\n visibilityMap={visibilityMap}\n values={data.values}\n fieldErrors={fieldErrors}\n components={components}\n section={section}\n showInlineValidation={showInlineValidation}\n renderFieldProps={renderFieldProps}\n renderArrayItemProps={renderArrayItemProps}\n />\n )\n}\n\nexport const useEditorHandlers = (\n engine: FormEngine | undefined,\n data: FormDocument | undefined,\n onChange: (data: FormDocument, validation: FormValidationResult) => void,\n): {\n renderFieldProps: (field: FieldContentItem) => EditorFieldProps\n renderArrayItemProps: (field: FieldContentItem, index: number) => EditorArrayItemProps\n} => {\n // Latest ref pattern\n const stateRef = useRef({ data, onChange, engine })\n stateRef.current = { data, onChange, engine }\n\n // Per-field onChange handler\n\n const fieldOnChangeMap = useRef(new Map<string, (value: unknown) => void>())\n const getFieldOnChange = useCallback((fieldId: number): ((value: unknown) => void) => {\n const key = String(fieldId)\n\n let handler = fieldOnChangeMap.current.get(key)\n if (!handler) {\n handler = (newValue: unknown) => {\n const { data, onChange, engine } = stateRef.current\n if (!data || !engine) return\n\n const document: FormDocument = { ...data, values: { ...data.values, [key]: newValue } }\n\n onChange(document, engine.validate(document))\n }\n fieldOnChangeMap.current.set(key, handler)\n }\n return handler\n }, [])\n\n // Array mutation handlers\n\n const arrayHandlersMap = useRef(\n new Map<\n string,\n {\n onAddItem: () => void\n onRemoveItem: (index: number) => void\n onMoveItem: (fromIndex: number, toIndex: number) => void\n }\n >(),\n )\n const getArrayHandlers = useCallback((fieldId: number) => {\n const key = String(fieldId)\n\n let handlers = arrayHandlersMap.current.get(key)\n if (!handlers) {\n const fire = (mutate: (arr: unknown[]) => unknown[]) => {\n const { data, onChange, engine } = stateRef.current\n if (!data || !engine) return\n\n const items = (data.values[key] as unknown[] | undefined) ?? []\n const document: FormDocument = { ...data, values: { ...data.values, [key]: mutate([...items]) } }\n\n onChange(document, engine.validate(document))\n }\n\n handlers = {\n onAddItem: () =>\n fire((values) => {\n values.push(undefined)\n return values\n }),\n onRemoveItem: (index: number) =>\n fire((values) => {\n values.splice(index, 1)\n return values\n }),\n onMoveItem: (fromIndex: number, toIndex: number) =>\n fire((values) => {\n const [moved] = values.splice(fromIndex, 1)\n values.splice(toIndex, 0, moved)\n return values\n }),\n }\n arrayHandlersMap.current.set(key, handlers)\n }\n return handlers\n }, [])\n\n // Array item onChange handler\n\n const arrayItemOnChangeMap = useRef(new Map<string, (value: unknown) => void>())\n const getArrayItemOnChange = useCallback((fieldId: number, index: number): ((value: unknown) => void) => {\n const mapKey = `${fieldId}-${index}`\n\n let handler = arrayItemOnChangeMap.current.get(mapKey)\n if (!handler) {\n handler = (newValue: unknown) => {\n const fieldKey = String(fieldId)\n\n const { data, onChange, engine } = stateRef.current\n if (!data || !engine) return\n\n const items = [...((data.values[fieldKey] as unknown[] | undefined) ?? [])]\n items[index] = newValue\n\n const document: FormDocument = { ...data, values: { ...data.values, [fieldKey]: items } }\n onChange(document, engine.validate(document))\n }\n arrayItemOnChangeMap.current.set(mapKey, handler)\n }\n return handler\n }, [])\n\n return {\n renderFieldProps: (field: FieldContentItem): EditorFieldProps => {\n if (field.type === 'array') {\n return {\n onChange: getFieldOnChange(field.id),\n ...getArrayHandlers(field.id),\n }\n }\n return { onChange: getFieldOnChange(field.id) }\n },\n renderArrayItemProps: (field: FieldContentItem, index: number): EditorArrayItemProps => ({\n onChange: getArrayItemOnChange(field.id, index),\n }),\n } as const\n}\n","import { type ComponentType, type FC, type PropsWithChildren, useMemo } from 'react'\n\nimport type { FieldEntry, FieldValidationError } from '@bluprynt/forms-core'\n\nimport { useFormContext } from './form-context'\n\nexport type FieldValidationFieldEntry = {\n field: FieldEntry | undefined\n errors: FieldValidationError[]\n}\n\ntype FormFieldsValidationProps = {\n container: ComponentType<PropsWithChildren>\n field: ComponentType<PropsWithChildren<FieldValidationFieldEntry>>\n error: ComponentType<FieldValidationError>\n}\n\nexport const FormFieldsValidation: FC<FormFieldsValidationProps> = ({\n container: ContainerComponent,\n field: FieldComponent,\n error: ErrorComponent,\n}) => {\n const { engine, data, fieldErrors, visibilityMap } = useFormContext()\n\n const groups = useMemo(() => {\n if (!engine || !data || fieldErrors.size === 0) return []\n\n const result: FieldValidationFieldEntry[] = []\n\n for (const [fieldId, errors] of fieldErrors) {\n if (visibilityMap.get(fieldId) === false) continue\n\n result.push({\n field: engine.getFieldDef(fieldId),\n errors,\n })\n }\n\n return result\n }, [engine, data, fieldErrors, visibilityMap])\n\n if (groups.length === 0) return null\n\n return (\n <ContainerComponent>\n {groups.map((group) => (\n <FieldComponent key={group.field?.id} {...group}>\n {group.errors.map((error) => (\n <ErrorComponent key={`${error.fieldId}-${error.rule}-${error.itemIndex ?? ''}`} {...error} />\n ))}\n </FieldComponent>\n ))}\n </ContainerComponent>\n )\n}\n","import { useMemo } from 'react'\n\nimport type { SectionContentItem } from '@bluprynt/forms-core'\n\nimport { ROOT } from './constants'\nimport { useFormContext } from './form-context'\n\nexport type FormSectionEntry = Omit<SectionContentItem, 'id' | 'type'> & {\n id: typeof ROOT | number\n}\n\nexport const useFormSections = (\n defaultSectionTitle = 'General',\n defaultSectionDescription?: string,\n): FormSectionEntry[] => {\n const { definition, visibilityMap, data } = useFormContext()\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: invalidate section list when data changes\n return useMemo(() => {\n if (!definition) return []\n\n const result: FormSectionEntry[] = []\n\n const rootFields = definition.content.filter((item) => item.type !== 'section')\n if (rootFields.some((item) => visibilityMap.get(item.id)))\n result.push({\n id: ROOT,\n title: defaultSectionTitle,\n description: defaultSectionDescription,\n content: rootFields,\n condition: undefined,\n })\n\n for (const item of definition.content) {\n if (item.type === 'section') {\n if (visibilityMap.get(item.id) === false) continue\n\n result.push(item)\n }\n }\n\n return result\n }, [definition?.content, visibilityMap, data, defaultSectionTitle, defaultSectionDescription])\n}\n","import { type ComponentType, type FC, type PropsWithChildren } from 'react'\n\nimport { DEFAULT, ROOT } from './constants'\nimport { useFormContext } from './form-context'\nimport { type FormSectionEntry, useFormSections } from './use-form-sections'\n\nexport type { FormSectionEntry }\n\nexport type FormSectionItemProps = {\n index: number\n section: FormSectionEntry\n active: boolean\n select: () => void\n}\n\ntype FormSectionsProps = {\n container: ComponentType<PropsWithChildren>\n item: ComponentType<FormSectionItemProps>\n defaultSectionTitle?: string\n defaultSectionDescription?: string\n onSelect?: (id: typeof ROOT | typeof DEFAULT | number) => void\n}\n\nexport const FormSections: FC<FormSectionsProps> = ({\n container: Container,\n item: Item,\n defaultSectionTitle,\n defaultSectionDescription,\n onSelect,\n}) => {\n const { definition, data, documentErrors, section } = useFormContext()\n const entries = useFormSections(defaultSectionTitle, defaultSectionDescription)\n\n if (!definition || !data || (documentErrors && documentErrors.length > 0)) return null\n\n return (\n <Container>\n {entries.map((entry, index) => (\n <Item\n key={entry.id === ROOT ? 'root' : String(entry.id)}\n index={index}\n section={entry}\n active={section === DEFAULT ? index === 0 : entry.id === section}\n select={() => onSelect?.(entry.id)}\n />\n ))}\n </Container>\n )\n}\n","import type { FC } from 'react'\n\nimport { FormContent } from './form'\nimport { useFormContext } from './form-context'\nimport type { ViewerComponentMap } from './types'\n\ntype FormViewerProps = {\n components: ViewerComponentMap\n}\n\nexport const FormViewer: FC<FormViewerProps> = ({ components }) => {\n const { definition, data, visibilityMap, fieldErrors, section, showInlineValidation, documentErrors } =\n useFormContext()\n\n if (!definition || !data || (documentErrors && documentErrors.length > 0)) return null\n\n return (\n <FormContent\n mode=\"viewer\"\n items={definition.content}\n visibilityMap={visibilityMap}\n values={data.values}\n fieldErrors={fieldErrors}\n components={components}\n section={section}\n showInlineValidation={showInlineValidation}\n />\n )\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bluprynt/forms-viewer",
3
- "version": "1.0.0",
3
+ "version": "3.0.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/blupryntco/forms-engine.git",
@@ -24,7 +24,7 @@
24
24
  "peerDependencies": {
25
25
  "react": "^18.0.0 || ^19.0.0",
26
26
  "react-dom": "^18.0.0 || ^19.0.0",
27
- "@bluprynt/forms-core": "1.0.0"
27
+ "@bluprynt/forms-core": "3.0.0"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@testing-library/react": "16.3.2",
@@ -38,7 +38,7 @@
38
38
  "ts-jest": "29.4.6",
39
39
  "tsdown": "0.21.1",
40
40
  "typescript": "5.9.3",
41
- "@bluprynt/forms-core": "1.0.0",
41
+ "@bluprynt/forms-core": "3.0.0",
42
42
  "@repo/typescript-config": "0.0.0"
43
43
  },
44
44
  "scripts": {