@webiny/app-admin 6.5.0-beta.3 → 6.5.0-beta.5

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.
Files changed (100) hide show
  1. package/base/Base/FieldRenderers/HorizontalTabsRenderer.d.ts +2 -2
  2. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.d.ts +2 -2
  3. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js +1 -1
  4. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js.map +1 -1
  5. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +8 -4
  6. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.d.ts +2 -2
  7. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js +1 -1
  8. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js.map +1 -1
  9. package/base/Base/FieldRenderers/ObjectRenderer/{TemplatePicker.d.ts → TemplatePicker/AddTemplateButton.d.ts} +1 -1
  10. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/AddTemplateButton.js +24 -0
  11. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/AddTemplateButton.js.map +1 -0
  12. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.d.ts +13 -0
  13. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.js +21 -0
  14. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.js.map +1 -0
  15. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.d.ts +3 -0
  16. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.js +35 -0
  17. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.js.map +1 -0
  18. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.d.ts +8 -0
  19. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.js +22 -0
  20. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.js.map +1 -0
  21. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.d.ts +10 -0
  22. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.js +46 -0
  23. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.js.map +1 -0
  24. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.d.ts +8 -0
  25. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.js +16 -0
  26. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.js.map +1 -0
  27. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.d.ts +10 -0
  28. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.js +22 -0
  29. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.js.map +1 -0
  30. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.d.ts +3 -0
  31. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.js +35 -0
  32. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.js.map +1 -0
  33. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/index.d.ts +1 -0
  34. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/index.js +1 -0
  35. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/types.d.ts +6 -0
  36. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/types.js +0 -0
  37. package/base/Base/FieldRenderers/VerticalTabsRenderer.d.ts +2 -2
  38. package/components/IconPicker/IconPickerComponent.d.ts +2 -2
  39. package/components/IconPicker/IconPickerComponent.js +1 -1
  40. package/components/IconPicker/IconPickerComponent.js.map +1 -1
  41. package/components/ListView/ListViewBulkActions.d.ts +2 -2
  42. package/components/ListView/ListViewContent.d.ts +2 -2
  43. package/components/ListView/ListViewFilters.d.ts +2 -2
  44. package/components/ListView/index.d.ts +6 -6
  45. package/components/RolesMultiAutocomplete/index.js +1 -1
  46. package/components/RolesMultiAutocomplete/index.js.map +1 -1
  47. package/components/Table/components/Table/TableInner.d.ts +2 -2
  48. package/components/TeamsMultiAutocomplete/index.js +1 -1
  49. package/components/TeamsMultiAutocomplete/index.js.map +1 -1
  50. package/domain/Identity.js +1 -1
  51. package/domain/Identity.js.map +1 -1
  52. package/features/debugger/Debugger.d.ts +2 -2
  53. package/features/debugger/DebuggerIndicator.d.ts +2 -2
  54. package/features/debugger/DebuggerView.d.ts +2 -2
  55. package/features/formModel/Field.d.ts +7 -1
  56. package/features/formModel/Field.js +13 -5
  57. package/features/formModel/Field.js.map +1 -1
  58. package/features/formModel/FieldBuilder.test.js +12 -0
  59. package/features/formModel/FieldBuilder.test.js.map +1 -1
  60. package/features/formModel/FormErrors.d.ts +2 -2
  61. package/features/formModel/FormErrors.js +1 -1
  62. package/features/formModel/FormErrors.js.map +1 -1
  63. package/features/formModel/FormModel.d.ts +1 -0
  64. package/features/formModel/FormModel.js +17 -0
  65. package/features/formModel/FormModel.js.map +1 -1
  66. package/features/formModel/FormModel.test.js +342 -2
  67. package/features/formModel/FormModel.test.js.map +1 -1
  68. package/features/formModel/FormView.d.ts +8 -4
  69. package/features/formModel/ObjectField.d.ts +9 -1
  70. package/features/formModel/ObjectField.js +27 -17
  71. package/features/formModel/ObjectField.js.map +1 -1
  72. package/features/formModel/PresenterErrors.d.ts +2 -2
  73. package/features/formModel/abstractions.d.ts +17 -1
  74. package/features/formModel/abstractions.js.map +1 -1
  75. package/features/formModel/demo/FormModelDemo.d.ts +2 -2
  76. package/features/formModel/fieldTypes/DateTimeFieldType.d.ts +2 -0
  77. package/features/formModel/fieldTypes/DateTimeFieldType.js +14 -11
  78. package/features/formModel/fieldTypes/DateTimeFieldType.js.map +1 -1
  79. package/features/formModel/fieldTypes/ObjectFieldType.js +6 -0
  80. package/features/formModel/fieldTypes/ObjectFieldType.js.map +1 -1
  81. package/features/notifications/NotificationsRenderer.d.ts +2 -2
  82. package/hooks/useSnackbar.js.map +1 -1
  83. package/package.json +34 -34
  84. package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js +1 -2
  85. package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js.map +1 -1
  86. package/presentation/accessManagement/apiKeys/components/ApiKeysView.d.ts +2 -2
  87. package/presentation/accessManagement/roles/RolesPresenter.js +1 -2
  88. package/presentation/accessManagement/roles/RolesPresenter.js.map +1 -1
  89. package/presentation/accessManagement/roles/components/RolesView.d.ts +2 -2
  90. package/presentation/accessManagement/teams/TeamsPresenter.js +1 -2
  91. package/presentation/accessManagement/teams/TeamsPresenter.js.map +1 -1
  92. package/presentation/accessManagement/teams/components/TeamsView.d.ts +2 -2
  93. package/presentation/installation/components/SystemInstaller/SystemInstaller.d.ts +2 -2
  94. package/presentation/listPresenter/QueryMatcher.js +3 -3
  95. package/presentation/listPresenter/QueryMatcher.js.map +1 -1
  96. package/presentation/trashBin/components/BulkActions/DeleteItems.d.ts +2 -2
  97. package/presentation/trashBin/components/BulkActions/RestoreItems.d.ts +2 -2
  98. package/presentation/trashBin/components/TrashBinOverlay.d.ts +2 -2
  99. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js +0 -68
  100. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js.map +0 -1
@@ -33,13 +33,17 @@ interface FormViewProps {
33
33
  * Generic form view that walks layout nodes and renders fields.
34
34
  * This component is stateless — it reads from the FormVM and delegates to renderers.
35
35
  */
36
- export declare const FormView: (({ name, form, renderers, layoutRenderers }: FormViewProps) => React.JSX.Element) & {
37
- displayName: string;
36
+ export declare const FormView: (({ name, form, renderers, layoutRenderers }: FormViewProps) => React.JSX.Element) & React.NamedExoticComponent<FormViewProps> & {
37
+ readonly type: ({ name, form, renderers, layoutRenderers }: FormViewProps) => React.JSX.Element;
38
38
  };
39
39
  export declare const LayoutNodeRenderer: (({ node }: {
40
40
  node: LayoutNodeVM;
41
- }) => React.JSX.Element | null) & {
42
- displayName: string;
41
+ }) => React.JSX.Element | null) & React.NamedExoticComponent<{
42
+ node: LayoutNodeVM;
43
+ }> & {
44
+ readonly type: ({ node }: {
45
+ node: LayoutNodeVM;
46
+ }) => React.JSX.Element | null;
43
47
  };
