@webiny/app-admin 6.5.0-beta.4 → 6.5.0-beta.6
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/base/Base/FieldRenderers/HorizontalTabsRenderer.d.ts +2 -2
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.d.ts +2 -2
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +8 -4
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.d.ts +2 -2
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/{TemplatePicker.d.ts → TemplatePicker/AddTemplateButton.d.ts} +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/AddTemplateButton.js +24 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/AddTemplateButton.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.d.ts +13 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.js +21 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.d.ts +3 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.js +35 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.d.ts +8 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.js +22 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.d.ts +10 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.js +46 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.d.ts +8 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.js +16 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.d.ts +10 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.js +22 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.d.ts +3 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.js +35 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/index.d.ts +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/index.js +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/types.d.ts +6 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/types.js +0 -0
- package/base/Base/FieldRenderers/VerticalTabsRenderer.d.ts +2 -2
- package/components/IconPicker/IconPickerComponent.d.ts +2 -2
- package/components/IconPicker/IconPickerComponent.js +1 -1
- package/components/IconPicker/IconPickerComponent.js.map +1 -1
- package/components/ListView/ListViewBulkActions.d.ts +2 -2
- package/components/ListView/ListViewContent.d.ts +2 -2
- package/components/ListView/ListViewFilters.d.ts +2 -2
- package/components/ListView/index.d.ts +6 -6
- package/components/RolesMultiAutocomplete/index.js +1 -1
- package/components/RolesMultiAutocomplete/index.js.map +1 -1
- package/components/Table/components/Table/TableInner.d.ts +2 -2
- package/components/TeamsMultiAutocomplete/index.js +1 -1
- package/components/TeamsMultiAutocomplete/index.js.map +1 -1
- package/domain/Identity.js +1 -1
- package/domain/Identity.js.map +1 -1
- package/features/debugger/Debugger.d.ts +2 -2
- package/features/debugger/DebuggerIndicator.d.ts +2 -2
- package/features/debugger/DebuggerView.d.ts +2 -2
- package/features/formModel/FieldBuilder.test.js +13 -0
- package/features/formModel/FieldBuilder.test.js.map +1 -1
- package/features/formModel/FormErrors.d.ts +2 -2
- package/features/formModel/FormModel.test.js +205 -2
- package/features/formModel/FormModel.test.js.map +1 -1
- package/features/formModel/FormView.d.ts +8 -4
- package/features/formModel/ObjectField.d.ts +2 -0
- package/features/formModel/ObjectField.js +19 -3
- package/features/formModel/ObjectField.js.map +1 -1
- package/features/formModel/PresenterErrors.d.ts +2 -2
- package/features/formModel/abstractions.d.ts +16 -0
- package/features/formModel/abstractions.js.map +1 -1
- package/features/formModel/demo/FormModelDemo.d.ts +2 -2
- package/features/formModel/fieldTypes/DateTimeFieldType.js +5 -4
- package/features/formModel/fieldTypes/DateTimeFieldType.js.map +1 -1
- package/features/formModel/fieldTypes/ObjectFieldType.d.ts +3 -1
- package/features/formModel/fieldTypes/ObjectFieldType.js +23 -1
- package/features/formModel/fieldTypes/ObjectFieldType.js.map +1 -1
- package/features/notifications/NotificationsRenderer.d.ts +2 -2
- package/hooks/useSnackbar.js.map +1 -1
- package/package.json +34 -34
- package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js +1 -2
- package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js.map +1 -1
- package/presentation/accessManagement/apiKeys/components/ApiKeysView.d.ts +2 -2
- package/presentation/accessManagement/roles/RolesPresenter.js +1 -2
- package/presentation/accessManagement/roles/RolesPresenter.js.map +1 -1
- package/presentation/accessManagement/roles/components/RolesView.d.ts +2 -2
- package/presentation/accessManagement/teams/TeamsPresenter.js +1 -2
- package/presentation/accessManagement/teams/TeamsPresenter.js.map +1 -1
- package/presentation/accessManagement/teams/components/TeamsView.d.ts +2 -2
- package/presentation/installation/components/SystemInstaller/SystemInstaller.d.ts +2 -2
- package/presentation/listPresenter/QueryMatcher.js +3 -3
- package/presentation/listPresenter/QueryMatcher.js.map +1 -1
- package/presentation/trashBin/components/BulkActions/DeleteItems.d.ts +2 -2
- package/presentation/trashBin/components/BulkActions/RestoreItems.d.ts +2 -2
- package/presentation/trashBin/components/TrashBinOverlay.d.ts +2 -2
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js +0 -68
- 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
|
-
|
|
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
|
-
|
|
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;
|
|
@@ -22,6 +22,8 @@ export declare class ObjectField implements IObjectField {
|
|
|
22
22
|
private _templateLayouts;
|
|
23
23
|
private _validating;
|
|
24
24
|
constructor(config: IObjectFieldConfig);
|
|
25
|
+
/** Layouts declared on the templates themselves via `template.layout()`. */
|
|
26
|
+
private _declaredTemplateLayouts;
|
|
25
27
|
private _findTemplate;
|
|
26
28
|
private _rebuildChildrenForTemplate;
|
|
27
29
|
get name(): string;
|
|
@@ -62,14 +62,24 @@ class ObjectField {
|
|
|
62
62
|
});
|
|
63
63
|
this._templates = config.templates ?? [];
|
|
64
64
|
this._isTemplated = this._templates.length > 0;
|
|
65
|
+
this._ownLayout = config.layout ?? null;
|
|
66
|
+
this._templateLayouts = this._declaredTemplateLayouts();
|
|
65
67
|
if (this._isTemplated) this._children = new Map();
|
|
66
|
-
else
|
|
68
|
+
else {
|
|
69
|
+
this._children = createChildFields(config.childBuilders, null);
|
|
70
|
+
if (this._ownLayout) this._applyNestedObjectLayouts(this._ownLayout, this._children);
|
|
71
|
+
}
|
|
67
72
|
makeAutoObservable(this, {
|
|
68
73
|
config: false,
|
|
69
74
|
_childScope: false,
|
|
70
75
|
_itemScope: false
|
|
71
76
|
});
|
|
72
77
|
}
|
|
78
|
+
_declaredTemplateLayouts() {
|
|
79
|
+
const layouts = {};
|
|
80
|
+
for (const template of this._templates)if (template.layout) layouts[template.id] = template.layout;
|
|
81
|
+
return layouts;
|
|
82
|
+
}
|
|
73
83
|
_findTemplate(id) {
|
|
74
84
|
return this._templates.find((t)=>t.id === id);
|
|
75
85
|
}
|
|
@@ -183,6 +193,7 @@ class ObjectField {
|
|
|
183
193
|
result.push({
|
|
184
194
|
id: template.id,
|
|
185
195
|
label: template.label,
|
|
196
|
+
description: template.description,
|
|
186
197
|
icon: template.icon
|
|
187
198
|
});
|
|
188
199
|
}
|
|
@@ -204,7 +215,9 @@ class ObjectField {
|
|
|
204
215
|
if (this._findTemplate(id)) throw new Error(`Duplicate template id "${id}".`);
|
|
205
216
|
const tb = createTemplateBuilder();
|
|
206
217
|
configure(tb);
|
|
207
|
-
|
|
218
|
+
const template = tb._build(id, this._form.registry);
|
|
219
|
+
this._templates.push(template);
|
|
220
|
+
if (template.layout && !this._templateLayouts[id]) this._templateLayouts[id] = template.layout;
|
|
208
221
|
}
|
|
209
222
|
_removeTemplate(templateId) {
|
|
210
223
|
if (!this.isTemplated) throw new Error(`Object field "${this.config.name}" is not templated; templates.remove() requires the field to be defined with .template().`);
|
|
@@ -230,7 +243,10 @@ class ObjectField {
|
|
|
230
243
|
return;
|
|
231
244
|
}
|
|
232
245
|
if (!this.isTemplated) throw new Error(`Object field "${this.config.name}" is not templated; layout.object() must pass a single LayoutNode[], not a per-template map.`);
|
|
233
|
-
this._templateLayouts =
|
|
246
|
+
this._templateLayouts = {
|
|
247
|
+
...this._declaredTemplateLayouts(),
|
|
248
|
+
...layout
|
|
249
|
+
};
|
|
234
250
|
this._ownLayout = null;
|
|
235
251
|
if (this._activeTemplateId && layout[this._activeTemplateId]) this._applyNestedObjectLayouts(layout[this._activeTemplateId], this._children);
|
|
236
252
|
for (const item of this._items)if (item.templateId && layout[item.templateId]) this._applyNestedObjectLayouts(layout[item.templateId], item.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 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({ 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(\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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"}
|
|
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 this._ownLayout = config.layout ?? null;\n this._templateLayouts = this._declaredTemplateLayouts();\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 if (this._ownLayout) {\n this._applyNestedObjectLayouts(this._ownLayout, this._children);\n }\n }\n\n makeAutoObservable<this, \"_childScope\" | \"_itemScope\">(this, {\n config: false,\n _childScope: false,\n _itemScope: false\n });\n }\n\n /** Layouts declared on the templates themselves via `template.layout()`. */\n private _declaredTemplateLayouts(): Record<string, LayoutNode[]> {\n const layouts: Record<string, LayoutNode[]> = {};\n for (const template of this._templates) {\n if (template.layout) {\n layouts[template.id] = template.layout;\n }\n }\n return layouts;\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 const template = tb._build(id, this._form!.registry);\n this._templates.push(template);\n if (template.layout && !this._templateLayouts[id]) {\n this._templateLayouts[id] = template.layout;\n }\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 // Templates the override doesn't mention keep the layout they declared.\n this._templateLayouts = { ...this._declaredTemplateLayouts(), ...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","layouts","template","id","t","templateId","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
|
-
|
|
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 {
|
|
@@ -258,18 +259,27 @@ export interface IObjectFieldConfig extends IFieldConfig {
|
|
|
258
259
|
isList: boolean;
|
|
259
260
|
listSchema?: z.ZodTypeAny;
|
|
260
261
|
templates?: ITemplateConfig[];
|
|
262
|
+
/**
|
|
263
|
+
* Inner layout declared on the field itself via `.layout()`. A `layout.object()`
|
|
264
|
+
* node in the parent layout takes precedence over it.
|
|
265
|
+
*/
|
|
266
|
+
layout?: LayoutNode[];
|
|
261
267
|
}
|
|
262
268
|
export interface ITemplateBuilder {
|
|
263
269
|
label(text: string): this;
|
|
270
|
+
description(text: string): this;
|
|
264
271
|
icon(icon: ITemplateIcon): this;
|
|
265
272
|
fields(factory: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>): this;
|
|
273
|
+
layout(factory: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]): this;
|
|
266
274
|
visible(predicate: (form: IFormModel) => boolean): this;
|
|
267
275
|
}
|
|
268
276
|
export interface ITemplateConfig {
|
|
269
277
|
id: string;
|
|
270
278
|
label: string;
|
|
279
|
+
description?: string;
|
|
271
280
|
icon?: ITemplateIcon;
|
|
272
281
|
childBuilders: Record<string, IFieldBuilder>;
|
|
282
|
+
layout?: LayoutNode[];
|
|
273
283
|
visible?: (form: IFormModel) => boolean;
|
|
274
284
|
}
|
|
275
285
|
export interface IObjectField extends ITypedField<Record<string, unknown> | null> {
|
|
@@ -758,6 +768,12 @@ export interface IObjectFieldBuilder extends IFieldBuilder<"object", false, Reco
|
|
|
758
768
|
list(): this;
|
|
759
769
|
listSchema(schema: z.ZodTypeAny): this;
|
|
760
770
|
template(id: string, configure: (t: ITemplateBuilder) => void): this;
|
|
771
|
+
/**
|
|
772
|
+
* Lay out the object's children: rows of child field names, plus separators, alerts
|
|
773
|
+
* and tabs. Applies to the single object and to every list item. Templated objects
|
|
774
|
+
* declare their layouts per template instead.
|
|
775
|
+
*/
|
|
776
|
+
layout(factory: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]): this;
|
|
761
777
|
}
|
|
762
778
|
export interface IFieldBuilderRegistry {
|
|
763
779
|
}
|