@webiny/app-admin 6.4.0-beta.3 → 6.4.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js +1 -1
  2. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js.map +1 -1
  3. package/base/ui/FileManager.d.ts +15 -14
  4. package/base/ui/FileManager.js +5 -2
  5. package/base/ui/FileManager.js.map +1 -1
  6. package/config/AdminConfig/Menu/MenuItem.d.ts +1 -0
  7. package/config/AdminConfig/Menu/MenuItem.js +2 -1
  8. package/config/AdminConfig/Menu/MenuItem.js.map +1 -1
  9. package/config/AdminConfig/Menu/MenuLink.d.ts +1 -0
  10. package/config/AdminConfig/Menu/MenuLink.js +2 -1
  11. package/config/AdminConfig/Menu/MenuLink.js.map +1 -1
  12. package/config/AdminConfig/Menu.d.ts +2 -0
  13. package/config/AdminConfig.d.ts +2 -0
  14. package/config/AdminConfig.js +1 -0
  15. package/config/AdminConfig.js.map +1 -1
  16. package/exports/admin/ui/file-manager.d.ts +3 -0
  17. package/exports/admin/ui/file-manager.js +2 -0
  18. package/features/formModel/FormModel.js +2 -2
  19. package/features/formModel/FormModel.js.map +1 -1
  20. package/features/formModel/FormModel.test.js +3 -1
  21. package/features/formModel/FormModel.test.js.map +1 -1
  22. package/features/newsletter/NewsletterSubscriptionService.d.ts +13 -0
  23. package/features/newsletter/NewsletterSubscriptionService.js +36 -0
  24. package/features/newsletter/NewsletterSubscriptionService.js.map +1 -0
  25. package/features/newsletter/abstractions.d.ts +11 -0
  26. package/features/newsletter/abstractions.js +5 -0
  27. package/features/newsletter/abstractions.js.map +1 -0
  28. package/features/newsletter/index.d.ts +1 -0
  29. package/features/newsletter/index.js +1 -0
  30. package/index.d.ts +1 -1
  31. package/index.js +1 -1
  32. package/package.json +30 -28
  33. package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleRestartInstallation.d.ts +1 -0
  34. package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleRestartInstallation.js +6 -0
  35. package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleRestartInstallation.js.map +1 -0
  36. package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.d.ts +2 -0
  37. package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.js +27 -0
  38. package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.js.map +1 -0
  39. package/presentation/installation/components/SystemInstaller/steps/FinishSetup.js +4 -4
  40. package/presentation/installation/components/SystemInstaller/steps/FinishSetup.js.map +1 -1
  41. package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.d.ts +3 -1
  42. package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js +9 -3
  43. package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js.map +1 -1
  44. package/presentation/installation/presenters/SystemInstaller/feature.js +2 -0
  45. package/presentation/installation/presenters/SystemInstaller/feature.js.map +1 -1
  46. package/presentation/listPresenter/ListPresenter.d.ts +1 -0
  47. package/presentation/listPresenter/ListPresenter.js +8 -2
  48. package/presentation/listPresenter/ListPresenter.js.map +1 -1
  49. package/presentation/listPresenter/feature.js +1 -1
  50. package/presentation/listPresenter/feature.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"features/formModel/FormModel.test.js","sources":["../../../src/features/formModel/FormModel.test.ts"],"sourcesContent":["import { describe, it, expect, vi } from \"vitest\";\nimport { z } from \"zod\";\nimport { Container } from \"@webiny/di\";\nimport { FormModelFeature } from \"./feature.js\";\nimport {\n FormModelFactory,\n type IFormModel,\n type IFormModelConfig,\n type IRowNodeVM,\n type ITabsNodeVM,\n type IElementNodeVM,\n type IObjectFieldVM,\n type ILayoutNodeAccessHandle,\n type LayoutNodeVM\n} from \"./abstractions.js\";\n\nfunction createForm(config: IFormModelConfig): IFormModel {\n const container = new Container();\n FormModelFeature.register(container);\n return container.resolve(FormModelFactory).create(config);\n}\n\nfunction asRow(node: LayoutNodeVM): IRowNodeVM {\n if (node.type !== \"row\") {\n throw new Error(`Expected row node, got \"${node.type}\"`);\n }\n return node;\n}\n\nfunction createBasicForm() {\n return createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\").required(\"Title is required\"),\n path: fields.text().label(\"Path\").required(\"Path is required\")\n })\n });\n}\n\ndescribe(\"FormModel\", () => {\n describe(\"field creation\", () => {\n it(\"should create fields from builder definitions\", () => {\n const form = createBasicForm();\n expect(form.field(\"title\")).toBeDefined();\n expect(form.field(\"path\")).toBeDefined();\n });\n\n it(\"should throw on unknown field access\", () => {\n const form = createBasicForm();\n expect(() => form.field(\"unknown\")).toThrow('Field \"unknown\" not found.');\n });\n });\n\n describe(\"setValue / getValue\", () => {\n it(\"should set and get field values\", () => {\n const form = createBasicForm();\n form.field(\"title\").setValue(\"Hello\");\n expect(form.field(\"title\").getValue()).toBe(\"Hello\");\n });\n\n it(\"should default to null when no defaultValue is set\", () => {\n const form = createBasicForm();\n expect(form.field(\"title\").getValue()).toBeNull();\n });\n\n it(\"should use defaultValue when provided\", () => {\n const form = createForm({\n fields: fields => ({\n status: fields.text().defaultValue(\"draft\")\n })\n });\n expect(form.field(\"status\").getValue()).toBe(\"draft\");\n });\n });\n\n describe(\"getData / setData\", () => {\n it(\"should return all field values including hidden\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n pageType: fields.text().hidden().defaultValue(\"static\")\n })\n });\n\n form.field(\"title\").setValue(\"Hello\");\n const data = form.getData();\n\n expect(data).toEqual({\n title: \"Hello\",\n pageType: \"static\"\n });\n });\n\n it(\"should hydrate fields from data object\", () => {\n const form = createBasicForm();\n form.setData({ title: \"My Page\", path: \"/my-page\" });\n\n expect(form.field(\"title\").getValue()).toBe(\"My Page\");\n expect(form.field(\"path\").getValue()).toBe(\"/my-page\");\n });\n\n it(\"should ignore unknown fields in setData\", () => {\n const form = createBasicForm();\n form.setData({ title: \"Test\", unknown: \"value\" });\n expect(form.field(\"title\").getValue()).toBe(\"Test\");\n expect(() => form.field(\"unknown\")).toThrow();\n });\n });\n\n describe(\"isDirty\", () => {\n it(\"should not be dirty initially\", () => {\n const form = createBasicForm();\n expect(form.isDirty).toBe(false);\n });\n\n it(\"should be dirty after setValue\", () => {\n const form = createBasicForm();\n form.field(\"title\").setValue(\"Changed\");\n expect(form.isDirty).toBe(true);\n });\n\n it(\"should not be dirty after setData\", () => {\n const form = createBasicForm();\n form.setData({ title: \"Loaded\", path: \"/loaded\" });\n expect(form.isDirty).toBe(false);\n });\n\n it(\"should not be dirty after reverting to baseline value\", () => {\n const form = createBasicForm();\n form.setData({ title: \"Original\", path: \"/original\" });\n form.field(\"title\").setValue(\"Changed\");\n expect(form.isDirty).toBe(true);\n form.field(\"title\").setValue(\"Original\");\n expect(form.isDirty).toBe(false);\n });\n });\n\n describe(\"reset\", () => {\n it(\"should revert values to setData baseline\", () => {\n const form = createBasicForm();\n form.setData({ title: \"Original\", path: \"/original\" });\n form.field(\"title\").setValue(\"Changed\");\n form.reset();\n\n expect(form.field(\"title\").getValue()).toBe(\"Original\");\n expect(form.isDirty).toBe(false);\n });\n\n it(\"should clear validation state on reset\", async () => {\n const form = createBasicForm();\n await form.validate();\n expect(form.errors.length).toBeGreaterThan(0);\n\n form.reset();\n expect(form.errors).toEqual([]);\n expect(form.isValid).toBeNull();\n });\n });\n\n describe(\"validation\", () => {\n it(\"should fail validation for empty required fields\", async () => {\n const form = createBasicForm();\n const valid = await form.validate();\n\n expect(valid).toBe(false);\n expect(form.isValid).toBe(false);\n expect(form.errors).toHaveLength(2);\n expect(form.errors[0].path).toBe(\"title\");\n expect(form.errors[0].message).toBe(\"Title is required\");\n expect(form.errors[1].path).toBe(\"path\");\n });\n\n it(\"should pass validation when required fields have values\", async () => {\n const form = createBasicForm();\n form.field(\"title\").setValue(\"My Page\");\n form.field(\"path\").setValue(\"/my-page\");\n\n const valid = await form.validate();\n\n expect(valid).toBe(true);\n expect(form.isValid).toBe(true);\n expect(form.errors).toHaveLength(0);\n });\n\n it(\"should validate zod schemas\", async () => {\n const form = createForm({\n fields: fields => ({\n email: fields.text().label(\"Email\").schema(z.string().email(\"Invalid email\"))\n })\n });\n\n form.field(\"email\").setValue(\"not-an-email\");\n const valid = await form.validate();\n\n expect(valid).toBe(false);\n expect(form.errors[0].message).toBe(\"Invalid email\");\n });\n\n it(\"should run required check before zod schema\", async () => {\n const form = createForm({\n fields: fields => ({\n email: fields\n .text()\n .label(\"Email\")\n .required(\"Email is required\")\n .schema(z.string().email(\"Invalid email\"))\n })\n });\n\n const valid = await form.validate();\n\n expect(valid).toBe(false);\n expect(form.errors[0].message).toBe(\"Email is required\");\n });\n\n it(\"should expose field-level validation in field.vm\", async () => {\n const form = createBasicForm();\n await form.validate();\n\n const titleVm = form.field(\"title\").vm;\n expect(titleVm.validation.isValid).toBe(false);\n expect(titleVm.validation.message).toBe(\"Title is required\");\n });\n\n it(\"isValid should be null before first validation\", () => {\n const form = createBasicForm();\n expect(form.isValid).toBeNull();\n });\n });\n\n describe(\"submit\", () => {\n it(\"should return data when valid\", async () => {\n const form = createBasicForm();\n form.field(\"title\").setValue(\"My Page\");\n form.field(\"path\").setValue(\"/my-page\");\n\n const result = await form.submit();\n\n expect(result).toEqual({\n title: \"My Page\",\n path: \"/my-page\"\n });\n });\n\n it(\"should return false when invalid\", async () => {\n const form = createBasicForm();\n const result = await form.submit();\n expect(result).toBe(false);\n });\n });\n\n describe(\"vm\", () => {\n it(\"should expose layout with field VMs\", () => {\n const form = createBasicForm();\n const vm = form.vm;\n\n expect(vm.layout).toHaveLength(2);\n expect(vm.layout[0].type).toBe(\"row\");\n expect(asRow(vm.layout[0]).fields[0].name).toBe(\"title\");\n expect(asRow(vm.layout[1]).fields[0].name).toBe(\"path\");\n });\n\n it(\"should exclude hidden fields from layout\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n pageType: fields.text().hidden().defaultValue(\"static\")\n })\n });\n\n const vm = form.vm;\n expect(vm.layout).toHaveLength(1);\n expect(asRow(vm.layout[0]).fields[0].name).toBe(\"title\");\n });\n\n it(\"should expose isDirty and isValid\", () => {\n const form = createBasicForm();\n expect(form.vm.isDirty).toBe(false);\n expect(form.vm.isValid).toBeNull();\n });\n\n it(\"should expose field onChange that calls setValue\", () => {\n const form = createBasicForm();\n const fieldVM = asRow(form.vm.layout[0]).fields[0];\n fieldVM.onChange(\"New Value\");\n expect(form.field(\"title\").getValue()).toBe(\"New Value\");\n });\n });\n\n describe(\"layout\", () => {\n it(\"should generate default layout (one row per non-hidden field)\", () => {\n const form = createBasicForm();\n expect(form.vm.layout).toHaveLength(2);\n });\n\n it(\"should use explicit layout when provided\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n path: fields.text().label(\"Path\")\n }),\n layout: layout => [layout.row(\"title\", \"path\")]\n });\n\n expect(form.vm.layout).toHaveLength(1);\n expect(asRow(form.vm.layout[0]).fields).toHaveLength(2);\n });\n\n it(\"should warn about orphan fields in explicit layout\", () => {\n const warnSpy = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n\n createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n path: fields.text().label(\"Path\")\n }),\n layout: layout => [layout.row(\"title\")]\n });\n\n expect(warnSpy).toHaveBeenCalledWith(\n expect.stringContaining('Field \"path\" is not in the layout')\n );\n\n warnSpy.mockRestore();\n });\n\n it(\"should not warn about hidden orphan fields\", () => {\n const warnSpy = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n\n createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n pageType: fields.text().hidden().defaultValue(\"static\")\n }),\n layout: layout => [layout.row(\"title\")]\n });\n\n expect(warnSpy).not.toHaveBeenCalled();\n warnSpy.mockRestore();\n });\n });\n\n describe(\"beforeChange / afterChange\", () => {\n it(\"should run beforeChange pipeline in order, transforming value\", () => {\n const form = createForm({\n fields: fields => ({\n path: fields\n .text()\n .label(\"Path\")\n .beforeChange(value => String(value).trim())\n .beforeChange(value => String(value).toLowerCase())\n })\n });\n\n form.field(\"path\").setValue(\" Hello World \");\n expect(form.field(\"path\").getValue()).toBe(\"hello world\");\n });\n\n it(\"should run afterChange after value is stored\", () => {\n const received: unknown[] = [];\n const form = createForm({\n fields: fields => ({\n title: fields\n .text()\n .label(\"Title\")\n .afterChange(value => {\n received.push(value);\n })\n })\n });\n\n form.field(\"title\").setValue(\"Hello\");\n expect(received).toEqual([\"Hello\"]);\n });\n\n it(\"should pass transformed value to afterChange\", () => {\n const received: unknown[] = [];\n const form = createForm({\n fields: fields => ({\n path: fields\n .text()\n .label(\"Path\")\n .beforeChange(value => String(value).toLowerCase())\n .afterChange(value => {\n received.push(value);\n })\n })\n });\n\n form.field(\"path\").setValue(\"HELLO\");\n expect(form.field(\"path\").getValue()).toBe(\"hello\");\n expect(received).toEqual([\"hello\"]);\n });\n\n it(\"should not fire afterChange when value does not change (recursion guard)\", () => {\n const calls: string[] = [];\n const form = createForm({\n fields: fields => ({\n title: fields\n .text()\n .label(\"Title\")\n .beforeChange(() => \"constant\")\n .afterChange(() => {\n calls.push(\"afterChange\");\n })\n })\n });\n\n form.field(\"title\").setValue(\"anything\");\n expect(calls).toEqual([\"afterChange\"]);\n expect(form.field(\"title\").getValue()).toBe(\"constant\");\n\n // Setting again — beforeChange still produces \"constant\", which === current value.\n // afterChange should NOT fire.\n form.field(\"title\").setValue(\"something else\");\n expect(calls).toEqual([\"afterChange\"]);\n });\n\n it(\"should not trigger beforeChange or afterChange on setData\", () => {\n const calls: string[] = [];\n const form = createForm({\n fields: fields => ({\n title: fields\n .text()\n .label(\"Title\")\n .beforeChange(value => {\n calls.push(\"before\");\n return value;\n })\n .afterChange(() => {\n calls.push(\"after\");\n })\n })\n });\n\n form.setData({ title: \"Loaded\" });\n expect(calls).toEqual([]);\n expect(form.field(\"title\").getValue()).toBe(\"Loaded\");\n });\n\n it(\"should support cross-field afterChange triggering target field pipeline\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields\n .text()\n .label(\"Title\")\n .afterChange((value, f) => {\n // Auto-generate path from title\n const path = \"/\" + String(value).toLowerCase().replace(/\\s+/g, \"-\");\n f.field(\"path\").setValue(path);\n }),\n path: fields\n .text()\n .label(\"Path\")\n .beforeChange(value => {\n // Ensure path starts with /\n const str = String(value);\n return str.startsWith(\"/\") ? str : \"/\" + str;\n })\n })\n });\n\n form.field(\"title\").setValue(\"Hello World\");\n expect(form.field(\"path\").getValue()).toBe(\"/hello-world\");\n });\n\n it(\"should allow appending callbacks to existing fields at runtime\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\")\n })\n });\n\n const field = form.field(\"title\");\n field.addBeforeChange(value => String(value).toUpperCase());\n field.setValue(\"hello\");\n expect(field.getValue()).toBe(\"HELLO\");\n });\n\n it(\"should chain builder callbacks with runtime-appended callbacks\", () => {\n const form = createForm({\n fields: fields => ({\n path: fields\n .text()\n .label(\"Path\")\n .beforeChange(value => String(value).trim())\n })\n });\n\n // Append another transform at runtime (simulating a modifier)\n form.field(\"path\").addBeforeChange(value => String(value).toLowerCase());\n form.field(\"path\").setValue(\" HELLO \");\n expect(form.field(\"path\").getValue()).toBe(\"hello\");\n });\n\n it(\"should demonstrate title→path with path-dirty tracking\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields\n .text()\n .label(\"Title\")\n .required(\"Title is required\")\n .afterChange((value, f) => {\n // Only auto-generate if path is empty\n if (f.field(\"path\").getValue()) {\n return;\n }\n const slug = String(value)\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n f.field(\"path\").setValue(\"/\" + slug);\n }),\n path: fields\n .text()\n .label(\"Path\")\n .required(\"Path is required\")\n .beforeChange(value => {\n const str = String(value);\n return (\n \"/\" +\n str\n .replace(/^\\//, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9/-]+/g, \"-\")\n .replace(/^-|-$/g, \"\")\n );\n })\n }),\n layout: layout => [layout.row(\"title\"), layout.row(\"path\")]\n });\n\n // Type title → path auto-fills (path was null/empty)\n form.field(\"title\").setValue(\"Hello World\");\n expect(form.field(\"path\").getValue()).toBe(\"/hello-world\");\n\n // Manually edit path → title changes no longer overwrite\n form.field(\"path\").setValue(\"/custom-path\");\n expect(form.field(\"path\").getValue()).toBe(\"/custom-path\");\n\n form.field(\"title\").setValue(\"New Title\");\n // Path still \"/custom-path\" because path is no longer empty\n expect(form.field(\"path\").getValue()).toBe(\"/custom-path\");\n });\n });\n\n describe(\"field with options\", () => {\n it(\"should resolve static options in field VM\", () => {\n const form = createForm({\n fields: fields => ({\n lang: fields\n .text()\n .label(\"Language\")\n .options([\n { label: \"English\", value: \"en\" },\n { label: \"German\", value: \"de\" }\n ])\n })\n });\n\n const fieldVM = asRow(form.vm.layout[0]).fields[0];\n expect(fieldVM.options).toEqual([\n { label: \"English\", value: \"en\" },\n { label: \"German\", value: \"de\" }\n ]);\n });\n\n it(\"should resolve reactive options function in field VM\", () => {\n const form = createForm({\n fields: fields => ({\n lang: fields\n .text()\n .label(\"Language\")\n .options(() => {\n // Dynamic options based on form state\n return [{ label: \"Dynamic\", value: \"dynamic\" }];\n })\n })\n });\n\n const fieldVM = asRow(form.vm.layout[0]).fields[0];\n expect(fieldVM.options).toEqual([{ label: \"Dynamic\", value: \"dynamic\" }]);\n });\n });\n\n describe(\"modifiers (Phase 3)\", () => {\n describe(\"form.fields() — add / replace / remove\", () => {\n it(\"should add a new field via form.fields()\", () => {\n const form = createBasicForm();\n form.fields(fields => ({\n language: fields\n .text()\n .label(\"Language\")\n .options([\n { label: \"English\", value: \"en\" },\n { label: \"German\", value: \"de\" }\n ])\n }));\n\n expect(form.field(\"language\")).toBeDefined();\n expect(form.field(\"language\").type).toBe(\"text\");\n expect(form.getData()).toHaveProperty(\"language\");\n });\n\n it(\"should add a field that appears in getData but not layout until positioned\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\")\n })\n });\n\n form.fields(fields => ({\n description: fields.text().label(\"Description\")\n }));\n\n // Field exists in data\n expect(form.getData()).toHaveProperty(\"description\");\n\n // But not in layout until explicitly positioned\n const fieldNames = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(fieldNames).not.toContain(\"description\");\n\n // Position it\n form.layout(layout => [layout.row(\"description\").after(\"title\")]);\n const updatedNames = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(updatedNames).toEqual([\"title\", \"description\"]);\n });\n\n it(\"should replace an existing field when key matches\", () => {\n const form = createBasicForm();\n form.field(\"title\").setValue(\"Old Value\");\n\n form.fields(fields => ({\n title: fields.text().label(\"Replaced Title\").placeholder(\"New placeholder\")\n }));\n\n // The field is replaced entirely — old value is gone\n expect(form.field(\"title\").config.label).toBe(\"Replaced Title\");\n expect(form.field(\"title\").config.placeholder).toBe(\"New placeholder\");\n expect(form.field(\"title\").getValue()).toBeNull();\n });\n\n it(\"should remove a field via undefined\", () => {\n const form = createBasicForm();\n form.fields(() => ({\n path: undefined\n }));\n\n expect(() => form.field(\"path\")).toThrow('Field \"path\" not found.');\n expect(form.getData()).not.toHaveProperty(\"path\");\n });\n\n it(\"should remove a field via field.remove()\", () => {\n const form = createBasicForm();\n form.field(\"path\").remove();\n\n expect(() => form.field(\"path\")).toThrow('Field \"path\" not found.');\n expect(form.getData()).not.toHaveProperty(\"path\");\n });\n\n it(\"should remove field from layout when removed via field.remove()\", () => {\n const form = createBasicForm();\n expect(form.vm.layout).toHaveLength(2);\n\n form.field(\"path\").remove();\n\n expect(form.vm.layout).toHaveLength(1);\n expect(asRow(form.vm.layout[0]).fields[0].name).toBe(\"title\");\n });\n\n it(\"should handle add + remove in the same fields() call\", () => {\n const form = createBasicForm();\n form.fields(fields => ({\n path: undefined,\n slug: fields.text().label(\"Slug\")\n }));\n\n expect(() => form.field(\"path\")).toThrow();\n expect(form.field(\"slug\")).toBeDefined();\n });\n });\n\n describe(\"form.field().setDisabled()\", () => {\n it(\"should disable a field via setDisabled(true)\", () => {\n const form = createBasicForm();\n form.field(\"title\").setDisabled(true);\n\n expect(form.field(\"title\").vm.disabled).toBe(true);\n });\n\n it(\"should re-enable a field via setDisabled(false)\", () => {\n const form = createBasicForm();\n form.field(\"title\").setDisabled(true);\n form.field(\"title\").setDisabled(false);\n\n expect(form.field(\"title\").vm.disabled).toBe(false);\n });\n });\n\n describe(\"form.field().as() — type narrowing\", () => {\n it(\"should return the field when type matches\", () => {\n const form = createForm({\n fields: fields => ({\n lang: fields\n .text()\n .label(\"Language\")\n .options([{ label: \"English\", value: \"en\" }])\n })\n });\n\n const textField = form.field(\"lang\").as(\"text\");\n expect(textField).toBe(form.field(\"lang\"));\n });\n\n it(\"should throw when type does not match\", () => {\n const form = createBasicForm();\n expect(() => form.field(\"title\").as(\"boolean\")).toThrow(\n 'Field \"title\" is type \"text\", not \"boolean\".'\n );\n });\n });\n\n describe(\"modifier appends callbacks to existing fields\", () => {\n it(\"should append beforeChange to an existing field\", () => {\n const form = createForm({\n fields: fields => ({\n path: fields\n .text()\n .label(\"Path\")\n .beforeChange(value => String(value).trim())\n })\n });\n\n // Modifier appends another transform\n form.field(\"path\").addBeforeChange(value => String(value).toLowerCase());\n\n form.field(\"path\").setValue(\" HELLO \");\n expect(form.field(\"path\").getValue()).toBe(\"hello\");\n });\n\n it(\"should append afterChange to an existing field\", () => {\n const received: unknown[] = [];\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n path: fields.text().label(\"Path\")\n })\n });\n\n // Modifier appends afterChange\n form.field(\"title\").addAfterChange((value, f) => {\n received.push(value);\n f.field(\"path\").setValue(\"/\" + String(value).toLowerCase());\n });\n\n form.field(\"title\").setValue(\"Hello\");\n expect(received).toEqual([\"Hello\"]);\n expect(form.field(\"path\").getValue()).toBe(\"/hello\");\n });\n });\n\n describe(\"layout positional modifiers\", () => {\n function createFormWithLayout() {\n return createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n path: fields.text().label(\"Path\"),\n description: fields.text().label(\"Description\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout.row(\"path\"),\n layout.row(\"description\")\n ]\n });\n }\n\n it(\"should insert a row before a target\", () => {\n const form = createFormWithLayout();\n form.fields(fields => ({\n language: fields.text().label(\"Language\").options([])\n }));\n\n form.layout(layout => [layout.row(\"language\").before(\"path\")]);\n\n const names = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(names).toEqual([\"title\", \"language\", \"path\", \"description\"]);\n });\n\n it(\"should insert a row after a target\", () => {\n const form = createFormWithLayout();\n form.fields(fields => ({\n language: fields.text().label(\"Language\").options([])\n }));\n\n form.layout(layout => [layout.row(\"language\").after(\"path\")]);\n\n const names = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(names).toEqual([\"title\", \"path\", \"language\", \"description\"]);\n });\n\n it(\"should replace a target row\", () => {\n const form = createFormWithLayout();\n form.fields(fields => ({\n slug: fields.text().label(\"Slug\")\n }));\n\n form.layout(layout => [layout.row(\"slug\").replace(\"path\")]);\n\n const names = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(names).toEqual([\"title\", \"slug\", \"description\"]);\n });\n\n it(\"should remove a field from layout\", () => {\n const form = createFormWithLayout();\n\n form.layout(layout => {\n layout.remove(\"path\");\n return [];\n });\n\n const names = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(names).toEqual([\"title\", \"description\"]);\n });\n\n it(\"should append when no position is specified\", () => {\n const form = createFormWithLayout();\n form.fields(fields => ({\n language: fields.text().label(\"Language\").options([])\n }));\n\n form.layout(layout => [layout.row(\"language\")]);\n\n const names = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(names).toEqual([\"title\", \"path\", \"description\", \"language\"]);\n });\n\n it(\"should append when target is not found\", () => {\n const form = createFormWithLayout();\n form.fields(fields => ({\n language: fields.text().label(\"Language\").options([])\n }));\n\n form.layout(layout => [layout.row(\"language\").after(\"nonexistent\")]);\n\n const names = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(names).toEqual([\"title\", \"path\", \"description\", \"language\"]);\n });\n });\n\n describe(\"IFormModifier integration\", () => {\n it(\"should support a full modifier workflow: add field + position in layout + append callbacks\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\").required(\"Title is required\"),\n path: fields\n .text()\n .label(\"Path\")\n .required(\"Path is required\")\n .beforeChange(value => {\n const str = String(value);\n return (\n \"/\" +\n str\n .replace(/^\\//, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9/-]+/g, \"-\")\n .replace(/^-|-$/g, \"\")\n );\n })\n }),\n layout: layout => [layout.row(\"title\"), layout.row(\"path\")]\n });\n\n // Simulate a language modifier\n const modifier = {\n modify(form: IFormModel) {\n // Add language field\n form.fields(fields => ({\n language: fields\n .text()\n .label(\"Language\")\n .options([\n { label: \"English\", value: \"en\" },\n { label: \"German\", value: \"de\" }\n ])\n .afterChange((value, f) => {\n const current = String(f.field(\"path\").getValue() || \"\");\n const stripped = current.replace(/^\\/[a-z]{2}\\//, \"/\");\n if (value && value !== \"en\") {\n f.field(\"path\").setValue(\"/\" + value + stripped);\n } else {\n f.field(\"path\").setValue(stripped);\n }\n })\n }));\n\n // Position after path\n form.layout(layout => [layout.row(\"language\").after(\"path\")]);\n }\n };\n\n modifier.modify(form);\n\n // Verify layout order\n const names = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(names).toEqual([\"title\", \"path\", \"language\"]);\n\n // Verify language field works\n form.field(\"path\").setValue(\"/demo\");\n form.field(\"language\").setValue(\"de\");\n expect(form.field(\"path\").getValue()).toBe(\"/de/demo\");\n\n // Verify getData includes language\n const data = form.getData();\n expect(data.language).toBe(\"de\");\n });\n });\n });\n\n describe(\"layout system expansion (Phase 5)\", () => {\n describe(\"separator\", () => {\n it(\"should include separator nodes in the resolved layout\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n description: fields.text().label(\"Description\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout.separator(),\n layout.row(\"description\")\n ]\n });\n\n const vm = form.vm;\n expect(vm.layout).toHaveLength(3);\n expect(vm.layout[0].type).toBe(\"row\");\n expect(vm.layout[1].type).toBe(\"separator\");\n expect(vm.layout[2].type).toBe(\"row\");\n });\n\n it(\"should support separator via modifier layout API\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n description: fields.text().label(\"Description\")\n }),\n layout: layout => [layout.row(\"title\"), layout.row(\"description\")]\n });\n\n form.layout(layout => [layout.separator().after(\"title\")]);\n\n expect(form.vm.layout).toHaveLength(3);\n expect(form.vm.layout[1].type).toBe(\"separator\");\n });\n });\n\n describe(\"tabs\", () => {\n function createFormWithTabs() {\n return createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n slug: fields.text().label(\"Slug\"),\n description: fields.text().label(\"Description\"),\n metaTitle: fields.text().label(\"Meta Title\"),\n metaDescription: fields.text().label(\"Meta Description\")\n }),\n layout: layout => [\n layout.row(\"title\", \"slug\"),\n layout\n .tabs(\"settings\")\n .tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"description\")]);\n })\n .tab(\"seo\", tab => {\n tab.label(\"SEO\")\n .description(\"Optimize how this page appears in search\")\n .layout(layout => [\n layout.row(\"metaTitle\"),\n layout.row(\"metaDescription\")\n ]);\n })\n ]\n });\n }\n\n it(\"should resolve tabs layout node with tab definitions\", () => {\n const form = createFormWithTabs();\n const vm = form.vm;\n\n expect(vm.layout).toHaveLength(2);\n expect(vm.layout[0].type).toBe(\"row\");\n expect(vm.layout[1].type).toBe(\"tabs\");\n\n const tabsNode = vm.layout[1] as ITabsNodeVM;\n expect(tabsNode.id).toBe(\"settings\");\n expect(tabsNode.tabs).toHaveLength(2);\n expect(tabsNode.tabs[0].id).toBe(\"general\");\n expect(tabsNode.tabs[0].label).toBe(\"General\");\n expect(tabsNode.tabs[1].id).toBe(\"seo\");\n expect(tabsNode.tabs[1].label).toBe(\"SEO\");\n expect(tabsNode.tabs[1].description).toBe(\n \"Optimize how this page appears in search\"\n );\n });\n\n it(\"should resolve fields inside tab layouts\", () => {\n const form = createFormWithTabs();\n const tabsNode = form.vm.layout[1] as ITabsNodeVM;\n\n const generalTab = tabsNode.tabs[0];\n expect(generalTab.layout).toHaveLength(1);\n expect(generalTab.layout[0].type).toBe(\"row\");\n const generalRow = generalTab.layout[0] as IRowNodeVM;\n expect(generalRow.fields[0].name).toBe(\"description\");\n\n const seoTab = tabsNode.tabs[1];\n expect(seoTab.layout).toHaveLength(2);\n });\n\n it(\"should default activeTabId to the first tab\", () => {\n const form = createFormWithTabs();\n const tabsNode = form.vm.layout[1] as ITabsNodeVM;\n expect(tabsNode.activeTabId).toBe(\"general\");\n });\n\n it(\"should switch active tab via setActiveTab\", () => {\n const form = createFormWithTabs();\n let tabsNode = form.vm.layout[1] as ITabsNodeVM;\n\n tabsNode.setActiveTab(\"seo\");\n\n tabsNode = form.vm.layout[1] as ITabsNodeVM;\n expect(tabsNode.activeTabId).toBe(\"seo\");\n });\n\n it(\"should fall back to first tab when active tab ID is invalid\", () => {\n const form = createFormWithTabs();\n let tabsNode = form.vm.layout[1] as ITabsNodeVM;\n\n tabsNode.setActiveTab(\"nonexistent\");\n\n tabsNode = form.vm.layout[1] as ITabsNodeVM;\n expect(tabsNode.activeTabId).toBe(\"general\");\n });\n\n it(\"should compute hasErrors for tabs based on referenced fields\", async () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\").required(\"Title is required\"),\n metaTitle: fields.text().label(\"Meta Title\").required(\"Required\")\n }),\n layout: layout => [\n layout\n .tabs(\"settings\")\n .tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"title\")]);\n })\n .tab(\"seo\", tab => {\n tab.label(\"SEO\").layout(layout => [layout.row(\"metaTitle\")]);\n })\n ]\n });\n\n // Before validation, no errors\n let tabsNode = form.vm.layout[0] as ITabsNodeVM;\n expect(tabsNode.tabs[0].hasErrors).toBe(false);\n expect(tabsNode.tabs[1].hasErrors).toBe(false);\n\n // Fill only title, leave metaTitle empty\n form.field(\"title\").setValue(\"Hello\");\n await form.validate();\n\n tabsNode = form.vm.layout[0] as ITabsNodeVM;\n expect(tabsNode.tabs[0].hasErrors).toBe(false);\n expect(tabsNode.tabs[1].hasErrors).toBe(true);\n });\n\n it(\"should not warn about fields inside tabs as orphans\", () => {\n const warnSpy = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n\n createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n description: fields.text().label(\"Description\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout.tabs(\"settings\").tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"description\")]);\n })\n ]\n });\n\n expect(warnSpy).not.toHaveBeenCalled();\n warnSpy.mockRestore();\n });\n\n it(\"should return null for tabs with empty tabs array\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\")\n }),\n layout: layout => [layout.row(\"title\"), layout.tabs(\"empty\")]\n });\n\n expect(form.vm.layout).toHaveLength(1);\n expect(form.vm.layout[0].type).toBe(\"row\");\n });\n });\n\n describe(\"element\", () => {\n it(\"should include element nodes in the resolved layout\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout.element(\"usage-stats\", { plan: \"enterprise\" })\n ]\n });\n\n const vm = form.vm;\n expect(vm.layout).toHaveLength(2);\n expect(vm.layout[1].type).toBe(\"element\");\n\n const elementNode = vm.layout[1] as IElementNodeVM;\n expect(elementNode.renderer).toBe(\"usage-stats\");\n expect(elementNode.props).toEqual({ plan: \"enterprise\" });\n });\n\n it(\"should support element without props\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\")\n }),\n layout: layout => [layout.row(\"title\"), layout.element(\"divider\")]\n });\n\n const elementNode = form.vm.layout[1] as IElementNodeVM;\n expect(elementNode.renderer).toBe(\"divider\");\n expect(elementNode.props).toBeUndefined();\n });\n });\n\n describe(\"named layout node access — form.layout(nodeId)\", () => {\n function createFormWithTabs() {\n return createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n description: fields.text().label(\"Description\"),\n metaTitle: fields.text().label(\"Meta Title\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout\n .tabs(\"settings\")\n .tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"description\")]);\n })\n .tab(\"seo\", tab => {\n tab.label(\"SEO\").layout(layout => [layout.row(\"metaTitle\")]);\n })\n ]\n });\n }\n\n it(\"should access a tabs node by ID and add a new tab\", () => {\n const form = createFormWithTabs();\n\n form.fields(fields => ({\n trackingId: fields.text().label(\"Tracking ID\")\n }));\n\n (form.layout(\"settings\") as ILayoutNodeAccessHandle)\n .as(\"tabs\")\n .tab(\"analytics\", tab => {\n tab.label(\"Analytics\").layout(layout => [layout.row(\"trackingId\")]);\n })\n .after(\"seo\");\n\n const tabsNode = form.vm.layout[1] as ITabsNodeVM;\n expect(tabsNode.tabs).toHaveLength(3);\n expect(tabsNode.tabs[2].id).toBe(\"analytics\");\n expect(tabsNode.tabs[2].label).toBe(\"Analytics\");\n });\n\n it(\"should add a tab before an existing tab\", () => {\n const form = createFormWithTabs();\n\n form.fields(fields => ({\n trackingId: fields.text().label(\"Tracking ID\")\n }));\n\n (form.layout(\"settings\") as ILayoutNodeAccessHandle)\n .as(\"tabs\")\n .tab(\"analytics\", tab => {\n tab.label(\"Analytics\").layout(layout => [layout.row(\"trackingId\")]);\n })\n .before(\"seo\");\n\n const tabsNode = form.vm.layout[1] as ITabsNodeVM;\n expect(tabsNode.tabs).toHaveLength(3);\n expect(tabsNode.tabs[0].id).toBe(\"general\");\n expect(tabsNode.tabs[1].id).toBe(\"analytics\");\n expect(tabsNode.tabs[2].id).toBe(\"seo\");\n });\n\n it(\"should throw when accessing a non-existent node ID\", () => {\n const form = createFormWithTabs();\n expect(() =>\n (form.layout(\"nonexistent\") as ILayoutNodeAccessHandle).as(\"tabs\")\n ).toThrow('Layout node \"nonexistent\" not found.');\n });\n });\n\n describe(\"positional modifiers targeting tabs/element nodes\", () => {\n it(\"should insert a row before a tabs node by ID\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n subtitle: fields.text().label(\"Subtitle\"),\n description: fields.text().label(\"Description\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout.tabs(\"settings\").tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"description\")]);\n })\n ]\n });\n\n form.layout(layout => [layout.row(\"subtitle\").before(\"settings\")]);\n\n expect(form.vm.layout).toHaveLength(3);\n expect(form.vm.layout[0].type).toBe(\"row\");\n expect(form.vm.layout[1].type).toBe(\"row\");\n expect(form.vm.layout[2].type).toBe(\"tabs\");\n\n const row = form.vm.layout[1] as IRowNodeVM;\n expect(row.fields[0].name).toBe(\"subtitle\");\n });\n\n it(\"should remove a tabs node by ID\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n description: fields.text().label(\"Description\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout.tabs(\"settings\").tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"description\")]);\n })\n ]\n });\n\n form.layout(layout => {\n layout.remove(\"settings\");\n return [];\n });\n\n expect(form.vm.layout).toHaveLength(1);\n expect(form.vm.layout[0].type).toBe(\"row\");\n });\n\n it(\"should replace a tabs node by ID\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n description: fields.text().label(\"Description\"),\n metaTitle: fields.text().label(\"Meta Title\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout.tabs(\"settings\").tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"description\")]);\n })\n ]\n });\n\n form.layout(layout => [layout.row(\"metaTitle\").replace(\"settings\")]);\n\n expect(form.vm.layout).toHaveLength(2);\n expect(form.vm.layout[0].type).toBe(\"row\");\n expect(form.vm.layout[1].type).toBe(\"row\");\n const row = form.vm.layout[1] as IRowNodeVM;\n expect(row.fields[0].name).toBe(\"metaTitle\");\n });\n });\n\n describe(\"modifier integration with tabs\", () => {\n it(\"should support a full modifier workflow: base form with tabs + modifier adds tab + modifier appends to existing tab\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n description: fields.text().label(\"Description\"),\n metaTitle: fields.text().label(\"Meta Title\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout.separator(),\n layout\n .tabs(\"settings\")\n .tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"description\")]);\n })\n .tab(\"seo\", tab => {\n tab.label(\"SEO\").layout(layout => [layout.row(\"metaTitle\")]);\n })\n ]\n });\n\n // Modifier A: add analytics tab\n form.fields(fields => ({\n trackingId: fields.text().label(\"Tracking ID\")\n }));\n\n (form.layout(\"settings\") as ILayoutNodeAccessHandle)\n .as(\"tabs\")\n .tab(\"analytics\", tab => {\n tab.label(\"Analytics\").layout(layout => [layout.row(\"trackingId\")]);\n })\n .after(\"seo\");\n\n // Verify full layout\n const vm = form.vm;\n expect(vm.layout).toHaveLength(3); // row, separator, tabs\n expect(vm.layout[0].type).toBe(\"row\");\n expect(vm.layout[1].type).toBe(\"separator\");\n expect(vm.layout[2].type).toBe(\"tabs\");\n\n const tabsNode = vm.layout[2] as ITabsNodeVM;\n expect(tabsNode.tabs).toHaveLength(3);\n expect(tabsNode.tabs[0].id).toBe(\"general\");\n expect(tabsNode.tabs[1].id).toBe(\"seo\");\n expect(tabsNode.tabs[2].id).toBe(\"analytics\");\n\n // SEO tab has metaTitle\n const seoTab = tabsNode.tabs[1];\n expect(seoTab.layout).toHaveLength(1);\n\n // Verify all fields are in getData\n const data = form.getData();\n expect(data).toHaveProperty(\"trackingId\");\n });\n });\n });\n\n describe(\"object fields (Phase 6)\", () => {\n describe(\"non-list object field\", () => {\n function createFormWithObject() {\n return createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n address: fields\n .object()\n .label(\"Address\")\n .fields(f => ({\n street: f.text().label(\"Street\").required(\"Street is required\"),\n city: f.text().label(\"City\").required(\"City is required\")\n }))\n }),\n layout: layout => [layout.row(\"title\"), layout.row(\"address\")]\n });\n }\n\n it(\"should create an object field with children\", () => {\n const form = createFormWithObject();\n const field = form.field(\"address\");\n expect(field).toBeDefined();\n expect(field.type).toBe(\"object\");\n });\n\n it(\"should access child fields via dot-notation\", () => {\n const form = createFormWithObject();\n const street = form.field(\"address.street\");\n expect(street).toBeDefined();\n expect(street.type).toBe(\"text\");\n });\n\n it(\"should throw on invalid dot-notation\", () => {\n const form = createFormWithObject();\n expect(() => form.field(\"address.zipcode\")).toThrow(\n 'Field \"address.zipcode\" not found.'\n );\n });\n\n it(\"should return nested object from getData\", () => {\n const form = createFormWithObject();\n form.field(\"address.street\").setValue(\"123 Main St\");\n form.field(\"address.city\").setValue(\"Springfield\");\n\n const data = form.getData();\n expect(data.address).toEqual({\n street: \"123 Main St\",\n city: \"Springfield\"\n });\n });\n\n it(\"should hydrate children from setData\", () => {\n const form = createFormWithObject();\n form.setData({\n title: \"Home\",\n address: { street: \"456 Oak Ave\", city: \"Portland\" }\n });\n\n expect(form.field(\"address.street\").getValue()).toBe(\"456 Oak Ave\");\n expect(form.field(\"address.city\").getValue()).toBe(\"Portland\");\n });\n\n it(\"should not be dirty after setData\", () => {\n const form = createFormWithObject();\n form.setData({\n title: \"Home\",\n address: { street: \"456 Oak Ave\", city: \"Portland\" }\n });\n expect(form.isDirty).toBe(false);\n });\n\n it(\"should be dirty after changing a child field\", () => {\n const form = createFormWithObject();\n form.setData({\n title: \"Home\",\n address: { street: \"456 Oak Ave\", city: \"Portland\" }\n });\n form.field(\"address.street\").setValue(\"789 Pine Rd\");\n expect(form.isDirty).toBe(true);\n });\n\n it(\"should validate children recursively\", async () => {\n const form = createFormWithObject();\n const valid = await form.validate();\n\n expect(valid).toBe(false);\n expect(form.errors.length).toBeGreaterThan(0);\n // The object field itself reports the error\n expect(form.errors.some(e => e.path === \"address\")).toBe(true);\n });\n\n it(\"should pass validation when children are valid\", async () => {\n const form = createFormWithObject();\n form.field(\"title\").setValue(\"Home\");\n form.field(\"address.street\").setValue(\"123 Main St\");\n form.field(\"address.city\").setValue(\"Springfield\");\n\n const valid = await form.validate();\n expect(valid).toBe(true);\n });\n\n it(\"should expose IObjectFieldVM from field.vm\", () => {\n const form = createFormWithObject();\n form.field(\"address.street\").setValue(\"123 Main St\");\n form.field(\"address.city\").setValue(\"Springfield\");\n\n const vm = form.field(\"address\").vm as IObjectFieldVM;\n expect(vm.type).toBe(\"object\");\n expect(vm.isList).toBe(false);\n expect(vm.fields).toHaveLength(2);\n expect(vm.fields[0].name).toBe(\"street\");\n expect(vm.fields[0].value).toBe(\"123 Main St\");\n expect(vm.fields[1].name).toBe(\"city\");\n expect(vm.items).toHaveLength(0);\n });\n\n it(\"should render object field in a row via default layout\", () => {\n const form = createForm({\n fields: fields => ({\n address: fields\n .object()\n .label(\"Address\")\n .fields(f => ({\n street: f.text().label(\"Street\"),\n city: f.text().label(\"City\")\n }))\n })\n });\n\n const vm = form.vm;\n expect(vm.layout).toHaveLength(1);\n expect(vm.layout[0].type).toBe(\"row\");\n const row = asRow(vm.layout[0]);\n expect(row.fields[0].type).toBe(\"object\");\n expect(row.fields[0].name).toBe(\"address\");\n });\n\n it(\"should reset to baseline values\", () => {\n const form = createFormWithObject();\n form.setData({\n title: \"Home\",\n address: { street: \"Original St\", city: \"Original City\" }\n });\n\n form.field(\"address.street\").setValue(\"Changed St\");\n expect(form.isDirty).toBe(true);\n\n form.reset();\n expect(form.field(\"address.street\").getValue()).toBe(\"Original St\");\n expect(form.isDirty).toBe(false);\n });\n\n it(\"should submit nested data when valid\", async () => {\n const form = createFormWithObject();\n form.field(\"title\").setValue(\"Home\");\n form.field(\"address.street\").setValue(\"123 Main St\");\n form.field(\"address.city\").setValue(\"Springfield\");\n\n const result = await form.submit();\n expect(result).toEqual({\n title: \"Home\",\n address: {\n street: \"123 Main St\",\n city: \"Springfield\"\n }\n });\n });\n });\n\n describe(\"list object field\", () => {\n function createFormWithList() {\n return createForm({\n fields: fields => ({\n presets: fields\n .object()\n .label(\"Presets\")\n .fields(f => ({\n name: f.text().label(\"Name\").required(\"Name is required\"),\n model: f.text().label(\"Model\").required(\"Model is required\")\n }))\n .list()\n }),\n layout: layout => [layout.row(\"presets\")]\n });\n }\n\n it(\"should create a list object field\", () => {\n const form = createFormWithList();\n const field = form.field(\"presets\");\n expect(field.type).toBe(\"object\");\n });\n\n it(\"should return empty array from getData initially\", () => {\n const form = createFormWithList();\n expect(form.getData().presets).toEqual([]);\n });\n\n it(\"should add items via the field VM\", () => {\n const form = createFormWithList();\n const vm = form.field(\"presets\").vm as IObjectFieldVM;\n expect(vm.isList).toBe(true);\n expect(vm.items).toHaveLength(0);\n\n vm.addItem();\n\n const updatedVm = form.field(\"presets\").vm as IObjectFieldVM;\n expect(updatedVm.items).toHaveLength(1);\n expect(updatedVm.items[0].fields).toHaveLength(2);\n expect(updatedVm.items[0].fields[0].name).toBe(\"name\");\n });\n\n it(\"should hydrate list from setData\", () => {\n const form = createFormWithList();\n form.setData({\n presets: [\n { name: \"Default\", model: \"claude-sonnet\" },\n { name: \"Fast\", model: \"claude-haiku\" }\n ]\n });\n\n const data = form.getData();\n expect(data.presets).toEqual([\n { name: \"Default\", model: \"claude-sonnet\" },\n { name: \"Fast\", model: \"claude-haiku\" }\n ]);\n });\n\n it(\"should expose items via IObjectFieldVM\", () => {\n const form = createFormWithList();\n form.setData({\n presets: [\n { name: \"Default\", model: \"claude-sonnet\" },\n { name: \"Fast\", model: \"claude-haiku\" }\n ]\n });\n\n const vm = form.field(\"presets\").vm as IObjectFieldVM;\n expect(vm.items).toHaveLength(2);\n expect(vm.items[0].fields[0].value).toBe(\"Default\");\n expect(vm.items[1].fields[1].value).toBe(\"claude-haiku\");\n });\n\n it(\"should remove items via item.remove()\", () => {\n const form = createFormWithList();\n form.setData({\n presets: [\n { name: \"Default\", model: \"claude-sonnet\" },\n { name: \"Fast\", model: \"claude-haiku\" }\n ]\n });\n\n const vm = form.field(\"presets\").vm as IObjectFieldVM;\n vm.items[0].remove();\n\n expect(form.getData().presets).toEqual([{ name: \"Fast\", model: \"claude-haiku\" }]);\n });\n\n it(\"should remove items via removeItem()\", () => {\n const form = createFormWithList();\n form.setData({\n presets: [\n { name: \"A\", model: \"a\" },\n { name: \"B\", model: \"b\" },\n { name: \"C\", model: \"c\" }\n ]\n });\n\n const vm = form.field(\"presets\").vm as IObjectFieldVM;\n vm.removeItem(1);\n\n expect(form.getData().presets).toEqual([\n { name: \"A\", model: \"a\" },\n { name: \"C\", model: \"c\" }\n ]);\n });\n\n it(\"should validate all items\", async () => {\n const form = createFormWithList();\n form.setData({\n presets: [\n { name: \"Default\", model: \"claude-sonnet\" },\n { name: \"\", model: \"\" }\n ]\n });\n\n const valid = await form.validate();\n expect(valid).toBe(false);\n });\n\n it(\"should pass validation when all items are valid\", async () => {\n const form = createFormWithList();\n form.setData({\n presets: [\n { name: \"Default\", model: \"claude-sonnet\" },\n { name: \"Fast\", model: \"claude-haiku\" }\n ]\n });\n\n const valid = await form.validate();\n expect(valid).toBe(true);\n });\n\n it(\"should validate with listSchema\", async () => {\n const form = createForm({\n fields: fields => ({\n presets: fields\n .object()\n .label(\"Presets\")\n .fields(f => ({\n name: f.text().label(\"Name\")\n }))\n .list()\n .listSchema(z.array(z.any()).min(2, \"At least 2 presets are required\"))\n })\n });\n\n form.setData({ presets: [{ name: \"Only one\" }] });\n const valid = await form.validate();\n\n expect(valid).toBe(false);\n expect(form.errors[0].message).toBe(\"At least 2 presets are required\");\n });\n\n it(\"should be dirty after adding an item\", () => {\n const form = createFormWithList();\n form.setData({ presets: [] });\n expect(form.isDirty).toBe(false);\n\n const vm = form.field(\"presets\").vm as IObjectFieldVM;\n vm.addItem();\n expect(form.isDirty).toBe(true);\n });\n\n it(\"should have stable keys across re-renders\", () => {\n const form = createFormWithList();\n form.setData({\n presets: [\n { name: \"A\", model: \"a\" },\n { name: \"B\", model: \"b\" }\n ]\n });\n\n const vm1 = form.field(\"presets\").vm as IObjectFieldVM;\n const key0 = vm1.items[0].key;\n const key1 = vm1.items[1].key;\n\n // Re-read VM — keys should be the same\n const vm2 = form.field(\"presets\").vm as IObjectFieldVM;\n expect(vm2.items[0].key).toBe(key0);\n expect(vm2.items[1].key).toBe(key1);\n });\n\n it(\"should pass empty list validation when not required\", async () => {\n const form = createFormWithList();\n const valid = await form.validate();\n expect(valid).toBe(true);\n });\n\n it(\"should modify item field values via VM onChange\", () => {\n const form = createFormWithList();\n form.setData({\n presets: [{ name: \"Default\", model: \"claude-sonnet\" }]\n });\n\n const vm = form.field(\"presets\").vm as IObjectFieldVM;\n vm.items[0].fields[0].onChange(\"Updated\");\n\n expect((form.getData().presets as any[])[0].name).toBe(\"Updated\");\n });\n });\n\n describe(\"hasErrors rollup through tabs\", () => {\n it(\"should report hasErrors in tabs containing object fields\", async () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n address: fields\n .object()\n .label(\"Address\")\n .fields(f => ({\n street: f.text().label(\"Street\").required(\"Required\")\n }))\n }),\n layout: layout => [\n layout\n .tabs(\"settings\")\n .tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"title\")]);\n })\n .tab(\"details\", tab => {\n tab.label(\"Details\").layout(layout => [layout.row(\"address\")]);\n })\n ]\n });\n\n form.field(\"title\").setValue(\"Hello\");\n await form.validate();\n\n const tabsNode = form.vm.layout[0] as ITabsNodeVM;\n expect(tabsNode.tabs[0].hasErrors).toBe(false);\n expect(tabsNode.tabs[1].hasErrors).toBe(true);\n });\n });\n });\n\n describe(\"templated object fields (Phase 8a)\", () => {\n function createFormWithTemplatedObject() {\n return createForm({\n fields: fields => ({\n content: fields\n .object()\n .label(\"Content\")\n .template(\"hero\", t => {\n t.label(\"Hero Banner\").fields(f => ({\n heading: f.text().label(\"Heading\").required(\"Required\"),\n image: f.text().label(\"Image\")\n }));\n })\n .template(\"text\", t => {\n t.label(\"Rich Text\").fields(f => ({\n body: f.text().label(\"Body\").required(\"Required\")\n }));\n })\n })\n });\n }\n\n describe(\"shape\", () => {\n it(\"starts with no active template and empty children\", () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n expect(field.isTemplated).toBe(true);\n expect(field.activeTemplateId).toBeNull();\n expect(field.children.size).toBe(0);\n });\n\n it(\"exposes available templates via VM\", () => {\n const form = createFormWithTemplatedObject();\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.isTemplated).toBe(true);\n expect(vm.availableTemplates).toEqual([\n { id: \"hero\", label: \"Hero Banner\" },\n { id: \"text\", label: \"Rich Text\" }\n ]);\n expect(vm.activeTemplateId).toBeNull();\n expect(vm.fields).toEqual([]);\n });\n\n it(\"rejects .fields() alongside .template() at build time\", () => {\n expect(() =>\n createForm({\n fields: fields => ({\n content: fields\n .object()\n .fields(f => ({ x: f.text() }))\n .template(\"a\", t => {\n t.label(\"A\").fields(f => ({ y: f.text() }));\n })\n })\n })\n ).toThrow(/both .fields\\(\\) and .template\\(\\)/);\n });\n\n it(\"rejects duplicate template ids\", () => {\n expect(() =>\n createForm({\n fields: fields => ({\n content: fields\n .object()\n .template(\"a\", t => {\n t.label(\"A1\").fields(f => ({ x: f.text() }));\n })\n .template(\"a\", t => {\n t.label(\"A2\").fields(f => ({ y: f.text() }));\n })\n })\n })\n ).toThrow(/Duplicate template id \"a\"/);\n });\n\n it(\"rejects reserved _templateId as template id\", () => {\n expect(() =>\n createForm({\n fields: fields => ({\n content: fields.object().template(\"_templateId\", t => {\n t.label(\"X\").fields(f => ({ x: f.text() }));\n })\n })\n })\n ).toThrow(/reserved/);\n });\n\n it(\"rejects _templateId as a child field name in a template\", () => {\n expect(() =>\n createForm({\n fields: fields => ({\n content: fields.object().template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({ _templateId: f.text() }));\n })\n })\n })\n ).toThrow(/reserved field \"_templateId\"/);\n });\n\n it(\"allows combining .list() with .template() (Phase 8b)\", () => {\n expect(() =>\n createForm({\n fields: fields => ({\n content: fields\n .object()\n .list()\n .template(\"a\", t => {\n t.label(\"A\").fields(f => ({ x: f.text() }));\n })\n })\n })\n ).not.toThrow();\n });\n });\n\n describe(\"setTemplate / switching\", () => {\n it(\"builds children when a template is selected\", () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n\n field.setTemplate(\"hero\");\n\n expect(field.activeTemplateId).toBe(\"hero\");\n expect(field.children.size).toBe(2);\n expect(form.field(\"content.heading\").type).toBe(\"text\");\n expect(form.field(\"content.image\").type).toBe(\"text\");\n });\n\n it(\"discards data when switching to a different template\", () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n\n field.setTemplate(\"hero\");\n form.field(\"content.heading\").setValue(\"Hello\");\n\n field.setTemplate(\"text\");\n\n expect(field.activeTemplateId).toBe(\"text\");\n expect(form.field(\"content.body\")).toBeDefined();\n expect(() => form.field(\"content.heading\")).toThrow();\n });\n\n it(\"is a no-op when setting the currently active template\", () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n\n field.setTemplate(\"hero\");\n form.field(\"content.heading\").setValue(\"Preserved\");\n field.setTemplate(\"hero\");\n\n expect(form.field(\"content.heading\").getValue()).toBe(\"Preserved\");\n });\n\n it(\"throws when setting an unknown template id\", () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n expect(() => field.setTemplate(\"missing\")).toThrow(/Template \"missing\" not found/);\n });\n\n it(\"wires the form reference on newly created children\", () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n // Setting a value on a child requires _form to be wired for pipelines.\n expect(() => form.field(\"content.heading\").setValue(\"OK\")).not.toThrow();\n });\n });\n\n describe(\"getData / setData\", () => {\n it(\"returns null when no template is active\", () => {\n const form = createFormWithTemplatedObject();\n expect(form.getData().content).toBeNull();\n });\n\n it(\"includes _templateId and child values when active\", () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n form.field(\"content.heading\").setValue(\"Welcome\");\n form.field(\"content.image\").setValue(\"cover.jpg\");\n\n expect(form.getData().content).toEqual({\n _templateId: \"hero\",\n heading: \"Welcome\",\n image: \"cover.jpg\"\n });\n });\n\n it(\"hydrates via setData by reading _templateId\", () => {\n const form = createFormWithTemplatedObject();\n form.setData({\n content: { _templateId: \"text\", body: \"Lorem ipsum\" }\n });\n\n const field = form.field(\"content\") as any;\n expect(field.activeTemplateId).toBe(\"text\");\n expect(form.field(\"content.body\").getValue()).toBe(\"Lorem ipsum\");\n });\n\n it(\"setData with null clears the active template\", () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n form.field(\"content.heading\").setValue(\"X\");\n\n form.setData({ content: null as any });\n\n expect(field.activeTemplateId).toBeNull();\n expect(field.children.size).toBe(0);\n });\n\n it(\"setData ignores unknown template id silently\", () => {\n const form = createFormWithTemplatedObject();\n form.setData({\n content: { _templateId: \"nope\", foo: \"bar\" } as any\n });\n const field = form.field(\"content\") as any;\n expect(field.activeTemplateId).toBeNull();\n });\n });\n\n describe(\"validation\", () => {\n it(\"required templated object fails validation when no template active\", async () => {\n const form = createForm({\n fields: fields => ({\n content: fields\n .object()\n .required(\"Pick a template\")\n .template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({ heading: f.text() }));\n })\n })\n });\n\n const valid = await form.validate();\n expect(valid).toBe(false);\n expect(form.errors.some(e => e.path === \"content\")).toBe(true);\n });\n\n it(\"required templated object passes when template active with valid children\", async () => {\n const form = createForm({\n fields: fields => ({\n content: fields\n .object()\n .required(\"Pick a template\")\n .template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({\n heading: f.text().required(\"Required\")\n }));\n })\n })\n });\n\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n form.field(\"content.heading\").setValue(\"Hi\");\n\n const valid = await form.validate();\n expect(valid).toBe(true);\n });\n\n it(\"validates child fields inside active template\", async () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n // heading is required; no value set\n const valid = await form.validate();\n expect(valid).toBe(false);\n });\n\n it(\"passes validation when object is optional and no template selected\", async () => {\n const form = createFormWithTemplatedObject();\n const valid = await form.validate();\n expect(valid).toBe(true);\n });\n });\n\n describe(\"template visibility\", () => {\n it(\"filters availableTemplates by reactive visible callback\", () => {\n const form = createForm({\n fields: fields => ({\n plan: fields.text().defaultValue(\"free\"),\n content: fields\n .object()\n .template(\"basic\", t => {\n t.label(\"Basic\").fields(f => ({ x: f.text() }));\n })\n .template(\"premium\", t => {\n t.label(\"Premium\")\n .visible(f => f.field(\"plan\").getValue() === \"enterprise\")\n .fields(f => ({ y: f.text() }));\n })\n })\n });\n\n const vm1 = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm1.availableTemplates.map(t => t.id)).toEqual([\"basic\"]);\n\n form.field(\"plan\").setValue(\"enterprise\");\n const vm2 = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm2.availableTemplates.map(t => t.id)).toEqual([\"basic\", \"premium\"]);\n });\n\n it(\"hiding a template does not clear an already-active selection\", () => {\n const form = createForm({\n fields: fields => ({\n plan: fields.text().defaultValue(\"enterprise\"),\n content: fields.object().template(\"premium\", t => {\n t.label(\"Premium\")\n .visible(f => f.field(\"plan\").getValue() === \"enterprise\")\n .fields(f => ({ y: f.text() }));\n })\n })\n });\n\n const field = form.field(\"content\") as any;\n field.setTemplate(\"premium\");\n form.field(\"content.y\").setValue(\"set\");\n\n form.field(\"plan\").setValue(\"free\");\n\n // Template no longer in picker, but active selection + data preserved.\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.availableTemplates).toEqual([]);\n expect(vm.activeTemplateId).toBe(\"premium\");\n expect(form.field(\"content.y\").getValue()).toBe(\"set\");\n });\n });\n\n describe(\"isDirty\", () => {\n it(\"is not dirty after setData with template\", () => {\n const form = createFormWithTemplatedObject();\n form.setData({\n content: { _templateId: \"hero\", heading: \"Hello\", image: \"\" }\n });\n expect(form.isDirty).toBe(false);\n });\n\n it(\"becomes dirty after switching template\", () => {\n const form = createFormWithTemplatedObject();\n form.setData({\n content: { _templateId: \"hero\", heading: \"Hello\", image: \"\" }\n });\n (form.field(\"content\") as any).setTemplate(\"text\");\n expect(form.isDirty).toBe(true);\n });\n });\n });\n\n describe(\"templated list fields (Phase 8b)\", () => {\n function createFormWithTemplatedList() {\n return createForm({\n fields: fields => ({\n sections: fields\n .object()\n .label(\"Sections\")\n .list()\n .template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({\n heading: f.text().required(\"Required\"),\n image: f.text()\n }));\n })\n .template(\"text\", t => {\n t.label(\"Text\").fields(f => ({\n body: f.text().required(\"Required\")\n }));\n })\n })\n });\n }\n\n describe(\"addItem / templateId\", () => {\n it(\"requires a template id when adding to a templated list\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n expect(() => field.addItem()).toThrow(/require a template id/);\n });\n\n it(\"rejects unknown template ids\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n expect(() => field.addItem(\"missing\")).toThrow(/Template \"missing\" not found/);\n });\n\n it(\"adds an item with the picked template's children\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n\n expect(field.items.length).toBe(1);\n expect(field.items[0].templateId).toBe(\"hero\");\n expect(field.items[0].children.has(\"heading\")).toBe(true);\n expect(field.items[0].children.has(\"image\")).toBe(true);\n });\n\n it(\"allows mixing different templates across items\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n field.addItem(\"text\");\n field.addItem(\"hero\");\n\n expect(field.items.map((i: any) => i.templateId)).toEqual([\"hero\", \"text\", \"hero\"]);\n });\n });\n\n describe(\"getData\", () => {\n it(\"includes _templateId per item\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n field.items[0].children.get(\"heading\").setValue(\"Welcome\");\n field.addItem(\"text\");\n field.items[1].children.get(\"body\").setValue(\"Lorem\");\n\n expect(form.getData().sections).toEqual([\n { _templateId: \"hero\", heading: \"Welcome\", image: null },\n { _templateId: \"text\", body: \"Lorem\" }\n ]);\n });\n });\n\n describe(\"setData\", () => {\n it(\"hydrates items by reading each item's _templateId\", () => {\n const form = createFormWithTemplatedList();\n form.setData({\n sections: [\n { _templateId: \"hero\", heading: \"H1\", image: \"img.jpg\" },\n { _templateId: \"text\", body: \"Body copy\" }\n ]\n });\n\n const field = form.field(\"sections\") as any;\n expect(field.items.length).toBe(2);\n expect(field.items[0].templateId).toBe(\"hero\");\n expect(field.items[0].children.get(\"heading\").getValue()).toBe(\"H1\");\n expect(field.items[1].templateId).toBe(\"text\");\n expect(field.items[1].children.get(\"body\").getValue()).toBe(\"Body copy\");\n });\n\n it(\"silently drops items with invalid or missing _templateId\", () => {\n const form = createFormWithTemplatedList();\n form.setData({\n sections: [\n { _templateId: \"hero\", heading: \"Keep\" },\n { _templateId: \"nope\", x: 1 } as any,\n { heading: \"no-id\" } as any,\n null as any,\n { _templateId: \"text\", body: \"Also keep\" }\n ]\n });\n\n const field = form.field(\"sections\") as any;\n expect(field.items.length).toBe(2);\n expect(field.items.map((i: any) => i.templateId)).toEqual([\"hero\", \"text\"]);\n });\n });\n\n describe(\"duplicate / move / remove\", () => {\n it(\"duplicates an item preserving templateId and values\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n field.items[0].children.get(\"heading\").setValue(\"Original\");\n field.items[0].children.get(\"image\").setValue(\"pic.jpg\");\n\n field.duplicateItem(0);\n\n expect(field.items.length).toBe(2);\n expect(field.items[1].templateId).toBe(\"hero\");\n expect(field.items[1].children.get(\"heading\").getValue()).toBe(\"Original\");\n expect(field.items[1].children.get(\"image\").getValue()).toBe(\"pic.jpg\");\n expect(field.items[0].key).not.toBe(field.items[1].key);\n });\n\n it(\"moves items while preserving templateId\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n field.addItem(\"text\");\n field.moveItem(0, 1);\n\n expect(field.items.map((i: any) => i.templateId)).toEqual([\"text\", \"hero\"]);\n });\n\n it(\"removes items by index\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n field.addItem(\"text\");\n field.removeItem(0);\n\n expect(field.items.length).toBe(1);\n expect(field.items[0].templateId).toBe(\"text\");\n });\n });\n\n describe(\"VM\", () => {\n it(\"exposes templateId and duplicate on each item VM\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n\n const vm = form.field(\"sections\").vm as IObjectFieldVM;\n expect(vm.items.length).toBe(1);\n expect(vm.items[0].templateId).toBe(\"hero\");\n expect(typeof vm.items[0].duplicate).toBe(\"function\");\n });\n\n it(\"VM addItem(templateId) appends an item\", () => {\n const form = createFormWithTemplatedList();\n const vm = form.field(\"sections\").vm as IObjectFieldVM;\n vm.addItem(\"hero\");\n vm.addItem(\"text\");\n\n const field = form.field(\"sections\") as any;\n expect(field.items.map((i: any) => i.templateId)).toEqual([\"hero\", \"text\"]);\n });\n\n it(\"availableTemplates respects reactive visible() on templated lists\", () => {\n const form = createForm({\n fields: fields => ({\n plan: fields.text().defaultValue(\"free\"),\n sections: fields\n .object()\n .list()\n .template(\"basic\", t => {\n t.label(\"Basic\").fields(f => ({ x: f.text() }));\n })\n .template(\"premium\", t => {\n t.label(\"Premium\")\n .visible(f => f.field(\"plan\").getValue() === \"enterprise\")\n .fields(f => ({ y: f.text() }));\n })\n })\n });\n\n const vm1 = form.field(\"sections\").vm as IObjectFieldVM;\n expect(vm1.availableTemplates.map(t => t.id)).toEqual([\"basic\"]);\n\n form.field(\"plan\").setValue(\"enterprise\");\n const vm2 = form.field(\"sections\").vm as IObjectFieldVM;\n expect(vm2.availableTemplates.map(t => t.id)).toEqual([\"basic\", \"premium\"]);\n });\n });\n\n describe(\"validation\", () => {\n it(\"validates each item's children under its template\", async () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\"); // heading is required, not set\n field.addItem(\"text\");\n field.items[1].children.get(\"body\").setValue(\"ok\");\n\n const valid = await form.validate();\n expect(valid).toBe(false);\n expect(form.errors.some(e => e.path.startsWith(\"sections\"))).toBe(true);\n });\n\n it(\"passes when every item's required fields are filled\", async () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n field.items[0].children.get(\"heading\").setValue(\"H\");\n field.addItem(\"text\");\n field.items[1].children.get(\"body\").setValue(\"B\");\n\n const valid = await form.validate();\n expect(valid).toBe(true);\n });\n });\n\n describe(\"isDirty\", () => {\n it(\"is not dirty after setData with templated list\", () => {\n const form = createFormWithTemplatedList();\n form.setData({\n sections: [\n { _templateId: \"hero\", heading: \"H\", image: \"\" },\n { _templateId: \"text\", body: \"B\" }\n ]\n });\n expect(form.isDirty).toBe(false);\n });\n\n it(\"becomes dirty after adding an item\", () => {\n const form = createFormWithTemplatedList();\n form.setData({\n sections: [{ _templateId: \"hero\", heading: \"H\", image: \"\" }]\n });\n (form.field(\"sections\") as any).addItem(\"text\");\n expect(form.isDirty).toBe(true);\n });\n });\n });\n\n describe(\"per-template / inner object layouts (Phase 8c)\", () => {\n describe(\"non-templated single object\", () => {\n it(\"defaults to one row per visible child when no layout.object() is registered\", () => {\n const form = createForm({\n fields: fields => ({\n meta: fields.object().fields(f => ({\n a: f.text().label(\"A\"),\n b: f.text().label(\"B\")\n }))\n })\n });\n const vm = form.field(\"meta\").vm as IObjectFieldVM;\n expect(vm.layout.length).toBe(2);\n expect(asRow(vm.layout[0]).fields.map(f => f.name)).toEqual([\"a\"]);\n expect(asRow(vm.layout[1]).fields.map(f => f.name)).toEqual([\"b\"]);\n });\n\n it(\"resolves the registered inner layout against the children\", () => {\n const form = createForm({\n fields: fields => ({\n meta: fields.object().fields(f => ({\n a: f.text().label(\"A\"),\n b: f.text().label(\"B\")\n }))\n }),\n layout: layout => [layout.object(\"meta\", l => [l.row(\"a\", \"b\")])]\n });\n const vm = form.field(\"meta\").vm as IObjectFieldVM;\n expect(vm.layout.length).toBe(1);\n expect(asRow(vm.layout[0]).fields.map(f => f.name)).toEqual([\"a\", \"b\"]);\n });\n\n it(\"throws when a per-template map is passed to a non-templated field\", () => {\n expect(() =>\n createForm({\n fields: fields => ({\n meta: fields.object().fields(f => ({ a: f.text() }))\n }),\n layout: layout => [layout.object(\"meta\", { tplA: l => [l.row(\"a\")] })]\n })\n ).toThrow(/not templated/);\n });\n });\n\n describe(\"non-templated list\", () => {\n it(\"applies the inner layout to every list item\", () => {\n const form = createForm({\n fields: fields => ({\n rows: fields\n .object()\n .list()\n .fields(f => ({ a: f.text(), b: f.text() }))\n }),\n layout: layout => [layout.object(\"rows\", l => [l.row(\"a\", \"b\")])]\n });\n const field = form.field(\"rows\") as any;\n field.addItem();\n field.addItem();\n const vm = field.vm as IObjectFieldVM;\n expect(vm.items.length).toBe(2);\n for (const item of vm.items) {\n expect(item.layout.length).toBe(1);\n expect(asRow(item.layout[0]).fields.map(f => f.name)).toEqual([\"a\", \"b\"]);\n }\n });\n });\n\n describe(\"templated single object\", () => {\n function buildTemplatedForm(layoutFactory?: IFormModelConfig[\"layout\"]) {\n return createForm({\n fields: fields => ({\n content: fields\n .object()\n .template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({\n heading: f.text().label(\"Heading\"),\n subheading: f.text().label(\"Subheading\")\n }));\n })\n .template(\"cta\", t => {\n t.label(\"CTA\").fields(f => ({\n text: f.text().label(\"Text\"),\n url: f.text().label(\"URL\")\n }));\n })\n }),\n layout: layoutFactory\n });\n }\n\n it(\"uses the active template's per-template layout\", () => {\n const form = buildTemplatedForm(layout => [\n layout.object(\"content\", {\n hero: l => [l.row(\"heading\", \"subheading\")],\n cta: l => [l.row(\"text\"), l.row(\"url\")]\n })\n ]);\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n let vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.layout.length).toBe(1);\n expect(asRow(vm.layout[0]).fields.map(f => f.name)).toEqual([\n \"heading\",\n \"subheading\"\n ]);\n\n field.setTemplate(\"cta\");\n vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.layout.length).toBe(2);\n expect(asRow(vm.layout[0]).fields.map(f => f.name)).toEqual([\"text\"]);\n expect(asRow(vm.layout[1]).fields.map(f => f.name)).toEqual([\"url\"]);\n });\n\n it(\"falls back to default one-row-per-child when active template has no entry\", () => {\n const form = buildTemplatedForm(layout => [\n layout.object(\"content\", {\n hero: l => [l.row(\"heading\", \"subheading\")]\n // no entry for \"cta\"\n })\n ]);\n const field = form.field(\"content\") as any;\n field.setTemplate(\"cta\");\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.layout.length).toBe(2);\n expect(asRow(vm.layout[0]).fields.map(f => f.name)).toEqual([\"text\"]);\n expect(asRow(vm.layout[1]).fields.map(f => f.name)).toEqual([\"url\"]);\n });\n\n it(\"returns an empty layout when no template is active\", () => {\n const form = buildTemplatedForm(layout => [\n layout.object(\"content\", { hero: l => [l.row(\"heading\", \"subheading\")] })\n ]);\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.activeTemplateId).toBeNull();\n expect(vm.layout).toEqual([]);\n });\n\n it(\"silently ignores an unknown template id in the layout map\", () => {\n const form = buildTemplatedForm(layout => [\n layout.object(\"content\", {\n hero: l => [l.row(\"heading\", \"subheading\")],\n unknown: l => [l.row(\"xxx\")]\n })\n ]);\n // Should not throw at build time; the unknown entry is dead until referenced.\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(asRow(vm.layout[0]).fields.map(f => f.name)).toEqual([\n \"heading\",\n \"subheading\"\n ]);\n });\n\n it(\"throws when a single LayoutNode[] is passed to a templated field\", () => {\n expect(() =>\n buildTemplatedForm(layout => [layout.object(\"content\", l => [l.row(\"x\")])])\n ).toThrow(/is templated/);\n });\n\n it(\"falls back to default when no layout.object() is registered\", () => {\n const form = buildTemplatedForm();\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.layout.length).toBe(2);\n expect(asRow(vm.layout[0]).fields.map(f => f.name)).toEqual([\"heading\"]);\n expect(asRow(vm.layout[1]).fields.map(f => f.name)).toEqual([\"subheading\"]);\n });\n });\n\n describe(\"templated list\", () => {\n function buildTemplatedListForm() {\n return createForm({\n fields: fields => ({\n sections: fields\n .object()\n .list()\n .template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({\n heading: f.text().label(\"Heading\"),\n subheading: f.text().label(\"Subheading\")\n }));\n })\n .template(\"cta\", t => {\n t.label(\"CTA\").fields(f => ({\n text: f.text().label(\"Text\"),\n url: f.text().label(\"URL\")\n }));\n })\n }),\n layout: layout => [\n layout.object(\"sections\", {\n hero: l => [l.row(\"heading\", \"subheading\")],\n cta: l => [l.row(\"text\"), l.row(\"url\")]\n })\n ]\n });\n }\n\n it(\"each item resolves layout against its own template\", () => {\n const form = buildTemplatedListForm();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n field.addItem(\"cta\");\n const vm = form.field(\"sections\").vm as IObjectFieldVM;\n expect(vm.items.length).toBe(2);\n expect(asRow(vm.items[0].layout[0]).fields.map(f => f.name)).toEqual([\n \"heading\",\n \"subheading\"\n ]);\n expect(asRow(vm.items[1].layout[0]).fields.map(f => f.name)).toEqual([\"text\"]);\n expect(asRow(vm.items[1].layout[1]).fields.map(f => f.name)).toEqual([\"url\"]);\n });\n\n it(\"hides hidden child fields from the resolved layout row\", () => {\n const form = createForm({\n fields: fields => ({\n content: fields.object().template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({\n heading: f.text(),\n secret: f.text().hidden()\n }));\n })\n }),\n layout: layout => [\n layout.object(\"content\", {\n hero: l => [l.row(\"heading\", \"secret\")]\n })\n ]\n });\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(asRow(vm.layout[0]).fields.map(f => f.name)).toEqual([\"heading\"]);\n });\n });\n\n describe(\"interaction with form.vm.layout\", () => {\n it(\"the form layout exposes a single-field row for the object\", () => {\n const form = createForm({\n fields: fields => ({\n content: fields.object().template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({ heading: f.text() }));\n })\n }),\n layout: layout => [layout.object(\"content\", { hero: l => [l.row(\"heading\")] })]\n });\n const layout = form.vm.layout;\n expect(layout.length).toBe(1);\n const row = asRow(layout[0]);\n expect(row.fields.map(f => f.name)).toEqual([\"content\"]);\n });\n\n it(\"hides the object node from form.vm.layout when the field is not visible\", () => {\n const form = createForm({\n fields: fields => ({\n content: fields\n .object()\n .hidden()\n .template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({ heading: f.text() }));\n })\n }),\n layout: layout => [layout.object(\"content\", { hero: l => [l.row(\"heading\")] })]\n });\n expect(form.vm.layout).toEqual([]);\n });\n });\n });\n\n describe(\"nested object layouts (Phase 8c.1)\", () => {\n it(\"registers layout.object() nested inside another object's inner layout (non-templated)\", () => {\n const form = createForm({\n fields: fields => ({\n page: fields.object().fields(f => ({\n title: f.text(),\n seo: f.object().fields(g => ({\n metaTitle: g.text(),\n metaDescription: g.text()\n }))\n }))\n }),\n layout: layout => [\n layout.object(\"page\", l => [\n l.row(\"title\"),\n l.object(\"seo\", inner => [inner.row(\"metaTitle\", \"metaDescription\")])\n ])\n ]\n });\n const pageVm = form.field(\"page\").vm as IObjectFieldVM;\n const seoRow = asRow(pageVm.layout[1]);\n const seoVm = seoRow.fields[0] as IObjectFieldVM;\n expect(seoVm.layout.length).toBe(1);\n expect(asRow(seoVm.layout[0]).fields.map(f => f.name)).toEqual([\n \"metaTitle\",\n \"metaDescription\"\n ]);\n });\n\n it(\"supports three levels of nesting\", () => {\n const form = createForm({\n fields: fields => ({\n a: fields.object().fields(f => ({\n b: f.object().fields(g => ({\n c: g.object().fields(h => ({\n x: h.text(),\n y: h.text()\n }))\n }))\n }))\n }),\n layout: layout => [\n layout.object(\"a\", l1 => [\n l1.object(\"b\", l2 => [l2.object(\"c\", l3 => [l3.row(\"x\", \"y\")])])\n ])\n ]\n });\n const aVm = form.field(\"a\").vm as IObjectFieldVM;\n const bVm = asRow(aVm.layout[0]).fields[0] as IObjectFieldVM;\n const cVm = asRow(bVm.layout[0]).fields[0] as IObjectFieldVM;\n expect(cVm.layout.length).toBe(1);\n expect(asRow(cVm.layout[0]).fields.map(f => f.name)).toEqual([\"x\", \"y\"]);\n });\n\n it(\"registers nested layouts on a templated single object when its template activates\", () => {\n const form = createForm({\n fields: fields => ({\n block: fields.object().template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({\n heading: f.text(),\n seo: f.object().fields(g => ({\n metaTitle: g.text(),\n metaDescription: g.text()\n }))\n }));\n })\n }),\n layout: layout => [\n layout.object(\"block\", {\n hero: l => [\n l.row(\"heading\"),\n l.object(\"seo\", inner => [inner.row(\"metaTitle\", \"metaDescription\")])\n ]\n })\n ]\n });\n const field = form.field(\"block\") as any;\n field.setTemplate(\"hero\");\n const vm = form.field(\"block\").vm as IObjectFieldVM;\n const seoRow = asRow(vm.layout[1]);\n const seoVm = seoRow.fields[0] as IObjectFieldVM;\n expect(asRow(seoVm.layout[0]).fields.map(f => f.name)).toEqual([\n \"metaTitle\",\n \"metaDescription\"\n ]);\n });\n\n it(\"registers nested layouts on a templated list — each item gets its own\", () => {\n const form = createForm({\n fields: fields => ({\n sections: fields\n .object()\n .list()\n .template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({\n heading: f.text(),\n seo: f.object().fields(g => ({\n metaTitle: g.text(),\n metaDescription: g.text()\n }))\n }));\n })\n }),\n layout: layout => [\n layout.object(\"sections\", {\n hero: l => [\n l.row(\"heading\"),\n l.object(\"seo\", inner => [inner.row(\"metaTitle\", \"metaDescription\")])\n ]\n })\n ]\n });\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n field.addItem(\"hero\");\n const vm = form.field(\"sections\").vm as IObjectFieldVM;\n expect(vm.items.length).toBe(2);\n for (const item of vm.items) {\n const seoVm = asRow(item.layout[1]).fields[0] as IObjectFieldVM;\n expect(asRow(seoVm.layout[0]).fields.map(f => f.name)).toEqual([\n \"metaTitle\",\n \"metaDescription\"\n ]);\n }\n });\n\n it(\"registers nested layouts on a non-templated list item upon creation\", () => {\n const form = createForm({\n fields: fields => ({\n rows: fields\n .object()\n .list()\n .fields(f => ({\n label: f.text(),\n seo: f.object().fields(g => ({\n metaTitle: g.text(),\n metaDescription: g.text()\n }))\n }))\n }),\n layout: layout => [\n layout.object(\"rows\", l => [\n l.row(\"label\"),\n l.object(\"seo\", inner => [inner.row(\"metaTitle\", \"metaDescription\")])\n ])\n ]\n });\n const field = form.field(\"rows\") as any;\n field.addItem();\n const vm = form.field(\"rows\").vm as IObjectFieldVM;\n const seoVm = asRow(vm.items[0].layout[1]).fields[0] as IObjectFieldVM;\n expect(asRow(seoVm.layout[0]).fields.map(f => f.name)).toEqual([\n \"metaTitle\",\n \"metaDescription\"\n ]);\n });\n\n it(\"registers nested layouts on children added via field.as('object').fields() at runtime\", () => {\n const form = createForm({\n fields: fields => ({\n page: fields.object().fields(f => ({\n title: f.text()\n }))\n }),\n layout: layout => [\n layout.object(\"page\", l => [\n l.row(\"title\"),\n l.object(\"seo\", inner => [inner.row(\"metaTitle\", \"metaDescription\")])\n ])\n ]\n });\n // seo doesn't exist yet; the layout entry is a no-op until we add it.\n form.field(\"page\")\n .as(\"object\")\n .fields(f => ({\n seo: f.object().fields(g => ({\n metaTitle: g.text(),\n metaDescription: g.text()\n }))\n }));\n const pageVm = form.field(\"page\").vm as IObjectFieldVM;\n const seoRow = asRow(pageVm.layout[1]);\n const seoVm = seoRow.fields[0] as IObjectFieldVM;\n expect(asRow(seoVm.layout[0]).fields.map(f => f.name)).toEqual([\n \"metaTitle\",\n \"metaDescription\"\n ]);\n });\n\n it(\"recurses through tabs nested inside an inner layout\", () => {\n const form = createForm({\n fields: fields => ({\n page: fields.object().fields(f => ({\n title: f.text(),\n seo: f.object().fields(g => ({\n metaTitle: g.text(),\n metaDescription: g.text()\n }))\n }))\n }),\n layout: layout => [\n layout.object(\"page\", l => [\n l\n .tabs()\n .tab(\"main\", tab => {\n tab.label(\"Main\").layout(l => [l.row(\"title\")]);\n })\n .tab(\"seoTab\", tab => {\n tab.label(\"SEO\").layout(l => [\n l.object(\"seo\", inner => [\n inner.row(\"metaTitle\", \"metaDescription\")\n ])\n ]);\n })\n ])\n ]\n });\n const seoVm = form.field(\"page.seo\").vm as IObjectFieldVM;\n expect(asRow(seoVm.layout[0]).fields.map(f => f.name)).toEqual([\n \"metaTitle\",\n \"metaDescription\"\n ]);\n });\n\n it(\"resolves tabs inside an inner layout against the children scope\", () => {\n const form = createForm({\n fields: fields => ({\n page: fields.object().fields(f => ({\n title: f.text(),\n body: f.text(),\n seo: f.object().fields(g => ({\n metaTitle: g.text(),\n metaDescription: g.text()\n }))\n }))\n }),\n layout: layout => [\n layout.object(\"page\", l => [\n l\n .tabs(\"pageTabs\")\n .tab(\"general\", tab => {\n tab.label(\"General\").layout(l => [l.row(\"title\"), l.row(\"body\")]);\n })\n .tab(\"seo\", tab => {\n tab.label(\"SEO\").layout(l => [\n l.object(\"seo\", inner => [\n inner.row(\"metaTitle\", \"metaDescription\")\n ])\n ]);\n })\n ])\n ]\n });\n const pageVm = form.field(\"page\").vm as IObjectFieldVM;\n expect(pageVm.layout.length).toBe(1);\n const tabs = pageVm.layout[0] as ITabsNodeVM;\n expect(tabs.type).toBe(\"tabs\");\n expect(tabs.tabs.map(t => t.id)).toEqual([\"general\", \"seo\"]);\n const generalTab = tabs.tabs[0];\n expect(asRow(generalTab.layout[0]).fields.map(f => f.name)).toEqual([\"title\"]);\n expect(asRow(generalTab.layout[1]).fields.map(f => f.name)).toEqual([\"body\"]);\n const seoTab = tabs.tabs[1];\n const seoVm = asRow(seoTab.layout[0]).fields[0] as IObjectFieldVM;\n expect(asRow(seoVm.layout[0]).fields.map(f => f.name)).toEqual([\n \"metaTitle\",\n \"metaDescription\"\n ]);\n });\n });\n\n describe(\"runtime template modification (Phase 8d)\", () => {\n function createSingleTemplatedForm() {\n return createForm({\n fields: fields => ({\n content: fields.object().template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({ heading: f.text() }));\n })\n })\n });\n }\n\n function createListTemplatedForm() {\n return createForm({\n fields: fields => ({\n blocks: fields\n .object()\n .list()\n .template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({ heading: f.text() }));\n })\n .template(\"text\", t => {\n t.label(\"Text\").fields(f => ({ body: f.text() }));\n })\n })\n });\n }\n\n it(\"templates.add appends a template and the picker lists it\", () => {\n const form = createSingleTemplatedForm();\n const field = form.field(\"content\").as(\"object\");\n field.templates.add(\"text\", t => {\n t.label(\"Text\").fields(f => ({ body: f.text() }));\n });\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.availableTemplates.map(t => t.id)).toEqual([\"hero\", \"text\"]);\n });\n\n it(\"templates.add throws on duplicate id\", () => {\n const form = createSingleTemplatedForm();\n const field = form.field(\"content\").as(\"object\");\n expect(() =>\n field.templates.add(\"hero\", t => {\n t.label(\"Other\").fields(f => ({ x: f.text() }));\n })\n ).toThrow(/Duplicate template id \"hero\"/);\n });\n\n it(\"templates.add throws on reserved _templateId\", () => {\n const form = createSingleTemplatedForm();\n const field = form.field(\"content\").as(\"object\");\n expect(() =>\n field.templates.add(\"_templateId\", t => {\n t.label(\"Reserved\").fields(f => ({ x: f.text() }));\n })\n ).toThrow(/reserved/);\n });\n\n it(\"templates.add throws when the template defines a reserved _templateId field\", () => {\n const form = createSingleTemplatedForm();\n const field = form.field(\"content\").as(\"object\");\n expect(() =>\n field.templates.add(\"bad\", t => {\n t.label(\"Bad\").fields(f => ({ _templateId: f.text() }));\n })\n ).toThrow(/reserved field \"_templateId\"/);\n });\n\n it(\"templates.remove removes the template from the picker\", () => {\n const form = createListTemplatedForm();\n const field = form.field(\"blocks\").as(\"object\");\n field.templates.remove(\"text\");\n const vm = form.field(\"blocks\").vm as IObjectFieldVM;\n expect(vm.availableTemplates.map(t => t.id)).toEqual([\"hero\"]);\n });\n\n it(\"templates.remove silently no-ops on unknown id\", () => {\n const form = createListTemplatedForm();\n const field = form.field(\"blocks\").as(\"object\");\n const before = (form.field(\"blocks\").vm as IObjectFieldVM).availableTemplates.length;\n expect(() => field.templates.remove(\"nonExistent\")).not.toThrow();\n const after = (form.field(\"blocks\").vm as IObjectFieldVM).availableTemplates.length;\n expect(after).toBe(before);\n });\n\n it(\"templates.remove clears active template on a single-object field via onChange(null) semantics\", () => {\n const form = createSingleTemplatedForm();\n const field = form.field(\"content\").as(\"object\");\n field.setTemplate(\"hero\");\n expect(field.activeTemplateId).toBe(\"hero\");\n field.templates.remove(\"hero\");\n expect(field.activeTemplateId).toBeNull();\n expect(field.children.size).toBe(0);\n expect(form.field(\"content\").getValue()).toBeNull();\n });\n\n it(\"templates.remove drops list items whose _templateId matches\", () => {\n const form = createListTemplatedForm();\n const field = form.field(\"blocks\").as(\"object\");\n field.addItem(\"hero\", { heading: \"H1\" });\n field.addItem(\"text\", { body: \"B1\" });\n field.addItem(\"hero\", { heading: \"H2\" });\n expect(field.items.length).toBe(3);\n field.templates.remove(\"hero\");\n expect(field.items.length).toBe(1);\n expect(field.items[0].templateId).toBe(\"text\");\n });\n\n it(\"templates.add throws when called on a non-templated object field\", () => {\n const form = createForm({\n fields: fields => ({\n plain: fields.object().fields(f => ({ x: f.text() }))\n })\n });\n const field = form.field(\"plain\").as(\"object\");\n expect(() =>\n field.templates.add(\"x\", t => {\n t.label(\"X\").fields(f => ({ y: f.text() }));\n })\n ).toThrow(/not templated/);\n });\n\n it(\"templates.remove throws when called on a non-templated object field\", () => {\n const form = createForm({\n fields: fields => ({\n plain: fields.object().fields(f => ({ x: f.text() }))\n })\n });\n const field = form.field(\"plain\").as(\"object\");\n expect(() => field.templates.remove(\"anything\")).toThrow(/not templated/);\n });\n\n it(\"orphan layout entry persists silently and is reused when the same template id is re-added\", () => {\n const form = createForm({\n fields: fields => ({\n content: fields.object().template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({ heading: f.text(), subheading: f.text() }));\n })\n }),\n layout: layout => [\n layout.object(\"content\", {\n hero: l => [l.row(\"heading\", \"subheading\")]\n })\n ]\n });\n const field = form.field(\"content\").as(\"object\");\n field.setTemplate(\"hero\");\n const vmBefore = form.field(\"content\").vm as IObjectFieldVM;\n const rowBefore = asRow(vmBefore.layout[0]);\n expect(rowBefore.fields.map(f => f.name)).toEqual([\"heading\", \"subheading\"]);\n\n field.templates.remove(\"hero\");\n field.templates.add(\"hero\", t => {\n t.label(\"Hero v2\").fields(f => ({ heading: f.text(), subheading: f.text() }));\n });\n field.setTemplate(\"hero\");\n\n const vmAfter = form.field(\"content\").vm as IObjectFieldVM;\n const rowAfter = asRow(vmAfter.layout[0]);\n expect(rowAfter.fields.map(f => f.name)).toEqual([\"heading\", \"subheading\"]);\n });\n\n it(\"removing all templates does not emit dev warnings (orphan suppression)\", () => {\n const warn = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n const form = createSingleTemplatedForm();\n const field = form.field(\"content\").as(\"object\");\n field.templates.remove(\"hero\");\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.availableTemplates).toEqual([]);\n expect(warn).not.toHaveBeenCalled();\n warn.mockRestore();\n });\n });\n\n describe(\"requiredWhen (Phase 11)\", () => {\n it(\"makes a field required when the callback returns true\", async () => {\n const form = createForm({\n fields: fields => ({\n plan: fields.text().defaultValue(\"free\"),\n seats: fields\n .text()\n .requiredWhen(f => f.field(\"plan\").getValue() === \"pro\", \"Seats required\")\n })\n });\n\n // plan = free → not required → validation passes\n expect(form.field(\"seats\").vm.required).toBe(false);\n expect(await form.validate()).toBe(true);\n\n // plan = pro → becomes required → empty value fails validation\n form.field(\"plan\").setValue(\"pro\");\n expect(form.field(\"seats\").vm.required).toBe(true);\n expect(await form.validate()).toBe(false);\n expect(form.field(\"seats\").vm.validation.message).toBe(\"Seats required\");\n });\n\n it(\"chains requiredWhen callbacks — first truthy wins\", async () => {\n const form = createForm({\n fields: fields => ({\n plan: fields.text().defaultValue(\"free\"),\n flag: fields.text().defaultValue(\"off\"),\n seats: fields\n .text()\n .requiredWhen(f => f.field(\"plan\").getValue() === \"pro\", \"Pro requires it\")\n .requiredWhen(f => f.field(\"flag\").getValue() === \"on\", \"Flag requires it\")\n })\n });\n\n form.field(\"flag\").setValue(\"on\");\n await form.validate();\n expect(form.field(\"seats\").vm.validation.message).toBe(\"Flag requires it\");\n\n // First-truthy-wins: enable plan too, plan callback runs first.\n form.field(\"plan\").setValue(\"pro\");\n await form.validate();\n expect(form.field(\"seats\").vm.validation.message).toBe(\"Pro requires it\");\n });\n\n it(\"hard .required() always wins over requiredWhen messages\", async () => {\n const form = createForm({\n fields: fields => ({\n seats: fields\n .text()\n .required(\"Always required\")\n .requiredWhen(() => true, \"Conditional message\")\n })\n });\n\n await form.validate();\n expect(form.field(\"seats\").vm.required).toBe(true);\n expect(form.field(\"seats\").vm.validation.message).toBe(\"Always required\");\n });\n\n it(\"modifier-added requiredWhen chains with builder-defined ones\", async () => {\n const form = createForm({\n fields: fields => ({\n plan: fields.text().defaultValue(\"free\"),\n other: fields.text().defaultValue(\"off\"),\n seats: fields\n .text()\n .requiredWhen(f => f.field(\"plan\").getValue() === \"pro\", \"Pro required\")\n })\n });\n\n form.field(\"seats\").addRequiredWhen(\n f => f.field(\"other\").getValue() === \"on\",\n \"Other required\"\n );\n\n // Neither truthy → not required.\n expect(form.field(\"seats\").vm.required).toBe(false);\n\n // Modifier callback truthy.\n form.field(\"other\").setValue(\"on\");\n await form.validate();\n expect(form.field(\"seats\").vm.validation.message).toBe(\"Other required\");\n });\n });\n\n describe(\"computed / computedUntilDirty (Phase 11)\", () => {\n it(\"computed field exposes derived value reactively\", () => {\n const form = createForm({\n fields: fields => ({\n first: fields.text().defaultValue(\"Ada\"),\n last: fields.text().defaultValue(\"Lovelace\"),\n full: fields\n .text()\n .computed(\n f => `${f.field(\"first\").getValue()} ${f.field(\"last\").getValue()}`\n )\n })\n });\n\n expect(form.field(\"full\").getValue()).toBe(\"Ada Lovelace\");\n form.field(\"first\").setValue(\"Grace\");\n expect(form.field(\"full\").getValue()).toBe(\"Grace Lovelace\");\n });\n\n it(\"computed field stays editable but value remains derived\", () => {\n const form = createForm({\n fields: fields => ({\n src: fields.text().defaultValue(\"A\"),\n derived: fields.text().computed(f => f.field(\"src\").getValue())\n })\n });\n\n // Not auto-disabled.\n expect(form.field(\"derived\").vm.disabled).toBe(false);\n\n // User edit doesn't override the computed value.\n form.field(\"derived\").vm.onChange(\"manual override\");\n expect(form.field(\"derived\").getValue()).toBe(\"A\");\n });\n\n it(\"computedUntilDirty switches to manual after first UI edit\", () => {\n const form = createForm({\n fields: fields => ({\n src: fields.text().defaultValue(\"A\"),\n derived: fields\n .text()\n .computedUntilDirty(f => `derived-${f.field(\"src\").getValue()}`)\n })\n });\n\n expect(form.field(\"derived\").getValue()).toBe(\"derived-A\");\n\n form.field(\"derived\").vm.onChange(\"manual\");\n expect(form.field(\"derived\").getValue()).toBe(\"manual\");\n\n // Source changes no longer overwrite manual edit.\n form.field(\"src\").setValue(\"B\");\n expect(form.field(\"derived\").getValue()).toBe(\"manual\");\n });\n\n it(\"computed field still participates in validation\", async () => {\n const form = createForm({\n fields: fields => ({\n src: fields.text().defaultValue(\"\"),\n derived: fields\n .text()\n .required(\"Derived must not be empty\")\n .computed(f => f.field(\"src\").getValue())\n })\n });\n\n const valid = await form.validate();\n expect(valid).toBe(false);\n expect(form.field(\"derived\").vm.validation.message).toBe(\"Derived must not be empty\");\n\n form.field(\"src\").setValue(\"hello\");\n expect(await form.validate()).toBe(true);\n });\n\n it(\"modifier setComputed converts a regular field into a computed one\", () => {\n const form = createForm({\n fields: fields => ({\n src: fields.text().defaultValue(\"X\"),\n derived: fields.text().defaultValue(\"initial\")\n })\n });\n\n form.field(\"derived\").setComputed(f => `from-${f.field(\"src\").getValue()}`);\n\n expect(form.field(\"derived\").getValue()).toBe(\"from-X\");\n form.field(\"src\").setValue(\"Y\");\n expect(form.field(\"derived\").getValue()).toBe(\"from-Y\");\n });\n });\n\n describe('field(\"...\").as(\"object\").fields() (Phase 11)', () => {\n it(\"adds new children to an existing object field at runtime\", () => {\n const form = createForm({\n fields: fields => ({\n profile: fields.object().fields(f => ({\n firstName: f.text().label(\"First\")\n }))\n })\n });\n\n form.field(\"profile\")\n .as(\"object\")\n .fields(f => ({\n lastName: f.text().label(\"Last\")\n }));\n\n form.field(\"profile.firstName\").setValue(\"Ada\");\n form.field(\"profile.lastName\").setValue(\"Lovelace\");\n expect(form.getData()).toEqual({\n profile: { firstName: \"Ada\", lastName: \"Lovelace\" }\n });\n });\n\n it(\"replaces existing children when keys collide\", () => {\n const form = createForm({\n fields: fields => ({\n profile: fields.object().fields(f => ({\n firstName: f.text().label(\"Old\")\n }))\n })\n });\n\n form.field(\"profile\")\n .as(\"object\")\n .fields(f => ({\n firstName: f.text().label(\"New\")\n }));\n\n const profile = form.field(\"profile\").as(\"object\");\n expect(profile.children.get(\"firstName\")?.config.label).toBe(\"New\");\n });\n\n it(\"removes children when factory returns undefined\", () => {\n const form = createForm({\n fields: fields => ({\n profile: fields.object().fields(f => ({\n firstName: f.text(),\n lastName: f.text()\n }))\n })\n });\n\n form.field(\"profile\")\n .as(\"object\")\n .fields(() => ({\n lastName: undefined\n }));\n\n const profile = form.field(\"profile\").as(\"object\");\n expect(profile.children.has(\"lastName\")).toBe(false);\n expect(profile.children.has(\"firstName\")).toBe(true);\n });\n\n it(\"propagates added children to existing list items\", () => {\n const form = createForm({\n fields: fields => ({\n contacts: fields\n .object()\n .list()\n .fields(f => ({\n name: f.text()\n }))\n })\n });\n\n const contacts = form.field(\"contacts\").as(\"object\");\n contacts.addItem({ name: \"Ada\" });\n contacts.addItem({ name: \"Grace\" });\n\n contacts.fields(f => ({\n email: f.text()\n }));\n\n // Existing items now have the new child.\n expect(contacts.items[0].children.has(\"email\")).toBe(true);\n expect(contacts.items[1].children.has(\"email\")).toBe(true);\n\n // Newly added items pick up the child too.\n contacts.addItem({ name: \"Linus\", email: \"linus@example.com\" });\n expect(contacts.items[2].children.get(\"email\")?.getValue()).toBe(\"linus@example.com\");\n });\n\n it(\"throws when called on a templated object field\", () => {\n const form = createForm({\n fields: fields => ({\n block: fields.object().template(\"a\", t => {\n t.label(\"A\").fields(f => ({ x: f.text() }));\n })\n })\n });\n\n expect(() => {\n form.field(\"block\")\n .as(\"object\")\n .fields(f => ({ y: f.text() }));\n }).toThrow(/templated/);\n });\n });\n\n describe(\"form.addRule() (Phase 11)\", () => {\n it(\"runs a Zod schema against getData() and surfaces issues\", async () => {\n const form = createForm({\n fields: fields => ({\n password: fields.text().defaultValue(\"a\"),\n confirm: fields.text().defaultValue(\"b\")\n })\n });\n\n form.addRule(\n z\n .object({\n password: z.string(),\n confirm: z.string()\n })\n .refine(d => d.password === d.confirm, {\n message: \"Passwords must match\",\n path: [\"confirm\"]\n })\n );\n\n const valid = await form.validate();\n expect(valid).toBe(false);\n expect(form.errors.some(e => e.message === \"Passwords must match\")).toBe(true);\n // Error surfaced on per-field validation when path matches.\n expect(form.field(\"confirm\").vm.validation.isValid).toBe(false);\n expect(form.field(\"confirm\").vm.validation.message).toBe(\"Passwords must match\");\n });\n\n it(\"runs an imperative function and merges returned errors\", async () => {\n const form = createForm({\n fields: fields => ({\n age: fields.text().defaultValue(\"17\")\n })\n });\n\n form.addRule(f => {\n if (Number(f.field(\"age\").getValue()) < 18) {\n return [{ path: \"age\", message: \"Must be 18+\" }];\n }\n return [];\n });\n\n expect(await form.validate()).toBe(false);\n expect(form.field(\"age\").vm.validation.message).toBe(\"Must be 18+\");\n\n form.field(\"age\").setValue(\"21\");\n expect(await form.validate()).toBe(true);\n });\n\n it(\"supports async imperative rules\", async () => {\n const form = createForm({\n fields: fields => ({\n name: fields.text().defaultValue(\"taken\")\n })\n });\n\n form.addRule(async f => {\n await Promise.resolve();\n if (f.field(\"name\").getValue() === \"taken\") {\n return [{ path: \"name\", message: \"Already taken\" }];\n }\n return [];\n });\n\n expect(await form.validate()).toBe(false);\n expect(form.field(\"name\").vm.validation.message).toBe(\"Already taken\");\n });\n });\n\n describe(\"form.setLayout() (Phase 11)\", () => {\n it(\"replaces the layout entirely\", () => {\n const form = createForm({\n fields: fields => ({\n a: fields.text(),\n b: fields.text(),\n c: fields.text()\n }),\n layout: layout => [layout.row(\"a\"), layout.row(\"b\"), layout.row(\"c\")]\n });\n\n form.setLayout(layout => [layout.row(\"c\", \"a\")]);\n\n const layout = form.vm.layout;\n expect(layout).toHaveLength(1);\n const row = asRow(layout[0]);\n expect(row.fields.map(f => f.name)).toEqual([\"c\", \"a\"]);\n });\n\n it(\"emits orphan warnings for fields not in the new layout\", () => {\n const warn = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n const form = createForm({\n fields: fields => ({\n a: fields.text(),\n b: fields.text()\n })\n });\n\n warn.mockClear();\n form.setLayout(layout => [layout.row(\"a\")]);\n\n expect(warn).toHaveBeenCalledWith(\n expect.stringContaining('Field \"b\" is not in the layout')\n );\n warn.mockRestore();\n });\n });\n\n describe(\"Phase 10: Advanced Validation\", () => {\n describe(\"field.vm.validating\", () => {\n it(\"should be false initially\", () => {\n const form = createBasicForm();\n expect(form.field(\"title\").vm.validating).toBe(false);\n });\n\n it(\"should be true while async schema validates\", async () => {\n let resolveValidation!: () => void;\n const form = createForm({\n fields: fields => ({\n email: fields.text().schema(\n z.string().refine(async () => {\n await new Promise<void>(r => {\n resolveValidation = r;\n });\n return true;\n })\n )\n })\n });\n form.field(\"email\").setValue(\"test@test.com\");\n\n const promise = form.validate();\n // Allow microtask to enter the async refine\n await new Promise(r => setTimeout(r, 0));\n expect(form.field(\"email\").vm.validating).toBe(true);\n\n resolveValidation();\n await promise;\n expect(form.field(\"email\").vm.validating).toBe(false);\n });\n\n it(\"should be false after sync-only validation\", async () => {\n const form = createForm({\n fields: fields => ({\n name: fields.text().required()\n })\n });\n form.field(\"name\").setValue(\"hello\");\n await form.validate();\n expect(form.field(\"name\").vm.validating).toBe(false);\n });\n });\n\n describe(\"form.submitted\", () => {\n it(\"should be false initially\", () => {\n const form = createBasicForm();\n expect(form.submitted).toBe(false);\n });\n\n it(\"should be true after validate()\", async () => {\n const form = createBasicForm();\n form.field(\"title\").setValue(\"t\");\n form.field(\"path\").setValue(\"/p\");\n await form.validate();\n expect(form.submitted).toBe(true);\n });\n\n it(\"should be true after failed validate()\", async () => {\n const form = createBasicForm();\n await form.validate();\n expect(form.submitted).toBe(true);\n });\n\n it(\"should reset to false on setData()\", async () => {\n const form = createBasicForm();\n form.field(\"title\").setValue(\"t\");\n form.field(\"path\").setValue(\"/p\");\n await form.validate();\n expect(form.submitted).toBe(true);\n\n form.setData({ title: \"new\", path: \"/new\" });\n expect(form.submitted).toBe(false);\n });\n\n it(\"should reset to false on reset()\", async () => {\n const form = createBasicForm();\n form.field(\"title\").setValue(\"t\");\n form.field(\"path\").setValue(\"/p\");\n await form.validate();\n expect(form.submitted).toBe(true);\n\n form.reset();\n expect(form.submitted).toBe(false);\n });\n });\n\n describe(\"validate-on-blur after submit\", () => {\n it(\"should not validate on blur before first submit\", async () => {\n const form = createForm({\n fields: fields => ({\n email: fields.text().required(\"Required\")\n })\n });\n form.field(\"email\").vm.onBlur();\n await new Promise(r => setTimeout(r, 0));\n expect(form.field(\"email\").vm.validation.isValid).toBeNull();\n });\n\n it(\"should validate on blur after first submit\", async () => {\n const form = createForm({\n fields: fields => ({\n email: fields\n .text()\n .required(\"Required\")\n .schema(z.string().email(\"Invalid email\"))\n })\n });\n\n form.field(\"email\").setValue(\"bad\");\n await form.submit();\n expect(form.field(\"email\").vm.validation.isValid).toBe(false);\n\n // Fix the value and blur — should re-validate\n form.field(\"email\").setValue(\"valid@email.com\");\n form.field(\"email\").vm.onBlur();\n await new Promise(r => setTimeout(r, 0));\n expect(form.field(\"email\").vm.validation.isValid).toBe(true);\n });\n\n it(\"should show error on blur for invalid value after submit\", async () => {\n const form = createForm({\n fields: fields => ({\n name: fields.text().required(\"Name is required\")\n })\n });\n\n form.field(\"name\").setValue(\"hello\");\n await form.submit();\n expect(form.field(\"name\").vm.validation.isValid).toBe(true);\n\n // Clear the value and blur — should fail required check\n form.field(\"name\").setValue(\"\");\n form.field(\"name\").vm.onBlur();\n await new Promise(r => setTimeout(r, 0));\n expect(form.field(\"name\").vm.validation.isValid).toBe(false);\n expect(form.field(\"name\").vm.validation.message).toBe(\"Name is required\");\n });\n });\n\n describe(\"validation memoization\", () => {\n it(\"should not re-run schema on blur when value unchanged\", async () => {\n const schemaSpy = vi.fn().mockReturnValue(true);\n const form = createForm({\n fields: fields => ({\n slug: fields.text().schema(z.string().refine(schemaSpy, \"fail\"))\n })\n });\n\n form.field(\"slug\").setValue(\"hello\");\n await form.submit();\n expect(schemaSpy).toHaveBeenCalledTimes(1);\n\n // Blur with same value — should use cache\n form.field(\"slug\").vm.onBlur();\n await new Promise(r => setTimeout(r, 0));\n expect(schemaSpy).toHaveBeenCalledTimes(1);\n });\n\n it(\"should re-run schema on blur when value changed\", async () => {\n const schemaSpy = vi.fn().mockReturnValue(true);\n const form = createForm({\n fields: fields => ({\n slug: fields.text().schema(z.string().refine(schemaSpy, \"fail\"))\n })\n });\n\n form.field(\"slug\").setValue(\"hello\");\n await form.submit();\n expect(schemaSpy).toHaveBeenCalledTimes(1);\n\n // Change value and blur — should re-validate\n form.field(\"slug\").setValue(\"world\");\n form.field(\"slug\").vm.onBlur();\n await new Promise(r => setTimeout(r, 0));\n expect(schemaSpy).toHaveBeenCalledTimes(2);\n });\n\n it(\"should always re-run schema on form.validate()\", async () => {\n const schemaSpy = vi.fn().mockReturnValue(true);\n const form = createForm({\n fields: fields => ({\n slug: fields.text().schema(z.string().refine(schemaSpy, \"fail\"))\n })\n });\n\n form.field(\"slug\").setValue(\"hello\");\n await form.validate();\n expect(schemaSpy).toHaveBeenCalledTimes(1);\n\n // Same value, but form.validate() forces re-validation\n await form.validate();\n expect(schemaSpy).toHaveBeenCalledTimes(2);\n });\n\n it(\"should clear cache on resetValidation()\", async () => {\n const schemaSpy = vi.fn().mockReturnValue(true);\n const form = createForm({\n fields: fields => ({\n slug: fields.text().schema(z.string().refine(schemaSpy, \"fail\"))\n })\n });\n\n form.field(\"slug\").setValue(\"hello\");\n await form.submit();\n expect(schemaSpy).toHaveBeenCalledTimes(1);\n\n // Reset validation — clears cache\n form.field(\"slug\").resetValidation();\n\n // Blur with same value — should re-validate (cache cleared)\n form.field(\"slug\").vm.onBlur();\n await new Promise(r => setTimeout(r, 0));\n expect(schemaSpy).toHaveBeenCalledTimes(2);\n });\n });\n\n describe(\"async validation with z.refine\", () => {\n it(\"should validate async refine on submit\", async () => {\n const form = createForm({\n fields: fields => ({\n slug: fields.text().schema(\n z.string().refine(async value => {\n return value !== \"taken\";\n }, \"This slug is already taken\")\n )\n })\n });\n\n form.field(\"slug\").setValue(\"taken\");\n const result = await form.submit();\n expect(result).toBe(false);\n expect(form.field(\"slug\").vm.validation.isValid).toBe(false);\n expect(form.field(\"slug\").vm.validation.message).toBe(\"This slug is already taken\");\n });\n\n it(\"should pass async refine with valid value\", async () => {\n const form = createForm({\n fields: fields => ({\n slug: fields.text().schema(\n z.string().refine(async value => {\n return value !== \"taken\";\n }, \"This slug is already taken\")\n )\n })\n });\n\n form.field(\"slug\").setValue(\"available\");\n const result = await form.submit();\n expect(result).toEqual({ slug: \"available\" });\n expect(form.field(\"slug\").vm.validation.isValid).toBe(true);\n });\n });\n });\n\n describe(\"normalizeValue\", () => {\n it(\"should coerce string to number on setValue for number fields\", () => {\n const form = createForm({\n fields: fields => ({\n count: fields.number().label(\"Count\")\n })\n });\n\n form.field(\"count\").setValue(\"42\");\n expect(form.field(\"count\").getValue()).toBe(42);\n });\n\n it(\"should normalize invalid values to null for number fields\", () => {\n const form = createForm({\n fields: fields => ({\n count: fields.number().label(\"Count\")\n })\n });\n\n form.field(\"count\").setValue(\"\");\n expect(form.field(\"count\").getValue()).toBe(null);\n\n form.field(\"count\").setValue(null);\n expect(form.field(\"count\").getValue()).toBe(null);\n\n form.field(\"count\").setValue(\"abc\");\n expect(form.field(\"count\").getValue()).toBe(null);\n });\n\n it(\"should store number for number field with options\", () => {\n const form = createForm({\n fields: fields => ({\n tier: fields\n .number()\n .label(\"Tier\")\n .options([\n { label: \"Tier 1\", value: 100 },\n { label: \"Tier 2\", value: 200 }\n ])\n })\n });\n\n form.field(\"tier\").setValue(\"100\");\n expect(form.field(\"tier\").getValue()).toBe(100);\n expect(typeof form.field(\"tier\").getValue()).toBe(\"number\");\n });\n\n it(\"should coerce to boolean on setValue for boolean fields\", () => {\n const form = createForm({\n fields: fields => ({\n active: fields.boolean().label(\"Active\")\n })\n });\n\n form.field(\"active\").setValue(1);\n expect(form.field(\"active\").getValue()).toBe(true);\n\n form.field(\"active\").setValue(0);\n expect(form.field(\"active\").getValue()).toBe(false);\n });\n\n it(\"should apply normalizeValue on setData (via setValueSilent)\", () => {\n const form = createForm({\n fields: fields => ({\n count: fields.number().label(\"Count\")\n })\n });\n\n form.setData({ count: \"42\" } as any);\n expect(form.field(\"count\").getValue()).toBe(42);\n expect(typeof form.field(\"count\").getValue()).toBe(\"number\");\n });\n\n it(\"should not alter text field values\", () => {\n const form = createForm({\n fields: fields => ({\n name: fields.text().label(\"Name\")\n })\n });\n\n form.field(\"name\").setValue(\"hello\");\n expect(form.field(\"name\").getValue()).toBe(\"hello\");\n\n form.field(\"name\").setValue(42);\n expect(form.field(\"name\").getValue()).toBe(42);\n });\n\n it(\"should run normalizeValue before beforeChange\", () => {\n const log: unknown[] = [];\n const form = createForm({\n fields: fields => ({\n count: fields\n .number()\n .label(\"Count\")\n .beforeChange(value => {\n log.push(value);\n return value;\n })\n })\n });\n\n form.field(\"count\").setValue(\"7\");\n expect(log).toEqual([7]);\n });\n });\n\n describe(\"focusField\", () => {\n it(\"should set focusRequested on the target field\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n path: fields.text().label(\"Path\")\n })\n });\n\n form.focusField(\"title\");\n expect(form.field(\"title\").vm.focusRequested).toBe(true);\n expect(form.field(\"path\").vm.focusRequested).toBe(false);\n });\n\n it(\"should activate the correct tab\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n slug: fields.text().label(\"Slug\")\n }),\n layout: layout => [\n layout\n .tabs(\"mainTabs\")\n .tab(\"general\", tab => {\n tab.label(\"General\").layout(l => [l.row(\"title\")]);\n })\n .tab(\"seo\", tab => {\n tab.label(\"SEO\").layout(l => [l.row(\"slug\")]);\n })\n ]\n });\n\n // Initially the first tab is active\n expect((form.vm.layout[0] as any).activeTabId).toBe(\"general\");\n\n form.focusField(\"slug\");\n expect(form.field(\"slug\").vm.focusRequested).toBe(true);\n expect((form.vm.layout[0] as any).activeTabId).toBe(\"seo\");\n });\n\n it(\"should activate nested tabs inside object fields\", () => {\n const form = createForm({\n fields: fields => ({\n page: fields.object().fields(f => ({\n title: f.text().label(\"Title\"),\n metaTitle: f.text().label(\"Meta Title\")\n }))\n }),\n layout: layout => [\n layout.object(\"page\", l => [\n l\n .tabs(\"pageTabs\")\n .tab(\"general\", tab => {\n tab.label(\"General\").layout(l => [l.row(\"title\")]);\n })\n .tab(\"seo\", tab => {\n tab.label(\"SEO\").layout(l => [l.row(\"metaTitle\")]);\n })\n ])\n ]\n });\n\n form.focusField(\"page.metaTitle\");\n expect(form.field(\"page.metaTitle\").vm.focusRequested).toBe(true);\n });\n\n it(\"should clear previous focus when focusing a new field\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n path: fields.text().label(\"Path\")\n })\n });\n\n form.focusField(\"title\");\n expect(form.field(\"title\").vm.focusRequested).toBe(true);\n\n form.focusField(\"path\");\n expect(form.field(\"title\").vm.focusRequested).toBe(false);\n expect(form.field(\"path\").vm.focusRequested).toBe(true);\n });\n\n it(\"should allow renderer to clear focus via clearFocusRequest\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\")\n })\n });\n\n form.focusField(\"title\");\n expect(form.field(\"title\").vm.focusRequested).toBe(true);\n\n form.field(\"title\").vm.clearFocusRequest();\n expect(form.field(\"title\").vm.focusRequested).toBe(false);\n });\n\n it(\"should not throw on unknown field\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\")\n })\n });\n\n expect(() => form.focusField(\"nonexistent\")).not.toThrow();\n });\n\n it(\"should propagate qualifiedName through nested objects\", () => {\n const form = createForm({\n fields: fields => ({\n page: fields.object().fields(f => ({\n seo: f.object().fields(g => ({\n metaTitle: g.text().label(\"Meta Title\")\n }))\n }))\n })\n });\n\n const meta = form.field(\"page.seo.metaTitle\");\n expect(meta.qualifiedName).toBe(\"page.seo.metaTitle\");\n });\n\n it(\"field.focus() should delegate to form.focusField\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n path: fields.text().label(\"Path\")\n }),\n layout: layout => [\n layout\n .tabs(\"tabs\")\n .tab(\"t1\", tab => {\n tab.label(\"T1\").layout(l => [l.row(\"title\")]);\n })\n .tab(\"t2\", tab => {\n tab.label(\"T2\").layout(l => [l.row(\"path\")]);\n })\n ]\n });\n\n form.field(\"path\").focus();\n expect(form.field(\"path\").vm.focusRequested).toBe(true);\n expect((form.vm.layout[0] as any).activeTabId).toBe(\"t2\");\n });\n });\n\n describe(\"primitive list addItem / removeItem\", () => {\n it(\"addItem appends to empty list\", () => {\n const form = createForm({\n fields: f => ({\n tags: f.text().list()\n }),\n layout: l => [l.row(\"tags\")]\n });\n\n const vm = form.field(\"tags\").vm;\n expect(vm.value).toEqual([]);\n\n vm.addItem(\"hello\");\n expect(form.field(\"tags\").vm.value).toEqual([\"hello\"]);\n });\n\n it(\"addItem appends with default null when no value given\", () => {\n const form = createForm({\n fields: f => ({\n tags: f.text().list()\n }),\n layout: l => [l.row(\"tags\")]\n });\n\n form.field(\"tags\").vm.addItem();\n expect(form.field(\"tags\").vm.value).toEqual([null]);\n });\n\n it(\"addItem appends to existing values\", () => {\n const form = createForm({\n fields: f => ({\n tags: f.text().list().defaultValue([\"a\", \"b\"])\n }),\n layout: l => [l.row(\"tags\")]\n });\n\n form.field(\"tags\").vm.addItem(\"c\");\n expect(form.field(\"tags\").vm.value).toEqual([\"a\", \"b\", \"c\"]);\n });\n\n it(\"removeItem removes at index\", () => {\n const form = createForm({\n fields: f => ({\n tags: f.text().list().defaultValue([\"a\", \"b\", \"c\"])\n }),\n layout: l => [l.row(\"tags\")]\n });\n\n form.field(\"tags\").vm.removeItem(1);\n expect(form.field(\"tags\").vm.value).toEqual([\"a\", \"c\"]);\n });\n\n it(\"removeItem from beginning preserves order\", () => {\n const form = createForm({\n fields: f => ({\n tags: f.text().list().defaultValue([\"a\", \"b\", \"c\"])\n }),\n layout: l => [l.row(\"tags\")]\n });\n\n form.field(\"tags\").vm.removeItem(0);\n expect(form.field(\"tags\").vm.value).toEqual([\"b\", \"c\"]);\n });\n\n it(\"operations go through beforeChange pipeline\", () => {\n const log: unknown[] = [];\n const form = createForm({\n fields: f => ({\n tags: f\n .text()\n .list()\n .defaultValue([\"a\"])\n .beforeChange((value, _form) => {\n log.push(value);\n return value;\n })\n }),\n layout: l => [l.row(\"tags\")]\n });\n\n form.field(\"tags\").vm.addItem(\"b\");\n form.field(\"tags\").vm.removeItem(0);\n expect(log).toEqual([[\"a\", \"b\"], [\"b\"]]);\n });\n });\n});\n"],"names":["createForm","config","container","Container","FormModelFeature","FormModelFactory","asRow","node","Error","createBasicForm","fields","describe","it","form","expect","data","valid","z","titleVm","result","vm","fieldVM","layout","warnSpy","vi","console","value","String","received","calls","f","path","str","field","slug","fieldNames","row","updatedNames","undefined","textField","createFormWithLayout","names","modifier","current","stripped","createFormWithTabs","tab","tabsNode","generalTab","generalRow","seoTab","elementNode","createFormWithObject","street","e","createFormWithList","updatedVm","vm1","key0","key1","vm2","createFormWithTemplatedObject","t","createFormWithTemplatedList","i","l","item","buildTemplatedForm","layoutFactory","buildTemplatedListForm","g","inner","pageVm","seoRow","seoVm","h","l1","l2","l3","aVm","bVm","cVm","tabs","createSingleTemplatedForm","createListTemplatedForm","before","after","vmBefore","rowBefore","vmAfter","rowAfter","warn","profile","contacts","d","Number","Promise","resolveValidation","r","promise","setTimeout","schemaSpy","log","meta","_form"],"mappings":"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"}