44
48
  export interface TabsNodeRendererProps {
45
49
  node: ITabsNodeVM;
@@ -31,7 +31,15 @@ export declare class ObjectField implements IObjectField {
31
31
  setDisabled(value: boolean): void;
32
32
  setVisible(value: boolean): void;
33
33
  setAncestorRules(rules: IRule[]): void;
34
- setForm(form: IFormModel, parentPath?: string): void;
34
+ setForm(form: IFormModel, parentPath?: string, scopePath?: () => string): void;
35
+ /** Scope for direct children: a path `form.field()` resolves to this field. */
36
+ private _childScope;
37
+ /**
38
+ * Scope for the children of a list item. Children keep `qualifiedName` without an
39
+ * item selector, so `$.` rule targets and `field.parent()` need the item's index to
40
+ * reach their siblings. Resolved lazily, so it follows reorders and removals.
41
+ */
42
+ private _itemScope;
35
43
  setValidation(validation: IFieldValidation): void;
36
44
  private setValidationWithCache;
37
45
  addBeforeChange(cb: BeforeChangeCallback): void;
@@ -2,23 +2,23 @@ import { makeAutoObservable, runInAction, toJS } from "mobx";
2
2
  import { Field } from "./Field.js";
3
3
  import { createTemplateBuilder } from "./fieldTypes/ObjectFieldType.js";
4
4
  const TEMPLATE_DISCRIMINATOR = "_templateId";
5
- function createChildFields(childBuilders, form, parentPath) {
5
+ function createChildFields(childBuilders, form, parentPath, scopePath) {
6
6
  const children = new Map();
7
7
  for (const [name, builder] of Object.entries(childBuilders)){
8
8
  const config = builder.build(name);
9
- const field = createFieldFromConfig(config, form, parentPath);
9
+ const field = createFieldFromConfig(config, form, parentPath, scopePath);
10
10
  children.set(name, field);
11
11
  }
12
12
  return children;
13
13
  }
14
- function createFieldFromConfig(config, form, parentPath) {
14
+ function createFieldFromConfig(config, form, parentPath, scopePath) {
15
15
  if (config.childBuilders) {
16
16
  const objField = new ObjectField(config);
17
- if (form) objField.setForm(form, parentPath);
17
+ if (form) objField.setForm(form, parentPath, scopePath);
18
18
  return objField;
19
19
  }
20
20
  const field = new Field(config);
21
- if (form) field.setForm(form, parentPath);
21
+ if (form) field.setForm(form, parentPath, scopePath);
22
22
  return field;
23
23
  }
24
24
  function hydrateChildren(children, data, options) {
@@ -53,6 +53,7 @@ class ObjectField {
53
53
  this._ownLayout = null;
54
54
  this._templateLayouts = {};
55
55
  this._validating = false;
56
+ this._childScope = ()=>this._base.scopedName;
56
57
  this.config = config;
57
58
  this._base = new Field({
58
59
  ...config,
@@ -64,7 +65,9 @@ class ObjectField {
64
65
  if (this._isTemplated) this._children = new Map();
65
66
  else this._children = createChildFields(config.childBuilders, null);
66
67
  makeAutoObservable(this, {
67
- config: false
68
+ config: false,
69
+ _childScope: false,
70
+ _itemScope: false
68
71
  });
69
72
  }
70
73
  _findTemplate(id) {
@@ -73,7 +76,7 @@ class ObjectField {
73
76
  _rebuildChildrenForTemplate(templateId) {
74
77
  const template = this._findTemplate(templateId);
75
78
  if (!template) throw new Error(`Template "${templateId}" not found on field "${this.config.name}". Available: ${this._templates.map((t)=>t.id).join(", ") || "(none)"}.`);
76
- const children = createChildFields(template.childBuilders, this._form, this.qualifiedName);
79
+ const children = createChildFields(template.childBuilders, this._form, this.qualifiedName, this._childScope);
77
80
  this._children = children;
78
81
  this._activeTemplateId = templateId;
79
82
  const inner = this._innerLayoutFor(templateId);
@@ -100,12 +103,18 @@ class ObjectField {
100
103
  setAncestorRules(rules) {
101
104
  this._base.setAncestorRules(rules);
102
105
  }
103
- setForm(form, parentPath) {
106
+ setForm(form, parentPath, scopePath) {
104
107
  this._form = form;
105
- this._base.setForm(form, parentPath);
108
+ this._base.setForm(form, parentPath, scopePath);
106
109
  const myPath = this._base.qualifiedName;
107
- for (const [, field] of this._children)field.setForm(form, myPath);
108
- for (const item of this._items)for (const [, field] of item.children)field.setForm(form, myPath);
110
+ for (const [, field] of this._children)field.setForm(form, myPath, this._childScope);
111
+ for (const item of this._items)for (const [, field] of item.children)field.setForm(form, myPath, this._itemScope(item.key));
112
+ }
113
+ _itemScope(key) {
114
+ return ()=>{
115
+ const index = this._items.findIndex((item)=>item.key === key);
116
+ return `${this._base.scopedName}.${index}`;
117
+ };
109
118
  }
110
119
  setValidation(validation) {
111
120
  this._base.setValidation(validation);
@@ -174,6 +183,7 @@ class ObjectField {
174
183
  result.push({
175
184
  id: template.id,
176
185
  label: template.label,
186
+ description: template.description,
177
187
  icon: template.icon
178
188
  });
179
189
  }
@@ -313,10 +323,10 @@ class ObjectField {
313
323
  }
314
324
  this.config.childBuilders[name] = builder;
315
325
  const built = builder.build(name);
316
- const newField = createFieldFromConfig(built, this._form, this.qualifiedName);
326
+ const newField = createFieldFromConfig(built, this._form, this.qualifiedName, this._childScope);
317
327
  this._children.set(name, newField);
318
328
  if (this.config.isList) for (const item of this._items){
319
- const itemField = createFieldFromConfig(built, this._form, this.qualifiedName);
329
+ const itemField = createFieldFromConfig(built, this._form, this.qualifiedName, this._itemScope(item.key));
320
330
  item.children.set(name, itemField);
321
331
  }
322
332
  }
@@ -399,11 +409,11 @@ class ObjectField {
399
409
  const source = this._items[index];
400
410
  if (!source) return;
401
411
  const data = getChildrenData(source.children);
402
- const children = createChildFields(this._templateChildBuilders(source.templateId), this._form, this.qualifiedName);
412
+ const key = `item_${++itemKeyCounter}`;
413
+ const children = createChildFields(this._templateChildBuilders(source.templateId), this._form, this.qualifiedName, this._itemScope(key));
403
414
  hydrateChildren(children, data, {
404
415
  clone: true
405
416
  });
406
- const key = `item_${++itemKeyCounter}`;
407
417
  this._items.splice(index + 1, 0, {
408
418
  key,
409
419
  children,
@@ -419,9 +429,9 @@ class ObjectField {
419
429
  return template.childBuilders;
420
430
  }
421
431
  _addItemInternal(data, templateId) {
422
- const children = createChildFields(this._templateChildBuilders(templateId), this._form, this.qualifiedName);
423
- if (data) hydrateChildren(children, data);
424
432
  const key = `item_${++itemKeyCounter}`;
433
+ const children = createChildFields(this._templateChildBuilders(templateId), this._form, this.qualifiedName, this._itemScope(key));
434
+ if (data) hydrateChildren(children, data);
425
435
  this._items.push({
426
436
  key,
427
437
  children,
@@ -1 +1 @@
1
- {"version":3,"file":"features/formModel/ObjectField.js","sources":["../../../src/features/formModel/ObjectField.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, toJS } from \"mobx\";\nimport { Field } from \"./Field.js\";\nimport { createTemplateBuilder } from \"./fieldTypes/ObjectFieldType.js\";\nimport type {\n IObjectFieldConfig,\n IObjectField,\n IObjectFieldTemplates,\n IListItemField,\n IField,\n IObjectFieldVM,\n IFieldValidation,\n IFormModel,\n IFieldBuilder,\n IFieldBuilderRegistry,\n IRule,\n ITemplateBuilder,\n ITemplateConfig,\n ITemplateVM,\n FieldTypeMap,\n LayoutNode,\n LayoutNodeVM,\n BeforeChangeCallback,\n AfterChangeCallback,\n AfterSetValueCallback,\n OnBlurCallback,\n ComputedFieldCallback,\n IFieldCallbackParams\n} from \"./abstractions.js\";\n\n/** Reserved key used as the template discriminator in templated object data. */\nexport const TEMPLATE_DISCRIMINATOR = \"_templateId\";\n\nfunction createChildFields(\n childBuilders: Record<string, IFieldBuilder>,\n form: IFormModel | null,\n parentPath?: string\n): Map<string, IField> {\n const children = new Map<string, IField>();\n for (const [name, builder] of Object.entries(childBuilders)) {\n const config = builder.build(name);\n const field = createFieldFromConfig(config, form, parentPath);\n children.set(name, field);\n }\n return children;\n}\n\nfunction createFieldFromConfig(config: any, form: IFormModel | null, parentPath?: string): IField {\n if (config.childBuilders) {\n const objField = new ObjectField(config as IObjectFieldConfig);\n if (form) {\n objField.setForm(form, parentPath);\n }\n return objField;\n }\n const field = new Field(config);\n if (form) {\n field.setForm(form, parentPath);\n }\n return field;\n}\n\nfunction hydrateChildren(\n children: Map<string, IField>,\n data: Record<string, unknown> | null | undefined,\n options?: { clone?: boolean }\n): void {\n if (!data) {\n return;\n }\n for (const [name, field] of children) {\n if (name in data) {\n if (options?.clone && field.config.cloneValue) {\n field.setValueSilent(field.config.cloneValue(data[name]));\n } else {\n field.setValueSilent(data[name]);\n }\n }\n }\n}\n\nfunction getChildrenData(children: Map<string, IField>): Record<string, unknown> {\n const data: Record<string, unknown> = {};\n for (const [name, field] of children) {\n if (isObjectField(field)) {\n data[name] = toJS(field.getData());\n } else {\n data[name] = toJS(field.getValue());\n }\n }\n return data;\n}\n\nasync function validateChildren(\n children: Map<string, IField>,\n options?: { force?: boolean }\n): Promise<boolean> {\n let allValid = true;\n for (const [, field] of children) {\n const valid = await field.validate(options);\n if (!valid) {\n allValid = false;\n }\n }\n return allValid;\n}\n\nexport function isObjectField(field: IField): field is ObjectField {\n return field.type === \"object\";\n}\n\nlet itemKeyCounter = 0;\n\ninterface ListItem {\n key: string;\n children: Map<string, IField>;\n templateId?: string;\n}\n\n/**\n * ObjectField — hierarchical field with children, using composition.\n * Holds a `_base` Field for scalar behavior (callbacks, disabled/hidden, form ref).\n * Adds its own children/items management for object and list modes.\n */\nexport class ObjectField implements IObjectField {\n readonly config: IObjectFieldConfig;\n\n private _base: Field;\n private _form: IFormModel | null = null;\n private _children: Map<string, IField>;\n private _items: ListItem[] = [];\n private _templates: ITemplateConfig[] = [];\n private _isTemplated: boolean;\n private _activeTemplateId: string | null = null;\n /** Inner layout for non-templated objects (single layout, applied per item too). */\n private _ownLayout: LayoutNode[] | null = null;\n /** Per-template inner layouts for templated objects. */\n private _templateLayouts: Record<string, LayoutNode[]> = {};\n private _validating = false;\n\n constructor(config: IObjectFieldConfig) {\n this.config = config;\n this._base = new Field({\n ...config,\n type: \"object\",\n renderer:\n config.renderer ??\n (config.isList ? \"objectAccordionMultiple\" : \"objectAccordionSingle\")\n });\n this._templates = config.templates ?? [];\n this._isTemplated = this._templates.length > 0;\n\n if (this._isTemplated) {\n // Templated mode: children populated per-item (list) or when a template is picked (single).\n this._children = new Map();\n } else {\n this._children = createChildFields(config.childBuilders, null);\n }\n\n makeAutoObservable(this, {\n config: false\n });\n }\n\n private _findTemplate(id: string): ITemplateConfig | undefined {\n return this._templates.find(t => t.id === id);\n }\n\n private _rebuildChildrenForTemplate(templateId: string): void {\n const template = this._findTemplate(templateId);\n if (!template) {\n throw new Error(\n `Template \"${templateId}\" not found on field \"${this.config.name}\". ` +\n `Available: ${this._templates.map(t => t.id).join(\", \") || \"(none)\"}.`\n );\n }\n const children = createChildFields(template.childBuilders, this._form, this.qualifiedName);\n this._children = children;\n this._activeTemplateId = templateId;\n const inner = this._innerLayoutFor(templateId);\n if (inner) {\n this._applyNestedObjectLayouts(inner, children);\n }\n }\n\n // --- Forwarded from _base ---\n\n get name(): string {\n return this._base.name;\n }\n\n get type(): string {\n return \"object\";\n }\n\n get visible(): boolean {\n return this._base.visible;\n }\n\n get disabled(): boolean {\n return this._base.disabled;\n }\n\n setDisabled(value: boolean): void {\n this._base.setDisabled(value);\n }\n\n setVisible(value: boolean): void {\n this._base.setVisible(value);\n }\n\n setAncestorRules(rules: IRule[]): void {\n this._base.setAncestorRules(rules);\n }\n\n setForm(form: IFormModel, parentPath?: string): void {\n this._form = form;\n this._base.setForm(form, parentPath);\n const myPath = this._base.qualifiedName;\n for (const [, field] of this._children) {\n field.setForm(form, myPath);\n }\n for (const item of this._items) {\n for (const [, field] of item.children) {\n field.setForm(form, myPath);\n }\n }\n }\n\n setValidation(validation: IFieldValidation): void {\n this._base.setValidation(validation);\n }\n\n private setValidationWithCache(\n validation: IFieldValidation,\n value: unknown,\n result: boolean\n ): void {\n this._base.setValidationWithCache(validation, value, result);\n }\n\n addBeforeChange(cb: BeforeChangeCallback): void {\n this._base.addBeforeChange(cb);\n }\n\n addAfterChange(cb: AfterChangeCallback): void {\n this._base.addAfterChange(cb);\n }\n\n addAfterSetValue(cb: AfterSetValueCallback): void {\n this._base.addAfterSetValue(cb);\n }\n\n addOnBlur(cb: OnBlurCallback): void {\n this._base.addOnBlur(cb);\n }\n\n addRequiredWhen(fn: (params: IFieldCallbackParams) => boolean, message?: string): void {\n this._base.addRequiredWhen(fn, message);\n }\n\n setComputed(fn: ComputedFieldCallback): void {\n this._base.setComputed(fn);\n }\n\n setComputedUntilDirty(fn: ComputedFieldCallback): void {\n this._base.setComputedUntilDirty(fn);\n }\n\n blur(): void {\n this._base.blur();\n }\n\n remove(): void {\n this._base.remove();\n }\n\n get qualifiedName(): string {\n return this._base.qualifiedName;\n }\n\n focus(): void {\n this._base.focus();\n }\n\n requestFocus(): void {\n this._base.requestFocus();\n }\n\n clearFocusRequest(): void {\n this._base.clearFocusRequest();\n }\n\n getInnerLayout(): LayoutNode[] | null {\n if (this.isTemplated) {\n return this._activeTemplateId\n ? (this._templateLayouts[this._activeTemplateId] ?? null)\n : null;\n }\n return this._ownLayout;\n }\n\n // --- Object-specific ---\n\n get isList(): boolean {\n return this.config.isList;\n }\n\n get isTemplated(): boolean {\n return this._isTemplated;\n }\n\n get activeTemplateId(): string | null {\n return this._activeTemplateId;\n }\n\n get availableTemplates(): ITemplateVM[] {\n const result: ITemplateVM[] = [];\n for (const template of this._templates) {\n if (template.visible && this._form) {\n if (!template.visible(this._form)) {\n continue;\n }\n }\n result.push({ id: template.id, label: template.label, icon: template.icon });\n }\n return result;\n }\n\n setTemplate(templateId: string): void {\n if (this._activeTemplateId === templateId) {\n return;\n }\n this._rebuildChildrenForTemplate(templateId);\n }\n\n get templates(): IObjectFieldTemplates {\n return {\n add: (id: string, configure: (t: ITemplateBuilder) => void) =>\n this._addTemplate(id, configure),\n remove: (templateId: string) => this._removeTemplate(templateId)\n };\n }\n\n private _addTemplate(id: string, configure: (t: ITemplateBuilder) => void): void {\n if (!this.isTemplated) {\n throw new Error(\n `Object field \"${this.config.name}\" is not templated; templates.add() requires the field to be defined with .template().`\n );\n }\n if (id === TEMPLATE_DISCRIMINATOR) {\n throw new Error(\n `Template id \"${TEMPLATE_DISCRIMINATOR}\" is reserved. Choose a different id.`\n );\n }\n if (this._findTemplate(id)) {\n throw new Error(`Duplicate template id \"${id}\".`);\n }\n const tb = createTemplateBuilder();\n configure(tb);\n this._templates.push(tb._build(id, this._form!.registry));\n }\n\n private _removeTemplate(templateId: string): void {\n if (!this.isTemplated) {\n throw new Error(\n `Object field \"${this.config.name}\" is not templated; templates.remove() requires the field to be defined with .template().`\n );\n }\n const index = this._templates.findIndex(t => t.id === templateId);\n if (index === -1) {\n return;\n }\n this._templates.splice(index, 1);\n\n if (this.config.isList) {\n this._items = this._items.filter(item => item.templateId !== templateId);\n return;\n }\n if (this._activeTemplateId === templateId) {\n this._activeTemplateId = null;\n this._children = new Map();\n }\n }\n\n setInnerLayout(layout: LayoutNode[] | Record<string, LayoutNode[]>): void {\n if (Array.isArray(layout)) {\n if (this.isTemplated) {\n throw new Error(\n `Object field \"${this.config.name}\" is templated; layout.object() must pass a per-template map (Record<templateId, LayoutNode[]>), not a single LayoutNode[].`\n );\n }\n this._ownLayout = layout;\n this._templateLayouts = {};\n // Apply nested object layouts to children that already exist\n // (non-templated single + non-templated list items).\n this._applyNestedObjectLayouts(layout, this._children);\n for (const item of this._items) {\n this._applyNestedObjectLayouts(layout, item.children);\n }\n return;\n }\n if (!this.isTemplated) {\n throw new Error(\n `Object field \"${this.config.name}\" is not templated; layout.object() must pass a single LayoutNode[], not a per-template map.`\n );\n }\n this._templateLayouts = layout;\n this._ownLayout = null;\n // Apply nested object layouts to currently-active templated children\n // (templated single with active template + templated list items).\n if (this._activeTemplateId && layout[this._activeTemplateId]) {\n this._applyNestedObjectLayouts(layout[this._activeTemplateId], this._children);\n }\n for (const item of this._items) {\n if (item.templateId && layout[item.templateId]) {\n this._applyNestedObjectLayouts(layout[item.templateId], item.children);\n }\n }\n }\n\n /**\n * Walk an inner layout for nested `object` nodes and forward each one to\n * the matching child field. The recursion bottoms out naturally: each\n * matched child is itself an ObjectField and will run `_applyNestedObjectLayouts`\n * against its own children whenever they materialise.\n */\n private _applyNestedObjectLayouts(layout: LayoutNode[], children: Map<string, IField>): void {\n for (const node of layout) {\n if (node.type === \"object\") {\n const child = children.get(node.fieldName);\n if (child && isObjectField(child)) {\n child.setInnerLayout(node.inner);\n }\n } else if (node.type === \"tabs\") {\n for (const tab of node.tabs) {\n this._applyNestedObjectLayouts(tab.layout, children);\n }\n }\n }\n }\n\n /**\n * Returns the inner layout that should apply to a freshly-built children\n * Map for the given templateId (templated objects/lists) or for the\n * non-templated case. Used to seed nested object layouts on newly-created\n * children before they go live.\n */\n private _innerLayoutFor(templateId: string | undefined): LayoutNode[] | undefined {\n if (this.isTemplated) {\n if (templateId === undefined) {\n return undefined;\n }\n return this._templateLayouts[templateId];\n }\n return this._ownLayout ?? undefined;\n }\n\n private _resolveLayoutForChildren(\n children: Map<string, IField>,\n templateId: string | null\n ): LayoutNodeVM[] {\n const layoutNodes = this.isTemplated\n ? templateId !== null\n ? this._templateLayouts[templateId]\n : undefined\n : (this._ownLayout ?? undefined);\n if (layoutNodes && this._form?.resolveChildLayout) {\n return this._form.resolveChildLayout(layoutNodes, children);\n }\n // Default: one row per visible child, in insertion order.\n const fallback: LayoutNodeVM[] = [];\n for (const [, field] of children) {\n if (field.visible) {\n fallback.push({ type: \"row\", fields: [field.vm] });\n }\n }\n return fallback;\n }\n\n get children(): Map<string, IField> {\n return this._children;\n }\n\n get items(): IListItemField[] {\n return this._items.map(item => ({\n key: item.key,\n children: item.children,\n templateId: item.templateId,\n getData: () => this._getItemData(item)\n }));\n }\n\n private _getItemData(item: ListItem): Record<string, unknown> {\n const data = getChildrenData(item.children);\n if (item.templateId !== undefined) {\n return { [TEMPLATE_DISCRIMINATOR]: item.templateId, ...data };\n }\n return data;\n }\n\n private _getClonedItemData(item: ListItem): Record<string, unknown> {\n const data = getChildrenData(item.children);\n const children = createChildFields(\n this._templateChildBuilders(item.templateId),\n this._form,\n this.qualifiedName\n );\n hydrateChildren(children, data, { clone: true });\n const clonedData = getChildrenData(children);\n if (item.templateId !== undefined) {\n return { [TEMPLATE_DISCRIMINATOR]: item.templateId, ...clonedData };\n }\n return clonedData;\n }\n\n private _getClonedData(): Record<string, unknown> {\n const data = getChildrenData(this._children);\n const builders =\n this.isTemplated && this._activeTemplateId\n ? this._templateChildBuilders(this._activeTemplateId)\n : this.config.childBuilders;\n const children = createChildFields(builders, this._form, this.qualifiedName);\n hydrateChildren(children, data, { clone: true });\n const clonedData = getChildrenData(children);\n if (this.isTemplated && this._activeTemplateId) {\n return { [TEMPLATE_DISCRIMINATOR]: this._activeTemplateId, ...clonedData };\n }\n return clonedData;\n }\n\n getChild(name: string): IField | undefined {\n return this._children.get(name);\n }\n\n fields(\n factory: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder | undefined>\n ): void {\n if (this.isTemplated) {\n throw new Error(\n `Object field \"${this.config.name}\" is templated; use templates.add()/remove() to manage children. Each template owns its own fields.`\n );\n }\n const builders = factory(this._form!.registry);\n\n for (const [name, builder] of Object.entries(builders)) {\n if (builder === undefined) {\n this._children.delete(name);\n this.config.childBuilders[name] = undefined as unknown as IFieldBuilder;\n delete this.config.childBuilders[name];\n if (this.config.isList) {\n for (const item of this._items) {\n item.children.delete(name);\n }\n }\n continue;\n }\n\n this.config.childBuilders[name] = builder;\n const built = builder.build(name);\n const newField = createFieldFromConfig(built, this._form, this.qualifiedName);\n this._children.set(name, newField);\n\n if (this.config.isList) {\n for (const item of this._items) {\n const itemField = createFieldFromConfig(built, this._form, this.qualifiedName);\n item.children.set(name, itemField);\n }\n }\n }\n\n // Re-apply nested object layouts so newly-added children pick up any\n // layout.object() entries already registered on this field.\n if (this._ownLayout) {\n this._applyNestedObjectLayouts(this._ownLayout, this._children);\n for (const item of this._items) {\n this._applyNestedObjectLayouts(this._ownLayout, item.children);\n }\n }\n }\n\n getListItemChild(index: number, name: string): IField | undefined {\n const item = this._items[index];\n return item?.children.get(name);\n }\n\n getData(): any {\n if (this.config.isList) {\n return this._items.map(item => this._getItemData(item));\n }\n if (this.isTemplated) {\n if (this._activeTemplateId === null) {\n return null;\n }\n return {\n [TEMPLATE_DISCRIMINATOR]: this._activeTemplateId,\n ...getChildrenData(this._children)\n };\n }\n return getChildrenData(this._children);\n }\n\n getValue<T = unknown>(): T {\n return this.getData() as T;\n }\n\n setValue(value: unknown): void {\n this.setValueSilent(value);\n }\n\n setValueSilent(value: unknown): void {\n if (this.config.isList) {\n this._items = [];\n if (Array.isArray(value)) {\n for (const itemData of value) {\n if (this.isTemplated) {\n if (!itemData || typeof itemData !== \"object\") {\n continue;\n }\n const data = itemData as Record<string, unknown>;\n const templateId = data[TEMPLATE_DISCRIMINATOR];\n if (typeof templateId !== \"string\") {\n continue;\n }\n if (!this._findTemplate(templateId)) {\n continue;\n }\n const { [TEMPLATE_DISCRIMINATOR]: _discarded, ...rest } = data;\n this._addItemInternal(rest, templateId);\n } else {\n this._addItemInternal(itemData);\n }\n }\n }\n return;\n }\n if (this.isTemplated) {\n if (value === null || value === undefined) {\n this._activeTemplateId = null;\n this._children = new Map();\n return;\n }\n const data = value as Record<string, unknown>;\n const templateId = data[TEMPLATE_DISCRIMINATOR];\n if (typeof templateId !== \"string\") {\n return;\n }\n if (!this._findTemplate(templateId)) {\n return;\n }\n this._rebuildChildrenForTemplate(templateId);\n const { [TEMPLATE_DISCRIMINATOR]: _discarded, ...rest } = data;\n hydrateChildren(this._children, rest);\n return;\n }\n hydrateChildren(this._children, value as Record<string, unknown>);\n }\n\n addItem(\n templateIdOrData?: string | Record<string, unknown>,\n data?: Record<string, unknown>\n ): void {\n if (this.isTemplated) {\n if (typeof templateIdOrData !== \"string\") {\n throw new Error(\n `Object field \"${this.config.name}\": templated list items require a template id. ` +\n `Call addItem(templateId) with one of: ${this._templates.map(t => t.id).join(\", \")}.`\n );\n }\n if (!this._findTemplate(templateIdOrData)) {\n throw new Error(\n `Template \"${templateIdOrData}\" not found on field \"${this.config.name}\". ` +\n `Available: ${this._templates.map(t => t.id).join(\", \") || \"(none)\"}.`\n );\n }\n this._addItemInternal(data, templateIdOrData);\n return;\n }\n if (typeof templateIdOrData === \"string\") {\n throw new Error(\n `Object field \"${this.config.name}\" is not templated; addItem() does not accept a template id.`\n );\n }\n this._addItemInternal(templateIdOrData);\n }\n\n removeItem(index: number): void {\n this._items.splice(index, 1);\n }\n\n moveItem(fromIndex: number, toIndex: number): void {\n if (\n fromIndex < 0 ||\n fromIndex >= this._items.length ||\n toIndex < 0 ||\n toIndex >= this._items.length ||\n fromIndex === toIndex\n ) {\n return;\n }\n const [item] = this._items.splice(fromIndex, 1);\n this._items.splice(toIndex, 0, item);\n }\n\n duplicateItem(index: number): void {\n const source = this._items[index];\n if (!source) {\n return;\n }\n const data = getChildrenData(source.children);\n const children = createChildFields(\n this._templateChildBuilders(source.templateId),\n this._form,\n this.qualifiedName\n );\n hydrateChildren(children, data, { clone: true });\n const key = `item_${++itemKeyCounter}`;\n this._items.splice(index + 1, 0, { key, children, templateId: source.templateId });\n const inner = this._innerLayoutFor(source.templateId);\n if (inner) {\n this._applyNestedObjectLayouts(inner, children);\n }\n }\n\n private _templateChildBuilders(templateId: string | undefined): Record<string, IFieldBuilder> {\n if (templateId === undefined) {\n return this.config.childBuilders;\n }\n const template = this._findTemplate(templateId);\n if (!template) {\n throw new Error(`Template \"${templateId}\" not found on field \"${this.config.name}\".`);\n }\n return template.childBuilders;\n }\n\n private _addItemInternal(data?: Record<string, unknown>, templateId?: string): void {\n const children = createChildFields(\n this._templateChildBuilders(templateId),\n this._form,\n this.qualifiedName\n );\n if (data) {\n hydrateChildren(children, data);\n }\n const key = `item_${++itemKeyCounter}`;\n this._items.push({ key, children, templateId });\n const inner = this._innerLayoutFor(templateId);\n if (inner) {\n this._applyNestedObjectLayouts(inner, children);\n }\n }\n\n resetValidation(): void {\n this._base.resetValidation();\n for (const [, field] of this._children) {\n field.resetValidation();\n }\n for (const item of this._items) {\n for (const [, field] of item.children) {\n field.resetValidation();\n }\n }\n }\n\n as<T extends keyof FieldTypeMap>(type: T): FieldTypeMap[T] {\n if (type !== \"object\") {\n throw new Error(`Field \"${this.config.name}\" is type \"object\", not \"${type}\".`);\n }\n return this as unknown as FieldTypeMap[T];\n }\n\n get vm(): IObjectFieldVM {\n const baseVm = this._base.vm;\n return {\n name: baseVm.name,\n qualifiedName: baseVm.qualifiedName,\n type: \"object\",\n label: baseVm.label,\n help: baseVm.help,\n description: baseVm.description,\n note: baseVm.note,\n placeholder: baseVm.placeholder,\n value: this.getValue(),\n validation: baseVm.validation,\n validating: this._validating,\n required: baseVm.required,\n visible: baseVm.visible,\n disabled: baseVm.disabled,\n renderer: baseVm.renderer,\n rendererSettings: baseVm.rendererSettings,\n context: baseVm.context,\n onChange: (value: unknown) => this.setValue(value),\n onBlur: () => {\n if (this._form?.submitted) {\n void this.validate();\n }\n this.blur();\n },\n focusRequested: baseVm.focusRequested,\n clearFocusRequest: baseVm.clearFocusRequest,\n isList: this.config.isList,\n fields: this.config.isList\n ? []\n : Array.from(this._children.values())\n .filter(f => f.visible)\n .map(f => f.vm),\n layout: this.config.isList\n ? []\n : this._resolveLayoutForChildren(this._children, this._activeTemplateId),\n items: this.config.isList\n ? this._items.map((item, index) => ({\n key: item.key,\n fields: Array.from(item.children.values())\n .filter(f => f.visible)\n .map(f => f.vm),\n layout: this._resolveLayoutForChildren(\n item.children,\n item.templateId ?? null\n ),\n templateId: item.templateId,\n remove: () => this.removeItem(index),\n moveUp: () => this.moveItem(index, index - 1),\n moveDown: () => this.moveItem(index, index + 1),\n duplicate: () => this.duplicateItem(index),\n getClonedData: () => this._getClonedItemData(item)\n }))\n : [],\n addItem: (value?: unknown) => {\n if (value === undefined) {\n return this.addItem();\n }\n if (typeof value === \"string\") {\n return this.addItem(value);\n }\n const data = value as Record<string, unknown>;\n const templateId = data[TEMPLATE_DISCRIMINATOR];\n if (typeof templateId === \"string\") {\n const { [TEMPLATE_DISCRIMINATOR]: _, ...rest } = data;\n return this.addItem(templateId, rest);\n }\n return this.addItem(value as Record<string, unknown>);\n },\n removeItem: (index: number) => this.removeItem(index),\n moveItem: (from: number, to: number) => this.moveItem(from, to),\n duplicateItem: (index: number) => this.duplicateItem(index),\n isTemplated: this.isTemplated,\n availableTemplates: this.availableTemplates,\n activeTemplateId: this._activeTemplateId,\n setTemplate: (templateId: string) => this.setTemplate(templateId),\n getClonedData: () => this._getClonedData()\n };\n }\n\n get hasErrors(): boolean {\n const checkChildren = (children: Map<string, IField>): boolean => {\n for (const [, field] of children) {\n if (field.vm.validation.isValid === false) {\n return true;\n }\n if (isObjectField(field) && field.hasErrors) {\n return true;\n }\n }\n return false;\n };\n\n if (this.config.isList) {\n for (const item of this._items) {\n if (checkChildren(item.children)) {\n return true;\n }\n }\n } else {\n if (checkChildren(this._children)) {\n return true;\n }\n }\n return false;\n }\n\n async validate(options?: { force?: boolean }): Promise<boolean> {\n if (!this.visible) {\n this.setValidation({ isValid: null });\n return true;\n }\n\n runInAction(() => {\n this._validating = true;\n });\n\n try {\n const requiredState = this._base.resolveRequired();\n if (requiredState.required) {\n const message = requiredState.message || \"This field is required.\";\n if (this.config.isList && this._items.length === 0) {\n this.setValidation({ isValid: false, message });\n return false;\n }\n if (!this.config.isList) {\n if (this.isTemplated) {\n if (this._activeTemplateId === null) {\n this.setValidation({ isValid: false, message });\n return false;\n }\n } else {\n const data = this.getData();\n const hasAnyValue = Object.values(data).some(\n v => v !== null && v !== undefined && v !== \"\"\n );\n if (!hasAnyValue) {\n this.setValidation({ isValid: false, message });\n return false;\n }\n }\n }\n }\n\n if (this.config.isList && this.config.listSchema) {\n const listData = this.getData();\n if (\n !requiredState.required &&\n (listData === null ||\n listData === undefined ||\n (Array.isArray(listData) && listData.length === 0))\n ) {\n this.setValidationWithCache({ isValid: null }, listData, true);\n return true;\n }\n const result = await this.config.listSchema.safeParseAsync(listData);\n if (!result.success) {\n const firstIssue = result.error.issues[0];\n runInAction(() => {\n this.setValidation({\n isValid: false,\n message: firstIssue?.message || \"Invalid value.\"\n });\n });\n return false;\n }\n }\n\n if (this.config.schema) {\n const data = this.getData();\n if (!requiredState.required) {\n if (data == null) {\n this.setValidationWithCache({ isValid: null }, data, true);\n return true;\n }\n const hasAnyValue = Object.values(data).some(\n v => v !== null && v !== undefined && v !== \"\"\n );\n if (!hasAnyValue) {\n this.setValidationWithCache({ isValid: null }, data, true);\n return true;\n }\n }\n const result = await this.config.schema.safeParseAsync(data);\n if (!result.success) {\n const firstIssue = result.error.issues[0];\n runInAction(() => {\n this.setValidation({\n isValid: false,\n message: firstIssue?.message || \"Invalid value.\"\n });\n });\n return false;\n }\n }\n\n let allValid = true;\n\n if (this.config.isList) {\n for (const item of this._items) {\n const valid = await validateChildren(item.children, options);\n if (!valid) {\n allValid = false;\n }\n }\n } else {\n allValid = await validateChildren(this._children, options);\n }\n\n runInAction(() => {\n this.setValidation({ isValid: allValid });\n });\n\n return allValid;\n } finally {\n runInAction(() => {\n this._validating = false;\n });\n }\n }\n}\n"],"names":["TEMPLATE_DISCRIMINATOR","createChildFields","childBuilders","form","parentPath","children","Map","name","builder","Object","config","field","createFieldFromConfig","objField","ObjectField","Field","hydrateChildren","data","options","getChildrenData","isObjectField","toJS","validateChildren","allValid","valid","itemKeyCounter","makeAutoObservable","id","t","templateId","template","Error","inner","value","rules","myPath","item","validation","result","cb","fn","message","configure","tb","createTemplateBuilder","index","layout","Array","node","child","tab","undefined","layoutNodes","fallback","clonedData","builders","factory","built","newField","itemField","itemData","_discarded","rest","templateIdOrData","fromIndex","toIndex","source","key","type","baseVm","f","_","from","to","checkChildren","runInAction","requiredState","hasAnyValue","v","listData","firstIssue"],"mappings":"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"}
1
+ {"version":3,"file":"features/formModel/ObjectField.js","sources":["../../../src/features/formModel/ObjectField.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, toJS } from \"mobx\";\nimport { Field } from \"./Field.js\";\nimport { createTemplateBuilder } from \"./fieldTypes/ObjectFieldType.js\";\nimport type {\n IObjectFieldConfig,\n IObjectField,\n IObjectFieldTemplates,\n IListItemField,\n IField,\n IObjectFieldVM,\n IFieldValidation,\n IFormModel,\n IFieldBuilder,\n IFieldBuilderRegistry,\n IRule,\n ITemplateBuilder,\n ITemplateConfig,\n ITemplateVM,\n FieldTypeMap,\n LayoutNode,\n LayoutNodeVM,\n BeforeChangeCallback,\n AfterChangeCallback,\n AfterSetValueCallback,\n OnBlurCallback,\n ComputedFieldCallback,\n IFieldCallbackParams\n} from \"./abstractions.js\";\n\n/** Reserved key used as the template discriminator in templated object data. */\nexport const TEMPLATE_DISCRIMINATOR = \"_templateId\";\n\nfunction createChildFields(\n childBuilders: Record<string, IFieldBuilder>,\n form: IFormModel | null,\n parentPath?: string,\n scopePath?: () => string\n): Map<string, IField> {\n const children = new Map<string, IField>();\n for (const [name, builder] of Object.entries(childBuilders)) {\n const config = builder.build(name);\n const field = createFieldFromConfig(config, form, parentPath, scopePath);\n children.set(name, field);\n }\n return children;\n}\n\nfunction createFieldFromConfig(\n config: any,\n form: IFormModel | null,\n parentPath?: string,\n scopePath?: () => string\n): IField {\n if (config.childBuilders) {\n const objField = new ObjectField(config as IObjectFieldConfig);\n if (form) {\n objField.setForm(form, parentPath, scopePath);\n }\n return objField;\n }\n const field = new Field(config);\n if (form) {\n field.setForm(form, parentPath, scopePath);\n }\n return field;\n}\n\nfunction hydrateChildren(\n children: Map<string, IField>,\n data: Record<string, unknown> | null | undefined,\n options?: { clone?: boolean }\n): void {\n if (!data) {\n return;\n }\n for (const [name, field] of children) {\n if (name in data) {\n if (options?.clone && field.config.cloneValue) {\n field.setValueSilent(field.config.cloneValue(data[name]));\n } else {\n field.setValueSilent(data[name]);\n }\n }\n }\n}\n\nfunction getChildrenData(children: Map<string, IField>): Record<string, unknown> {\n const data: Record<string, unknown> = {};\n for (const [name, field] of children) {\n if (isObjectField(field)) {\n data[name] = toJS(field.getData());\n } else {\n data[name] = toJS(field.getValue());\n }\n }\n return data;\n}\n\nasync function validateChildren(\n children: Map<string, IField>,\n options?: { force?: boolean }\n): Promise<boolean> {\n let allValid = true;\n for (const [, field] of children) {\n const valid = await field.validate(options);\n if (!valid) {\n allValid = false;\n }\n }\n return allValid;\n}\n\nexport function isObjectField(field: IField): field is ObjectField {\n return field.type === \"object\";\n}\n\nlet itemKeyCounter = 0;\n\ninterface ListItem {\n key: string;\n children: Map<string, IField>;\n templateId?: string;\n}\n\n/**\n * ObjectField — hierarchical field with children, using composition.\n * Holds a `_base` Field for scalar behavior (callbacks, disabled/hidden, form ref).\n * Adds its own children/items management for object and list modes.\n */\nexport class ObjectField implements IObjectField {\n readonly config: IObjectFieldConfig;\n\n private _base: Field;\n private _form: IFormModel | null = null;\n private _children: Map<string, IField>;\n private _items: ListItem[] = [];\n private _templates: ITemplateConfig[] = [];\n private _isTemplated: boolean;\n private _activeTemplateId: string | null = null;\n /** Inner layout for non-templated objects (single layout, applied per item too). */\n private _ownLayout: LayoutNode[] | null = null;\n /** Per-template inner layouts for templated objects. */\n private _templateLayouts: Record<string, LayoutNode[]> = {};\n private _validating = false;\n\n constructor(config: IObjectFieldConfig) {\n this.config = config;\n this._base = new Field({\n ...config,\n type: \"object\",\n renderer:\n config.renderer ??\n (config.isList ? \"objectAccordionMultiple\" : \"objectAccordionSingle\")\n });\n this._templates = config.templates ?? [];\n this._isTemplated = this._templates.length > 0;\n\n if (this._isTemplated) {\n // Templated mode: children populated per-item (list) or when a template is picked (single).\n this._children = new Map();\n } else {\n this._children = createChildFields(config.childBuilders, null);\n }\n\n makeAutoObservable<this, \"_childScope\" | \"_itemScope\">(this, {\n config: false,\n _childScope: false,\n _itemScope: false\n });\n }\n\n private _findTemplate(id: string): ITemplateConfig | undefined {\n return this._templates.find(t => t.id === id);\n }\n\n private _rebuildChildrenForTemplate(templateId: string): void {\n const template = this._findTemplate(templateId);\n if (!template) {\n throw new Error(\n `Template \"${templateId}\" not found on field \"${this.config.name}\". ` +\n `Available: ${this._templates.map(t => t.id).join(\", \") || \"(none)\"}.`\n );\n }\n const children = createChildFields(\n template.childBuilders,\n this._form,\n this.qualifiedName,\n this._childScope\n );\n this._children = children;\n this._activeTemplateId = templateId;\n const inner = this._innerLayoutFor(templateId);\n if (inner) {\n this._applyNestedObjectLayouts(inner, children);\n }\n }\n\n // --- Forwarded from _base ---\n\n get name(): string {\n return this._base.name;\n }\n\n get type(): string {\n return \"object\";\n }\n\n get visible(): boolean {\n return this._base.visible;\n }\n\n get disabled(): boolean {\n return this._base.disabled;\n }\n\n setDisabled(value: boolean): void {\n this._base.setDisabled(value);\n }\n\n setVisible(value: boolean): void {\n this._base.setVisible(value);\n }\n\n setAncestorRules(rules: IRule[]): void {\n this._base.setAncestorRules(rules);\n }\n\n setForm(form: IFormModel, parentPath?: string, scopePath?: () => string): void {\n this._form = form;\n this._base.setForm(form, parentPath, scopePath);\n const myPath = this._base.qualifiedName;\n for (const [, field] of this._children) {\n field.setForm(form, myPath, this._childScope);\n }\n for (const item of this._items) {\n for (const [, field] of item.children) {\n field.setForm(form, myPath, this._itemScope(item.key));\n }\n }\n }\n\n /** Scope for direct children: a path `form.field()` resolves to this field. */\n private _childScope = (): string => {\n return this._base.scopedName;\n };\n\n /**\n * Scope for the children of a list item. Children keep `qualifiedName` without an\n * item selector, so `$.` rule targets and `field.parent()` need the item's index to\n * reach their siblings. Resolved lazily, so it follows reorders and removals.\n */\n private _itemScope(key: string): () => string {\n return () => {\n const index = this._items.findIndex(item => item.key === key);\n return `${this._base.scopedName}.${index}`;\n };\n }\n\n setValidation(validation: IFieldValidation): void {\n this._base.setValidation(validation);\n }\n\n private setValidationWithCache(\n validation: IFieldValidation,\n value: unknown,\n result: boolean\n ): void {\n this._base.setValidationWithCache(validation, value, result);\n }\n\n addBeforeChange(cb: BeforeChangeCallback): void {\n this._base.addBeforeChange(cb);\n }\n\n addAfterChange(cb: AfterChangeCallback): void {\n this._base.addAfterChange(cb);\n }\n\n addAfterSetValue(cb: AfterSetValueCallback): void {\n this._base.addAfterSetValue(cb);\n }\n\n addOnBlur(cb: OnBlurCallback): void {\n this._base.addOnBlur(cb);\n }\n\n addRequiredWhen(fn: (params: IFieldCallbackParams) => boolean, message?: string): void {\n this._base.addRequiredWhen(fn, message);\n }\n\n setComputed(fn: ComputedFieldCallback): void {\n this._base.setComputed(fn);\n }\n\n setComputedUntilDirty(fn: ComputedFieldCallback): void {\n this._base.setComputedUntilDirty(fn);\n }\n\n blur(): void {\n this._base.blur();\n }\n\n remove(): void {\n this._base.remove();\n }\n\n get qualifiedName(): string {\n return this._base.qualifiedName;\n }\n\n focus(): void {\n this._base.focus();\n }\n\n requestFocus(): void {\n this._base.requestFocus();\n }\n\n clearFocusRequest(): void {\n this._base.clearFocusRequest();\n }\n\n getInnerLayout(): LayoutNode[] | null {\n if (this.isTemplated) {\n return this._activeTemplateId\n ? (this._templateLayouts[this._activeTemplateId] ?? null)\n : null;\n }\n return this._ownLayout;\n }\n\n // --- Object-specific ---\n\n get isList(): boolean {\n return this.config.isList;\n }\n\n get isTemplated(): boolean {\n return this._isTemplated;\n }\n\n get activeTemplateId(): string | null {\n return this._activeTemplateId;\n }\n\n get availableTemplates(): ITemplateVM[] {\n const result: ITemplateVM[] = [];\n for (const template of this._templates) {\n if (template.visible && this._form) {\n if (!template.visible(this._form)) {\n continue;\n }\n }\n result.push({\n id: template.id,\n label: template.label,\n description: template.description,\n icon: template.icon\n });\n }\n return result;\n }\n\n setTemplate(templateId: string): void {\n if (this._activeTemplateId === templateId) {\n return;\n }\n this._rebuildChildrenForTemplate(templateId);\n }\n\n get templates(): IObjectFieldTemplates {\n return {\n add: (id: string, configure: (t: ITemplateBuilder) => void) =>\n this._addTemplate(id, configure),\n remove: (templateId: string) => this._removeTemplate(templateId)\n };\n }\n\n private _addTemplate(id: string, configure: (t: ITemplateBuilder) => void): void {\n if (!this.isTemplated) {\n throw new Error(\n `Object field \"${this.config.name}\" is not templated; templates.add() requires the field to be defined with .template().`\n );\n }\n if (id === TEMPLATE_DISCRIMINATOR) {\n throw new Error(\n `Template id \"${TEMPLATE_DISCRIMINATOR}\" is reserved. Choose a different id.`\n );\n }\n if (this._findTemplate(id)) {\n throw new Error(`Duplicate template id \"${id}\".`);\n }\n const tb = createTemplateBuilder();\n configure(tb);\n this._templates.push(tb._build(id, this._form!.registry));\n }\n\n private _removeTemplate(templateId: string): void {\n if (!this.isTemplated) {\n throw new Error(\n `Object field \"${this.config.name}\" is not templated; templates.remove() requires the field to be defined with .template().`\n );\n }\n const index = this._templates.findIndex(t => t.id === templateId);\n if (index === -1) {\n return;\n }\n this._templates.splice(index, 1);\n\n if (this.config.isList) {\n this._items = this._items.filter(item => item.templateId !== templateId);\n return;\n }\n if (this._activeTemplateId === templateId) {\n this._activeTemplateId = null;\n this._children = new Map();\n }\n }\n\n setInnerLayout(layout: LayoutNode[] | Record<string, LayoutNode[]>): void {\n if (Array.isArray(layout)) {\n if (this.isTemplated) {\n throw new Error(\n `Object field \"${this.config.name}\" is templated; layout.object() must pass a per-template map (Record<templateId, LayoutNode[]>), not a single LayoutNode[].`\n );\n }\n this._ownLayout = layout;\n this._templateLayouts = {};\n // Apply nested object layouts to children that already exist\n // (non-templated single + non-templated list items).\n this._applyNestedObjectLayouts(layout, this._children);\n for (const item of this._items) {\n this._applyNestedObjectLayouts(layout, item.children);\n }\n return;\n }\n if (!this.isTemplated) {\n throw new Error(\n `Object field \"${this.config.name}\" is not templated; layout.object() must pass a single LayoutNode[], not a per-template map.`\n );\n }\n this._templateLayouts = layout;\n this._ownLayout = null;\n // Apply nested object layouts to currently-active templated children\n // (templated single with active template + templated list items).\n if (this._activeTemplateId && layout[this._activeTemplateId]) {\n this._applyNestedObjectLayouts(layout[this._activeTemplateId], this._children);\n }\n for (const item of this._items) {\n if (item.templateId && layout[item.templateId]) {\n this._applyNestedObjectLayouts(layout[item.templateId], item.children);\n }\n }\n }\n\n /**\n * Walk an inner layout for nested `object` nodes and forward each one to\n * the matching child field. The recursion bottoms out naturally: each\n * matched child is itself an ObjectField and will run `_applyNestedObjectLayouts`\n * against its own children whenever they materialise.\n */\n private _applyNestedObjectLayouts(layout: LayoutNode[], children: Map<string, IField>): void {\n for (const node of layout) {\n if (node.type === \"object\") {\n const child = children.get(node.fieldName);\n if (child && isObjectField(child)) {\n child.setInnerLayout(node.inner);\n }\n } else if (node.type === \"tabs\") {\n for (const tab of node.tabs) {\n this._applyNestedObjectLayouts(tab.layout, children);\n }\n }\n }\n }\n\n /**\n * Returns the inner layout that should apply to a freshly-built children\n * Map for the given templateId (templated objects/lists) or for the\n * non-templated case. Used to seed nested object layouts on newly-created\n * children before they go live.\n */\n private _innerLayoutFor(templateId: string | undefined): LayoutNode[] | undefined {\n if (this.isTemplated) {\n if (templateId === undefined) {\n return undefined;\n }\n return this._templateLayouts[templateId];\n }\n return this._ownLayout ?? undefined;\n }\n\n private _resolveLayoutForChildren(\n children: Map<string, IField>,\n templateId: string | null\n ): LayoutNodeVM[] {\n const layoutNodes = this.isTemplated\n ? templateId !== null\n ? this._templateLayouts[templateId]\n : undefined\n : (this._ownLayout ?? undefined);\n if (layoutNodes && this._form?.resolveChildLayout) {\n return this._form.resolveChildLayout(layoutNodes, children);\n }\n // Default: one row per visible child, in insertion order.\n const fallback: LayoutNodeVM[] = [];\n for (const [, field] of children) {\n if (field.visible) {\n fallback.push({ type: \"row\", fields: [field.vm] });\n }\n }\n return fallback;\n }\n\n get children(): Map<string, IField> {\n return this._children;\n }\n\n get items(): IListItemField[] {\n return this._items.map(item => ({\n key: item.key,\n children: item.children,\n templateId: item.templateId,\n getData: () => this._getItemData(item)\n }));\n }\n\n private _getItemData(item: ListItem): Record<string, unknown> {\n const data = getChildrenData(item.children);\n if (item.templateId !== undefined) {\n return { [TEMPLATE_DISCRIMINATOR]: item.templateId, ...data };\n }\n return data;\n }\n\n private _getClonedItemData(item: ListItem): Record<string, unknown> {\n const data = getChildrenData(item.children);\n const children = createChildFields(\n this._templateChildBuilders(item.templateId),\n this._form,\n this.qualifiedName\n );\n hydrateChildren(children, data, { clone: true });\n const clonedData = getChildrenData(children);\n if (item.templateId !== undefined) {\n return { [TEMPLATE_DISCRIMINATOR]: item.templateId, ...clonedData };\n }\n return clonedData;\n }\n\n private _getClonedData(): Record<string, unknown> {\n const data = getChildrenData(this._children);\n const builders =\n this.isTemplated && this._activeTemplateId\n ? this._templateChildBuilders(this._activeTemplateId)\n : this.config.childBuilders;\n const children = createChildFields(builders, this._form, this.qualifiedName);\n hydrateChildren(children, data, { clone: true });\n const clonedData = getChildrenData(children);\n if (this.isTemplated && this._activeTemplateId) {\n return { [TEMPLATE_DISCRIMINATOR]: this._activeTemplateId, ...clonedData };\n }\n return clonedData;\n }\n\n getChild(name: string): IField | undefined {\n return this._children.get(name);\n }\n\n fields(\n factory: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder | undefined>\n ): void {\n if (this.isTemplated) {\n throw new Error(\n `Object field \"${this.config.name}\" is templated; use templates.add()/remove() to manage children. Each template owns its own fields.`\n );\n }\n const builders = factory(this._form!.registry);\n\n for (const [name, builder] of Object.entries(builders)) {\n if (builder === undefined) {\n this._children.delete(name);\n this.config.childBuilders[name] = undefined as unknown as IFieldBuilder;\n delete this.config.childBuilders[name];\n if (this.config.isList) {\n for (const item of this._items) {\n item.children.delete(name);\n }\n }\n continue;\n }\n\n this.config.childBuilders[name] = builder;\n const built = builder.build(name);\n const newField = createFieldFromConfig(\n built,\n this._form,\n this.qualifiedName,\n this._childScope\n );\n this._children.set(name, newField);\n\n if (this.config.isList) {\n for (const item of this._items) {\n const itemField = createFieldFromConfig(\n built,\n this._form,\n this.qualifiedName,\n this._itemScope(item.key)\n );\n item.children.set(name, itemField);\n }\n }\n }\n\n // Re-apply nested object layouts so newly-added children pick up any\n // layout.object() entries already registered on this field.\n if (this._ownLayout) {\n this._applyNestedObjectLayouts(this._ownLayout, this._children);\n for (const item of this._items) {\n this._applyNestedObjectLayouts(this._ownLayout, item.children);\n }\n }\n }\n\n getListItemChild(index: number, name: string): IField | undefined {\n const item = this._items[index];\n return item?.children.get(name);\n }\n\n getData(): any {\n if (this.config.isList) {\n return this._items.map(item => this._getItemData(item));\n }\n if (this.isTemplated) {\n if (this._activeTemplateId === null) {\n return null;\n }\n return {\n [TEMPLATE_DISCRIMINATOR]: this._activeTemplateId,\n ...getChildrenData(this._children)\n };\n }\n return getChildrenData(this._children);\n }\n\n getValue<T = unknown>(): T {\n return this.getData() as T;\n }\n\n setValue(value: unknown): void {\n this.setValueSilent(value);\n }\n\n setValueSilent(value: unknown): void {\n if (this.config.isList) {\n this._items = [];\n if (Array.isArray(value)) {\n for (const itemData of value) {\n if (this.isTemplated) {\n if (!itemData || typeof itemData !== \"object\") {\n continue;\n }\n const data = itemData as Record<string, unknown>;\n const templateId = data[TEMPLATE_DISCRIMINATOR];\n if (typeof templateId !== \"string\") {\n continue;\n }\n if (!this._findTemplate(templateId)) {\n continue;\n }\n const { [TEMPLATE_DISCRIMINATOR]: _discarded, ...rest } = data;\n this._addItemInternal(rest, templateId);\n } else {\n this._addItemInternal(itemData);\n }\n }\n }\n return;\n }\n if (this.isTemplated) {\n if (value === null || value === undefined) {\n this._activeTemplateId = null;\n this._children = new Map();\n return;\n }\n const data = value as Record<string, unknown>;\n const templateId = data[TEMPLATE_DISCRIMINATOR];\n if (typeof templateId !== \"string\") {\n return;\n }\n if (!this._findTemplate(templateId)) {\n return;\n }\n this._rebuildChildrenForTemplate(templateId);\n const { [TEMPLATE_DISCRIMINATOR]: _discarded, ...rest } = data;\n hydrateChildren(this._children, rest);\n return;\n }\n hydrateChildren(this._children, value as Record<string, unknown>);\n }\n\n addItem(\n templateIdOrData?: string | Record<string, unknown>,\n data?: Record<string, unknown>\n ): void {\n if (this.isTemplated) {\n if (typeof templateIdOrData !== \"string\") {\n throw new Error(\n `Object field \"${this.config.name}\": templated list items require a template id. ` +\n `Call addItem(templateId) with one of: ${this._templates.map(t => t.id).join(\", \")}.`\n );\n }\n if (!this._findTemplate(templateIdOrData)) {\n throw new Error(\n `Template \"${templateIdOrData}\" not found on field \"${this.config.name}\". ` +\n `Available: ${this._templates.map(t => t.id).join(\", \") || \"(none)\"}.`\n );\n }\n this._addItemInternal(data, templateIdOrData);\n return;\n }\n if (typeof templateIdOrData === \"string\") {\n throw new Error(\n `Object field \"${this.config.name}\" is not templated; addItem() does not accept a template id.`\n );\n }\n this._addItemInternal(templateIdOrData);\n }\n\n removeItem(index: number): void {\n this._items.splice(index, 1);\n }\n\n moveItem(fromIndex: number, toIndex: number): void {\n if (\n fromIndex < 0 ||\n fromIndex >= this._items.length ||\n toIndex < 0 ||\n toIndex >= this._items.length ||\n fromIndex === toIndex\n ) {\n return;\n }\n const [item] = this._items.splice(fromIndex, 1);\n this._items.splice(toIndex, 0, item);\n }\n\n duplicateItem(index: number): void {\n const source = this._items[index];\n if (!source) {\n return;\n }\n const data = getChildrenData(source.children);\n const key = `item_${++itemKeyCounter}`;\n const children = createChildFields(\n this._templateChildBuilders(source.templateId),\n this._form,\n this.qualifiedName,\n this._itemScope(key)\n );\n hydrateChildren(children, data, { clone: true });\n this._items.splice(index + 1, 0, { key, children, templateId: source.templateId });\n const inner = this._innerLayoutFor(source.templateId);\n if (inner) {\n this._applyNestedObjectLayouts(inner, children);\n }\n }\n\n private _templateChildBuilders(templateId: string | undefined): Record<string, IFieldBuilder> {\n if (templateId === undefined) {\n return this.config.childBuilders;\n }\n const template = this._findTemplate(templateId);\n if (!template) {\n throw new Error(`Template \"${templateId}\" not found on field \"${this.config.name}\".`);\n }\n return template.childBuilders;\n }\n\n private _addItemInternal(data?: Record<string, unknown>, templateId?: string): void {\n const key = `item_${++itemKeyCounter}`;\n const children = createChildFields(\n this._templateChildBuilders(templateId),\n this._form,\n this.qualifiedName,\n this._itemScope(key)\n );\n if (data) {\n hydrateChildren(children, data);\n }\n this._items.push({ key, children, templateId });\n const inner = this._innerLayoutFor(templateId);\n if (inner) {\n this._applyNestedObjectLayouts(inner, children);\n }\n }\n\n resetValidation(): void {\n this._base.resetValidation();\n for (const [, field] of this._children) {\n field.resetValidation();\n }\n for (const item of this._items) {\n for (const [, field] of item.children) {\n field.resetValidation();\n }\n }\n }\n\n as<T extends keyof FieldTypeMap>(type: T): FieldTypeMap[T] {\n if (type !== \"object\") {\n throw new Error(`Field \"${this.config.name}\" is type \"object\", not \"${type}\".`);\n }\n return this as unknown as FieldTypeMap[T];\n }\n\n get vm(): IObjectFieldVM {\n const baseVm = this._base.vm;\n return {\n name: baseVm.name,\n qualifiedName: baseVm.qualifiedName,\n type: \"object\",\n label: baseVm.label,\n help: baseVm.help,\n description: baseVm.description,\n note: baseVm.note,\n placeholder: baseVm.placeholder,\n value: this.getValue(),\n validation: baseVm.validation,\n validating: this._validating,\n required: baseVm.required,\n visible: baseVm.visible,\n disabled: baseVm.disabled,\n renderer: baseVm.renderer,\n rendererSettings: baseVm.rendererSettings,\n context: baseVm.context,\n onChange: (value: unknown) => this.setValue(value),\n onBlur: () => {\n if (this._form?.submitted) {\n void this.validate();\n }\n this.blur();\n },\n focusRequested: baseVm.focusRequested,\n clearFocusRequest: baseVm.clearFocusRequest,\n isList: this.config.isList,\n fields: this.config.isList\n ? []\n : Array.from(this._children.values())\n .filter(f => f.visible)\n .map(f => f.vm),\n layout: this.config.isList\n ? []\n : this._resolveLayoutForChildren(this._children, this._activeTemplateId),\n items: this.config.isList\n ? this._items.map((item, index) => ({\n key: item.key,\n fields: Array.from(item.children.values())\n .filter(f => f.visible)\n .map(f => f.vm),\n layout: this._resolveLayoutForChildren(\n item.children,\n item.templateId ?? null\n ),\n templateId: item.templateId,\n remove: () => this.removeItem(index),\n moveUp: () => this.moveItem(index, index - 1),\n moveDown: () => this.moveItem(index, index + 1),\n duplicate: () => this.duplicateItem(index),\n getClonedData: () => this._getClonedItemData(item)\n }))\n : [],\n addItem: (value?: unknown) => {\n if (value === undefined) {\n return this.addItem();\n }\n if (typeof value === \"string\") {\n return this.addItem(value);\n }\n const data = value as Record<string, unknown>;\n const templateId = data[TEMPLATE_DISCRIMINATOR];\n if (typeof templateId === \"string\") {\n const { [TEMPLATE_DISCRIMINATOR]: _, ...rest } = data;\n return this.addItem(templateId, rest);\n }\n return this.addItem(value as Record<string, unknown>);\n },\n removeItem: (index: number) => this.removeItem(index),\n moveItem: (from: number, to: number) => this.moveItem(from, to),\n duplicateItem: (index: number) => this.duplicateItem(index),\n isTemplated: this.isTemplated,\n availableTemplates: this.availableTemplates,\n activeTemplateId: this._activeTemplateId,\n setTemplate: (templateId: string) => this.setTemplate(templateId),\n getClonedData: () => this._getClonedData()\n };\n }\n\n get hasErrors(): boolean {\n const checkChildren = (children: Map<string, IField>): boolean => {\n for (const [, field] of children) {\n if (field.vm.validation.isValid === false) {\n return true;\n }\n if (isObjectField(field) && field.hasErrors) {\n return true;\n }\n }\n return false;\n };\n\n if (this.config.isList) {\n for (const item of this._items) {\n if (checkChildren(item.children)) {\n return true;\n }\n }\n } else {\n if (checkChildren(this._children)) {\n return true;\n }\n }\n return false;\n }\n\n async validate(options?: { force?: boolean }): Promise<boolean> {\n if (!this.visible) {\n this.setValidation({ isValid: null });\n return true;\n }\n\n runInAction(() => {\n this._validating = true;\n });\n\n try {\n const requiredState = this._base.resolveRequired();\n if (requiredState.required) {\n const message = requiredState.message || \"This field is required.\";\n if (this.config.isList && this._items.length === 0) {\n this.setValidation({ isValid: false, message });\n return false;\n }\n if (!this.config.isList) {\n if (this.isTemplated) {\n if (this._activeTemplateId === null) {\n this.setValidation({ isValid: false, message });\n return false;\n }\n } else {\n const data = this.getData();\n const hasAnyValue = Object.values(data).some(\n v => v !== null && v !== undefined && v !== \"\"\n );\n if (!hasAnyValue) {\n this.setValidation({ isValid: false, message });\n return false;\n }\n }\n }\n }\n\n if (this.config.isList && this.config.listSchema) {\n const listData = this.getData();\n if (\n !requiredState.required &&\n (listData === null ||\n listData === undefined ||\n (Array.isArray(listData) && listData.length === 0))\n ) {\n this.setValidationWithCache({ isValid: null }, listData, true);\n return true;\n }\n const result = await this.config.listSchema.safeParseAsync(listData);\n if (!result.success) {\n const firstIssue = result.error.issues[0];\n runInAction(() => {\n this.setValidation({\n isValid: false,\n message: firstIssue?.message || \"Invalid value.\"\n });\n });\n return false;\n }\n }\n\n if (this.config.schema) {\n const data = this.getData();\n if (!requiredState.required) {\n if (data == null) {\n this.setValidationWithCache({ isValid: null }, data, true);\n return true;\n }\n const hasAnyValue = Object.values(data).some(\n v => v !== null && v !== undefined && v !== \"\"\n );\n if (!hasAnyValue) {\n this.setValidationWithCache({ isValid: null }, data, true);\n return true;\n }\n }\n const result = await this.config.schema.safeParseAsync(data);\n if (!result.success) {\n const firstIssue = result.error.issues[0];\n runInAction(() => {\n this.setValidation({\n isValid: false,\n message: firstIssue?.message || \"Invalid value.\"\n });\n });\n return false;\n }\n }\n\n let allValid = true;\n\n if (this.config.isList) {\n for (const item of this._items) {\n const valid = await validateChildren(item.children, options);\n if (!valid) {\n allValid = false;\n }\n }\n } else {\n allValid = await validateChildren(this._children, options);\n }\n\n runInAction(() => {\n this.setValidation({ isValid: allValid });\n });\n\n return allValid;\n } finally {\n runInAction(() => {\n this._validating = false;\n });\n }\n }\n}\n"],"names":["TEMPLATE_DISCRIMINATOR","createChildFields","childBuilders","form","parentPath","scopePath","children","Map","name","builder","Object","config","field","createFieldFromConfig","objField","ObjectField","Field","hydrateChildren","data","options","getChildrenData","isObjectField","toJS","validateChildren","allValid","valid","itemKeyCounter","makeAutoObservable","id","t","templateId","template","Error","inner","value","rules","myPath","item","key","index","validation","result","cb","fn","message","configure","tb","createTemplateBuilder","layout","Array","node","child","tab","undefined","layoutNodes","fallback","clonedData","builders","factory","built","newField","itemField","itemData","_discarded","rest","templateIdOrData","fromIndex","toIndex","source","type","baseVm","f","_","from","to","checkChildren","runInAction","requiredState","hasAnyValue","v","listData","firstIssue"],"mappings":"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"}
@@ -3,7 +3,7 @@ interface PresenterErrorsProps {
3
3
  title?: string;
4
4
  errors: string[];
5
5
  }
6
- export declare const PresenterErrors: (({ errors, ...props }: PresenterErrorsProps) => React.JSX.Element | null) & {
7
- displayName: string;
6
+ export declare const PresenterErrors: (({ errors, ...props }: PresenterErrorsProps) => React.JSX.Element | null) & React.NamedExoticComponent<PresenterErrorsProps> & {
7
+ readonly type: ({ errors, ...props }: PresenterErrorsProps) => React.JSX.Element | null;
8
8
  };
9
9
  export {};
@@ -171,6 +171,7 @@ export interface ITemplateIcon {
171
171
  export interface ITemplateVM {
172
172
  id: string;
173
173
  label: string;
174
+ description?: string;
174
175
  icon?: ITemplateIcon;
175
176
  }
176
177
  export interface IField {
@@ -185,7 +186,13 @@ export interface IField {
185
186
  setValueSilent(value: unknown): void;
186
187
  setDisabled(value: boolean): void;
187
188
  setVisible(value: boolean): void;
188
- setForm(form: IFormModel, parentPath?: string): void;
189
+ /**
190
+ * `parentPath` is the parent's qualified name. `scopePath` returns a path that
191
+ * `form.field()` resolves to the parent itself; it differs from `parentPath` for
192
+ * list item children, where it includes the item index (`blocks.2`). `$.` rule
193
+ * targets and `field.parent()` resolve against it. Defaults to `parentPath`.
194
+ */
195
+ setForm(form: IFormModel, parentPath?: string, scopePath?: () => string): void;
189
196
  setAncestorRules(rules: IRule[]): void;
190
197
  setValidation(validation: IFieldValidation): void;
191
198
  resetValidation(): void;
@@ -255,6 +262,7 @@ export interface IObjectFieldConfig extends IFieldConfig {
255
262
  }
256
263
  export interface ITemplateBuilder {
257
264
  label(text: string): this;
265
+ description(text: string): this;
258
266
  icon(icon: ITemplateIcon): this;
259
267
  fields(factory: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>): this;
260
268
  visible(predicate: (form: IFormModel) => boolean): this;
@@ -262,6 +270,7 @@ export interface ITemplateBuilder {
262
270
  export interface ITemplateConfig {
263
271
  id: string;
264
272
  label: string;
273
+ description?: string;
265
274
  icon?: ITemplateIcon;
266
275
  childBuilders: Record<string, IFieldBuilder>;
267
276
  visible?: (form: IFormModel) => boolean;
@@ -583,6 +592,13 @@ export interface IFormModel<T = Record<string, any>> {
583
592
  }): void;
584
593
  reset(): void;
585
594
  validate(): Promise<boolean>;
595
+ /**
596
+ * Assign errors from outside the form, e.g. a rejected save. Errors whose `path`
597
+ * resolves to a visible field become that field's validation error; the rest are
598
+ * form-level. The form is marked as submitted so `FormErrors` renders them. They are
599
+ * cleared by the next `validate()`, `setData()` or `reset()`.
600
+ */
601
+ setErrors(errors: IFormError[]): void;
586
602
  submit<T = Record<string, unknown>>(options?: {
587
603
  skipValidation?: boolean;
588
604
  }): Promise<T | false>;