@webiny/app-admin 6.3.0-beta.2 → 6.3.0-beta.3
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/DefaultFieldRenderers.js +69 -5
- package/base/Base/DefaultFieldRenderers.js.map +1 -1
- package/base/Base/DefaultLayoutRenderers.js +5 -1
- package/base/Base/DefaultLayoutRenderers.js.map +1 -1
- package/base/Base/FieldRenderers/CheckboxesRenderer.d.ts +13 -0
- package/base/Base/FieldRenderers/CheckboxesRenderer.js +28 -0
- package/base/Base/FieldRenderers/CheckboxesRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/CodeEditorRenderer.d.ts +15 -0
- package/base/Base/FieldRenderers/CodeEditorRenderer.js +17 -0
- package/base/Base/FieldRenderers/CodeEditorRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/DateTimeInputsRenderer.d.ts +17 -0
- package/base/Base/FieldRenderers/DateTimeInputsRenderer.js +66 -0
- package/base/Base/FieldRenderers/DateTimeInputsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/DateTimeRenderer.d.ts +21 -0
- package/base/Base/FieldRenderers/DateTimeRenderer.js +46 -0
- package/base/Base/FieldRenderers/DateTimeRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/FilePickerRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/FilePickerRenderer.js +47 -0
- package/base/Base/FieldRenderers/FilePickerRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/FileUrlPickerRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/FileUrlPickerRenderer.js +25 -0
- package/base/Base/FieldRenderers/FileUrlPickerRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/HiddenRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/HiddenRenderer.js +5 -0
- package/base/Base/FieldRenderers/HiddenRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/HorizontalTabsRenderer.d.ts +5 -0
- package/base/Base/FieldRenderers/HorizontalTabsRenderer.js +27 -0
- package/base/Base/FieldRenderers/HorizontalTabsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/InputRenderer.d.ts +4 -7
- package/base/Base/FieldRenderers/InputRenderer.js +2 -2
- package/base/Base/FieldRenderers/InputRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/NumberInputRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/NumberInputRenderer.js +23 -0
- package/base/Base/FieldRenderers/NumberInputRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/NumberInputsRenderer.d.ts +14 -0
- package/base/Base/FieldRenderers/NumberInputsRenderer.js +49 -0
- package/base/Base/FieldRenderers/NumberInputsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.d.ts +14 -0
- package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js +20 -0
- package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.d.ts +14 -0
- package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.js +65 -0
- package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.d.ts +10 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.js +109 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.d.ts +17 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js +55 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +7 -3
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js +15 -19
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.d.ts +5 -8
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js +7 -50
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.d.ts +10 -0
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js +64 -0
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.d.ts +10 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js +85 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js.map +1 -0
- package/base/Base/FieldRenderers/PassthroughRenderer.d.ts +3 -6
- package/base/Base/FieldRenderers/PassthroughRenderer.js +9 -23
- package/base/Base/FieldRenderers/PassthroughRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/RadioButtonsRenderer.d.ts +13 -0
- package/base/Base/FieldRenderers/RadioButtonsRenderer.js +27 -0
- package/base/Base/FieldRenderers/RadioButtonsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/SelectRenderer.d.ts +6 -8
- package/base/Base/FieldRenderers/SelectRenderer.js +8 -5
- package/base/Base/FieldRenderers/SelectRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/SwitchRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/SwitchRenderer.js +19 -0
- package/base/Base/FieldRenderers/SwitchRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/TagsRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/TagsRenderer.js +21 -0
- package/base/Base/FieldRenderers/TagsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/TextInputsRenderer.d.ts +14 -0
- package/base/Base/FieldRenderers/TextInputsRenderer.js +48 -0
- package/base/Base/FieldRenderers/TextInputsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/TextareaRenderer.d.ts +3 -6
- package/base/Base/FieldRenderers/TextareaRenderer.js +3 -4
- package/base/Base/FieldRenderers/TextareaRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/TextareasRenderer.d.ts +14 -0
- package/base/Base/FieldRenderers/TextareasRenderer.js +51 -0
- package/base/Base/FieldRenderers/TextareasRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/VerticalTabsRenderer.js +2 -2
- package/base/Base/FieldRenderers/VerticalTabsRenderer.js.map +1 -1
- package/base/Base/Menus.js +5 -64
- package/base/Base/Menus.js.map +1 -1
- package/base/Base/RoutesConfig.js +6 -0
- package/base/Base/RoutesConfig.js.map +1 -1
- package/exports/admin/build-params.d.ts +2 -0
- package/exports/admin/build-params.js +3 -0
- package/exports/admin/build-params.js.map +1 -1
- package/exports/admin/form.d.ts +5 -0
- package/exports/admin/form.js +8 -0
- package/exports/admin/form.js.map +1 -1
- package/exports/admin/ui.d.ts +1 -0
- package/exports/admin/ui.js +1 -0
- package/exports/admin/ui.js.map +1 -1
- package/exports/admin.d.ts +3 -1
- package/exports/admin.js +3 -1
- package/exports/admin.js.map +1 -1
- package/features/formModel/ConditionRuleEvaluator.d.ts +9 -0
- package/features/formModel/ConditionRuleEvaluator.js +56 -0
- package/features/formModel/ConditionRuleEvaluator.js.map +1 -0
- package/features/formModel/Field.d.ts +50 -4
- package/features/formModel/Field.js +254 -35
- package/features/formModel/Field.js.map +1 -1
- package/features/formModel/FieldBuilder.d.ts +17 -35
- package/features/formModel/FieldBuilder.js +63 -100
- package/features/formModel/FieldBuilder.js.map +1 -1
- package/features/formModel/FieldBuilder.test.js +127 -13
- package/features/formModel/FieldBuilder.test.js.map +1 -1
- package/features/formModel/FieldBuilderRegistry.d.ts +4 -0
- package/features/formModel/FieldBuilderRegistry.js +31 -0
- package/features/formModel/FieldBuilderRegistry.js.map +1 -0
- package/features/formModel/FocusManager.d.ts +14 -0
- package/features/formModel/FocusManager.js +109 -0
- package/features/formModel/FocusManager.js.map +1 -0
- package/features/formModel/FormModel.d.ts +27 -31
- package/features/formModel/FormModel.js +210 -403
- package/features/formModel/FormModel.js.map +1 -1
- package/features/formModel/FormModel.test.js +2044 -193
- package/features/formModel/FormModel.test.js.map +1 -1
- package/features/formModel/FormModelFactory.d.ts +4 -2
- package/features/formModel/FormModelFactory.js +13 -3
- package/features/formModel/FormModelFactory.js.map +1 -1
- package/features/formModel/FormView.d.ts +2 -0
- package/features/formModel/FormView.js +44 -37
- package/features/formModel/FormView.js.map +1 -1
- package/features/formModel/LayoutBuilderFactory.d.ts +61 -0
- package/features/formModel/LayoutBuilderFactory.js +386 -0
- package/features/formModel/LayoutBuilderFactory.js.map +1 -0
- package/features/formModel/LayoutMutator.d.ts +11 -0
- package/features/formModel/LayoutMutator.js +136 -0
- package/features/formModel/LayoutMutator.js.map +1 -0
- package/features/formModel/LayoutResolver.d.ts +26 -0
- package/features/formModel/LayoutResolver.js +239 -0
- package/features/formModel/LayoutResolver.js.map +1 -0
- package/features/formModel/ObjectField.d.ts +55 -4
- package/features/formModel/ObjectField.js +499 -82
- package/features/formModel/ObjectField.js.map +1 -1
- package/features/formModel/Rules.test.d.ts +1 -0
- package/features/formModel/Rules.test.js +289 -0
- package/features/formModel/Rules.test.js.map +1 -0
- package/features/formModel/abstractions.d.ts +402 -52
- package/features/formModel/abstractions.js +55 -0
- package/features/formModel/abstractions.js.map +1 -1
- package/features/formModel/createFieldRenderer.d.ts +20 -0
- package/features/formModel/createFieldRenderer.js +15 -0
- package/features/formModel/createFieldRenderer.js.map +1 -0
- package/features/formModel/demo/FieldRenderersDemoPresenter.d.ts +18 -0
- package/features/formModel/demo/FieldRenderersDemoPresenter.js +225 -0
- package/features/formModel/demo/FieldRenderersDemoPresenter.js.map +1 -0
- package/features/formModel/demo/FormModelDemo.d.ts +4 -0
- package/features/formModel/demo/FormModelDemo.js +230 -0
- package/features/formModel/demo/FormModelDemo.js.map +1 -0
- package/features/formModel/demo/FormModelDemoPresenter.d.ts +22 -0
- package/features/formModel/demo/FormModelDemoPresenter.js +121 -0
- package/features/formModel/demo/FormModelDemoPresenter.js.map +1 -0
- package/features/formModel/demo/FormModelPhase11Presenter.d.ts +25 -0
- package/features/formModel/demo/FormModelPhase11Presenter.js +104 -0
- package/features/formModel/demo/FormModelPhase11Presenter.js.map +1 -0
- package/features/formModel/demo/FormModelPhase8c1Presenter.d.ts +23 -0
- package/features/formModel/demo/FormModelPhase8c1Presenter.js +62 -0
- package/features/formModel/demo/FormModelPhase8c1Presenter.js.map +1 -0
- package/features/formModel/feature.js +12 -0
- package/features/formModel/feature.js.map +1 -1
- package/features/formModel/fieldTypes/BooleanFieldType.d.ts +19 -0
- package/features/formModel/fieldTypes/BooleanFieldType.js +23 -0
- package/features/formModel/fieldTypes/BooleanFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/DateTimeFieldType.d.ts +173 -0
- package/features/formModel/fieldTypes/DateTimeFieldType.js +369 -0
- package/features/formModel/fieldTypes/DateTimeFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/FileFieldType.d.ts +18 -0
- package/features/formModel/fieldTypes/FileFieldType.js +20 -0
- package/features/formModel/fieldTypes/FileFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/FileUrlFieldType.d.ts +18 -0
- package/features/formModel/fieldTypes/FileUrlFieldType.js +20 -0
- package/features/formModel/fieldTypes/FileUrlFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/NumberFieldType.d.ts +19 -0
- package/features/formModel/fieldTypes/NumberFieldType.js +27 -0
- package/features/formModel/fieldTypes/NumberFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/ObjectFieldType.d.ts +34 -0
- package/features/formModel/fieldTypes/ObjectFieldType.js +109 -0
- package/features/formModel/fieldTypes/ObjectFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/TextFieldType.d.ts +18 -0
- package/features/formModel/fieldTypes/TextFieldType.js +20 -0
- package/features/formModel/fieldTypes/TextFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/index.d.ts +7 -0
- package/features/formModel/fieldTypes/index.js +9 -0
- package/features/formModel/fieldTypes/index.js.map +1 -0
- package/features/formModel/index.d.ts +13 -4
- package/features/formModel/index.js +21 -2
- package/features/formModel/index.js.map +1 -1
- package/features/formModel/renderers.d.ts +15 -1
- package/features/formModel/renderers.js +15 -1
- package/features/formModel/renderers.js.map +1 -1
- package/features/tools/LexicalContext/LexicalContext.d.ts +14 -0
- package/features/tools/LexicalContext/LexicalContext.js +22 -0
- package/features/tools/LexicalContext/LexicalContext.js.map +1 -0
- package/features/tools/LexicalContext/abstractions.d.ts +11 -0
- package/features/tools/LexicalContext/abstractions.js +4 -0
- package/features/tools/LexicalContext/abstractions.js.map +1 -0
- package/features/tools/LexicalContext/index.d.ts +2 -0
- package/features/tools/LexicalContext/index.js +3 -0
- package/features/tools/LexicalContext/index.js.map +1 -0
- package/features/tools/feature.js +2 -0
- package/features/tools/feature.js.map +1 -1
- package/features/tools/index.d.ts +1 -0
- package/features/tools/index.js +1 -0
- package/features/tools/index.js.map +1 -1
- package/index.d.ts +8 -1
- package/index.js +7 -0
- package/index.js.map +1 -1
- package/package.json +30 -24
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js +1 -1
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js.map +1 -1
- package/presentation/lexicalContext/useLexicalContext.d.ts +3 -0
- package/presentation/lexicalContext/useLexicalContext.js +14 -0
- package/presentation/lexicalContext/useLexicalContext.js.map +1 -0
- package/presentation/textToLexicalTool/TextToLexicalTool.d.ts +3 -0
- package/presentation/textToLexicalTool/TextToLexicalTool.js +6 -2
- package/presentation/textToLexicalTool/TextToLexicalTool.js.map +1 -1
- package/presentation/textToLexicalTool/textToLexicalState.d.ts +2 -1
- package/presentation/textToLexicalTool/textToLexicalState.js +15 -3
- package/presentation/textToLexicalTool/textToLexicalState.js.map +1 -1
- package/routes.d.ts +1 -0
- package/routes.js +4 -0
- package/routes.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.d.ts +0 -21
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.js +0 -28
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["makeAutoObservable","computed","toJS","runInAction","observable","Field","ObjectField","isObjectField","createFieldBuilderRegistry","layoutAPI","row","fieldIds","type","separator","tabs","config","id","renderer","element","props","FormModel","_fields","Map","_layout","_baseline","_submitted","_validateOnChange","_isValid","_errors","_activeTabs","map","constructor","registry","builders","fields","name","builder","Object","entries","fieldConfig","build","field","_createField","setForm","set","layout","_warnOrphanFields","_generateDefaultLayout","validateOnSubmit","_snapshotBaseline","vm","autoBind","get","parts","split","length","current","i","getChild","undefined","Error","factory","removeField","factoryOrNodeId","_accessLayoutNode","removals","modifierLayoutAPI","_createModifierLayoutAPI","target","_removeFromLayout","entry","_isPositionedNode","node","position","_insertIntoLayout","push","delete","getData","data","getValue","setData","value","setValueSilent","_resetAllValidation","reset","baselineValue","defaultValue","isDirty","baseline","JSON","stringify","isValid","errors","validate","valid","path","label","message","validation","submit","_resolveLayout","getField","getFields","_resolveLayoutNode","filter","Boolean","_resolveRowNode","_resolveSeparatorNode","_resolveTabsNode","_resolveElementNode","f","visible","tabKey","_tabsNodeKey","tab","description","icon","hasErrors","_tabHasErrors","child","storedActive","validActive","find","t","activeTabId","setActiveTab","_collectFieldIdsFromLayout","ids","join","layoutFieldIds","Set","has","console","warn","clear","resetValidation","_findLayoutIndex","findIndex","_nodeMatchesTarget","includes","filtered","targetIndex","result","splice","createLayoutNodeHandle","remove","nodeId","findTabsNode","found","as","tabsNode","definitionOrId","nodes","before","after","newTab","targetTabId","idx","childBuilders","handle","replace"],"sources":["FormModel.ts"],"sourcesContent":["import { makeAutoObservable, computed, toJS, runInAction, observable } from \"mobx\";\nimport { Field } from \"./Field.js\";\nimport { ObjectField, isObjectField } from \"./ObjectField.js\";\nimport { createFieldBuilderRegistry } from \"./FieldBuilder.js\";\nimport type {\n IFormModel,\n IField,\n IFieldBuilder,\n IFieldBuilderRegistry,\n IObjectFieldConfig,\n IFormVM,\n IFormError,\n IFormModelConfig,\n ILayoutBuilder,\n ILayoutNodeHandle,\n ILayoutModifier,\n IPositionedLayoutNode,\n ILayoutNodeAccessHandle,\n ITabsHandle,\n ITabHandle,\n LayoutNode,\n LayoutPosition,\n LayoutNodeVM,\n IRowNode,\n IRowNodeVM,\n ISeparatorNode,\n ISeparatorNodeVM,\n ITabsNode,\n ITabsNodeVM,\n ITabDefinition,\n ITabDefinitionVM,\n IElementNode,\n IElementNodeVM\n} from \"./abstractions.js\";\n\nconst layoutAPI: ILayoutBuilder = {\n row(...fieldIds: string[]): IRowNode {\n return { type: \"row\", fieldIds };\n },\n separator(): ISeparatorNode {\n return { type: \"separator\" };\n },\n tabs(config: { id?: string; renderer?: string; tabs: ITabDefinition[] }): ITabsNode {\n return { type: \"tabs\", id: config.id, renderer: config.renderer, tabs: config.tabs };\n },\n element(renderer: string, props?: Record<string, unknown>): IElementNode {\n return { type: \"element\", renderer, props };\n }\n};\n\nexport class FormModel implements IFormModel {\n private _fields = new Map<string, IField>();\n private _layout: LayoutNode[] = [];\n private _baseline = new Map<string, unknown>();\n private _submitted = false;\n private _validateOnChange = false;\n private _isValid: boolean | null = null;\n private _errors: IFormError[] = [];\n private _activeTabs = observable.map<string, string>();\n\n constructor(config: IFormModelConfig) {\n const registry = createFieldBuilderRegistry();\n const builders = config.fields(registry);\n\n // Build fields from builders\n for (const [name, builder] of Object.entries(builders)) {\n const fieldConfig = builder.build(name);\n const field = this._createField(fieldConfig);\n field.setForm(this);\n this._fields.set(name, field);\n }\n\n // Build layout\n if (config.layout) {\n this._layout = config.layout(layoutAPI);\n this._warnOrphanFields();\n } else {\n this._layout = this._generateDefaultLayout();\n }\n\n // Validation strategy\n this._validateOnChange = config.validateOnSubmit === false;\n\n // Snapshot baseline from defaults\n this._snapshotBaseline();\n\n makeAutoObservable(\n this,\n {\n vm: computed\n },\n { autoBind: true }\n );\n }\n\n field(name: string): IField {\n // Try exact match first (supports dotted field names like \"properties.language\").\n const field = this._fields.get(name);\n if (field) {\n return field;\n }\n\n // Try dot-notation traversal through ObjectField children.\n const parts = name.split(\".\");\n if (parts.length > 1) {\n let current: IField | undefined = this._fields.get(parts[0]);\n for (let i = 1; i < parts.length && current; i++) {\n if (isObjectField(current)) {\n current = current.getChild(parts[i]);\n } else {\n current = undefined;\n }\n }\n if (current) {\n return current;\n }\n }\n\n throw new Error(`Field \"${name}\" not found.`);\n }\n\n fields(\n factory: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder | undefined>\n ): void {\n const registry = createFieldBuilderRegistry();\n const builders = factory(registry);\n\n for (const [name, builder] of Object.entries(builders)) {\n if (builder === undefined) {\n // undefined = remove\n this.removeField(name);\n continue;\n }\n\n const fieldConfig = builder.build(name);\n const field = this._createField(fieldConfig);\n field.setForm(this);\n\n // Replace or add — same operation on the map\n this._fields.set(name, field);\n }\n\n // Re-snapshot baseline to include new fields\n this._snapshotBaseline();\n }\n\n layout(factory: (layout: ILayoutModifier) => (LayoutNode | IPositionedLayoutNode)[]): void;\n layout(nodeId: string): ILayoutNodeAccessHandle;\n layout(\n factoryOrNodeId:\n | ((layout: ILayoutModifier) => (LayoutNode | IPositionedLayoutNode)[])\n | string\n ): void | ILayoutNodeAccessHandle {\n if (typeof factoryOrNodeId === \"string\") {\n return this._accessLayoutNode(factoryOrNodeId);\n }\n\n const factory = factoryOrNodeId;\n const removals: string[] = [];\n const modifierLayoutAPI = this._createModifierLayoutAPI(removals);\n\n const entries = factory(modifierLayoutAPI);\n\n // Process removals first\n for (const target of removals) {\n this._layout = this._removeFromLayout(this._layout, target);\n }\n\n // Process additions with positional modifiers\n for (const entry of entries) {\n if (this._isPositionedNode(entry)) {\n const { node, position } = entry;\n if (position) {\n this._layout = this._insertIntoLayout(this._layout, node, position);\n } else {\n this._layout.push(node);\n }\n } else {\n this._layout.push(entry);\n }\n }\n }\n\n removeField(name: string): void {\n this._fields.delete(name);\n this._baseline.delete(name);\n\n // Remove from layout\n this._layout = this._removeFromLayout(this._layout, name);\n }\n\n getData(): Record<string, unknown> {\n const data: Record<string, unknown> = {};\n for (const [name, field] of this._fields) {\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\n setData(data: Record<string, unknown>): void {\n for (const [name, value] of Object.entries(data)) {\n const field = this._fields.get(name);\n if (field) {\n field.setValueSilent(value);\n }\n }\n this._snapshotBaseline();\n this._resetAllValidation();\n this._submitted = false;\n this._isValid = null;\n this._errors = [];\n }\n\n reset(): void {\n for (const [name, field] of this._fields) {\n const baselineValue = this._baseline.get(name);\n field.setValueSilent(baselineValue ?? field.config.defaultValue ?? null);\n }\n this._resetAllValidation();\n this._submitted = false;\n this._isValid = null;\n this._errors = [];\n }\n\n get isDirty(): boolean {\n for (const [name, field] of this._fields) {\n const baseline = this._baseline.get(name);\n const current = isObjectField(field) ? field.getData() : field.getValue();\n if (JSON.stringify(toJS(current)) !== JSON.stringify(toJS(baseline))) {\n return true;\n }\n }\n return false;\n }\n\n get isValid(): boolean | null {\n return this._isValid;\n }\n\n get errors(): IFormError[] {\n return this._errors;\n }\n\n async validate(): Promise<boolean> {\n const errors: IFormError[] = [];\n\n for (const [, field] of this._fields) {\n const valid = await field.validate();\n if (!valid) {\n errors.push({\n path: field.name,\n label: field.config.label,\n message: field.vm.validation.message || \"Invalid value.\"\n });\n }\n }\n\n const isValid = errors.length === 0;\n runInAction(() => {\n this._errors = errors;\n this._isValid = isValid;\n this._submitted = true;\n });\n return isValid;\n }\n\n async submit<T = Record<string, unknown>>(): Promise<T | false> {\n const valid = await this.validate();\n if (!valid) {\n return false;\n }\n return this.getData() as T;\n }\n\n get vm(): IFormVM {\n return {\n layout: this._resolveLayout(),\n errors: this._errors,\n isDirty: this.isDirty,\n isValid: this._isValid\n };\n }\n\n getField(name: string): IField | undefined {\n return this._fields.get(name);\n }\n\n getFields(): Map<string, IField> {\n return this._fields;\n }\n\n private _resolveLayout(): LayoutNodeVM[] {\n return this._layout\n .map(node => this._resolveLayoutNode(node))\n .filter(Boolean) as LayoutNodeVM[];\n }\n\n private _resolveLayoutNode(node: LayoutNode): LayoutNodeVM | null {\n switch (node.type) {\n case \"row\":\n return this._resolveRowNode(node);\n case \"separator\":\n return this._resolveSeparatorNode();\n case \"tabs\":\n return this._resolveTabsNode(node);\n case \"element\":\n return this._resolveElementNode(node);\n default:\n return null;\n }\n }\n\n private _resolveRowNode(node: IRowNode): IRowNodeVM | null {\n const fields = node.fieldIds\n .map(id => this._fields.get(id))\n .filter((f): f is IField => f !== undefined && f.visible)\n .map(f => f.vm);\n\n if (fields.length === 0) {\n return null;\n }\n\n return { type: \"row\", fields };\n }\n\n private _resolveSeparatorNode(): ISeparatorNodeVM {\n return { type: \"separator\" };\n }\n\n private _resolveTabsNode(node: ITabsNode): ITabsNodeVM | null {\n if (node.tabs.length === 0) {\n return null;\n }\n\n const tabKey = node.id || this._tabsNodeKey(node);\n\n const tabs: ITabDefinitionVM[] = node.tabs.map(tab => ({\n id: tab.id,\n label: tab.label,\n description: tab.description,\n icon: tab.icon,\n hasErrors: this._tabHasErrors(tab.layout),\n layout: tab.layout\n .map(child => this._resolveLayoutNode(child))\n .filter(Boolean) as LayoutNodeVM[]\n }));\n\n if (tabs.length === 0) {\n return null;\n }\n\n // Resolve active tab — fall back to first tab if stored value is invalid\n const storedActive = this._activeTabs.get(tabKey);\n const validActive = tabs.find(t => t.id === storedActive) ? storedActive! : tabs[0].id;\n\n return {\n type: \"tabs\",\n id: node.id,\n renderer: node.renderer,\n tabs,\n activeTabId: validActive,\n setActiveTab: (id: string) => {\n runInAction(() => {\n this._activeTabs.set(tabKey, id);\n });\n }\n };\n }\n\n private _resolveElementNode(node: IElementNode): IElementNodeVM {\n return {\n type: \"element\",\n renderer: node.renderer,\n props: node.props\n };\n }\n\n private _tabHasErrors(layout: LayoutNode[]): boolean {\n const fieldIds = this._collectFieldIdsFromLayout(layout);\n for (const id of fieldIds) {\n const field = this._fields.get(id);\n if (!field) {\n continue;\n }\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 private _collectFieldIdsFromLayout(layout: LayoutNode[]): string[] {\n const ids: string[] = [];\n for (const node of layout) {\n if (node.type === \"row\") {\n ids.push(...node.fieldIds);\n } else if (node.type === \"tabs\") {\n for (const tab of node.tabs) {\n ids.push(...this._collectFieldIdsFromLayout(tab.layout));\n }\n }\n }\n return ids;\n }\n\n private _tabsNodeKey(node: ITabsNode): string {\n return `__tabs_${node.tabs.map(t => t.id).join(\"_\")}`;\n }\n\n private _generateDefaultLayout(): LayoutNode[] {\n const layout: LayoutNode[] = [];\n for (const [name, field] of this._fields) {\n if (field.visible) {\n layout.push({ type: \"row\", fieldIds: [name] });\n }\n }\n return layout;\n }\n\n private _warnOrphanFields(): void {\n const layoutFieldIds = new Set(this._collectFieldIdsFromLayout(this._layout));\n\n for (const [name, field] of this._fields) {\n if (field.visible && !layoutFieldIds.has(name)) {\n console.warn(\n `[FormModel] Field \"${name}\" is not in the layout and not marked as .hidden(). ` +\n `Add it to the layout or mark it as .hidden() to suppress this warning.`\n );\n }\n }\n }\n\n private _snapshotBaseline(): void {\n this._baseline.clear();\n for (const [name, field] of this._fields) {\n this._baseline.set(name, toJS(field.getValue()));\n }\n }\n\n private _resetAllValidation(): void {\n for (const [, field] of this._fields) {\n field.resetValidation();\n }\n }\n\n /**\n * Find the index of a layout node that matches the given target.\n * Matches: row containing fieldId, tabs by id, element by id/renderer.\n * Returns -1 if not found.\n */\n private _findLayoutIndex(layout: LayoutNode[], target: string): number {\n return layout.findIndex(node => this._nodeMatchesTarget(node, target));\n }\n\n private _nodeMatchesTarget(node: LayoutNode, target: string): boolean {\n switch (node.type) {\n case \"row\":\n return node.fieldIds.includes(target);\n case \"tabs\":\n return node.id === target;\n case \"element\":\n return node.id === target || node.renderer === target;\n default:\n return false;\n }\n }\n\n /**\n * Remove a target from the layout tree. Handles field IDs in rows,\n * and node IDs for tabs/elements. Drops rows that become empty.\n */\n private _removeFromLayout(layout: LayoutNode[], target: string): LayoutNode[] {\n return layout\n .map(node => {\n if (node.type === \"row\") {\n const filtered = node.fieldIds.filter(id => id !== target);\n if (filtered.length === 0) {\n return null;\n }\n return { ...node, fieldIds: filtered };\n }\n // Remove tabs/elements by their ID\n if (\n (node.type === \"tabs\" && node.id === target) ||\n (node.type === \"element\" && (node.id === target || node.renderer === target))\n ) {\n return null;\n }\n return node;\n })\n .filter(Boolean) as LayoutNode[];\n }\n\n /**\n * Insert a layout node relative to a target field ID.\n */\n private _insertIntoLayout(\n layout: LayoutNode[],\n node: LayoutNode,\n position: LayoutPosition\n ): LayoutNode[] {\n const targetIndex = this._findLayoutIndex(layout, position.target);\n\n if (targetIndex === -1) {\n // Target not found — append\n return [...layout, node];\n }\n\n const result = [...layout];\n\n switch (position.type) {\n case \"before\":\n result.splice(targetIndex, 0, node);\n break;\n case \"after\":\n result.splice(targetIndex + 1, 0, node);\n break;\n case \"replace\":\n result.splice(targetIndex, 1, node);\n break;\n }\n\n return result;\n }\n\n private _createModifierLayoutAPI(removals: string[]): ILayoutModifier {\n return {\n row(...fieldIds: string[]): ILayoutNodeHandle {\n const node: IRowNode = { type: \"row\", fieldIds };\n return createLayoutNodeHandle(node);\n },\n separator(): ILayoutNodeHandle {\n const node: ISeparatorNode = { type: \"separator\" };\n return createLayoutNodeHandle(node);\n },\n tabs(config: {\n id?: string;\n renderer?: string;\n tabs: ITabDefinition[];\n }): ILayoutNodeHandle {\n const node: ITabsNode = {\n type: \"tabs\",\n id: config.id,\n renderer: config.renderer,\n tabs: config.tabs\n };\n return createLayoutNodeHandle(node);\n },\n element(renderer: string, props?: Record<string, unknown>): ILayoutNodeHandle {\n const node: IElementNode = { type: \"element\", renderer, props };\n return createLayoutNodeHandle(node);\n },\n remove(target: string): void {\n removals.push(target);\n }\n };\n }\n\n private _accessLayoutNode(nodeId: string): ILayoutNodeAccessHandle {\n const findTabsNode = (layout: LayoutNode[]): ITabsNode | undefined => {\n for (const node of layout) {\n if (node.type === \"tabs\" && node.id === nodeId) {\n return node;\n }\n // Search inside nested tabs\n if (node.type === \"tabs\") {\n for (const tab of node.tabs) {\n const found = findTabsNode(tab.layout);\n if (found) {\n return found;\n }\n }\n }\n }\n return undefined;\n };\n\n return {\n as: (type: \"tabs\"): ITabsHandle => {\n const tabsNode = findTabsNode(this._layout);\n if (!tabsNode) {\n throw new Error(`Layout node \"${nodeId}\" not found.`);\n }\n if (tabsNode.type !== type) {\n throw new Error(\n `Layout node \"${nodeId}\" is type \"${tabsNode.type}\", not \"${type}\".`\n );\n }\n\n return {\n tab: (definitionOrId: ITabDefinition | string): ITabHandle => {\n if (typeof definitionOrId === \"string\") {\n // Access existing tab\n const tab = tabsNode.tabs.find(t => t.id === definitionOrId);\n if (!tab) {\n throw new Error(\n `Tab \"${definitionOrId}\" not found in tabs node \"${nodeId}\".`\n );\n }\n return {\n layout: (factory: (layout: ILayoutBuilder) => LayoutNode[]) => {\n const nodes = factory(layoutAPI);\n tab.layout.push(...nodes);\n },\n before: () => {\n /* no-op for existing tabs */\n },\n after: () => {\n /* no-op for existing tabs */\n }\n };\n } else {\n // Add new tab\n const newTab: ITabDefinition = { ...definitionOrId };\n // Resolve layout if it's a factory\n if (typeof (definitionOrId as any).layout === \"function\") {\n newTab.layout = (definitionOrId as any).layout(layoutAPI);\n }\n return {\n layout: (factory: (layout: ILayoutBuilder) => LayoutNode[]) => {\n newTab.layout = factory(layoutAPI);\n },\n before: (targetTabId: string) => {\n const idx = tabsNode.tabs.findIndex(t => t.id === targetTabId);\n if (idx !== -1) {\n tabsNode.tabs.splice(idx, 0, newTab);\n } else {\n tabsNode.tabs.push(newTab);\n }\n },\n after: (targetTabId: string) => {\n const idx = tabsNode.tabs.findIndex(t => t.id === targetTabId);\n if (idx !== -1) {\n tabsNode.tabs.splice(idx + 1, 0, newTab);\n } else {\n tabsNode.tabs.push(newTab);\n }\n }\n };\n }\n }\n };\n }\n };\n }\n\n private _createField(config: any): IField {\n if (config.childBuilders) {\n return new ObjectField(config as IObjectFieldConfig);\n }\n return new Field(config);\n }\n\n private _isPositionedNode(\n entry: LayoutNode | IPositionedLayoutNode\n ): entry is IPositionedLayoutNode {\n return \"node\" in entry;\n }\n}\n\nfunction createLayoutNodeHandle(node: LayoutNode): ILayoutNodeHandle {\n const handle: ILayoutNodeHandle = {\n node,\n before(target: string): IPositionedLayoutNode {\n handle.position = { type: \"before\", target };\n return handle;\n },\n after(target: string): IPositionedLayoutNode {\n handle.position = { type: \"after\", target };\n return handle;\n },\n replace(target: string): IPositionedLayoutNode {\n handle.position = { type: \"replace\", target };\n return handle;\n }\n };\n return handle;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["makeAutoObservable","computed","toJS","runInAction","observable","Field","ObjectField","isObjectField","LayoutBuilderFactory","LayoutMutator","LayoutResolver","FocusManager","FormModel","_fields","Map","_builders","_layout","_baseline","_submitted","_validateOnChange","_isValid","_formRuleErrors","_activeTabs","map","_ruleEvaluators","_warnedRuleTypes","Set","_formRules","_lastFocusedField","_layoutMutator","_layoutResolver","_focusManager","constructor","config","registry","_registry","ruleEvaluators","builders","fields","name","builder","Object","entries","set","fieldConfig","build","field","_createField","setForm","layout","buildNodes","create","_warnOrphanFields","_generateDefaultLayout","_registerObjectNodeLayouts","_propagateAncestorRules","validateOnSubmit","_snapshotBaseline","vm","autoBind","evaluateRules","bind","rules","visible","disabled","length","rule","evaluator","find","e","canEvaluate","process","env","NODE_ENV","has","type","add","console","warn","matched","evaluate","action","get","parts","split","current","i","getChild","undefined","Error","focusField","clearFocusRequest","activations","buildFocusPath","act","tabKey","tabId","requestFocus","factory","delete","removeField","factoryOrNodeId","accessNode","applyModifications","removeFromLayout","getData","data","getValue","setData","value","setValueSilent","_resetAllValidation","reset","baselineValue","defaultValue","isDirty","baseline","JSON","stringify","isValid","submitted","errors","ruleErrorPaths","filter","path","validation","push","label","message","addRule","setLayout","validate","allFieldsValid","valid","force","ruleErrors","_runFormRule","err","target","_tryGetField","setValidation","submit","resolve","resolveChildLayout","children","getField","getFields","getFieldBuilders","predicate","pred","result","collectBuilders","fn","Array","isArray","safeParseAsync","success","error","issues","issue","String","join","node","fieldName","setInnerLayout","inner","tab","tabs","ancestry","walk","nodes","id","fieldIds","existing","containerRules","tabRules","setAncestorRules","layoutFieldIds","collectFieldIds","clear","resetValidation","childBuilders"],"sources":["FormModel.ts"],"sourcesContent":["import { makeAutoObservable, computed, toJS, runInAction, observable } from \"mobx\";\nimport { Field } from \"./Field.js\";\nimport { ObjectField, isObjectField } from \"./ObjectField.js\";\nimport { LayoutBuilderFactory } from \"./LayoutBuilderFactory.js\";\nimport { LayoutMutator } from \"./LayoutMutator.js\";\nimport { LayoutResolver } from \"./LayoutResolver.js\";\nimport { FocusManager } from \"./FocusManager.js\";\nimport type {\n IFormModel,\n IField,\n IFieldBuilder,\n IFieldBuilderRegistry,\n IObjectFieldConfig,\n IFormVM,\n IFormError,\n IFormModelConfig,\n ILayoutBuilder,\n ILayoutNodeBuilder,\n ILayoutModifier,\n IPositionedLayoutNode,\n ILayoutNodeAccessHandle,\n IRule,\n IRuleEvaluator,\n LayoutNode,\n LayoutNodeVM,\n FormRule,\n FormRuleFn\n} from \"./abstractions.js\";\n\nexport class FormModel implements IFormModel {\n private _fields = new Map<string, IField>();\n private _builders = new Map<string, IFieldBuilder>();\n private _layout: LayoutNode[] = [];\n private _baseline = new Map<string, unknown>();\n private _submitted = false;\n private _validateOnChange = false;\n private _isValid: boolean | null = null;\n private _formRuleErrors: IFormError[] = [];\n private _activeTabs = observable.map<string, string>();\n private _ruleEvaluators: IRuleEvaluator[] = [];\n private _warnedRuleTypes = new Set<string>();\n private _formRules: FormRule[] = [];\n private _lastFocusedField: IField | null = null;\n private _registry: IFieldBuilderRegistry;\n\n private _layoutMutator = new LayoutMutator();\n private _layoutResolver: LayoutResolver = null!;\n private _focusManager: FocusManager = null!;\n\n constructor(config: IFormModelConfig, registry: IFieldBuilderRegistry) {\n this._registry = registry;\n this._ruleEvaluators = config.ruleEvaluators ?? [];\n\n const builders = config.fields(registry);\n\n for (const [name, builder] of Object.entries(builders)) {\n this._builders.set(name, builder);\n const fieldConfig = builder.build(name);\n const field = this._createField(fieldConfig);\n field.setForm(this);\n this._fields.set(name, field);\n }\n\n if (config.layout) {\n this._layout = LayoutBuilderFactory.buildNodes(\n config.layout(LayoutBuilderFactory.create())\n );\n this._warnOrphanFields();\n } else {\n this._layout = this._generateDefaultLayout();\n }\n\n this._registerObjectNodeLayouts(this._layout);\n this._propagateAncestorRules();\n\n this._validateOnChange = config.validateOnSubmit === false;\n this._snapshotBaseline();\n\n makeAutoObservable(\n this,\n {\n vm: computed,\n _layoutMutator: false,\n _layoutResolver: false,\n _focusManager: false\n } as any,\n { autoBind: true }\n );\n\n this._layoutResolver = new LayoutResolver(\n this._fields,\n this._activeTabs,\n this.evaluateRules.bind(this)\n );\n this._focusManager = new FocusManager(this._fields);\n }\n\n evaluateRules(rules: IRule[] | undefined): { visible: boolean; disabled: boolean } {\n let visible = true;\n let disabled = false;\n if (!rules || rules.length === 0) {\n return { visible, disabled };\n }\n\n for (const rule of rules) {\n const evaluator = this._ruleEvaluators.find(e => e.canEvaluate(rule));\n if (!evaluator) {\n if (\n process.env.NODE_ENV === \"development\" &&\n !this._warnedRuleTypes.has(rule.type)\n ) {\n this._warnedRuleTypes.add(rule.type);\n console.warn(\n `[FormModel] No evaluator registered for rule type \"${rule.type}\". Rule is ignored.`\n );\n }\n continue;\n }\n const matched = evaluator.evaluate(rule, this);\n if (!matched) {\n continue;\n }\n if (rule.action === \"hide\") {\n visible = false;\n } else if (rule.action === \"disable\") {\n disabled = true;\n }\n }\n\n return { visible, disabled };\n }\n\n field(name: string): IField {\n const field = this._fields.get(name);\n if (field) {\n return field;\n }\n\n const parts = name.split(\".\");\n if (parts.length > 1) {\n let current: IField | undefined = this._fields.get(parts[0]);\n for (let i = 1; i < parts.length && current; i++) {\n if (isObjectField(current)) {\n current = current.getChild(parts[i]);\n } else {\n current = undefined;\n }\n }\n if (current) {\n return current;\n }\n }\n\n throw new Error(`Field \"${name}\" not found.`);\n }\n\n focusField(name: string): void {\n if (this._lastFocusedField) {\n this._lastFocusedField.clearFocusRequest();\n this._lastFocusedField = null;\n }\n\n const activations = this._focusManager.buildFocusPath(name, this._layout);\n let field: IField | undefined;\n try {\n field = this.field(name);\n } catch {\n // Field not found — no-op.\n }\n\n runInAction(() => {\n if (activations) {\n for (const act of activations) {\n this._activeTabs.set(act.tabKey, act.tabId);\n }\n }\n if (field) {\n field.requestFocus();\n this._lastFocusedField = field;\n }\n });\n }\n\n fields(\n factory: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder | undefined>\n ): void {\n const builders = factory(this._registry);\n\n for (const [name, builder] of Object.entries(builders)) {\n if (builder === undefined) {\n this._builders.delete(name);\n this.removeField(name);\n continue;\n }\n\n this._builders.set(name, builder);\n const fieldConfig = builder.build(name);\n const field = this._createField(fieldConfig);\n field.setForm(this);\n\n this._fields.set(name, field);\n }\n\n this._snapshotBaseline();\n this._propagateAncestorRules();\n }\n\n layout(factory: (layout: ILayoutModifier) => (LayoutNode | IPositionedLayoutNode)[]): void;\n layout(nodeId: string): ILayoutNodeAccessHandle;\n layout(\n factoryOrNodeId:\n | ((layout: ILayoutModifier) => (LayoutNode | IPositionedLayoutNode)[])\n | string\n ): void | ILayoutNodeAccessHandle {\n if (typeof factoryOrNodeId === \"string\") {\n return this._layoutMutator.accessNode(this._layout, factoryOrNodeId);\n }\n\n this._layout = this._layoutMutator.applyModifications(this._layout, factoryOrNodeId);\n this._registerObjectNodeLayouts(this._layout);\n this._propagateAncestorRules();\n }\n\n removeField(name: string): void {\n this._fields.delete(name);\n this._baseline.delete(name);\n this._layout = this._layoutMutator.removeFromLayout(this._layout, name);\n }\n\n getData(): Record<string, unknown> {\n const data: Record<string, unknown> = {};\n for (const [name, field] of this._fields) {\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\n setData(data: Record<string, unknown>): void {\n for (const [name, value] of Object.entries(data)) {\n const field = this._fields.get(name);\n if (field) {\n field.setValueSilent(value);\n }\n }\n this._snapshotBaseline();\n this._resetAllValidation();\n this._submitted = false;\n this._isValid = null;\n this._formRuleErrors = [];\n }\n\n reset(): void {\n for (const [name, field] of this._fields) {\n const baselineValue = this._baseline.get(name);\n field.setValueSilent(baselineValue ?? field.config.defaultValue ?? null);\n }\n this._resetAllValidation();\n this._submitted = false;\n this._isValid = null;\n this._formRuleErrors = [];\n }\n\n get isDirty(): boolean {\n for (const [name, field] of this._fields) {\n const baseline = this._baseline.get(name);\n const current = isObjectField(field) ? field.getData() : field.getValue();\n if (JSON.stringify(toJS(current)) !== JSON.stringify(toJS(baseline))) {\n return true;\n }\n }\n return false;\n }\n\n get isValid(): boolean | null {\n return this._isValid;\n }\n\n get submitted(): boolean {\n return this._submitted;\n }\n\n get errors(): IFormError[] {\n if (!this._submitted) {\n return [];\n }\n const ruleErrorPaths = new Set(this._formRuleErrors.filter(e => e.path).map(e => e.path));\n const errors: IFormError[] = [];\n for (const [, field] of this._fields) {\n if (field.vm.validation.isValid === false && !ruleErrorPaths.has(field.name)) {\n errors.push({\n path: field.name,\n label: field.config.label,\n message: field.vm.validation.message || \"Invalid value.\"\n });\n }\n }\n return [...errors, ...this._formRuleErrors];\n }\n\n addRule(rule: FormRule): void {\n this._formRules.push(rule);\n }\n\n setLayout(factory: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]): void {\n this._layout = LayoutBuilderFactory.buildNodes(factory(LayoutBuilderFactory.create()));\n this._warnOrphanFields();\n this._registerObjectNodeLayouts(this._layout);\n this._propagateAncestorRules();\n }\n\n async validate(): Promise<boolean> {\n let allFieldsValid = true;\n\n for (const [, field] of this._fields) {\n const valid = await field.validate({ force: true });\n if (!valid) {\n allFieldsValid = false;\n }\n }\n\n const ruleErrors: IFormError[] = [];\n for (const rule of this._formRules) {\n const errors = await this._runFormRule(rule);\n for (const err of errors) {\n ruleErrors.push(err);\n if (err.path) {\n const target = this._tryGetField(err.path);\n if (target) {\n target.setValidation({ isValid: false, message: err.message });\n }\n }\n }\n }\n\n const isValid = allFieldsValid && ruleErrors.length === 0;\n runInAction(() => {\n this._formRuleErrors = ruleErrors;\n this._isValid = isValid;\n this._submitted = true;\n });\n return isValid;\n }\n\n async submit<T = Record<string, unknown>>(): Promise<T | false> {\n const valid = await this.validate();\n if (!valid) {\n return false;\n }\n return this.getData() as T;\n }\n\n get vm(): IFormVM {\n return {\n layout: this._layoutResolver.resolve(this._layout),\n errors: this.errors,\n isDirty: this.isDirty,\n isValid: this._isValid\n };\n }\n\n get registry(): IFieldBuilderRegistry {\n return this._registry;\n }\n\n public resolveChildLayout(layout: LayoutNode[], children: Map<string, IField>): LayoutNodeVM[] {\n return this._layoutResolver.resolveChildLayout(layout, children);\n }\n\n getField(name: string): IField | undefined {\n return this._fields.get(name);\n }\n\n getFields(): Map<string, IField> {\n return this._fields;\n }\n\n getFieldBuilders(predicate?: (builder: IFieldBuilder) => boolean): IFieldBuilder[] {\n const pred = predicate ?? (() => true);\n const result: IFieldBuilder[] = [];\n LayoutBuilderFactory.collectBuilders(this._fields, this._builders, pred, result);\n return result;\n }\n\n private async _runFormRule(rule: FormRule): Promise<IFormError[]> {\n if (typeof rule === \"function\") {\n const fn = rule as FormRuleFn;\n const result = await fn(this);\n return Array.isArray(result) ? result : [];\n }\n const data = this.getData();\n const result = await rule.safeParseAsync(data);\n if (result.success) {\n return [];\n }\n return result.error.issues.map(issue => {\n const path = issue.path.map(String).join(\".\");\n const field = path ? this._tryGetField(path) : undefined;\n return {\n path,\n label: field?.config.label,\n message: issue.message || \"Invalid value.\"\n };\n });\n }\n\n private _tryGetField(path: string): IField | undefined {\n try {\n return this.field(path);\n } catch {\n return undefined;\n }\n }\n\n private _registerObjectNodeLayouts(layout: LayoutNode[]): void {\n for (const node of layout) {\n if (node.type === \"object\") {\n const field = this._fields.get(node.fieldName);\n if (field && isObjectField(field)) {\n field.setInnerLayout(node.inner);\n }\n } else if (node.type === \"tabs\") {\n for (const tab of node.tabs) {\n this._registerObjectNodeLayouts(tab.layout);\n }\n }\n }\n }\n\n private _propagateAncestorRules(): void {\n const ancestry = new Map<string, IRule[]>();\n const walk = (nodes: LayoutNode[], rules: IRule[]) => {\n for (const node of nodes) {\n if (node.type === \"row\") {\n for (const id of node.fieldIds) {\n const existing = ancestry.get(id) ?? [];\n ancestry.set(id, [...existing, ...rules]);\n }\n } else if (node.type === \"tabs\") {\n const containerRules = [...rules, ...(node.rules ?? [])];\n for (const tab of node.tabs) {\n const tabRules = [...containerRules, ...(tab.rules ?? [])];\n walk(tab.layout, tabRules);\n }\n } else if (node.type === \"object\") {\n const existing = ancestry.get(node.fieldName) ?? [];\n ancestry.set(node.fieldName, [...existing, ...rules]);\n }\n }\n };\n\n walk(this._layout, []);\n\n for (const [, field] of this._fields) {\n field.setAncestorRules(ancestry.get(field.name) ?? []);\n }\n }\n\n private _generateDefaultLayout(): LayoutNode[] {\n const layout: LayoutNode[] = [];\n for (const [name, field] of this._fields) {\n if (field.visible) {\n layout.push({ type: \"row\", fieldIds: [name] });\n }\n }\n return layout;\n }\n\n private _warnOrphanFields(): void {\n const layoutFieldIds = new Set(LayoutBuilderFactory.collectFieldIds(this._layout));\n\n for (const [name, field] of this._fields) {\n if (field.visible && !layoutFieldIds.has(name)) {\n console.warn(\n `[FormModel] Field \"${name}\" is not in the layout and not marked as .hidden(). ` +\n `Add it to the layout or mark it as .hidden() to suppress this warning.`\n );\n }\n }\n }\n\n private _snapshotBaseline(): void {\n this._baseline.clear();\n for (const [name, field] of this._fields) {\n this._baseline.set(name, toJS(field.getValue()));\n }\n }\n\n private _resetAllValidation(): void {\n for (const [, field] of this._fields) {\n field.resetValidation();\n }\n }\n\n private _createField(config: any): IField {\n if (config.childBuilders) {\n return new ObjectField(config as IObjectFieldConfig);\n }\n return new Field(config);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|