1
+ {"version":3,"file":"features/formModel/FormModel.test.js","sources":["../../../src/features/formModel/FormModel.test.ts"],"sourcesContent":["import { describe, it, expect, vi } from \"vitest\";\nimport { z } from \"zod\";\nimport { Container } from \"@webiny/di\";\nimport { FormModelFeature } from \"./feature.js\";\nimport {\n FormModelFactory,\n type IFormModel,\n type IFormModelConfig,\n type IRowNodeVM,\n type ITabsNodeVM,\n type IElementNodeVM,\n type IObjectFieldVM,\n type ILayoutNodeAccessHandle,\n type LayoutNodeVM\n} from \"./abstractions.js\";\n\nfunction createForm(config: IFormModelConfig): IFormModel {\n const container = new Container();\n FormModelFeature.register(container);\n return container.resolve(FormModelFactory).create(config);\n}\n\nfunction asRow(node: LayoutNodeVM): IRowNodeVM {\n if (node.type !== \"row\") {\n throw new Error(`Expected row node, got \"${node.type}\"`);\n }\n return node;\n}\n\nfunction createBasicForm() {\n return createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\").required(\"Title is required\"),\n path: fields.text().label(\"Path\").required(\"Path is required\")\n })\n });\n}\n\ndescribe(\"FormModel\", () => {\n describe(\"field creation\", () => {\n it(\"should create fields from builder definitions\", () => {\n const form = createBasicForm();\n expect(form.field(\"title\")).toBeDefined();\n expect(form.field(\"path\")).toBeDefined();\n });\n\n it(\"should throw on unknown field access\", () => {\n const form = createBasicForm();\n expect(() => form.field(\"unknown\")).toThrow('Field \"unknown\" not found.');\n });\n });\n\n describe(\"setValue / getValue\", () => {\n it(\"should set and get field values\", () => {\n const form = createBasicForm();\n form.field(\"title\").setValue(\"Hello\");\n expect(form.field(\"title\").getValue()).toBe(\"Hello\");\n });\n\n it(\"should default to null when no defaultValue is set\", () => {\n const form = createBasicForm();\n expect(form.field(\"title\").getValue()).toBeNull();\n });\n\n it(\"should use defaultValue when provided\", () => {\n const form = createForm({\n fields: fields => ({\n status: fields.text().defaultValue(\"draft\")\n })\n });\n expect(form.field(\"status\").getValue()).toBe(\"draft\");\n });\n });\n\n describe(\"getData / setData\", () => {\n it(\"should return all field values including hidden\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n pageType: fields.text().hidden().defaultValue(\"static\")\n })\n });\n\n form.field(\"title\").setValue(\"Hello\");\n const data = form.getData();\n\n expect(data).toEqual({\n title: \"Hello\",\n pageType: \"static\"\n });\n });\n\n it(\"should hydrate fields from data object\", () => {\n const form = createBasicForm();\n form.setData({ title: \"My Page\", path: \"/my-page\" });\n\n expect(form.field(\"title\").getValue()).toBe(\"My Page\");\n expect(form.field(\"path\").getValue()).toBe(\"/my-page\");\n });\n\n it(\"should ignore unknown fields in setData\", () => {\n const form = createBasicForm();\n form.setData({ title: \"Test\", unknown: \"value\" });\n expect(form.field(\"title\").getValue()).toBe(\"Test\");\n expect(() => form.field(\"unknown\")).toThrow();\n });\n });\n\n describe(\"isDirty\", () => {\n it(\"should not be dirty initially\", () => {\n const form = createBasicForm();\n expect(form.isDirty).toBe(false);\n });\n\n it(\"should be dirty after setValue\", () => {\n const form = createBasicForm();\n form.field(\"title\").setValue(\"Changed\");\n expect(form.isDirty).toBe(true);\n });\n\n it(\"should not be dirty after setData\", () => {\n const form = createBasicForm();\n form.setData({ title: \"Loaded\", path: \"/loaded\" });\n expect(form.isDirty).toBe(false);\n });\n\n it(\"should not be dirty after reverting to baseline value\", () => {\n const form = createBasicForm();\n form.setData({ title: \"Original\", path: \"/original\" });\n form.field(\"title\").setValue(\"Changed\");\n expect(form.isDirty).toBe(true);\n form.field(\"title\").setValue(\"Original\");\n expect(form.isDirty).toBe(false);\n });\n });\n\n describe(\"reset\", () => {\n it(\"should revert values to setData baseline\", () => {\n const form = createBasicForm();\n form.setData({ title: \"Original\", path: \"/original\" });\n form.field(\"title\").setValue(\"Changed\");\n form.reset();\n\n expect(form.field(\"title\").getValue()).toBe(\"Original\");\n expect(form.isDirty).toBe(false);\n });\n\n it(\"should clear validation state on reset\", async () => {\n const form = createBasicForm();\n await form.validate();\n expect(form.errors.length).toBeGreaterThan(0);\n\n form.reset();\n expect(form.errors).toEqual([]);\n expect(form.isValid).toBeNull();\n });\n });\n\n describe(\"validation\", () => {\n it(\"should fail validation for empty required fields\", async () => {\n const form = createBasicForm();\n const valid = await form.validate();\n\n expect(valid).toBe(false);\n expect(form.isValid).toBe(false);\n expect(form.errors).toHaveLength(2);\n expect(form.errors[0].path).toBe(\"title\");\n expect(form.errors[0].message).toBe(\"Title is required\");\n expect(form.errors[1].path).toBe(\"path\");\n });\n\n it(\"should pass validation when required fields have values\", async () => {\n const form = createBasicForm();\n form.field(\"title\").setValue(\"My Page\");\n form.field(\"path\").setValue(\"/my-page\");\n\n const valid = await form.validate();\n\n expect(valid).toBe(true);\n expect(form.isValid).toBe(true);\n expect(form.errors).toHaveLength(0);\n });\n\n it(\"should validate zod schemas\", async () => {\n const form = createForm({\n fields: fields => ({\n email: fields.text().label(\"Email\").schema(z.string().email(\"Invalid email\"))\n })\n });\n\n form.field(\"email\").setValue(\"not-an-email\");\n const valid = await form.validate();\n\n expect(valid).toBe(false);\n expect(form.errors[0].message).toBe(\"Invalid email\");\n });\n\n it(\"should run required check before zod schema\", async () => {\n const form = createForm({\n fields: fields => ({\n email: fields\n .text()\n .label(\"Email\")\n .required(\"Email is required\")\n .schema(z.string().email(\"Invalid email\"))\n })\n });\n\n const valid = await form.validate();\n\n expect(valid).toBe(false);\n expect(form.errors[0].message).toBe(\"Email is required\");\n });\n\n it(\"should expose field-level validation in field.vm\", async () => {\n const form = createBasicForm();\n await form.validate();\n\n const titleVm = form.field(\"title\").vm;\n expect(titleVm.validation.isValid).toBe(false);\n expect(titleVm.validation.message).toBe(\"Title is required\");\n });\n\n it(\"isValid should be null before first validation\", () => {\n const form = createBasicForm();\n expect(form.isValid).toBeNull();\n });\n });\n\n describe(\"submit\", () => {\n it(\"should return data when valid\", async () => {\n const form = createBasicForm();\n form.field(\"title\").setValue(\"My Page\");\n form.field(\"path\").setValue(\"/my-page\");\n\n const result = await form.submit();\n\n expect(result).toEqual({\n title: \"My Page\",\n path: \"/my-page\"\n });\n });\n\n it(\"should return false when invalid\", async () => {\n const form = createBasicForm();\n const result = await form.submit();\n expect(result).toBe(false);\n });\n });\n\n describe(\"vm\", () => {\n it(\"should expose layout with field VMs\", () => {\n const form = createBasicForm();\n const vm = form.vm;\n\n expect(vm.layout).toHaveLength(2);\n expect(vm.layout[0].type).toBe(\"row\");\n expect(asRow(vm.layout[0]).fields[0].name).toBe(\"title\");\n expect(asRow(vm.layout[1]).fields[0].name).toBe(\"path\");\n });\n\n it(\"should exclude hidden fields from layout\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n pageType: fields.text().hidden().defaultValue(\"static\")\n })\n });\n\n const vm = form.vm;\n expect(vm.layout).toHaveLength(1);\n expect(asRow(vm.layout[0]).fields[0].name).toBe(\"title\");\n });\n\n it(\"should expose isDirty and isValid\", () => {\n const form = createBasicForm();\n expect(form.vm.isDirty).toBe(false);\n expect(form.vm.isValid).toBeNull();\n });\n\n it(\"should expose field onChange that calls setValue\", () => {\n const form = createBasicForm();\n const fieldVM = asRow(form.vm.layout[0]).fields[0];\n fieldVM.onChange(\"New Value\");\n expect(form.field(\"title\").getValue()).toBe(\"New Value\");\n });\n });\n\n describe(\"layout\", () => {\n it(\"should generate default layout (one row per non-hidden field)\", () => {\n const form = createBasicForm();\n expect(form.vm.layout).toHaveLength(2);\n });\n\n it(\"should use explicit layout when provided\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n path: fields.text().label(\"Path\")\n }),\n layout: layout => [layout.row(\"title\", \"path\")]\n });\n\n expect(form.vm.layout).toHaveLength(1);\n expect(asRow(form.vm.layout[0]).fields).toHaveLength(2);\n });\n\n it(\"should warn about orphan fields in explicit layout\", () => {\n const warnSpy = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n\n createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n path: fields.text().label(\"Path\")\n }),\n layout: layout => [layout.row(\"title\")]\n });\n\n expect(warnSpy).toHaveBeenCalledWith(\n expect.stringContaining('Field \"path\" is not in the layout')\n );\n\n warnSpy.mockRestore();\n });\n\n it(\"should not warn about hidden orphan fields\", () => {\n const warnSpy = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n\n createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n pageType: fields.text().hidden().defaultValue(\"static\")\n }),\n layout: layout => [layout.row(\"title\")]\n });\n\n expect(warnSpy).not.toHaveBeenCalled();\n warnSpy.mockRestore();\n });\n });\n\n describe(\"beforeChange / afterChange\", () => {\n it(\"should run beforeChange pipeline in order, transforming value\", () => {\n const form = createForm({\n fields: fields => ({\n path: fields\n .text()\n .label(\"Path\")\n .beforeChange(value => String(value).trim())\n .beforeChange(value => String(value).toLowerCase())\n })\n });\n\n form.field(\"path\").setValue(\" Hello World \");\n expect(form.field(\"path\").getValue()).toBe(\"hello world\");\n });\n\n it(\"should run afterChange after value is stored\", () => {\n const received: unknown[] = [];\n const form = createForm({\n fields: fields => ({\n title: fields\n .text()\n .label(\"Title\")\n .afterChange(value => {\n received.push(value);\n })\n })\n });\n\n form.field(\"title\").setValue(\"Hello\");\n expect(received).toEqual([\"Hello\"]);\n });\n\n it(\"should pass transformed value to afterChange\", () => {\n const received: unknown[] = [];\n const form = createForm({\n fields: fields => ({\n path: fields\n .text()\n .label(\"Path\")\n .beforeChange(value => String(value).toLowerCase())\n .afterChange(value => {\n received.push(value);\n })\n })\n });\n\n form.field(\"path\").setValue(\"HELLO\");\n expect(form.field(\"path\").getValue()).toBe(\"hello\");\n expect(received).toEqual([\"hello\"]);\n });\n\n it(\"should not fire afterChange when value does not change (recursion guard)\", () => {\n const calls: string[] = [];\n const form = createForm({\n fields: fields => ({\n title: fields\n .text()\n .label(\"Title\")\n .beforeChange(() => \"constant\")\n .afterChange(() => {\n calls.push(\"afterChange\");\n })\n })\n });\n\n form.field(\"title\").setValue(\"anything\");\n expect(calls).toEqual([\"afterChange\"]);\n expect(form.field(\"title\").getValue()).toBe(\"constant\");\n\n // Setting again — beforeChange still produces \"constant\", which === current value.\n // afterChange should NOT fire.\n form.field(\"title\").setValue(\"something else\");\n expect(calls).toEqual([\"afterChange\"]);\n });\n\n it(\"should not trigger beforeChange or afterChange on setData\", () => {\n const calls: string[] = [];\n const form = createForm({\n fields: fields => ({\n title: fields\n .text()\n .label(\"Title\")\n .beforeChange(value => {\n calls.push(\"before\");\n return value;\n })\n .afterChange(() => {\n calls.push(\"after\");\n })\n })\n });\n\n form.setData({ title: \"Loaded\" });\n expect(calls).toEqual([]);\n expect(form.field(\"title\").getValue()).toBe(\"Loaded\");\n });\n\n it(\"should support cross-field afterChange triggering target field pipeline\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields\n .text()\n .label(\"Title\")\n .afterChange((value, f) => {\n // Auto-generate path from title\n const path = \"/\" + String(value).toLowerCase().replace(/\\s+/g, \"-\");\n f.field(\"path\").setValue(path);\n }),\n path: fields\n .text()\n .label(\"Path\")\n .beforeChange(value => {\n // Ensure path starts with /\n const str = String(value);\n return str.startsWith(\"/\") ? str : \"/\" + str;\n })\n })\n });\n\n form.field(\"title\").setValue(\"Hello World\");\n expect(form.field(\"path\").getValue()).toBe(\"/hello-world\");\n });\n\n it(\"should allow appending callbacks to existing fields at runtime\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\")\n })\n });\n\n const field = form.field(\"title\");\n field.addBeforeChange(value => String(value).toUpperCase());\n field.setValue(\"hello\");\n expect(field.getValue()).toBe(\"HELLO\");\n });\n\n it(\"should chain builder callbacks with runtime-appended callbacks\", () => {\n const form = createForm({\n fields: fields => ({\n path: fields\n .text()\n .label(\"Path\")\n .beforeChange(value => String(value).trim())\n })\n });\n\n // Append another transform at runtime (simulating a modifier)\n form.field(\"path\").addBeforeChange(value => String(value).toLowerCase());\n form.field(\"path\").setValue(\" HELLO \");\n expect(form.field(\"path\").getValue()).toBe(\"hello\");\n });\n\n it(\"should demonstrate title→path with path-dirty tracking\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields\n .text()\n .label(\"Title\")\n .required(\"Title is required\")\n .afterChange((value, f) => {\n // Only auto-generate if path is empty\n if (f.field(\"path\").getValue()) {\n return;\n }\n const slug = String(value)\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n f.field(\"path\").setValue(\"/\" + slug);\n }),\n path: fields\n .text()\n .label(\"Path\")\n .required(\"Path is required\")\n .beforeChange(value => {\n const str = String(value);\n return (\n \"/\" +\n str\n .replace(/^\\//, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9/-]+/g, \"-\")\n .replace(/^-|-$/g, \"\")\n );\n })\n }),\n layout: layout => [layout.row(\"title\"), layout.row(\"path\")]\n });\n\n // Type title → path auto-fills (path was null/empty)\n form.field(\"title\").setValue(\"Hello World\");\n expect(form.field(\"path\").getValue()).toBe(\"/hello-world\");\n\n // Manually edit path → title changes no longer overwrite\n form.field(\"path\").setValue(\"/custom-path\");\n expect(form.field(\"path\").getValue()).toBe(\"/custom-path\");\n\n form.field(\"title\").setValue(\"New Title\");\n // Path still \"/custom-path\" because path is no longer empty\n expect(form.field(\"path\").getValue()).toBe(\"/custom-path\");\n });\n });\n\n describe(\"field with options\", () => {\n it(\"should resolve static options in field VM\", () => {\n const form = createForm({\n fields: fields => ({\n lang: fields\n .text()\n .label(\"Language\")\n .options([\n { label: \"English\", value: \"en\" },\n { label: \"German\", value: \"de\" }\n ])\n })\n });\n\n const fieldVM = asRow(form.vm.layout[0]).fields[0];\n expect(fieldVM.options).toEqual([\n { label: \"English\", value: \"en\" },\n { label: \"German\", value: \"de\" }\n ]);\n });\n\n it(\"should resolve reactive options function in field VM\", () => {\n const form = createForm({\n fields: fields => ({\n lang: fields\n .text()\n .label(\"Language\")\n .options(() => {\n // Dynamic options based on form state\n return [{ label: \"Dynamic\", value: \"dynamic\" }];\n })\n })\n });\n\n const fieldVM = asRow(form.vm.layout[0]).fields[0];\n expect(fieldVM.options).toEqual([{ label: \"Dynamic\", value: \"dynamic\" }]);\n });\n });\n\n describe(\"modifiers (Phase 3)\", () => {\n describe(\"form.fields() — add / replace / remove\", () => {\n it(\"should add a new field via form.fields()\", () => {\n const form = createBasicForm();\n form.fields(fields => ({\n language: fields\n .text()\n .label(\"Language\")\n .options([\n { label: \"English\", value: \"en\" },\n { label: \"German\", value: \"de\" }\n ])\n }));\n\n expect(form.field(\"language\")).toBeDefined();\n expect(form.field(\"language\").type).toBe(\"text\");\n expect(form.getData()).toHaveProperty(\"language\");\n });\n\n it(\"should add a field that appears in getData but not layout until positioned\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\")\n })\n });\n\n form.fields(fields => ({\n description: fields.text().label(\"Description\")\n }));\n\n // Field exists in data\n expect(form.getData()).toHaveProperty(\"description\");\n\n // But not in layout until explicitly positioned\n const fieldNames = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(fieldNames).not.toContain(\"description\");\n\n // Position it\n form.layout(layout => [layout.row(\"description\").after(\"title\")]);\n const updatedNames = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(updatedNames).toEqual([\"title\", \"description\"]);\n });\n\n it(\"should replace an existing field when key matches\", () => {\n const form = createBasicForm();\n form.field(\"title\").setValue(\"Old Value\");\n\n form.fields(fields => ({\n title: fields.text().label(\"Replaced Title\").placeholder(\"New placeholder\")\n }));\n\n // The field is replaced entirely — old value is gone\n expect(form.field(\"title\").config.label).toBe(\"Replaced Title\");\n expect(form.field(\"title\").config.placeholder).toBe(\"New placeholder\");\n expect(form.field(\"title\").getValue()).toBeNull();\n });\n\n it(\"should remove a field via undefined\", () => {\n const form = createBasicForm();\n form.fields(() => ({\n path: undefined\n }));\n\n expect(() => form.field(\"path\")).toThrow('Field \"path\" not found.');\n expect(form.getData()).not.toHaveProperty(\"path\");\n });\n\n it(\"should remove a field via field.remove()\", () => {\n const form = createBasicForm();\n form.field(\"path\").remove();\n\n expect(() => form.field(\"path\")).toThrow('Field \"path\" not found.');\n expect(form.getData()).not.toHaveProperty(\"path\");\n });\n\n it(\"should remove field from layout when removed via field.remove()\", () => {\n const form = createBasicForm();\n expect(form.vm.layout).toHaveLength(2);\n\n form.field(\"path\").remove();\n\n expect(form.vm.layout).toHaveLength(1);\n expect(asRow(form.vm.layout[0]).fields[0].name).toBe(\"title\");\n });\n\n it(\"should handle add + remove in the same fields() call\", () => {\n const form = createBasicForm();\n form.fields(fields => ({\n path: undefined,\n slug: fields.text().label(\"Slug\")\n }));\n\n expect(() => form.field(\"path\")).toThrow();\n expect(form.field(\"slug\")).toBeDefined();\n });\n });\n\n describe(\"form.field().setDisabled()\", () => {\n it(\"should disable a field via setDisabled(true)\", () => {\n const form = createBasicForm();\n form.field(\"title\").setDisabled(true);\n\n expect(form.field(\"title\").vm.disabled).toBe(true);\n });\n\n it(\"should re-enable a field via setDisabled(false)\", () => {\n const form = createBasicForm();\n form.field(\"title\").setDisabled(true);\n form.field(\"title\").setDisabled(false);\n\n expect(form.field(\"title\").vm.disabled).toBe(false);\n });\n });\n\n describe(\"form.field().as() — type narrowing\", () => {\n it(\"should return the field when type matches\", () => {\n const form = createForm({\n fields: fields => ({\n lang: fields\n .text()\n .label(\"Language\")\n .options([{ label: \"English\", value: \"en\" }])\n })\n });\n\n const textField = form.field(\"lang\").as(\"text\");\n expect(textField).toBe(form.field(\"lang\"));\n });\n\n it(\"should throw when type does not match\", () => {\n const form = createBasicForm();\n expect(() => form.field(\"title\").as(\"boolean\")).toThrow(\n 'Field \"title\" is type \"text\", not \"boolean\".'\n );\n });\n });\n\n describe(\"modifier appends callbacks to existing fields\", () => {\n it(\"should append beforeChange to an existing field\", () => {\n const form = createForm({\n fields: fields => ({\n path: fields\n .text()\n .label(\"Path\")\n .beforeChange(value => String(value).trim())\n })\n });\n\n // Modifier appends another transform\n form.field(\"path\").addBeforeChange(value => String(value).toLowerCase());\n\n form.field(\"path\").setValue(\" HELLO \");\n expect(form.field(\"path\").getValue()).toBe(\"hello\");\n });\n\n it(\"should append afterChange to an existing field\", () => {\n const received: unknown[] = [];\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n path: fields.text().label(\"Path\")\n })\n });\n\n // Modifier appends afterChange\n form.field(\"title\").addAfterChange((value, f) => {\n received.push(value);\n f.field(\"path\").setValue(\"/\" + String(value).toLowerCase());\n });\n\n form.field(\"title\").setValue(\"Hello\");\n expect(received).toEqual([\"Hello\"]);\n expect(form.field(\"path\").getValue()).toBe(\"/hello\");\n });\n });\n\n describe(\"layout positional modifiers\", () => {\n function createFormWithLayout() {\n return createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n path: fields.text().label(\"Path\"),\n description: fields.text().label(\"Description\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout.row(\"path\"),\n layout.row(\"description\")\n ]\n });\n }\n\n it(\"should insert a row before a target\", () => {\n const form = createFormWithLayout();\n form.fields(fields => ({\n language: fields.text().label(\"Language\").options([])\n }));\n\n form.layout(layout => [layout.row(\"language\").before(\"path\")]);\n\n const names = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(names).toEqual([\"title\", \"language\", \"path\", \"description\"]);\n });\n\n it(\"should insert a row after a target\", () => {\n const form = createFormWithLayout();\n form.fields(fields => ({\n language: fields.text().label(\"Language\").options([])\n }));\n\n form.layout(layout => [layout.row(\"language\").after(\"path\")]);\n\n const names = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(names).toEqual([\"title\", \"path\", \"language\", \"description\"]);\n });\n\n it(\"should replace a target row\", () => {\n const form = createFormWithLayout();\n form.fields(fields => ({\n slug: fields.text().label(\"Slug\")\n }));\n\n form.layout(layout => [layout.row(\"slug\").replace(\"path\")]);\n\n const names = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(names).toEqual([\"title\", \"slug\", \"description\"]);\n });\n\n it(\"should remove a field from layout\", () => {\n const form = createFormWithLayout();\n\n form.layout(layout => {\n layout.remove(\"path\");\n return [];\n });\n\n const names = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(names).toEqual([\"title\", \"description\"]);\n });\n\n it(\"should append when no position is specified\", () => {\n const form = createFormWithLayout();\n form.fields(fields => ({\n language: fields.text().label(\"Language\").options([])\n }));\n\n form.layout(layout => [layout.row(\"language\")]);\n\n const names = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(names).toEqual([\"title\", \"path\", \"description\", \"language\"]);\n });\n\n it(\"should append when target is not found\", () => {\n const form = createFormWithLayout();\n form.fields(fields => ({\n language: fields.text().label(\"Language\").options([])\n }));\n\n form.layout(layout => [layout.row(\"language\").after(\"nonexistent\")]);\n\n const names = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(names).toEqual([\"title\", \"path\", \"description\", \"language\"]);\n });\n });\n\n describe(\"IFormModifier integration\", () => {\n it(\"should support a full modifier workflow: add field + position in layout + append callbacks\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\").required(\"Title is required\"),\n path: fields\n .text()\n .label(\"Path\")\n .required(\"Path is required\")\n .beforeChange(value => {\n const str = String(value);\n return (\n \"/\" +\n str\n .replace(/^\\//, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9/-]+/g, \"-\")\n .replace(/^-|-$/g, \"\")\n );\n })\n }),\n layout: layout => [layout.row(\"title\"), layout.row(\"path\")]\n });\n\n // Simulate a language modifier\n const modifier = {\n modify(form: IFormModel) {\n // Add language field\n form.fields(fields => ({\n language: fields\n .text()\n .label(\"Language\")\n .options([\n { label: \"English\", value: \"en\" },\n { label: \"German\", value: \"de\" }\n ])\n .afterChange((value, f) => {\n const current = String(f.field(\"path\").getValue() || \"\");\n const stripped = current.replace(/^\\/[a-z]{2}\\//, \"/\");\n if (value && value !== \"en\") {\n f.field(\"path\").setValue(\"/\" + value + stripped);\n } else {\n f.field(\"path\").setValue(stripped);\n }\n })\n }));\n\n // Position after path\n form.layout(layout => [layout.row(\"language\").after(\"path\")]);\n }\n };\n\n modifier.modify(form);\n\n // Verify layout order\n const names = form.vm.layout.map(row => asRow(row).fields[0].name);\n expect(names).toEqual([\"title\", \"path\", \"language\"]);\n\n // Verify language field works\n form.field(\"path\").setValue(\"/demo\");\n form.field(\"language\").setValue(\"de\");\n expect(form.field(\"path\").getValue()).toBe(\"/de/demo\");\n\n // Verify getData includes language\n const data = form.getData();\n expect(data.language).toBe(\"de\");\n });\n });\n });\n\n describe(\"layout system expansion (Phase 5)\", () => {\n describe(\"separator\", () => {\n it(\"should include separator nodes in the resolved layout\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n description: fields.text().label(\"Description\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout.separator(),\n layout.row(\"description\")\n ]\n });\n\n const vm = form.vm;\n expect(vm.layout).toHaveLength(3);\n expect(vm.layout[0].type).toBe(\"row\");\n expect(vm.layout[1].type).toBe(\"separator\");\n expect(vm.layout[2].type).toBe(\"row\");\n });\n\n it(\"should support separator via modifier layout API\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n description: fields.text().label(\"Description\")\n }),\n layout: layout => [layout.row(\"title\"), layout.row(\"description\")]\n });\n\n form.layout(layout => [layout.separator().after(\"title\")]);\n\n expect(form.vm.layout).toHaveLength(3);\n expect(form.vm.layout[1].type).toBe(\"separator\");\n });\n });\n\n describe(\"tabs\", () => {\n function createFormWithTabs() {\n return createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n slug: fields.text().label(\"Slug\"),\n description: fields.text().label(\"Description\"),\n metaTitle: fields.text().label(\"Meta Title\"),\n metaDescription: fields.text().label(\"Meta Description\")\n }),\n layout: layout => [\n layout.row(\"title\", \"slug\"),\n layout\n .tabs(\"settings\")\n .tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"description\")]);\n })\n .tab(\"seo\", tab => {\n tab.label(\"SEO\")\n .description(\"Optimize how this page appears in search\")\n .layout(layout => [\n layout.row(\"metaTitle\"),\n layout.row(\"metaDescription\")\n ]);\n })\n ]\n });\n }\n\n it(\"should resolve tabs layout node with tab definitions\", () => {\n const form = createFormWithTabs();\n const vm = form.vm;\n\n expect(vm.layout).toHaveLength(2);\n expect(vm.layout[0].type).toBe(\"row\");\n expect(vm.layout[1].type).toBe(\"tabs\");\n\n const tabsNode = vm.layout[1] as ITabsNodeVM;\n expect(tabsNode.id).toBe(\"settings\");\n expect(tabsNode.tabs).toHaveLength(2);\n expect(tabsNode.tabs[0].id).toBe(\"general\");\n expect(tabsNode.tabs[0].label).toBe(\"General\");\n expect(tabsNode.tabs[1].id).toBe(\"seo\");\n expect(tabsNode.tabs[1].label).toBe(\"SEO\");\n expect(tabsNode.tabs[1].description).toBe(\n \"Optimize how this page appears in search\"\n );\n });\n\n it(\"should resolve fields inside tab layouts\", () => {\n const form = createFormWithTabs();\n const tabsNode = form.vm.layout[1] as ITabsNodeVM;\n\n const generalTab = tabsNode.tabs[0];\n expect(generalTab.layout).toHaveLength(1);\n expect(generalTab.layout[0].type).toBe(\"row\");\n const generalRow = generalTab.layout[0] as IRowNodeVM;\n expect(generalRow.fields[0].name).toBe(\"description\");\n\n const seoTab = tabsNode.tabs[1];\n expect(seoTab.layout).toHaveLength(2);\n });\n\n it(\"should default activeTabId to the first tab\", () => {\n const form = createFormWithTabs();\n const tabsNode = form.vm.layout[1] as ITabsNodeVM;\n expect(tabsNode.activeTabId).toBe(\"general\");\n });\n\n it(\"should switch active tab via setActiveTab\", () => {\n const form = createFormWithTabs();\n let tabsNode = form.vm.layout[1] as ITabsNodeVM;\n\n tabsNode.setActiveTab(\"seo\");\n\n tabsNode = form.vm.layout[1] as ITabsNodeVM;\n expect(tabsNode.activeTabId).toBe(\"seo\");\n });\n\n it(\"should fall back to first tab when active tab ID is invalid\", () => {\n const form = createFormWithTabs();\n let tabsNode = form.vm.layout[1] as ITabsNodeVM;\n\n tabsNode.setActiveTab(\"nonexistent\");\n\n tabsNode = form.vm.layout[1] as ITabsNodeVM;\n expect(tabsNode.activeTabId).toBe(\"general\");\n });\n\n it(\"should compute hasErrors for tabs based on referenced fields\", async () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\").required(\"Title is required\"),\n metaTitle: fields.text().label(\"Meta Title\").required(\"Required\")\n }),\n layout: layout => [\n layout\n .tabs(\"settings\")\n .tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"title\")]);\n })\n .tab(\"seo\", tab => {\n tab.label(\"SEO\").layout(layout => [layout.row(\"metaTitle\")]);\n })\n ]\n });\n\n // Before validation, no errors\n let tabsNode = form.vm.layout[0] as ITabsNodeVM;\n expect(tabsNode.tabs[0].hasErrors).toBe(false);\n expect(tabsNode.tabs[1].hasErrors).toBe(false);\n\n // Fill only title, leave metaTitle empty\n form.field(\"title\").setValue(\"Hello\");\n await form.validate();\n\n tabsNode = form.vm.layout[0] as ITabsNodeVM;\n expect(tabsNode.tabs[0].hasErrors).toBe(false);\n expect(tabsNode.tabs[1].hasErrors).toBe(true);\n });\n\n it(\"should not warn about fields inside tabs as orphans\", () => {\n const warnSpy = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n\n createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n description: fields.text().label(\"Description\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout.tabs(\"settings\").tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"description\")]);\n })\n ]\n });\n\n expect(warnSpy).not.toHaveBeenCalled();\n warnSpy.mockRestore();\n });\n\n it(\"should return null for tabs with empty tabs array\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\")\n }),\n layout: layout => [layout.row(\"title\"), layout.tabs(\"empty\")]\n });\n\n expect(form.vm.layout).toHaveLength(1);\n expect(form.vm.layout[0].type).toBe(\"row\");\n });\n });\n\n describe(\"element\", () => {\n it(\"should include element nodes in the resolved layout\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout.element(\"usage-stats\", { plan: \"enterprise\" })\n ]\n });\n\n const vm = form.vm;\n expect(vm.layout).toHaveLength(2);\n expect(vm.layout[1].type).toBe(\"element\");\n\n const elementNode = vm.layout[1] as IElementNodeVM;\n expect(elementNode.renderer).toBe(\"usage-stats\");\n expect(elementNode.props).toEqual({ plan: \"enterprise\" });\n });\n\n it(\"should support element without props\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\")\n }),\n layout: layout => [layout.row(\"title\"), layout.element(\"divider\")]\n });\n\n const elementNode = form.vm.layout[1] as IElementNodeVM;\n expect(elementNode.renderer).toBe(\"divider\");\n expect(elementNode.props).toBeUndefined();\n });\n });\n\n describe(\"named layout node access — form.layout(nodeId)\", () => {\n function createFormWithTabs() {\n return createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n description: fields.text().label(\"Description\"),\n metaTitle: fields.text().label(\"Meta Title\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout\n .tabs(\"settings\")\n .tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"description\")]);\n })\n .tab(\"seo\", tab => {\n tab.label(\"SEO\").layout(layout => [layout.row(\"metaTitle\")]);\n })\n ]\n });\n }\n\n it(\"should access a tabs node by ID and add a new tab\", () => {\n const form = createFormWithTabs();\n\n form.fields(fields => ({\n trackingId: fields.text().label(\"Tracking ID\")\n }));\n\n (form.layout(\"settings\") as ILayoutNodeAccessHandle)\n .as(\"tabs\")\n .tab(\"analytics\", tab => {\n tab.label(\"Analytics\").layout(layout => [layout.row(\"trackingId\")]);\n })\n .after(\"seo\");\n\n const tabsNode = form.vm.layout[1] as ITabsNodeVM;\n expect(tabsNode.tabs).toHaveLength(3);\n expect(tabsNode.tabs[2].id).toBe(\"analytics\");\n expect(tabsNode.tabs[2].label).toBe(\"Analytics\");\n });\n\n it(\"should add a tab before an existing tab\", () => {\n const form = createFormWithTabs();\n\n form.fields(fields => ({\n trackingId: fields.text().label(\"Tracking ID\")\n }));\n\n (form.layout(\"settings\") as ILayoutNodeAccessHandle)\n .as(\"tabs\")\n .tab(\"analytics\", tab => {\n tab.label(\"Analytics\").layout(layout => [layout.row(\"trackingId\")]);\n })\n .before(\"seo\");\n\n const tabsNode = form.vm.layout[1] as ITabsNodeVM;\n expect(tabsNode.tabs).toHaveLength(3);\n expect(tabsNode.tabs[0].id).toBe(\"general\");\n expect(tabsNode.tabs[1].id).toBe(\"analytics\");\n expect(tabsNode.tabs[2].id).toBe(\"seo\");\n });\n\n it(\"should throw when accessing a non-existent node ID\", () => {\n const form = createFormWithTabs();\n expect(() =>\n (form.layout(\"nonexistent\") as ILayoutNodeAccessHandle).as(\"tabs\")\n ).toThrow('Layout node \"nonexistent\" not found.');\n });\n });\n\n describe(\"positional modifiers targeting tabs/element nodes\", () => {\n it(\"should insert a row before a tabs node by ID\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n subtitle: fields.text().label(\"Subtitle\"),\n description: fields.text().label(\"Description\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout.tabs(\"settings\").tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"description\")]);\n })\n ]\n });\n\n form.layout(layout => [layout.row(\"subtitle\").before(\"settings\")]);\n\n expect(form.vm.layout).toHaveLength(3);\n expect(form.vm.layout[0].type).toBe(\"row\");\n expect(form.vm.layout[1].type).toBe(\"row\");\n expect(form.vm.layout[2].type).toBe(\"tabs\");\n\n const row = form.vm.layout[1] as IRowNodeVM;\n expect(row.fields[0].name).toBe(\"subtitle\");\n });\n\n it(\"should remove a tabs node by ID\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n description: fields.text().label(\"Description\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout.tabs(\"settings\").tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"description\")]);\n })\n ]\n });\n\n form.layout(layout => {\n layout.remove(\"settings\");\n return [];\n });\n\n expect(form.vm.layout).toHaveLength(1);\n expect(form.vm.layout[0].type).toBe(\"row\");\n });\n\n it(\"should replace a tabs node by ID\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n description: fields.text().label(\"Description\"),\n metaTitle: fields.text().label(\"Meta Title\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout.tabs(\"settings\").tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"description\")]);\n })\n ]\n });\n\n form.layout(layout => [layout.row(\"metaTitle\").replace(\"settings\")]);\n\n expect(form.vm.layout).toHaveLength(2);\n expect(form.vm.layout[0].type).toBe(\"row\");\n expect(form.vm.layout[1].type).toBe(\"row\");\n const row = form.vm.layout[1] as IRowNodeVM;\n expect(row.fields[0].name).toBe(\"metaTitle\");\n });\n });\n\n describe(\"modifier integration with tabs\", () => {\n it(\"should support a full modifier workflow: base form with tabs + modifier adds tab + modifier appends to existing tab\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n description: fields.text().label(\"Description\"),\n metaTitle: fields.text().label(\"Meta Title\")\n }),\n layout: layout => [\n layout.row(\"title\"),\n layout.separator(),\n layout\n .tabs(\"settings\")\n .tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"description\")]);\n })\n .tab(\"seo\", tab => {\n tab.label(\"SEO\").layout(layout => [layout.row(\"metaTitle\")]);\n })\n ]\n });\n\n // Modifier A: add analytics tab\n form.fields(fields => ({\n trackingId: fields.text().label(\"Tracking ID\")\n }));\n\n (form.layout(\"settings\") as ILayoutNodeAccessHandle)\n .as(\"tabs\")\n .tab(\"analytics\", tab => {\n tab.label(\"Analytics\").layout(layout => [layout.row(\"trackingId\")]);\n })\n .after(\"seo\");\n\n // Verify full layout\n const vm = form.vm;\n expect(vm.layout).toHaveLength(3); // row, separator, tabs\n expect(vm.layout[0].type).toBe(\"row\");\n expect(vm.layout[1].type).toBe(\"separator\");\n expect(vm.layout[2].type).toBe(\"tabs\");\n\n const tabsNode = vm.layout[2] as ITabsNodeVM;\n expect(tabsNode.tabs).toHaveLength(3);\n expect(tabsNode.tabs[0].id).toBe(\"general\");\n expect(tabsNode.tabs[1].id).toBe(\"seo\");\n expect(tabsNode.tabs[2].id).toBe(\"analytics\");\n\n // SEO tab has metaTitle\n const seoTab = tabsNode.tabs[1];\n expect(seoTab.layout).toHaveLength(1);\n\n // Verify all fields are in getData\n const data = form.getData();\n expect(data).toHaveProperty(\"trackingId\");\n });\n });\n });\n\n describe(\"object fields (Phase 6)\", () => {\n describe(\"non-list object field\", () => {\n function createFormWithObject() {\n return createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n address: fields\n .object()\n .label(\"Address\")\n .fields(f => ({\n street: f.text().label(\"Street\").required(\"Street is required\"),\n city: f.text().label(\"City\").required(\"City is required\")\n }))\n }),\n layout: layout => [layout.row(\"title\"), layout.row(\"address\")]\n });\n }\n\n it(\"should create an object field with children\", () => {\n const form = createFormWithObject();\n const field = form.field(\"address\");\n expect(field).toBeDefined();\n expect(field.type).toBe(\"object\");\n });\n\n it(\"should access child fields via dot-notation\", () => {\n const form = createFormWithObject();\n const street = form.field(\"address.street\");\n expect(street).toBeDefined();\n expect(street.type).toBe(\"text\");\n });\n\n it(\"should throw on invalid dot-notation\", () => {\n const form = createFormWithObject();\n expect(() => form.field(\"address.zipcode\")).toThrow(\n 'Field \"address.zipcode\" not found.'\n );\n });\n\n it(\"should return nested object from getData\", () => {\n const form = createFormWithObject();\n form.field(\"address.street\").setValue(\"123 Main St\");\n form.field(\"address.city\").setValue(\"Springfield\");\n\n const data = form.getData();\n expect(data.address).toEqual({\n street: \"123 Main St\",\n city: \"Springfield\"\n });\n });\n\n it(\"should hydrate children from setData\", () => {\n const form = createFormWithObject();\n form.setData({\n title: \"Home\",\n address: { street: \"456 Oak Ave\", city: \"Portland\" }\n });\n\n expect(form.field(\"address.street\").getValue()).toBe(\"456 Oak Ave\");\n expect(form.field(\"address.city\").getValue()).toBe(\"Portland\");\n });\n\n it(\"should not be dirty after setData\", () => {\n const form = createFormWithObject();\n form.setData({\n title: \"Home\",\n address: { street: \"456 Oak Ave\", city: \"Portland\" }\n });\n expect(form.isDirty).toBe(false);\n });\n\n it(\"should be dirty after changing a child field\", () => {\n const form = createFormWithObject();\n form.setData({\n title: \"Home\",\n address: { street: \"456 Oak Ave\", city: \"Portland\" }\n });\n form.field(\"address.street\").setValue(\"789 Pine Rd\");\n expect(form.isDirty).toBe(true);\n });\n\n it(\"should validate children recursively\", async () => {\n const form = createFormWithObject();\n const valid = await form.validate();\n\n expect(valid).toBe(false);\n expect(form.errors.length).toBeGreaterThan(0);\n // Parent object is filtered out when children have errors\n expect(form.errors.some(e => e.path === \"address\")).toBe(false);\n expect(form.errors.some(e => e.path === \"address.street\")).toBe(true);\n expect(form.errors.some(e => e.path === \"address.city\")).toBe(true);\n });\n\n it(\"should pass validation when children are valid\", async () => {\n const form = createFormWithObject();\n form.field(\"title\").setValue(\"Home\");\n form.field(\"address.street\").setValue(\"123 Main St\");\n form.field(\"address.city\").setValue(\"Springfield\");\n\n const valid = await form.validate();\n expect(valid).toBe(true);\n });\n\n it(\"should expose IObjectFieldVM from field.vm\", () => {\n const form = createFormWithObject();\n form.field(\"address.street\").setValue(\"123 Main St\");\n form.field(\"address.city\").setValue(\"Springfield\");\n\n const vm = form.field(\"address\").vm as IObjectFieldVM;\n expect(vm.type).toBe(\"object\");\n expect(vm.isList).toBe(false);\n expect(vm.fields).toHaveLength(2);\n expect(vm.fields[0].name).toBe(\"street\");\n expect(vm.fields[0].value).toBe(\"123 Main St\");\n expect(vm.fields[1].name).toBe(\"city\");\n expect(vm.items).toHaveLength(0);\n });\n\n it(\"should render object field in a row via default layout\", () => {\n const form = createForm({\n fields: fields => ({\n address: fields\n .object()\n .label(\"Address\")\n .fields(f => ({\n street: f.text().label(\"Street\"),\n city: f.text().label(\"City\")\n }))\n })\n });\n\n const vm = form.vm;\n expect(vm.layout).toHaveLength(1);\n expect(vm.layout[0].type).toBe(\"row\");\n const row = asRow(vm.layout[0]);\n expect(row.fields[0].type).toBe(\"object\");\n expect(row.fields[0].name).toBe(\"address\");\n });\n\n it(\"should reset to baseline values\", () => {\n const form = createFormWithObject();\n form.setData({\n title: \"Home\",\n address: { street: \"Original St\", city: \"Original City\" }\n });\n\n form.field(\"address.street\").setValue(\"Changed St\");\n expect(form.isDirty).toBe(true);\n\n form.reset();\n expect(form.field(\"address.street\").getValue()).toBe(\"Original St\");\n expect(form.isDirty).toBe(false);\n });\n\n it(\"should submit nested data when valid\", async () => {\n const form = createFormWithObject();\n form.field(\"title\").setValue(\"Home\");\n form.field(\"address.street\").setValue(\"123 Main St\");\n form.field(\"address.city\").setValue(\"Springfield\");\n\n const result = await form.submit();\n expect(result).toEqual({\n title: \"Home\",\n address: {\n street: \"123 Main St\",\n city: \"Springfield\"\n }\n });\n });\n });\n\n describe(\"list object field\", () => {\n function createFormWithList() {\n return createForm({\n fields: fields => ({\n presets: fields\n .object()\n .label(\"Presets\")\n .fields(f => ({\n name: f.text().label(\"Name\").required(\"Name is required\"),\n model: f.text().label(\"Model\").required(\"Model is required\")\n }))\n .list()\n }),\n layout: layout => [layout.row(\"presets\")]\n });\n }\n\n it(\"should create a list object field\", () => {\n const form = createFormWithList();\n const field = form.field(\"presets\");\n expect(field.type).toBe(\"object\");\n });\n\n it(\"should return empty array from getData initially\", () => {\n const form = createFormWithList();\n expect(form.getData().presets).toEqual([]);\n });\n\n it(\"should add items via the field VM\", () => {\n const form = createFormWithList();\n const vm = form.field(\"presets\").vm as IObjectFieldVM;\n expect(vm.isList).toBe(true);\n expect(vm.items).toHaveLength(0);\n\n vm.addItem();\n\n const updatedVm = form.field(\"presets\").vm as IObjectFieldVM;\n expect(updatedVm.items).toHaveLength(1);\n expect(updatedVm.items[0].fields).toHaveLength(2);\n expect(updatedVm.items[0].fields[0].name).toBe(\"name\");\n });\n\n it(\"should hydrate list from setData\", () => {\n const form = createFormWithList();\n form.setData({\n presets: [\n { name: \"Default\", model: \"claude-sonnet\" },\n { name: \"Fast\", model: \"claude-haiku\" }\n ]\n });\n\n const data = form.getData();\n expect(data.presets).toEqual([\n { name: \"Default\", model: \"claude-sonnet\" },\n { name: \"Fast\", model: \"claude-haiku\" }\n ]);\n });\n\n it(\"should expose items via IObjectFieldVM\", () => {\n const form = createFormWithList();\n form.setData({\n presets: [\n { name: \"Default\", model: \"claude-sonnet\" },\n { name: \"Fast\", model: \"claude-haiku\" }\n ]\n });\n\n const vm = form.field(\"presets\").vm as IObjectFieldVM;\n expect(vm.items).toHaveLength(2);\n expect(vm.items[0].fields[0].value).toBe(\"Default\");\n expect(vm.items[1].fields[1].value).toBe(\"claude-haiku\");\n });\n\n it(\"should remove items via item.remove()\", () => {\n const form = createFormWithList();\n form.setData({\n presets: [\n { name: \"Default\", model: \"claude-sonnet\" },\n { name: \"Fast\", model: \"claude-haiku\" }\n ]\n });\n\n const vm = form.field(\"presets\").vm as IObjectFieldVM;\n vm.items[0].remove();\n\n expect(form.getData().presets).toEqual([{ name: \"Fast\", model: \"claude-haiku\" }]);\n });\n\n it(\"should remove items via removeItem()\", () => {\n const form = createFormWithList();\n form.setData({\n presets: [\n { name: \"A\", model: \"a\" },\n { name: \"B\", model: \"b\" },\n { name: \"C\", model: \"c\" }\n ]\n });\n\n const vm = form.field(\"presets\").vm as IObjectFieldVM;\n vm.removeItem(1);\n\n expect(form.getData().presets).toEqual([\n { name: \"A\", model: \"a\" },\n { name: \"C\", model: \"c\" }\n ]);\n });\n\n it(\"should validate all items\", async () => {\n const form = createFormWithList();\n form.setData({\n presets: [\n { name: \"Default\", model: \"claude-sonnet\" },\n { name: \"\", model: \"\" }\n ]\n });\n\n const valid = await form.validate();\n expect(valid).toBe(false);\n });\n\n it(\"should pass validation when all items are valid\", async () => {\n const form = createFormWithList();\n form.setData({\n presets: [\n { name: \"Default\", model: \"claude-sonnet\" },\n { name: \"Fast\", model: \"claude-haiku\" }\n ]\n });\n\n const valid = await form.validate();\n expect(valid).toBe(true);\n });\n\n it(\"should validate with listSchema\", async () => {\n const form = createForm({\n fields: fields => ({\n presets: fields\n .object()\n .label(\"Presets\")\n .fields(f => ({\n name: f.text().label(\"Name\")\n }))\n .list()\n .listSchema(z.array(z.any()).min(2, \"At least 2 presets are required\"))\n })\n });\n\n form.setData({ presets: [{ name: \"Only one\" }] });\n const valid = await form.validate();\n\n expect(valid).toBe(false);\n expect(form.errors[0].message).toBe(\"At least 2 presets are required\");\n });\n\n it(\"should be dirty after adding an item\", () => {\n const form = createFormWithList();\n form.setData({ presets: [] });\n expect(form.isDirty).toBe(false);\n\n const vm = form.field(\"presets\").vm as IObjectFieldVM;\n vm.addItem();\n expect(form.isDirty).toBe(true);\n });\n\n it(\"should have stable keys across re-renders\", () => {\n const form = createFormWithList();\n form.setData({\n presets: [\n { name: \"A\", model: \"a\" },\n { name: \"B\", model: \"b\" }\n ]\n });\n\n const vm1 = form.field(\"presets\").vm as IObjectFieldVM;\n const key0 = vm1.items[0].key;\n const key1 = vm1.items[1].key;\n\n // Re-read VM — keys should be the same\n const vm2 = form.field(\"presets\").vm as IObjectFieldVM;\n expect(vm2.items[0].key).toBe(key0);\n expect(vm2.items[1].key).toBe(key1);\n });\n\n it(\"should pass empty list validation when not required\", async () => {\n const form = createFormWithList();\n const valid = await form.validate();\n expect(valid).toBe(true);\n });\n\n it(\"should modify item field values via VM onChange\", () => {\n const form = createFormWithList();\n form.setData({\n presets: [{ name: \"Default\", model: \"claude-sonnet\" }]\n });\n\n const vm = form.field(\"presets\").vm as IObjectFieldVM;\n vm.items[0].fields[0].onChange(\"Updated\");\n\n expect((form.getData().presets as any[])[0].name).toBe(\"Updated\");\n });\n });\n\n describe(\"hasErrors rollup through tabs\", () => {\n it(\"should report hasErrors in tabs containing object fields\", async () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n address: fields\n .object()\n .label(\"Address\")\n .fields(f => ({\n street: f.text().label(\"Street\").required(\"Required\")\n }))\n }),\n layout: layout => [\n layout\n .tabs(\"settings\")\n .tab(\"general\", tab => {\n tab.label(\"General\").layout(layout => [layout.row(\"title\")]);\n })\n .tab(\"details\", tab => {\n tab.label(\"Details\").layout(layout => [layout.row(\"address\")]);\n })\n ]\n });\n\n form.field(\"title\").setValue(\"Hello\");\n await form.validate();\n\n const tabsNode = form.vm.layout[0] as ITabsNodeVM;\n expect(tabsNode.tabs[0].hasErrors).toBe(false);\n expect(tabsNode.tabs[1].hasErrors).toBe(true);\n });\n });\n });\n\n describe(\"templated object fields (Phase 8a)\", () => {\n function createFormWithTemplatedObject() {\n return createForm({\n fields: fields => ({\n content: fields\n .object()\n .label(\"Content\")\n .template(\"hero\", t => {\n t.label(\"Hero Banner\").fields(f => ({\n heading: f.text().label(\"Heading\").required(\"Required\"),\n image: f.text().label(\"Image\")\n }));\n })\n .template(\"text\", t => {\n t.label(\"Rich Text\").fields(f => ({\n body: f.text().label(\"Body\").required(\"Required\")\n }));\n })\n })\n });\n }\n\n describe(\"shape\", () => {\n it(\"starts with no active template and empty children\", () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n expect(field.isTemplated).toBe(true);\n expect(field.activeTemplateId).toBeNull();\n expect(field.children.size).toBe(0);\n });\n\n it(\"exposes available templates via VM\", () => {\n const form = createFormWithTemplatedObject();\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.isTemplated).toBe(true);\n expect(vm.availableTemplates).toEqual([\n { id: \"hero\", label: \"Hero Banner\" },\n { id: \"text\", label: \"Rich Text\" }\n ]);\n expect(vm.activeTemplateId).toBeNull();\n expect(vm.fields).toEqual([]);\n });\n\n it(\"rejects .fields() alongside .template() at build time\", () => {\n expect(() =>\n createForm({\n fields: fields => ({\n content: fields\n .object()\n .fields(f => ({ x: f.text() }))\n .template(\"a\", t => {\n t.label(\"A\").fields(f => ({ y: f.text() }));\n })\n })\n })\n ).toThrow(/both .fields\\(\\) and .template\\(\\)/);\n });\n\n it(\"rejects duplicate template ids\", () => {\n expect(() =>\n createForm({\n fields: fields => ({\n content: fields\n .object()\n .template(\"a\", t => {\n t.label(\"A1\").fields(f => ({ x: f.text() }));\n })\n .template(\"a\", t => {\n t.label(\"A2\").fields(f => ({ y: f.text() }));\n })\n })\n })\n ).toThrow(/Duplicate template id \"a\"/);\n });\n\n it(\"rejects reserved _templateId as template id\", () => {\n expect(() =>\n createForm({\n fields: fields => ({\n content: fields.object().template(\"_templateId\", t => {\n t.label(\"X\").fields(f => ({ x: f.text() }));\n })\n })\n })\n ).toThrow(/reserved/);\n });\n\n it(\"rejects _templateId as a child field name in a template\", () => {\n expect(() =>\n createForm({\n fields: fields => ({\n content: fields.object().template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({ _templateId: f.text() }));\n })\n })\n })\n ).toThrow(/reserved field \"_templateId\"/);\n });\n\n it(\"allows combining .list() with .template() (Phase 8b)\", () => {\n expect(() =>\n createForm({\n fields: fields => ({\n content: fields\n .object()\n .list()\n .template(\"a\", t => {\n t.label(\"A\").fields(f => ({ x: f.text() }));\n })\n })\n })\n ).not.toThrow();\n });\n });\n\n describe(\"setTemplate / switching\", () => {\n it(\"builds children when a template is selected\", () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n\n field.setTemplate(\"hero\");\n\n expect(field.activeTemplateId).toBe(\"hero\");\n expect(field.children.size).toBe(2);\n expect(form.field(\"content.heading\").type).toBe(\"text\");\n expect(form.field(\"content.image\").type).toBe(\"text\");\n });\n\n it(\"discards data when switching to a different template\", () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n\n field.setTemplate(\"hero\");\n form.field(\"content.heading\").setValue(\"Hello\");\n\n field.setTemplate(\"text\");\n\n expect(field.activeTemplateId).toBe(\"text\");\n expect(form.field(\"content.body\")).toBeDefined();\n expect(() => form.field(\"content.heading\")).toThrow();\n });\n\n it(\"is a no-op when setting the currently active template\", () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n\n field.setTemplate(\"hero\");\n form.field(\"content.heading\").setValue(\"Preserved\");\n field.setTemplate(\"hero\");\n\n expect(form.field(\"content.heading\").getValue()).toBe(\"Preserved\");\n });\n\n it(\"throws when setting an unknown template id\", () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n expect(() => field.setTemplate(\"missing\")).toThrow(/Template \"missing\" not found/);\n });\n\n it(\"wires the form reference on newly created children\", () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n // Setting a value on a child requires _form to be wired for pipelines.\n expect(() => form.field(\"content.heading\").setValue(\"OK\")).not.toThrow();\n });\n });\n\n describe(\"getData / setData\", () => {\n it(\"returns null when no template is active\", () => {\n const form = createFormWithTemplatedObject();\n expect(form.getData().content).toBeNull();\n });\n\n it(\"includes _templateId and child values when active\", () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n form.field(\"content.heading\").setValue(\"Welcome\");\n form.field(\"content.image\").setValue(\"cover.jpg\");\n\n expect(form.getData().content).toEqual({\n _templateId: \"hero\",\n heading: \"Welcome\",\n image: \"cover.jpg\"\n });\n });\n\n it(\"hydrates via setData by reading _templateId\", () => {\n const form = createFormWithTemplatedObject();\n form.setData({\n content: { _templateId: \"text\", body: \"Lorem ipsum\" }\n });\n\n const field = form.field(\"content\") as any;\n expect(field.activeTemplateId).toBe(\"text\");\n expect(form.field(\"content.body\").getValue()).toBe(\"Lorem ipsum\");\n });\n\n it(\"setData with null clears the active template\", () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n form.field(\"content.heading\").setValue(\"X\");\n\n form.setData({ content: null as any });\n\n expect(field.activeTemplateId).toBeNull();\n expect(field.children.size).toBe(0);\n });\n\n it(\"setData ignores unknown template id silently\", () => {\n const form = createFormWithTemplatedObject();\n form.setData({\n content: { _templateId: \"nope\", foo: \"bar\" } as any\n });\n const field = form.field(\"content\") as any;\n expect(field.activeTemplateId).toBeNull();\n });\n });\n\n describe(\"validation\", () => {\n it(\"required templated object fails validation when no template active\", async () => {\n const form = createForm({\n fields: fields => ({\n content: fields\n .object()\n .required(\"Pick a template\")\n .template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({ heading: f.text() }));\n })\n })\n });\n\n const valid = await form.validate();\n expect(valid).toBe(false);\n expect(form.errors.some(e => e.path === \"content\")).toBe(true);\n });\n\n it(\"required templated object passes when template active with valid children\", async () => {\n const form = createForm({\n fields: fields => ({\n content: fields\n .object()\n .required(\"Pick a template\")\n .template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({\n heading: f.text().required(\"Required\")\n }));\n })\n })\n });\n\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n form.field(\"content.heading\").setValue(\"Hi\");\n\n const valid = await form.validate();\n expect(valid).toBe(true);\n });\n\n it(\"validates child fields inside active template\", async () => {\n const form = createFormWithTemplatedObject();\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n // heading is required; no value set\n const valid = await form.validate();\n expect(valid).toBe(false);\n });\n\n it(\"passes validation when object is optional and no template selected\", async () => {\n const form = createFormWithTemplatedObject();\n const valid = await form.validate();\n expect(valid).toBe(true);\n });\n });\n\n describe(\"template visibility\", () => {\n it(\"filters availableTemplates by reactive visible callback\", () => {\n const form = createForm({\n fields: fields => ({\n plan: fields.text().defaultValue(\"free\"),\n content: fields\n .object()\n .template(\"basic\", t => {\n t.label(\"Basic\").fields(f => ({ x: f.text() }));\n })\n .template(\"premium\", t => {\n t.label(\"Premium\")\n .visible(f => f.field(\"plan\").getValue() === \"enterprise\")\n .fields(f => ({ y: f.text() }));\n })\n })\n });\n\n const vm1 = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm1.availableTemplates.map(t => t.id)).toEqual([\"basic\"]);\n\n form.field(\"plan\").setValue(\"enterprise\");\n const vm2 = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm2.availableTemplates.map(t => t.id)).toEqual([\"basic\", \"premium\"]);\n });\n\n it(\"hiding a template does not clear an already-active selection\", () => {\n const form = createForm({\n fields: fields => ({\n plan: fields.text().defaultValue(\"enterprise\"),\n content: fields.object().template(\"premium\", t => {\n t.label(\"Premium\")\n .visible(f => f.field(\"plan\").getValue() === \"enterprise\")\n .fields(f => ({ y: f.text() }));\n })\n })\n });\n\n const field = form.field(\"content\") as any;\n field.setTemplate(\"premium\");\n form.field(\"content.y\").setValue(\"set\");\n\n form.field(\"plan\").setValue(\"free\");\n\n // Template no longer in picker, but active selection + data preserved.\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.availableTemplates).toEqual([]);\n expect(vm.activeTemplateId).toBe(\"premium\");\n expect(form.field(\"content.y\").getValue()).toBe(\"set\");\n });\n });\n\n describe(\"isDirty\", () => {\n it(\"is not dirty after setData with template\", () => {\n const form = createFormWithTemplatedObject();\n form.setData({\n content: { _templateId: \"hero\", heading: \"Hello\", image: \"\" }\n });\n expect(form.isDirty).toBe(false);\n });\n\n it(\"becomes dirty after switching template\", () => {\n const form = createFormWithTemplatedObject();\n form.setData({\n content: { _templateId: \"hero\", heading: \"Hello\", image: \"\" }\n });\n (form.field(\"content\") as any).setTemplate(\"text\");\n expect(form.isDirty).toBe(true);\n });\n });\n });\n\n describe(\"templated list fields (Phase 8b)\", () => {\n function createFormWithTemplatedList() {\n return createForm({\n fields: fields => ({\n sections: fields\n .object()\n .label(\"Sections\")\n .list()\n .template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({\n heading: f.text().required(\"Required\"),\n image: f.text()\n }));\n })\n .template(\"text\", t => {\n t.label(\"Text\").fields(f => ({\n body: f.text().required(\"Required\")\n }));\n })\n })\n });\n }\n\n describe(\"addItem / templateId\", () => {\n it(\"requires a template id when adding to a templated list\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n expect(() => field.addItem()).toThrow(/require a template id/);\n });\n\n it(\"rejects unknown template ids\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n expect(() => field.addItem(\"missing\")).toThrow(/Template \"missing\" not found/);\n });\n\n it(\"adds an item with the picked template's children\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n\n expect(field.items.length).toBe(1);\n expect(field.items[0].templateId).toBe(\"hero\");\n expect(field.items[0].children.has(\"heading\")).toBe(true);\n expect(field.items[0].children.has(\"image\")).toBe(true);\n });\n\n it(\"allows mixing different templates across items\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n field.addItem(\"text\");\n field.addItem(\"hero\");\n\n expect(field.items.map((i: any) => i.templateId)).toEqual([\"hero\", \"text\", \"hero\"]);\n });\n });\n\n describe(\"getData\", () => {\n it(\"includes _templateId per item\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n field.items[0].children.get(\"heading\").setValue(\"Welcome\");\n field.addItem(\"text\");\n field.items[1].children.get(\"body\").setValue(\"Lorem\");\n\n expect(form.getData().sections).toEqual([\n { _templateId: \"hero\", heading: \"Welcome\", image: null },\n { _templateId: \"text\", body: \"Lorem\" }\n ]);\n });\n });\n\n describe(\"setData\", () => {\n it(\"hydrates items by reading each item's _templateId\", () => {\n const form = createFormWithTemplatedList();\n form.setData({\n sections: [\n { _templateId: \"hero\", heading: \"H1\", image: \"img.jpg\" },\n { _templateId: \"text\", body: \"Body copy\" }\n ]\n });\n\n const field = form.field(\"sections\") as any;\n expect(field.items.length).toBe(2);\n expect(field.items[0].templateId).toBe(\"hero\");\n expect(field.items[0].children.get(\"heading\").getValue()).toBe(\"H1\");\n expect(field.items[1].templateId).toBe(\"text\");\n expect(field.items[1].children.get(\"body\").getValue()).toBe(\"Body copy\");\n });\n\n it(\"silently drops items with invalid or missing _templateId\", () => {\n const form = createFormWithTemplatedList();\n form.setData({\n sections: [\n { _templateId: \"hero\", heading: \"Keep\" },\n { _templateId: \"nope\", x: 1 } as any,\n { heading: \"no-id\" } as any,\n null as any,\n { _templateId: \"text\", body: \"Also keep\" }\n ]\n });\n\n const field = form.field(\"sections\") as any;\n expect(field.items.length).toBe(2);\n expect(field.items.map((i: any) => i.templateId)).toEqual([\"hero\", \"text\"]);\n });\n });\n\n describe(\"duplicate / move / remove\", () => {\n it(\"duplicates an item preserving templateId and values\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n field.items[0].children.get(\"heading\").setValue(\"Original\");\n field.items[0].children.get(\"image\").setValue(\"pic.jpg\");\n\n field.duplicateItem(0);\n\n expect(field.items.length).toBe(2);\n expect(field.items[1].templateId).toBe(\"hero\");\n expect(field.items[1].children.get(\"heading\").getValue()).toBe(\"Original\");\n expect(field.items[1].children.get(\"image\").getValue()).toBe(\"pic.jpg\");\n expect(field.items[0].key).not.toBe(field.items[1].key);\n });\n\n it(\"moves items while preserving templateId\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n field.addItem(\"text\");\n field.moveItem(0, 1);\n\n expect(field.items.map((i: any) => i.templateId)).toEqual([\"text\", \"hero\"]);\n });\n\n it(\"removes items by index\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n field.addItem(\"text\");\n field.removeItem(0);\n\n expect(field.items.length).toBe(1);\n expect(field.items[0].templateId).toBe(\"text\");\n });\n });\n\n describe(\"VM\", () => {\n it(\"exposes templateId and duplicate on each item VM\", () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n\n const vm = form.field(\"sections\").vm as IObjectFieldVM;\n expect(vm.items.length).toBe(1);\n expect(vm.items[0].templateId).toBe(\"hero\");\n expect(typeof vm.items[0].duplicate).toBe(\"function\");\n });\n\n it(\"VM addItem(templateId) appends an item\", () => {\n const form = createFormWithTemplatedList();\n const vm = form.field(\"sections\").vm as IObjectFieldVM;\n vm.addItem(\"hero\");\n vm.addItem(\"text\");\n\n const field = form.field(\"sections\") as any;\n expect(field.items.map((i: any) => i.templateId)).toEqual([\"hero\", \"text\"]);\n });\n\n it(\"availableTemplates respects reactive visible() on templated lists\", () => {\n const form = createForm({\n fields: fields => ({\n plan: fields.text().defaultValue(\"free\"),\n sections: fields\n .object()\n .list()\n .template(\"basic\", t => {\n t.label(\"Basic\").fields(f => ({ x: f.text() }));\n })\n .template(\"premium\", t => {\n t.label(\"Premium\")\n .visible(f => f.field(\"plan\").getValue() === \"enterprise\")\n .fields(f => ({ y: f.text() }));\n })\n })\n });\n\n const vm1 = form.field(\"sections\").vm as IObjectFieldVM;\n expect(vm1.availableTemplates.map(t => t.id)).toEqual([\"basic\"]);\n\n form.field(\"plan\").setValue(\"enterprise\");\n const vm2 = form.field(\"sections\").vm as IObjectFieldVM;\n expect(vm2.availableTemplates.map(t => t.id)).toEqual([\"basic\", \"premium\"]);\n });\n });\n\n describe(\"validation\", () => {\n it(\"validates each item's children under its template\", async () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\"); // heading is required, not set\n field.addItem(\"text\");\n field.items[1].children.get(\"body\").setValue(\"ok\");\n\n const valid = await form.validate();\n expect(valid).toBe(false);\n expect(form.errors.some(e => e.path.startsWith(\"sections\"))).toBe(true);\n });\n\n it(\"passes when every item's required fields are filled\", async () => {\n const form = createFormWithTemplatedList();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n field.items[0].children.get(\"heading\").setValue(\"H\");\n field.addItem(\"text\");\n field.items[1].children.get(\"body\").setValue(\"B\");\n\n const valid = await form.validate();\n expect(valid).toBe(true);\n });\n });\n\n describe(\"isDirty\", () => {\n it(\"is not dirty after setData with templated list\", () => {\n const form = createFormWithTemplatedList();\n form.setData({\n sections: [\n { _templateId: \"hero\", heading: \"H\", image: \"\" },\n { _templateId: \"text\", body: \"B\" }\n ]\n });\n expect(form.isDirty).toBe(false);\n });\n\n it(\"becomes dirty after adding an item\", () => {\n const form = createFormWithTemplatedList();\n form.setData({\n sections: [{ _templateId: \"hero\", heading: \"H\", image: \"\" }]\n });\n (form.field(\"sections\") as any).addItem(\"text\");\n expect(form.isDirty).toBe(true);\n });\n });\n });\n\n describe(\"per-template / inner object layouts (Phase 8c)\", () => {\n describe(\"non-templated single object\", () => {\n it(\"defaults to one row per visible child when no layout.object() is registered\", () => {\n const form = createForm({\n fields: fields => ({\n meta: fields.object().fields(f => ({\n a: f.text().label(\"A\"),\n b: f.text().label(\"B\")\n }))\n })\n });\n const vm = form.field(\"meta\").vm as IObjectFieldVM;\n expect(vm.layout.length).toBe(2);\n expect(asRow(vm.layout[0]).fields.map(f => f.name)).toEqual([\"a\"]);\n expect(asRow(vm.layout[1]).fields.map(f => f.name)).toEqual([\"b\"]);\n });\n\n it(\"resolves the registered inner layout against the children\", () => {\n const form = createForm({\n fields: fields => ({\n meta: fields.object().fields(f => ({\n a: f.text().label(\"A\"),\n b: f.text().label(\"B\")\n }))\n }),\n layout: layout => [layout.object(\"meta\", l => [l.row(\"a\", \"b\")])]\n });\n const vm = form.field(\"meta\").vm as IObjectFieldVM;\n expect(vm.layout.length).toBe(1);\n expect(asRow(vm.layout[0]).fields.map(f => f.name)).toEqual([\"a\", \"b\"]);\n });\n\n it(\"throws when a per-template map is passed to a non-templated field\", () => {\n expect(() =>\n createForm({\n fields: fields => ({\n meta: fields.object().fields(f => ({ a: f.text() }))\n }),\n layout: layout => [layout.object(\"meta\", { tplA: l => [l.row(\"a\")] })]\n })\n ).toThrow(/not templated/);\n });\n });\n\n describe(\"non-templated list\", () => {\n it(\"applies the inner layout to every list item\", () => {\n const form = createForm({\n fields: fields => ({\n rows: fields\n .object()\n .list()\n .fields(f => ({ a: f.text(), b: f.text() }))\n }),\n layout: layout => [layout.object(\"rows\", l => [l.row(\"a\", \"b\")])]\n });\n const field = form.field(\"rows\") as any;\n field.addItem();\n field.addItem();\n const vm = field.vm as IObjectFieldVM;\n expect(vm.items.length).toBe(2);\n for (const item of vm.items) {\n expect(item.layout.length).toBe(1);\n expect(asRow(item.layout[0]).fields.map(f => f.name)).toEqual([\"a\", \"b\"]);\n }\n });\n });\n\n describe(\"templated single object\", () => {\n function buildTemplatedForm(layoutFactory?: IFormModelConfig[\"layout\"]) {\n return createForm({\n fields: fields => ({\n content: fields\n .object()\n .template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({\n heading: f.text().label(\"Heading\"),\n subheading: f.text().label(\"Subheading\")\n }));\n })\n .template(\"cta\", t => {\n t.label(\"CTA\").fields(f => ({\n text: f.text().label(\"Text\"),\n url: f.text().label(\"URL\")\n }));\n })\n }),\n layout: layoutFactory\n });\n }\n\n it(\"uses the active template's per-template layout\", () => {\n const form = buildTemplatedForm(layout => [\n layout.object(\"content\", {\n hero: l => [l.row(\"heading\", \"subheading\")],\n cta: l => [l.row(\"text\"), l.row(\"url\")]\n })\n ]);\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n let vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.layout.length).toBe(1);\n expect(asRow(vm.layout[0]).fields.map(f => f.name)).toEqual([\n \"heading\",\n \"subheading\"\n ]);\n\n field.setTemplate(\"cta\");\n vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.layout.length).toBe(2);\n expect(asRow(vm.layout[0]).fields.map(f => f.name)).toEqual([\"text\"]);\n expect(asRow(vm.layout[1]).fields.map(f => f.name)).toEqual([\"url\"]);\n });\n\n it(\"falls back to default one-row-per-child when active template has no entry\", () => {\n const form = buildTemplatedForm(layout => [\n layout.object(\"content\", {\n hero: l => [l.row(\"heading\", \"subheading\")]\n // no entry for \"cta\"\n })\n ]);\n const field = form.field(\"content\") as any;\n field.setTemplate(\"cta\");\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.layout.length).toBe(2);\n expect(asRow(vm.layout[0]).fields.map(f => f.name)).toEqual([\"text\"]);\n expect(asRow(vm.layout[1]).fields.map(f => f.name)).toEqual([\"url\"]);\n });\n\n it(\"returns an empty layout when no template is active\", () => {\n const form = buildTemplatedForm(layout => [\n layout.object(\"content\", { hero: l => [l.row(\"heading\", \"subheading\")] })\n ]);\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.activeTemplateId).toBeNull();\n expect(vm.layout).toEqual([]);\n });\n\n it(\"silently ignores an unknown template id in the layout map\", () => {\n const form = buildTemplatedForm(layout => [\n layout.object(\"content\", {\n hero: l => [l.row(\"heading\", \"subheading\")],\n unknown: l => [l.row(\"xxx\")]\n })\n ]);\n // Should not throw at build time; the unknown entry is dead until referenced.\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(asRow(vm.layout[0]).fields.map(f => f.name)).toEqual([\n \"heading\",\n \"subheading\"\n ]);\n });\n\n it(\"throws when a single LayoutNode[] is passed to a templated field\", () => {\n expect(() =>\n buildTemplatedForm(layout => [layout.object(\"content\", l => [l.row(\"x\")])])\n ).toThrow(/is templated/);\n });\n\n it(\"falls back to default when no layout.object() is registered\", () => {\n const form = buildTemplatedForm();\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.layout.length).toBe(2);\n expect(asRow(vm.layout[0]).fields.map(f => f.name)).toEqual([\"heading\"]);\n expect(asRow(vm.layout[1]).fields.map(f => f.name)).toEqual([\"subheading\"]);\n });\n });\n\n describe(\"templated list\", () => {\n function buildTemplatedListForm() {\n return createForm({\n fields: fields => ({\n sections: fields\n .object()\n .list()\n .template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({\n heading: f.text().label(\"Heading\"),\n subheading: f.text().label(\"Subheading\")\n }));\n })\n .template(\"cta\", t => {\n t.label(\"CTA\").fields(f => ({\n text: f.text().label(\"Text\"),\n url: f.text().label(\"URL\")\n }));\n })\n }),\n layout: layout => [\n layout.object(\"sections\", {\n hero: l => [l.row(\"heading\", \"subheading\")],\n cta: l => [l.row(\"text\"), l.row(\"url\")]\n })\n ]\n });\n }\n\n it(\"each item resolves layout against its own template\", () => {\n const form = buildTemplatedListForm();\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n field.addItem(\"cta\");\n const vm = form.field(\"sections\").vm as IObjectFieldVM;\n expect(vm.items.length).toBe(2);\n expect(asRow(vm.items[0].layout[0]).fields.map(f => f.name)).toEqual([\n \"heading\",\n \"subheading\"\n ]);\n expect(asRow(vm.items[1].layout[0]).fields.map(f => f.name)).toEqual([\"text\"]);\n expect(asRow(vm.items[1].layout[1]).fields.map(f => f.name)).toEqual([\"url\"]);\n });\n\n it(\"hides hidden child fields from the resolved layout row\", () => {\n const form = createForm({\n fields: fields => ({\n content: fields.object().template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({\n heading: f.text(),\n secret: f.text().hidden()\n }));\n })\n }),\n layout: layout => [\n layout.object(\"content\", {\n hero: l => [l.row(\"heading\", \"secret\")]\n })\n ]\n });\n const field = form.field(\"content\") as any;\n field.setTemplate(\"hero\");\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(asRow(vm.layout[0]).fields.map(f => f.name)).toEqual([\"heading\"]);\n });\n });\n\n describe(\"interaction with form.vm.layout\", () => {\n it(\"the form layout exposes a single-field row for the object\", () => {\n const form = createForm({\n fields: fields => ({\n content: fields.object().template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({ heading: f.text() }));\n })\n }),\n layout: layout => [layout.object(\"content\", { hero: l => [l.row(\"heading\")] })]\n });\n const layout = form.vm.layout;\n expect(layout.length).toBe(1);\n const row = asRow(layout[0]);\n expect(row.fields.map(f => f.name)).toEqual([\"content\"]);\n });\n\n it(\"hides the object node from form.vm.layout when the field is not visible\", () => {\n const form = createForm({\n fields: fields => ({\n content: fields\n .object()\n .hidden()\n .template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({ heading: f.text() }));\n })\n }),\n layout: layout => [layout.object(\"content\", { hero: l => [l.row(\"heading\")] })]\n });\n expect(form.vm.layout).toEqual([]);\n });\n });\n });\n\n describe(\"nested object layouts (Phase 8c.1)\", () => {\n it(\"registers layout.object() nested inside another object's inner layout (non-templated)\", () => {\n const form = createForm({\n fields: fields => ({\n page: fields.object().fields(f => ({\n title: f.text(),\n seo: f.object().fields(g => ({\n metaTitle: g.text(),\n metaDescription: g.text()\n }))\n }))\n }),\n layout: layout => [\n layout.object(\"page\", l => [\n l.row(\"title\"),\n l.object(\"seo\", inner => [inner.row(\"metaTitle\", \"metaDescription\")])\n ])\n ]\n });\n const pageVm = form.field(\"page\").vm as IObjectFieldVM;\n const seoRow = asRow(pageVm.layout[1]);\n const seoVm = seoRow.fields[0] as IObjectFieldVM;\n expect(seoVm.layout.length).toBe(1);\n expect(asRow(seoVm.layout[0]).fields.map(f => f.name)).toEqual([\n \"metaTitle\",\n \"metaDescription\"\n ]);\n });\n\n it(\"supports three levels of nesting\", () => {\n const form = createForm({\n fields: fields => ({\n a: fields.object().fields(f => ({\n b: f.object().fields(g => ({\n c: g.object().fields(h => ({\n x: h.text(),\n y: h.text()\n }))\n }))\n }))\n }),\n layout: layout => [\n layout.object(\"a\", l1 => [\n l1.object(\"b\", l2 => [l2.object(\"c\", l3 => [l3.row(\"x\", \"y\")])])\n ])\n ]\n });\n const aVm = form.field(\"a\").vm as IObjectFieldVM;\n const bVm = asRow(aVm.layout[0]).fields[0] as IObjectFieldVM;\n const cVm = asRow(bVm.layout[0]).fields[0] as IObjectFieldVM;\n expect(cVm.layout.length).toBe(1);\n expect(asRow(cVm.layout[0]).fields.map(f => f.name)).toEqual([\"x\", \"y\"]);\n });\n\n it(\"registers nested layouts on a templated single object when its template activates\", () => {\n const form = createForm({\n fields: fields => ({\n block: fields.object().template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({\n heading: f.text(),\n seo: f.object().fields(g => ({\n metaTitle: g.text(),\n metaDescription: g.text()\n }))\n }));\n })\n }),\n layout: layout => [\n layout.object(\"block\", {\n hero: l => [\n l.row(\"heading\"),\n l.object(\"seo\", inner => [inner.row(\"metaTitle\", \"metaDescription\")])\n ]\n })\n ]\n });\n const field = form.field(\"block\") as any;\n field.setTemplate(\"hero\");\n const vm = form.field(\"block\").vm as IObjectFieldVM;\n const seoRow = asRow(vm.layout[1]);\n const seoVm = seoRow.fields[0] as IObjectFieldVM;\n expect(asRow(seoVm.layout[0]).fields.map(f => f.name)).toEqual([\n \"metaTitle\",\n \"metaDescription\"\n ]);\n });\n\n it(\"registers nested layouts on a templated list — each item gets its own\", () => {\n const form = createForm({\n fields: fields => ({\n sections: fields\n .object()\n .list()\n .template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({\n heading: f.text(),\n seo: f.object().fields(g => ({\n metaTitle: g.text(),\n metaDescription: g.text()\n }))\n }));\n })\n }),\n layout: layout => [\n layout.object(\"sections\", {\n hero: l => [\n l.row(\"heading\"),\n l.object(\"seo\", inner => [inner.row(\"metaTitle\", \"metaDescription\")])\n ]\n })\n ]\n });\n const field = form.field(\"sections\") as any;\n field.addItem(\"hero\");\n field.addItem(\"hero\");\n const vm = form.field(\"sections\").vm as IObjectFieldVM;\n expect(vm.items.length).toBe(2);\n for (const item of vm.items) {\n const seoVm = asRow(item.layout[1]).fields[0] as IObjectFieldVM;\n expect(asRow(seoVm.layout[0]).fields.map(f => f.name)).toEqual([\n \"metaTitle\",\n \"metaDescription\"\n ]);\n }\n });\n\n it(\"registers nested layouts on a non-templated list item upon creation\", () => {\n const form = createForm({\n fields: fields => ({\n rows: fields\n .object()\n .list()\n .fields(f => ({\n label: f.text(),\n seo: f.object().fields(g => ({\n metaTitle: g.text(),\n metaDescription: g.text()\n }))\n }))\n }),\n layout: layout => [\n layout.object(\"rows\", l => [\n l.row(\"label\"),\n l.object(\"seo\", inner => [inner.row(\"metaTitle\", \"metaDescription\")])\n ])\n ]\n });\n const field = form.field(\"rows\") as any;\n field.addItem();\n const vm = form.field(\"rows\").vm as IObjectFieldVM;\n const seoVm = asRow(vm.items[0].layout[1]).fields[0] as IObjectFieldVM;\n expect(asRow(seoVm.layout[0]).fields.map(f => f.name)).toEqual([\n \"metaTitle\",\n \"metaDescription\"\n ]);\n });\n\n it(\"registers nested layouts on children added via field.as('object').fields() at runtime\", () => {\n const form = createForm({\n fields: fields => ({\n page: fields.object().fields(f => ({\n title: f.text()\n }))\n }),\n layout: layout => [\n layout.object(\"page\", l => [\n l.row(\"title\"),\n l.object(\"seo\", inner => [inner.row(\"metaTitle\", \"metaDescription\")])\n ])\n ]\n });\n // seo doesn't exist yet; the layout entry is a no-op until we add it.\n form.field(\"page\")\n .as(\"object\")\n .fields(f => ({\n seo: f.object().fields(g => ({\n metaTitle: g.text(),\n metaDescription: g.text()\n }))\n }));\n const pageVm = form.field(\"page\").vm as IObjectFieldVM;\n const seoRow = asRow(pageVm.layout[1]);\n const seoVm = seoRow.fields[0] as IObjectFieldVM;\n expect(asRow(seoVm.layout[0]).fields.map(f => f.name)).toEqual([\n \"metaTitle\",\n \"metaDescription\"\n ]);\n });\n\n it(\"recurses through tabs nested inside an inner layout\", () => {\n const form = createForm({\n fields: fields => ({\n page: fields.object().fields(f => ({\n title: f.text(),\n seo: f.object().fields(g => ({\n metaTitle: g.text(),\n metaDescription: g.text()\n }))\n }))\n }),\n layout: layout => [\n layout.object(\"page\", l => [\n l\n .tabs()\n .tab(\"main\", tab => {\n tab.label(\"Main\").layout(l => [l.row(\"title\")]);\n })\n .tab(\"seoTab\", tab => {\n tab.label(\"SEO\").layout(l => [\n l.object(\"seo\", inner => [\n inner.row(\"metaTitle\", \"metaDescription\")\n ])\n ]);\n })\n ])\n ]\n });\n const seoVm = form.field(\"page.seo\").vm as IObjectFieldVM;\n expect(asRow(seoVm.layout[0]).fields.map(f => f.name)).toEqual([\n \"metaTitle\",\n \"metaDescription\"\n ]);\n });\n\n it(\"resolves tabs inside an inner layout against the children scope\", () => {\n const form = createForm({\n fields: fields => ({\n page: fields.object().fields(f => ({\n title: f.text(),\n body: f.text(),\n seo: f.object().fields(g => ({\n metaTitle: g.text(),\n metaDescription: g.text()\n }))\n }))\n }),\n layout: layout => [\n layout.object(\"page\", l => [\n l\n .tabs(\"pageTabs\")\n .tab(\"general\", tab => {\n tab.label(\"General\").layout(l => [l.row(\"title\"), l.row(\"body\")]);\n })\n .tab(\"seo\", tab => {\n tab.label(\"SEO\").layout(l => [\n l.object(\"seo\", inner => [\n inner.row(\"metaTitle\", \"metaDescription\")\n ])\n ]);\n })\n ])\n ]\n });\n const pageVm = form.field(\"page\").vm as IObjectFieldVM;\n expect(pageVm.layout.length).toBe(1);\n const tabs = pageVm.layout[0] as ITabsNodeVM;\n expect(tabs.type).toBe(\"tabs\");\n expect(tabs.tabs.map(t => t.id)).toEqual([\"general\", \"seo\"]);\n const generalTab = tabs.tabs[0];\n expect(asRow(generalTab.layout[0]).fields.map(f => f.name)).toEqual([\"title\"]);\n expect(asRow(generalTab.layout[1]).fields.map(f => f.name)).toEqual([\"body\"]);\n const seoTab = tabs.tabs[1];\n const seoVm = asRow(seoTab.layout[0]).fields[0] as IObjectFieldVM;\n expect(asRow(seoVm.layout[0]).fields.map(f => f.name)).toEqual([\n \"metaTitle\",\n \"metaDescription\"\n ]);\n });\n });\n\n describe(\"runtime template modification (Phase 8d)\", () => {\n function createSingleTemplatedForm() {\n return createForm({\n fields: fields => ({\n content: fields.object().template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({ heading: f.text() }));\n })\n })\n });\n }\n\n function createListTemplatedForm() {\n return createForm({\n fields: fields => ({\n blocks: fields\n .object()\n .list()\n .template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({ heading: f.text() }));\n })\n .template(\"text\", t => {\n t.label(\"Text\").fields(f => ({ body: f.text() }));\n })\n })\n });\n }\n\n it(\"templates.add appends a template and the picker lists it\", () => {\n const form = createSingleTemplatedForm();\n const field = form.field(\"content\").as(\"object\");\n field.templates.add(\"text\", t => {\n t.label(\"Text\").fields(f => ({ body: f.text() }));\n });\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.availableTemplates.map(t => t.id)).toEqual([\"hero\", \"text\"]);\n });\n\n it(\"templates.add throws on duplicate id\", () => {\n const form = createSingleTemplatedForm();\n const field = form.field(\"content\").as(\"object\");\n expect(() =>\n field.templates.add(\"hero\", t => {\n t.label(\"Other\").fields(f => ({ x: f.text() }));\n })\n ).toThrow(/Duplicate template id \"hero\"/);\n });\n\n it(\"templates.add throws on reserved _templateId\", () => {\n const form = createSingleTemplatedForm();\n const field = form.field(\"content\").as(\"object\");\n expect(() =>\n field.templates.add(\"_templateId\", t => {\n t.label(\"Reserved\").fields(f => ({ x: f.text() }));\n })\n ).toThrow(/reserved/);\n });\n\n it(\"templates.add throws when the template defines a reserved _templateId field\", () => {\n const form = createSingleTemplatedForm();\n const field = form.field(\"content\").as(\"object\");\n expect(() =>\n field.templates.add(\"bad\", t => {\n t.label(\"Bad\").fields(f => ({ _templateId: f.text() }));\n })\n ).toThrow(/reserved field \"_templateId\"/);\n });\n\n it(\"templates.remove removes the template from the picker\", () => {\n const form = createListTemplatedForm();\n const field = form.field(\"blocks\").as(\"object\");\n field.templates.remove(\"text\");\n const vm = form.field(\"blocks\").vm as IObjectFieldVM;\n expect(vm.availableTemplates.map(t => t.id)).toEqual([\"hero\"]);\n });\n\n it(\"templates.remove silently no-ops on unknown id\", () => {\n const form = createListTemplatedForm();\n const field = form.field(\"blocks\").as(\"object\");\n const before = (form.field(\"blocks\").vm as IObjectFieldVM).availableTemplates.length;\n expect(() => field.templates.remove(\"nonExistent\")).not.toThrow();\n const after = (form.field(\"blocks\").vm as IObjectFieldVM).availableTemplates.length;\n expect(after).toBe(before);\n });\n\n it(\"templates.remove clears active template on a single-object field via onChange(null) semantics\", () => {\n const form = createSingleTemplatedForm();\n const field = form.field(\"content\").as(\"object\");\n field.setTemplate(\"hero\");\n expect(field.activeTemplateId).toBe(\"hero\");\n field.templates.remove(\"hero\");\n expect(field.activeTemplateId).toBeNull();\n expect(field.children.size).toBe(0);\n expect(form.field(\"content\").getValue()).toBeNull();\n });\n\n it(\"templates.remove drops list items whose _templateId matches\", () => {\n const form = createListTemplatedForm();\n const field = form.field(\"blocks\").as(\"object\");\n field.addItem(\"hero\", { heading: \"H1\" });\n field.addItem(\"text\", { body: \"B1\" });\n field.addItem(\"hero\", { heading: \"H2\" });\n expect(field.items.length).toBe(3);\n field.templates.remove(\"hero\");\n expect(field.items.length).toBe(1);\n expect(field.items[0].templateId).toBe(\"text\");\n });\n\n it(\"templates.add throws when called on a non-templated object field\", () => {\n const form = createForm({\n fields: fields => ({\n plain: fields.object().fields(f => ({ x: f.text() }))\n })\n });\n const field = form.field(\"plain\").as(\"object\");\n expect(() =>\n field.templates.add(\"x\", t => {\n t.label(\"X\").fields(f => ({ y: f.text() }));\n })\n ).toThrow(/not templated/);\n });\n\n it(\"templates.remove throws when called on a non-templated object field\", () => {\n const form = createForm({\n fields: fields => ({\n plain: fields.object().fields(f => ({ x: f.text() }))\n })\n });\n const field = form.field(\"plain\").as(\"object\");\n expect(() => field.templates.remove(\"anything\")).toThrow(/not templated/);\n });\n\n it(\"orphan layout entry persists silently and is reused when the same template id is re-added\", () => {\n const form = createForm({\n fields: fields => ({\n content: fields.object().template(\"hero\", t => {\n t.label(\"Hero\").fields(f => ({ heading: f.text(), subheading: f.text() }));\n })\n }),\n layout: layout => [\n layout.object(\"content\", {\n hero: l => [l.row(\"heading\", \"subheading\")]\n })\n ]\n });\n const field = form.field(\"content\").as(\"object\");\n field.setTemplate(\"hero\");\n const vmBefore = form.field(\"content\").vm as IObjectFieldVM;\n const rowBefore = asRow(vmBefore.layout[0]);\n expect(rowBefore.fields.map(f => f.name)).toEqual([\"heading\", \"subheading\"]);\n\n field.templates.remove(\"hero\");\n field.templates.add(\"hero\", t => {\n t.label(\"Hero v2\").fields(f => ({ heading: f.text(), subheading: f.text() }));\n });\n field.setTemplate(\"hero\");\n\n const vmAfter = form.field(\"content\").vm as IObjectFieldVM;\n const rowAfter = asRow(vmAfter.layout[0]);\n expect(rowAfter.fields.map(f => f.name)).toEqual([\"heading\", \"subheading\"]);\n });\n\n it(\"removing all templates does not emit dev warnings (orphan suppression)\", () => {\n const warn = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n const form = createSingleTemplatedForm();\n const field = form.field(\"content\").as(\"object\");\n field.templates.remove(\"hero\");\n const vm = form.field(\"content\").vm as IObjectFieldVM;\n expect(vm.availableTemplates).toEqual([]);\n expect(warn).not.toHaveBeenCalled();\n warn.mockRestore();\n });\n });\n\n describe(\"requiredWhen (Phase 11)\", () => {\n it(\"makes a field required when the callback returns true\", async () => {\n const form = createForm({\n fields: fields => ({\n plan: fields.text().defaultValue(\"free\"),\n seats: fields\n .text()\n .requiredWhen(f => f.field(\"plan\").getValue() === \"pro\", \"Seats required\")\n })\n });\n\n // plan = free → not required → validation passes\n expect(form.field(\"seats\").vm.required).toBe(false);\n expect(await form.validate()).toBe(true);\n\n // plan = pro → becomes required → empty value fails validation\n form.field(\"plan\").setValue(\"pro\");\n expect(form.field(\"seats\").vm.required).toBe(true);\n expect(await form.validate()).toBe(false);\n expect(form.field(\"seats\").vm.validation.message).toBe(\"Seats required\");\n });\n\n it(\"chains requiredWhen callbacks — first truthy wins\", async () => {\n const form = createForm({\n fields: fields => ({\n plan: fields.text().defaultValue(\"free\"),\n flag: fields.text().defaultValue(\"off\"),\n seats: fields\n .text()\n .requiredWhen(f => f.field(\"plan\").getValue() === \"pro\", \"Pro requires it\")\n .requiredWhen(f => f.field(\"flag\").getValue() === \"on\", \"Flag requires it\")\n })\n });\n\n form.field(\"flag\").setValue(\"on\");\n await form.validate();\n expect(form.field(\"seats\").vm.validation.message).toBe(\"Flag requires it\");\n\n // First-truthy-wins: enable plan too, plan callback runs first.\n form.field(\"plan\").setValue(\"pro\");\n await form.validate();\n expect(form.field(\"seats\").vm.validation.message).toBe(\"Pro requires it\");\n });\n\n it(\"hard .required() always wins over requiredWhen messages\", async () => {\n const form = createForm({\n fields: fields => ({\n seats: fields\n .text()\n .required(\"Always required\")\n .requiredWhen(() => true, \"Conditional message\")\n })\n });\n\n await form.validate();\n expect(form.field(\"seats\").vm.required).toBe(true);\n expect(form.field(\"seats\").vm.validation.message).toBe(\"Always required\");\n });\n\n it(\"modifier-added requiredWhen chains with builder-defined ones\", async () => {\n const form = createForm({\n fields: fields => ({\n plan: fields.text().defaultValue(\"free\"),\n other: fields.text().defaultValue(\"off\"),\n seats: fields\n .text()\n .requiredWhen(f => f.field(\"plan\").getValue() === \"pro\", \"Pro required\")\n })\n });\n\n form.field(\"seats\").addRequiredWhen(\n f => f.field(\"other\").getValue() === \"on\",\n \"Other required\"\n );\n\n // Neither truthy → not required.\n expect(form.field(\"seats\").vm.required).toBe(false);\n\n // Modifier callback truthy.\n form.field(\"other\").setValue(\"on\");\n await form.validate();\n expect(form.field(\"seats\").vm.validation.message).toBe(\"Other required\");\n });\n });\n\n describe(\"computed / computedUntilDirty (Phase 11)\", () => {\n it(\"computed field exposes derived value reactively\", () => {\n const form = createForm({\n fields: fields => ({\n first: fields.text().defaultValue(\"Ada\"),\n last: fields.text().defaultValue(\"Lovelace\"),\n full: fields\n .text()\n .computed(\n f => `${f.field(\"first\").getValue()} ${f.field(\"last\").getValue()}`\n )\n })\n });\n\n expect(form.field(\"full\").getValue()).toBe(\"Ada Lovelace\");\n form.field(\"first\").setValue(\"Grace\");\n expect(form.field(\"full\").getValue()).toBe(\"Grace Lovelace\");\n });\n\n it(\"computed field stays editable but value remains derived\", () => {\n const form = createForm({\n fields: fields => ({\n src: fields.text().defaultValue(\"A\"),\n derived: fields.text().computed(f => f.field(\"src\").getValue())\n })\n });\n\n // Not auto-disabled.\n expect(form.field(\"derived\").vm.disabled).toBe(false);\n\n // User edit doesn't override the computed value.\n form.field(\"derived\").vm.onChange(\"manual override\");\n expect(form.field(\"derived\").getValue()).toBe(\"A\");\n });\n\n it(\"computedUntilDirty switches to manual after first UI edit\", () => {\n const form = createForm({\n fields: fields => ({\n src: fields.text().defaultValue(\"A\"),\n derived: fields\n .text()\n .computedUntilDirty(f => `derived-${f.field(\"src\").getValue()}`)\n })\n });\n\n expect(form.field(\"derived\").getValue()).toBe(\"derived-A\");\n\n form.field(\"derived\").vm.onChange(\"manual\");\n expect(form.field(\"derived\").getValue()).toBe(\"manual\");\n\n // Source changes no longer overwrite manual edit.\n form.field(\"src\").setValue(\"B\");\n expect(form.field(\"derived\").getValue()).toBe(\"manual\");\n });\n\n it(\"computed field still participates in validation\", async () => {\n const form = createForm({\n fields: fields => ({\n src: fields.text().defaultValue(\"\"),\n derived: fields\n .text()\n .required(\"Derived must not be empty\")\n .computed(f => f.field(\"src\").getValue())\n })\n });\n\n const valid = await form.validate();\n expect(valid).toBe(false);\n expect(form.field(\"derived\").vm.validation.message).toBe(\"Derived must not be empty\");\n\n form.field(\"src\").setValue(\"hello\");\n expect(await form.validate()).toBe(true);\n });\n\n it(\"modifier setComputed converts a regular field into a computed one\", () => {\n const form = createForm({\n fields: fields => ({\n src: fields.text().defaultValue(\"X\"),\n derived: fields.text().defaultValue(\"initial\")\n })\n });\n\n form.field(\"derived\").setComputed(f => `from-${f.field(\"src\").getValue()}`);\n\n expect(form.field(\"derived\").getValue()).toBe(\"from-X\");\n form.field(\"src\").setValue(\"Y\");\n expect(form.field(\"derived\").getValue()).toBe(\"from-Y\");\n });\n });\n\n describe('field(\"...\").as(\"object\").fields() (Phase 11)', () => {\n it(\"adds new children to an existing object field at runtime\", () => {\n const form = createForm({\n fields: fields => ({\n profile: fields.object().fields(f => ({\n firstName: f.text().label(\"First\")\n }))\n })\n });\n\n form.field(\"profile\")\n .as(\"object\")\n .fields(f => ({\n lastName: f.text().label(\"Last\")\n }));\n\n form.field(\"profile.firstName\").setValue(\"Ada\");\n form.field(\"profile.lastName\").setValue(\"Lovelace\");\n expect(form.getData()).toEqual({\n profile: { firstName: \"Ada\", lastName: \"Lovelace\" }\n });\n });\n\n it(\"replaces existing children when keys collide\", () => {\n const form = createForm({\n fields: fields => ({\n profile: fields.object().fields(f => ({\n firstName: f.text().label(\"Old\")\n }))\n })\n });\n\n form.field(\"profile\")\n .as(\"object\")\n .fields(f => ({\n firstName: f.text().label(\"New\")\n }));\n\n const profile = form.field(\"profile\").as(\"object\");\n expect(profile.children.get(\"firstName\")?.config.label).toBe(\"New\");\n });\n\n it(\"removes children when factory returns undefined\", () => {\n const form = createForm({\n fields: fields => ({\n profile: fields.object().fields(f => ({\n firstName: f.text(),\n lastName: f.text()\n }))\n })\n });\n\n form.field(\"profile\")\n .as(\"object\")\n .fields(() => ({\n lastName: undefined\n }));\n\n const profile = form.field(\"profile\").as(\"object\");\n expect(profile.children.has(\"lastName\")).toBe(false);\n expect(profile.children.has(\"firstName\")).toBe(true);\n });\n\n it(\"propagates added children to existing list items\", () => {\n const form = createForm({\n fields: fields => ({\n contacts: fields\n .object()\n .list()\n .fields(f => ({\n name: f.text()\n }))\n })\n });\n\n const contacts = form.field(\"contacts\").as(\"object\");\n contacts.addItem({ name: \"Ada\" });\n contacts.addItem({ name: \"Grace\" });\n\n contacts.fields(f => ({\n email: f.text()\n }));\n\n // Existing items now have the new child.\n expect(contacts.items[0].children.has(\"email\")).toBe(true);\n expect(contacts.items[1].children.has(\"email\")).toBe(true);\n\n // Newly added items pick up the child too.\n contacts.addItem({ name: \"Linus\", email: \"linus@example.com\" });\n expect(contacts.items[2].children.get(\"email\")?.getValue()).toBe(\"linus@example.com\");\n });\n\n it(\"throws when called on a templated object field\", () => {\n const form = createForm({\n fields: fields => ({\n block: fields.object().template(\"a\", t => {\n t.label(\"A\").fields(f => ({ x: f.text() }));\n })\n })\n });\n\n expect(() => {\n form.field(\"block\")\n .as(\"object\")\n .fields(f => ({ y: f.text() }));\n }).toThrow(/templated/);\n });\n });\n\n describe(\"form.addRule() (Phase 11)\", () => {\n it(\"runs a Zod schema against getData() and surfaces issues\", async () => {\n const form = createForm({\n fields: fields => ({\n password: fields.text().defaultValue(\"a\"),\n confirm: fields.text().defaultValue(\"b\")\n })\n });\n\n form.addRule(\n z\n .object({\n password: z.string(),\n confirm: z.string()\n })\n .refine(d => d.password === d.confirm, {\n message: \"Passwords must match\",\n path: [\"confirm\"]\n })\n );\n\n const valid = await form.validate();\n expect(valid).toBe(false);\n expect(form.errors.some(e => e.message === \"Passwords must match\")).toBe(true);\n // Error surfaced on per-field validation when path matches.\n expect(form.field(\"confirm\").vm.validation.isValid).toBe(false);\n expect(form.field(\"confirm\").vm.validation.message).toBe(\"Passwords must match\");\n });\n\n it(\"runs an imperative function and merges returned errors\", async () => {\n const form = createForm({\n fields: fields => ({\n age: fields.text().defaultValue(\"17\")\n })\n });\n\n form.addRule(f => {\n if (Number(f.field(\"age\").getValue()) < 18) {\n return [{ path: \"age\", message: \"Must be 18+\" }];\n }\n return [];\n });\n\n expect(await form.validate()).toBe(false);\n expect(form.field(\"age\").vm.validation.message).toBe(\"Must be 18+\");\n\n form.field(\"age\").setValue(\"21\");\n expect(await form.validate()).toBe(true);\n });\n\n it(\"supports async imperative rules\", async () => {\n const form = createForm({\n fields: fields => ({\n name: fields.text().defaultValue(\"taken\")\n })\n });\n\n form.addRule(async f => {\n await Promise.resolve();\n if (f.field(\"name\").getValue() === \"taken\") {\n return [{ path: \"name\", message: \"Already taken\" }];\n }\n return [];\n });\n\n expect(await form.validate()).toBe(false);\n expect(form.field(\"name\").vm.validation.message).toBe(\"Already taken\");\n });\n });\n\n describe(\"form.setLayout() (Phase 11)\", () => {\n it(\"replaces the layout entirely\", () => {\n const form = createForm({\n fields: fields => ({\n a: fields.text(),\n b: fields.text(),\n c: fields.text()\n }),\n layout: layout => [layout.row(\"a\"), layout.row(\"b\"), layout.row(\"c\")]\n });\n\n form.setLayout(layout => [layout.row(\"c\", \"a\")]);\n\n const layout = form.vm.layout;\n expect(layout).toHaveLength(1);\n const row = asRow(layout[0]);\n expect(row.fields.map(f => f.name)).toEqual([\"c\", \"a\"]);\n });\n\n it(\"emits orphan warnings for fields not in the new layout\", () => {\n const warn = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n const form = createForm({\n fields: fields => ({\n a: fields.text(),\n b: fields.text()\n })\n });\n\n warn.mockClear();\n form.setLayout(layout => [layout.row(\"a\")]);\n\n expect(warn).toHaveBeenCalledWith(\n expect.stringContaining('Field \"b\" is not in the layout')\n );\n warn.mockRestore();\n });\n });\n\n describe(\"Phase 10: Advanced Validation\", () => {\n describe(\"field.vm.validating\", () => {\n it(\"should be false initially\", () => {\n const form = createBasicForm();\n expect(form.field(\"title\").vm.validating).toBe(false);\n });\n\n it(\"should be true while async schema validates\", async () => {\n let resolveValidation!: () => void;\n const form = createForm({\n fields: fields => ({\n email: fields.text().schema(\n z.string().refine(async () => {\n await new Promise<void>(r => {\n resolveValidation = r;\n });\n return true;\n })\n )\n })\n });\n form.field(\"email\").setValue(\"test@test.com\");\n\n const promise = form.validate();\n // Allow microtask to enter the async refine\n await new Promise(r => setTimeout(r, 0));\n expect(form.field(\"email\").vm.validating).toBe(true);\n\n resolveValidation();\n await promise;\n expect(form.field(\"email\").vm.validating).toBe(false);\n });\n\n it(\"should be false after sync-only validation\", async () => {\n const form = createForm({\n fields: fields => ({\n name: fields.text().required()\n })\n });\n form.field(\"name\").setValue(\"hello\");\n await form.validate();\n expect(form.field(\"name\").vm.validating).toBe(false);\n });\n });\n\n describe(\"form.submitted\", () => {\n it(\"should be false initially\", () => {\n const form = createBasicForm();\n expect(form.submitted).toBe(false);\n });\n\n it(\"should be true after validate()\", async () => {\n const form = createBasicForm();\n form.field(\"title\").setValue(\"t\");\n form.field(\"path\").setValue(\"/p\");\n await form.validate();\n expect(form.submitted).toBe(true);\n });\n\n it(\"should be true after failed validate()\", async () => {\n const form = createBasicForm();\n await form.validate();\n expect(form.submitted).toBe(true);\n });\n\n it(\"should reset to false on setData()\", async () => {\n const form = createBasicForm();\n form.field(\"title\").setValue(\"t\");\n form.field(\"path\").setValue(\"/p\");\n await form.validate();\n expect(form.submitted).toBe(true);\n\n form.setData({ title: \"new\", path: \"/new\" });\n expect(form.submitted).toBe(false);\n });\n\n it(\"should reset to false on reset()\", async () => {\n const form = createBasicForm();\n form.field(\"title\").setValue(\"t\");\n form.field(\"path\").setValue(\"/p\");\n await form.validate();\n expect(form.submitted).toBe(true);\n\n form.reset();\n expect(form.submitted).toBe(false);\n });\n });\n\n describe(\"validate-on-blur after submit\", () => {\n it(\"should not validate on blur before first submit\", async () => {\n const form = createForm({\n fields: fields => ({\n email: fields.text().required(\"Required\")\n })\n });\n form.field(\"email\").vm.onBlur();\n await new Promise(r => setTimeout(r, 0));\n expect(form.field(\"email\").vm.validation.isValid).toBeNull();\n });\n\n it(\"should validate on blur after first submit\", async () => {\n const form = createForm({\n fields: fields => ({\n email: fields\n .text()\n .required(\"Required\")\n .schema(z.string().email(\"Invalid email\"))\n })\n });\n\n form.field(\"email\").setValue(\"bad\");\n await form.submit();\n expect(form.field(\"email\").vm.validation.isValid).toBe(false);\n\n // Fix the value and blur — should re-validate\n form.field(\"email\").setValue(\"valid@email.com\");\n form.field(\"email\").vm.onBlur();\n await new Promise(r => setTimeout(r, 0));\n expect(form.field(\"email\").vm.validation.isValid).toBe(true);\n });\n\n it(\"should show error on blur for invalid value after submit\", async () => {\n const form = createForm({\n fields: fields => ({\n name: fields.text().required(\"Name is required\")\n })\n });\n\n form.field(\"name\").setValue(\"hello\");\n await form.submit();\n expect(form.field(\"name\").vm.validation.isValid).toBe(true);\n\n // Clear the value and blur — should fail required check\n form.field(\"name\").setValue(\"\");\n form.field(\"name\").vm.onBlur();\n await new Promise(r => setTimeout(r, 0));\n expect(form.field(\"name\").vm.validation.isValid).toBe(false);\n expect(form.field(\"name\").vm.validation.message).toBe(\"Name is required\");\n });\n });\n\n describe(\"validation memoization\", () => {\n it(\"should not re-run schema on blur when value unchanged\", async () => {\n const schemaSpy = vi.fn().mockReturnValue(true);\n const form = createForm({\n fields: fields => ({\n slug: fields.text().schema(z.string().refine(schemaSpy, \"fail\"))\n })\n });\n\n form.field(\"slug\").setValue(\"hello\");\n await form.submit();\n expect(schemaSpy).toHaveBeenCalledTimes(1);\n\n // Blur with same value — should use cache\n form.field(\"slug\").vm.onBlur();\n await new Promise(r => setTimeout(r, 0));\n expect(schemaSpy).toHaveBeenCalledTimes(1);\n });\n\n it(\"should re-run schema on blur when value changed\", async () => {\n const schemaSpy = vi.fn().mockReturnValue(true);\n const form = createForm({\n fields: fields => ({\n slug: fields.text().schema(z.string().refine(schemaSpy, \"fail\"))\n })\n });\n\n form.field(\"slug\").setValue(\"hello\");\n await form.submit();\n expect(schemaSpy).toHaveBeenCalledTimes(1);\n\n // Change value and blur — should re-validate\n form.field(\"slug\").setValue(\"world\");\n form.field(\"slug\").vm.onBlur();\n await new Promise(r => setTimeout(r, 0));\n expect(schemaSpy).toHaveBeenCalledTimes(2);\n });\n\n it(\"should always re-run schema on form.validate()\", async () => {\n const schemaSpy = vi.fn().mockReturnValue(true);\n const form = createForm({\n fields: fields => ({\n slug: fields.text().schema(z.string().refine(schemaSpy, \"fail\"))\n })\n });\n\n form.field(\"slug\").setValue(\"hello\");\n await form.validate();\n expect(schemaSpy).toHaveBeenCalledTimes(1);\n\n // Same value, but form.validate() forces re-validation\n await form.validate();\n expect(schemaSpy).toHaveBeenCalledTimes(2);\n });\n\n it(\"should clear cache on resetValidation()\", async () => {\n const schemaSpy = vi.fn().mockReturnValue(true);\n const form = createForm({\n fields: fields => ({\n slug: fields.text().schema(z.string().refine(schemaSpy, \"fail\"))\n })\n });\n\n form.field(\"slug\").setValue(\"hello\");\n await form.submit();\n expect(schemaSpy).toHaveBeenCalledTimes(1);\n\n // Reset validation — clears cache\n form.field(\"slug\").resetValidation();\n\n // Blur with same value — should re-validate (cache cleared)\n form.field(\"slug\").vm.onBlur();\n await new Promise(r => setTimeout(r, 0));\n expect(schemaSpy).toHaveBeenCalledTimes(2);\n });\n });\n\n describe(\"async validation with z.refine\", () => {\n it(\"should validate async refine on submit\", async () => {\n const form = createForm({\n fields: fields => ({\n slug: fields.text().schema(\n z.string().refine(async value => {\n return value !== \"taken\";\n }, \"This slug is already taken\")\n )\n })\n });\n\n form.field(\"slug\").setValue(\"taken\");\n const result = await form.submit();\n expect(result).toBe(false);\n expect(form.field(\"slug\").vm.validation.isValid).toBe(false);\n expect(form.field(\"slug\").vm.validation.message).toBe(\"This slug is already taken\");\n });\n\n it(\"should pass async refine with valid value\", async () => {\n const form = createForm({\n fields: fields => ({\n slug: fields.text().schema(\n z.string().refine(async value => {\n return value !== \"taken\";\n }, \"This slug is already taken\")\n )\n })\n });\n\n form.field(\"slug\").setValue(\"available\");\n const result = await form.submit();\n expect(result).toEqual({ slug: \"available\" });\n expect(form.field(\"slug\").vm.validation.isValid).toBe(true);\n });\n });\n });\n\n describe(\"normalizeValue\", () => {\n it(\"should coerce string to number on setValue for number fields\", () => {\n const form = createForm({\n fields: fields => ({\n count: fields.number().label(\"Count\")\n })\n });\n\n form.field(\"count\").setValue(\"42\");\n expect(form.field(\"count\").getValue()).toBe(42);\n });\n\n it(\"should normalize invalid values to null for number fields\", () => {\n const form = createForm({\n fields: fields => ({\n count: fields.number().label(\"Count\")\n })\n });\n\n form.field(\"count\").setValue(\"\");\n expect(form.field(\"count\").getValue()).toBe(null);\n\n form.field(\"count\").setValue(null);\n expect(form.field(\"count\").getValue()).toBe(null);\n\n form.field(\"count\").setValue(\"abc\");\n expect(form.field(\"count\").getValue()).toBe(null);\n });\n\n it(\"should store number for number field with options\", () => {\n const form = createForm({\n fields: fields => ({\n tier: fields\n .number()\n .label(\"Tier\")\n .options([\n { label: \"Tier 1\", value: 100 },\n { label: \"Tier 2\", value: 200 }\n ])\n })\n });\n\n form.field(\"tier\").setValue(\"100\");\n expect(form.field(\"tier\").getValue()).toBe(100);\n expect(typeof form.field(\"tier\").getValue()).toBe(\"number\");\n });\n\n it(\"should coerce to boolean on setValue for boolean fields\", () => {\n const form = createForm({\n fields: fields => ({\n active: fields.boolean().label(\"Active\")\n })\n });\n\n form.field(\"active\").setValue(1);\n expect(form.field(\"active\").getValue()).toBe(true);\n\n form.field(\"active\").setValue(0);\n expect(form.field(\"active\").getValue()).toBe(false);\n });\n\n it(\"should apply normalizeValue on setData (via setValueSilent)\", () => {\n const form = createForm({\n fields: fields => ({\n count: fields.number().label(\"Count\")\n })\n });\n\n form.setData({ count: \"42\" } as any);\n expect(form.field(\"count\").getValue()).toBe(42);\n expect(typeof form.field(\"count\").getValue()).toBe(\"number\");\n });\n\n it(\"should not alter text field values\", () => {\n const form = createForm({\n fields: fields => ({\n name: fields.text().label(\"Name\")\n })\n });\n\n form.field(\"name\").setValue(\"hello\");\n expect(form.field(\"name\").getValue()).toBe(\"hello\");\n\n form.field(\"name\").setValue(42);\n expect(form.field(\"name\").getValue()).toBe(42);\n });\n\n it(\"should run normalizeValue before beforeChange\", () => {\n const log: unknown[] = [];\n const form = createForm({\n fields: fields => ({\n count: fields\n .number()\n .label(\"Count\")\n .beforeChange(value => {\n log.push(value);\n return value;\n })\n })\n });\n\n form.field(\"count\").setValue(\"7\");\n expect(log).toEqual([7]);\n });\n });\n\n describe(\"focusField\", () => {\n it(\"should set focusRequested on the target field\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n path: fields.text().label(\"Path\")\n })\n });\n\n form.focusField(\"title\");\n expect(form.field(\"title\").vm.focusRequested).toBe(true);\n expect(form.field(\"path\").vm.focusRequested).toBe(false);\n });\n\n it(\"should activate the correct tab\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n slug: fields.text().label(\"Slug\")\n }),\n layout: layout => [\n layout\n .tabs(\"mainTabs\")\n .tab(\"general\", tab => {\n tab.label(\"General\").layout(l => [l.row(\"title\")]);\n })\n .tab(\"seo\", tab => {\n tab.label(\"SEO\").layout(l => [l.row(\"slug\")]);\n })\n ]\n });\n\n // Initially the first tab is active\n expect((form.vm.layout[0] as any).activeTabId).toBe(\"general\");\n\n form.focusField(\"slug\");\n expect(form.field(\"slug\").vm.focusRequested).toBe(true);\n expect((form.vm.layout[0] as any).activeTabId).toBe(\"seo\");\n });\n\n it(\"should activate nested tabs inside object fields\", () => {\n const form = createForm({\n fields: fields => ({\n page: fields.object().fields(f => ({\n title: f.text().label(\"Title\"),\n metaTitle: f.text().label(\"Meta Title\")\n }))\n }),\n layout: layout => [\n layout.object(\"page\", l => [\n l\n .tabs(\"pageTabs\")\n .tab(\"general\", tab => {\n tab.label(\"General\").layout(l => [l.row(\"title\")]);\n })\n .tab(\"seo\", tab => {\n tab.label(\"SEO\").layout(l => [l.row(\"metaTitle\")]);\n })\n ])\n ]\n });\n\n form.focusField(\"page.metaTitle\");\n expect(form.field(\"page.metaTitle\").vm.focusRequested).toBe(true);\n });\n\n it(\"should clear previous focus when focusing a new field\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n path: fields.text().label(\"Path\")\n })\n });\n\n form.focusField(\"title\");\n expect(form.field(\"title\").vm.focusRequested).toBe(true);\n\n form.focusField(\"path\");\n expect(form.field(\"title\").vm.focusRequested).toBe(false);\n expect(form.field(\"path\").vm.focusRequested).toBe(true);\n });\n\n it(\"should allow renderer to clear focus via clearFocusRequest\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\")\n })\n });\n\n form.focusField(\"title\");\n expect(form.field(\"title\").vm.focusRequested).toBe(true);\n\n form.field(\"title\").vm.clearFocusRequest();\n expect(form.field(\"title\").vm.focusRequested).toBe(false);\n });\n\n it(\"should not throw on unknown field\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\")\n })\n });\n\n expect(() => form.focusField(\"nonexistent\")).not.toThrow();\n });\n\n it(\"should propagate qualifiedName through nested objects\", () => {\n const form = createForm({\n fields: fields => ({\n page: fields.object().fields(f => ({\n seo: f.object().fields(g => ({\n metaTitle: g.text().label(\"Meta Title\")\n }))\n }))\n })\n });\n\n const meta = form.field(\"page.seo.metaTitle\");\n expect(meta.qualifiedName).toBe(\"page.seo.metaTitle\");\n });\n\n it(\"field.focus() should delegate to form.focusField\", () => {\n const form = createForm({\n fields: fields => ({\n title: fields.text().label(\"Title\"),\n path: fields.text().label(\"Path\")\n }),\n layout: layout => [\n layout\n .tabs(\"tabs\")\n .tab(\"t1\", tab => {\n tab.label(\"T1\").layout(l => [l.row(\"title\")]);\n })\n .tab(\"t2\", tab => {\n tab.label(\"T2\").layout(l => [l.row(\"path\")]);\n })\n ]\n });\n\n form.field(\"path\").focus();\n expect(form.field(\"path\").vm.focusRequested).toBe(true);\n expect((form.vm.layout[0] as any).activeTabId).toBe(\"t2\");\n });\n });\n\n describe(\"primitive list addItem / removeItem\", () => {\n it(\"addItem appends to empty list\", () => {\n const form = createForm({\n fields: f => ({\n tags: f.text().list()\n }),\n layout: l => [l.row(\"tags\")]\n });\n\n const vm = form.field(\"tags\").vm;\n expect(vm.value).toEqual([]);\n\n vm.addItem(\"hello\");\n expect(form.field(\"tags\").vm.value).toEqual([\"hello\"]);\n });\n\n it(\"addItem appends with default null when no value given\", () => {\n const form = createForm({\n fields: f => ({\n tags: f.text().list()\n }),\n layout: l => [l.row(\"tags\")]\n });\n\n form.field(\"tags\").vm.addItem();\n expect(form.field(\"tags\").vm.value).toEqual([null]);\n });\n\n it(\"addItem appends to existing values\", () => {\n const form = createForm({\n fields: f => ({\n tags: f.text().list().defaultValue([\"a\", \"b\"])\n }),\n layout: l => [l.row(\"tags\")]\n });\n\n form.field(\"tags\").vm.addItem(\"c\");\n expect(form.field(\"tags\").vm.value).toEqual([\"a\", \"b\", \"c\"]);\n });\n\n it(\"removeItem removes at index\", () => {\n const form = createForm({\n fields: f => ({\n tags: f.text().list().defaultValue([\"a\", \"b\", \"c\"])\n }),\n layout: l => [l.row(\"tags\")]\n });\n\n form.field(\"tags\").vm.removeItem(1);\n expect(form.field(\"tags\").vm.value).toEqual([\"a\", \"c\"]);\n });\n\n it(\"removeItem from beginning preserves order\", () => {\n const form = createForm({\n fields: f => ({\n tags: f.text().list().defaultValue([\"a\", \"b\", \"c\"])\n }),\n layout: l => [l.row(\"tags\")]\n });\n\n form.field(\"tags\").vm.removeItem(0);\n expect(form.field(\"tags\").vm.value).toEqual([\"b\", \"c\"]);\n });\n\n it(\"operations go through beforeChange pipeline\", () => {\n const log: unknown[] = [];\n const form = createForm({\n fields: f => ({\n tags: f\n .text()\n .list()\n .defaultValue([\"a\"])\n .beforeChange((value, _form) => {\n log.push(value);\n return value;\n })\n }),\n layout: l => [l.row(\"tags\")]\n });\n\n form.field(\"tags\").vm.addItem(\"b\");\n form.field(\"tags\").vm.removeItem(0);\n expect(log).toEqual([[\"a\", \"b\"], [\"b\"]]);\n });\n });\n});\n"],"names":["createForm","config","container","Container","FormModelFeature","FormModelFactory","asRow","node","Error","createBasicForm","fields","describe","it","form","expect","data","valid","z","titleVm","result","vm","fieldVM","layout","warnSpy","vi","console","value","String","received","calls","f","path","str","field","slug","fieldNames","row","updatedNames","undefined","textField","createFormWithLayout","names","modifier","current","stripped","createFormWithTabs","tab","tabsNode","generalTab","generalRow","seoTab","elementNode","createFormWithObject","street","e","createFormWithList","updatedVm","vm1","key0","key1","vm2","createFormWithTemplatedObject","t","createFormWithTemplatedList","i","l","item","buildTemplatedForm","layoutFactory","buildTemplatedListForm","g","inner","pageVm","seoRow","seoVm","h","l1","l2","l3","aVm","bVm","cVm","tabs","createSingleTemplatedForm","createListTemplatedForm","before","after","vmBefore","rowBefore","vmAfter","rowAfter","warn","profile","contacts","d","Number","Promise","resolveValidation","r","promise","setTimeout","schemaSpy","log","meta","_form"],"mappings":"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"}