@webiny/app-admin 6.2.0-beta.0 → 6.3.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/base/Admin.js +2 -0
  2. package/base/Admin.js.map +1 -1
  3. package/base/Base/DefaultFieldRenderers.js +20 -4
  4. package/base/Base/DefaultFieldRenderers.js.map +1 -1
  5. package/base/Base/DefaultLayoutRenderers.d.ts +2 -0
  6. package/base/Base/DefaultLayoutRenderers.js +11 -0
  7. package/base/Base/DefaultLayoutRenderers.js.map +1 -0
  8. package/base/Base/FieldRenderers/InputRenderer.d.ts +15 -0
  9. package/base/Base/FieldRenderers/{TextRenderer.js → InputRenderer.js} +5 -3
  10. package/base/Base/FieldRenderers/InputRenderer.js.map +1 -0
  11. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +25 -0
  12. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js +89 -0
  13. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js.map +1 -0
  14. package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.d.ts +21 -0
  15. package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.js +28 -0
  16. package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.js.map +1 -0
  17. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.d.ts +17 -0
  18. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js +63 -0
  19. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js.map +1 -0
  20. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.d.ts +4 -0
  21. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.js +22 -0
  22. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.js.map +1 -0
  23. package/base/Base/FieldRenderers/PassthroughRenderer.d.ts +15 -0
  24. package/base/Base/FieldRenderers/PassthroughRenderer.js +29 -0
  25. package/base/Base/FieldRenderers/PassthroughRenderer.js.map +1 -0
  26. package/base/Base/FieldRenderers/SelectRenderer.d.ts +12 -2
  27. package/base/Base/FieldRenderers/SelectRenderer.js +4 -2
  28. package/base/Base/FieldRenderers/SelectRenderer.js.map +1 -1
  29. package/base/Base/FieldRenderers/TextareaRenderer.d.ts +17 -0
  30. package/base/Base/FieldRenderers/TextareaRenderer.js +25 -0
  31. package/base/Base/FieldRenderers/TextareaRenderer.js.map +1 -0
  32. package/base/Base/FieldRenderers/VerticalTabsRenderer.d.ts +5 -0
  33. package/base/Base/FieldRenderers/VerticalTabsRenderer.js +41 -0
  34. package/base/Base/FieldRenderers/VerticalTabsRenderer.js.map +1 -0
  35. package/base/Base.js +2 -1
  36. package/base/Base.js.map +1 -1
  37. package/base/createRootContainer.js +4 -0
  38. package/base/createRootContainer.js.map +1 -1
  39. package/base/providers/UiProviders.js +0 -1
  40. package/base/providers/UiProviders.js.map +1 -1
  41. package/components/Filters/Filters.js.map +1 -1
  42. package/components/IconPicker/components/IconPickerCell.d.ts +1 -1
  43. package/components/IconPicker/components/IconPickerTrigger.d.ts +1 -1
  44. package/components/IconPicker/components/IconPickerTrigger.js.map +1 -1
  45. package/components/LexicalEditor/LexicalEditor.js +7 -1
  46. package/components/LexicalEditor/LexicalEditor.js.map +1 -1
  47. package/components/LexicalEditor/lexicalValueFromHtml.d.ts +7 -0
  48. package/components/LexicalEditor/lexicalValueFromHtml.js +35 -0
  49. package/components/LexicalEditor/lexicalValueFromHtml.js.map +1 -0
  50. package/components/OverlayLayout/components/OverlayHeader.d.ts +1 -1
  51. package/components/OverlayLayout/components/OverlayHeader.js.map +1 -1
  52. package/components/SimpleForm/SimpleForm.d.ts +2 -2
  53. package/components/SimpleForm/SimpleForm.js.map +1 -1
  54. package/config/AdminConfig/Form.d.ts +1 -0
  55. package/config/AdminConfig/Form.js +3 -1
  56. package/config/AdminConfig/Form.js.map +1 -1
  57. package/config/AdminConfig/LayoutRenderer.d.ts +10 -0
  58. package/config/AdminConfig/LayoutRenderer.js +21 -0
  59. package/config/AdminConfig/LayoutRenderer.js.map +1 -0
  60. package/config/AdminConfig/Menu/MenuLink.d.ts +2 -2
  61. package/config/AdminConfig.d.ts +4 -0
  62. package/config/AdminConfig.js +2 -1
  63. package/config/AdminConfig.js.map +1 -1
  64. package/exports/admin.d.ts +2 -0
  65. package/exports/admin.js +2 -0
  66. package/exports/admin.js.map +1 -1
  67. package/features/formModel/Field.js +4 -0
  68. package/features/formModel/Field.js.map +1 -1
  69. package/features/formModel/FieldBuilder.d.ts +18 -2
  70. package/features/formModel/FieldBuilder.js +57 -3
  71. package/features/formModel/FieldBuilder.js.map +1 -1
  72. package/features/formModel/FormModel.d.ts +3 -3
  73. package/features/formModel/FormModel.js +48 -13
  74. package/features/formModel/FormModel.js.map +1 -1
  75. package/features/formModel/FormModel.test.js +383 -0
  76. package/features/formModel/FormModel.test.js.map +1 -1
  77. package/features/formModel/FormModelFactory.d.ts +2 -2
  78. package/features/formModel/FormModelFactory.js.map +1 -1
  79. package/features/formModel/FormView.d.ts +24 -4
  80. package/features/formModel/FormView.js +57 -27
  81. package/features/formModel/FormView.js.map +1 -1
  82. package/features/formModel/ObjectField.d.ts +46 -0
  83. package/features/formModel/ObjectField.js +346 -0
  84. package/features/formModel/ObjectField.js.map +1 -0
  85. package/features/formModel/abstractions.d.ts +88 -19
  86. package/features/formModel/abstractions.js +8 -0
  87. package/features/formModel/abstractions.js.map +1 -1
  88. package/features/formModel/index.d.ts +7 -4
  89. package/features/formModel/index.js +9 -2
  90. package/features/formModel/index.js.map +1 -1
  91. package/features/formModel/renderers.d.ts +6 -0
  92. package/features/formModel/renderers.js +10 -0
  93. package/features/formModel/renderers.js.map +1 -0
  94. package/features/formModel/useLayoutRenderers.d.ts +2 -0
  95. package/features/formModel/useLayoutRenderers.js +19 -0
  96. package/features/formModel/useLayoutRenderers.js.map +1 -0
  97. package/features/tools/ToolPipelineRunner.d.ts +10 -0
  98. package/features/tools/ToolPipelineRunner.js +33 -0
  99. package/features/tools/ToolPipelineRunner.js.map +1 -0
  100. package/features/tools/ToolRegistry.d.ts +12 -0
  101. package/features/tools/ToolRegistry.js +29 -0
  102. package/features/tools/ToolRegistry.js.map +1 -0
  103. package/features/tools/abstractions.d.ts +28 -0
  104. package/features/tools/abstractions.js +6 -0
  105. package/features/tools/abstractions.js.map +1 -0
  106. package/features/tools/feature.d.ts +4 -0
  107. package/features/tools/feature.js +19 -0
  108. package/features/tools/feature.js.map +1 -0
  109. package/features/tools/index.d.ts +2 -0
  110. package/features/tools/index.js +4 -0
  111. package/features/tools/index.js.map +1 -0
  112. package/features/wcp/ReactLicense.d.ts +3 -0
  113. package/features/wcp/ReactLicense.js +9 -0
  114. package/features/wcp/ReactLicense.js.map +1 -1
  115. package/features/wcp/WcpGateway.js +4 -0
  116. package/features/wcp/WcpGateway.js.map +1 -1
  117. package/features/webinySdk/WebinySdk.d.ts +11 -0
  118. package/features/webinySdk/WebinySdk.js +27 -0
  119. package/features/webinySdk/WebinySdk.js.map +1 -0
  120. package/features/webinySdk/abstractions.d.ts +6 -0
  121. package/features/webinySdk/abstractions.js +8 -0
  122. package/features/webinySdk/abstractions.js.map +1 -0
  123. package/features/webinySdk/feature.d.ts +3 -0
  124. package/features/webinySdk/feature.js +16 -0
  125. package/features/webinySdk/feature.js.map +1 -0
  126. package/features/webinySdk/index.d.ts +2 -0
  127. package/features/webinySdk/index.js +4 -0
  128. package/features/webinySdk/index.js.map +1 -0
  129. package/index.d.ts +8 -3
  130. package/index.js +5 -2
  131. package/index.js.map +1 -1
  132. package/package.json +24 -23
  133. package/presentation/textToLexicalTool/TextToLexicalTool.d.ts +27 -0
  134. package/presentation/textToLexicalTool/TextToLexicalTool.js +25 -0
  135. package/presentation/textToLexicalTool/TextToLexicalTool.js.map +1 -0
  136. package/presentation/textToLexicalTool/feature.d.ts +1 -0
  137. package/presentation/textToLexicalTool/feature.js +10 -0
  138. package/presentation/textToLexicalTool/feature.js.map +1 -0
  139. package/presentation/textToLexicalTool/textToLexicalState.d.ts +5 -0
  140. package/presentation/textToLexicalTool/textToLexicalState.js +19 -0
  141. package/presentation/textToLexicalTool/textToLexicalState.js.map +1 -0
  142. package/base/Base/FieldRenderers/TextRenderer.d.ts +0 -5
  143. package/base/Base/FieldRenderers/TextRenderer.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["describe","it","expect","vi","z","FormModel","asRow","node","type","Error","createBasicForm","fields","title","text","label","required","path","form","field","toBeDefined","toThrow","setValue","getValue","toBe","toBeNull","status","defaultValue","pageType","hidden","data","getData","toEqual","setData","unknown","isDirty","reset","validate","errors","length","toBeGreaterThan","isValid","valid","toHaveLength","message","email","schema","string","titleVm","vm","validation","result","submit","layout","name","fieldVM","onChange","row","warnSpy","spyOn","console","mockImplementation","toHaveBeenCalledWith","stringContaining","mockRestore","not","toHaveBeenCalled","beforeChange","value","String","trim","toLowerCase","received","afterChange","push","calls","f","replace","str","startsWith","addBeforeChange","toUpperCase","slug","lang","select","options","language","toHaveProperty","description","fieldNames","map","toContain","after","updatedNames","placeholder","config","undefined","remove","setDisabled","disabled","selectField","as","addAfterChange","createFormWithLayout","before","names","modifier","modify","current","stripped","separator","createFormWithTabs","metaTitle","metaDescription","tabs","id","tabsNode","generalTab","generalRow","seoTab","activeTabId","setActiveTab","hasErrors","element","plan","elementNode","renderer","props","toBeUndefined","trackingId","tab","fieldIds","ogImage","find","t","lastRow","subtitle"],"sources":["FormModel.test.ts"],"sourcesContent":["import { describe, it, expect, vi } from \"vitest\";\nimport { z } from \"zod\";\nimport { FormModel } from \"./FormModel.js\";\nimport type {\n IFormModel,\n IRowNodeVM,\n ITabsNodeVM,\n IElementNodeVM,\n ILayoutNodeAccessHandle,\n LayoutNodeVM\n} from \"./abstractions.js\";\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 new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 new FormModel({\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 new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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(\"select field with options\", () => {\n it(\"should resolve static options in field VM\", () => {\n const form = new FormModel({\n fields: fields => ({\n lang: fields\n .select()\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 = new FormModel({\n fields: fields => ({\n lang: fields\n .select()\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 .select()\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(\"select\");\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 = new FormModel({\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 = new FormModel({\n fields: fields => ({\n lang: fields\n .select()\n .label(\"Language\")\n .options([{ label: \"English\", value: \"en\" }])\n })\n });\n\n const selectField = form.field(\"lang\").as(\"select\");\n expect(selectField).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(\"select\")).toThrow(\n 'Field \"title\" is type \"text\", not \"select\".'\n );\n });\n });\n\n describe(\"modifier appends callbacks to existing fields\", () => {\n it(\"should append beforeChange to an existing field\", () => {\n const form = new FormModel({\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 = new FormModel({\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 new FormModel({\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.select().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.select().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.select().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.select().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 = new FormModel({\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 .select()\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 = new FormModel({\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 = new FormModel({\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 new FormModel({\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.tabs({\n id: \"settings\",\n tabs: [\n {\n id: \"general\",\n label: \"General\",\n layout: [layout.row(\"description\")]\n },\n {\n id: \"seo\",\n label: \"SEO\",\n description: \"Optimize how this page appears in search\",\n layout: [layout.row(\"metaTitle\"), layout.row(\"metaDescription\")]\n }\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 = new FormModel({\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.tabs({\n id: \"settings\",\n tabs: [\n {\n id: \"general\",\n label: \"General\",\n layout: [layout.row(\"title\")]\n },\n {\n id: \"seo\",\n label: \"SEO\",\n layout: [layout.row(\"metaTitle\")]\n }\n ]\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 new FormModel({\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({\n id: \"settings\",\n tabs: [\n {\n id: \"general\",\n label: \"General\",\n layout: [layout.row(\"description\")]\n }\n ]\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 = new FormModel({\n fields: fields => ({\n title: fields.text().label(\"Title\")\n }),\n layout: layout => [layout.row(\"title\"), layout.tabs({ id: \"empty\", tabs: [] })]\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 = new FormModel({\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 = new FormModel({\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 new FormModel({\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({\n id: \"settings\",\n tabs: [\n {\n id: \"general\",\n label: \"General\",\n layout: [layout.row(\"description\")]\n },\n {\n id: \"seo\",\n label: \"SEO\",\n layout: [layout.row(\"metaTitle\")]\n }\n ]\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({\n id: \"analytics\",\n label: \"Analytics\",\n layout: [{ type: \"row\", fieldIds: [\"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({\n id: \"analytics\",\n label: \"Analytics\",\n layout: [{ type: \"row\", fieldIds: [\"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 append to an existing tab's layout\", () => {\n const form = createFormWithTabs();\n\n form.fields(fields => ({\n ogImage: fields.text().label(\"OG Image\")\n }));\n\n (form.layout(\"settings\") as ILayoutNodeAccessHandle)\n .as(\"tabs\")\n .tab(\"seo\")\n .layout(layout => [layout.row(\"ogImage\")]);\n\n const tabsNode = form.vm.layout[1] as ITabsNodeVM;\n const seoTab = tabsNode.tabs.find(t => t.id === \"seo\")!;\n expect(seoTab.layout).toHaveLength(2);\n\n const lastRow = seoTab.layout[1] as IRowNodeVM;\n expect(lastRow.fields[0].name).toBe(\"ogImage\");\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 it(\"should throw when accessing a non-existent tab ID\", () => {\n const form = createFormWithTabs();\n expect(() =>\n (form.layout(\"settings\") as ILayoutNodeAccessHandle)\n .as(\"tabs\")\n .tab(\"nonexistent\")\n ).toThrow('Tab \"nonexistent\" not found in tabs node \"settings\".');\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 = new FormModel({\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({\n id: \"settings\",\n tabs: [\n {\n id: \"general\",\n label: \"General\",\n layout: [layout.row(\"description\")]\n }\n ]\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 = new FormModel({\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({\n id: \"settings\",\n tabs: [\n {\n id: \"general\",\n label: \"General\",\n layout: [layout.row(\"description\")]\n }\n ]\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 = new FormModel({\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({\n id: \"settings\",\n tabs: [\n {\n id: \"general\",\n label: \"General\",\n layout: [layout.row(\"description\")]\n }\n ]\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 = new FormModel({\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.tabs({\n id: \"settings\",\n tabs: [\n {\n id: \"general\",\n label: \"General\",\n layout: [layout.row(\"description\")]\n },\n {\n id: \"seo\",\n label: \"SEO\",\n layout: [layout.row(\"metaTitle\")]\n }\n ]\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({\n id: \"analytics\",\n label: \"Analytics\",\n layout: [{ type: \"row\", fieldIds: [\"trackingId\"] }]\n })\n .after(\"seo\");\n\n // Modifier B: append OG Image to SEO tab\n form.fields(fields => ({\n ogImage: fields.text().label(\"OG Image\")\n }));\n\n (form.layout(\"settings\") as ILayoutNodeAccessHandle)\n .as(\"tabs\")\n .tab(\"seo\")\n .layout(layout => [layout.row(\"ogImage\")]);\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 now has metaTitle + ogImage\n const seoTab = tabsNode.tabs[1];\n expect(seoTab.layout).toHaveLength(2);\n\n // Verify all fields are in getData\n const data = form.getData();\n expect(data).toHaveProperty(\"trackingId\");\n expect(data).toHaveProperty(\"ogImage\");\n });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["describe","it","expect","vi","z","FormModel","asRow","node","type","Error","createBasicForm","fields","title","text","label","required","path","form","field","toBeDefined","toThrow","setValue","getValue","toBe","toBeNull","status","defaultValue","pageType","hidden","data","getData","toEqual","setData","unknown","isDirty","reset","validate","errors","length","toBeGreaterThan","isValid","valid","toHaveLength","message","email","schema","string","titleVm","vm","validation","result","submit","layout","name","fieldVM","onChange","row","warnSpy","spyOn","console","mockImplementation","toHaveBeenCalledWith","stringContaining","mockRestore","not","toHaveBeenCalled","beforeChange","value","String","trim","toLowerCase","received","afterChange","push","calls","f","replace","str","startsWith","addBeforeChange","toUpperCase","slug","lang","select","options","language","toHaveProperty","description","fieldNames","map","toContain","after","updatedNames","placeholder","config","undefined","remove","setDisabled","disabled","selectField","as","addAfterChange","createFormWithLayout","before","names","modifier","modify","current","stripped","separator","createFormWithTabs","metaTitle","metaDescription","tabs","id","tabsNode","generalTab","generalRow","seoTab","activeTabId","setActiveTab","hasErrors","element","plan","elementNode","renderer","props","toBeUndefined","trackingId","tab","fieldIds","ogImage","find","t","lastRow","subtitle","createFormWithObject","address","object","street","city","some","e","isList","items","createFormWithList","presets","model","list","addItem","updatedVm","removeItem","listSchema","array","any","min","vm1","key0","key","key1","vm2"],"sources":["FormModel.test.ts"],"sourcesContent":["import { describe, it, expect, vi } from \"vitest\";\nimport { z } from \"zod\";\nimport { FormModel } from \"./FormModel.js\";\nimport type {\n IFormModel,\n IRowNodeVM,\n ITabsNodeVM,\n IElementNodeVM,\n IObjectFieldVM,\n ILayoutNodeAccessHandle,\n LayoutNodeVM\n} from \"./abstractions.js\";\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 new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 new FormModel({\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 new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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 = new FormModel({\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(\"select field with options\", () => {\n it(\"should resolve static options in field VM\", () => {\n const form = new FormModel({\n fields: fields => ({\n lang: fields\n .select()\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 = new FormModel({\n fields: fields => ({\n lang: fields\n .select()\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 .select()\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(\"select\");\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 = new FormModel({\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 = new FormModel({\n fields: fields => ({\n lang: fields\n .select()\n .label(\"Language\")\n .options([{ label: \"English\", value: \"en\" }])\n })\n });\n\n const selectField = form.field(\"lang\").as(\"select\");\n expect(selectField).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(\"select\")).toThrow(\n 'Field \"title\" is type \"text\", not \"select\".'\n );\n });\n });\n\n describe(\"modifier appends callbacks to existing fields\", () => {\n it(\"should append beforeChange to an existing field\", () => {\n const form = new FormModel({\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 = new FormModel({\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 new FormModel({\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.select().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.select().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.select().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.select().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 = new FormModel({\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 .select()\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 = new FormModel({\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 = new FormModel({\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 new FormModel({\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.tabs({\n id: \"settings\",\n tabs: [\n {\n id: \"general\",\n label: \"General\",\n layout: [layout.row(\"description\")]\n },\n {\n id: \"seo\",\n label: \"SEO\",\n description: \"Optimize how this page appears in search\",\n layout: [layout.row(\"metaTitle\"), layout.row(\"metaDescription\")]\n }\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 = new FormModel({\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.tabs({\n id: \"settings\",\n tabs: [\n {\n id: \"general\",\n label: \"General\",\n layout: [layout.row(\"title\")]\n },\n {\n id: \"seo\",\n label: \"SEO\",\n layout: [layout.row(\"metaTitle\")]\n }\n ]\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 new FormModel({\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({\n id: \"settings\",\n tabs: [\n {\n id: \"general\",\n label: \"General\",\n layout: [layout.row(\"description\")]\n }\n ]\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 = new FormModel({\n fields: fields => ({\n title: fields.text().label(\"Title\")\n }),\n layout: layout => [layout.row(\"title\"), layout.tabs({ id: \"empty\", tabs: [] })]\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 = new FormModel({\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 = new FormModel({\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 new FormModel({\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({\n id: \"settings\",\n tabs: [\n {\n id: \"general\",\n label: \"General\",\n layout: [layout.row(\"description\")]\n },\n {\n id: \"seo\",\n label: \"SEO\",\n layout: [layout.row(\"metaTitle\")]\n }\n ]\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({\n id: \"analytics\",\n label: \"Analytics\",\n layout: [{ type: \"row\", fieldIds: [\"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({\n id: \"analytics\",\n label: \"Analytics\",\n layout: [{ type: \"row\", fieldIds: [\"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 append to an existing tab's layout\", () => {\n const form = createFormWithTabs();\n\n form.fields(fields => ({\n ogImage: fields.text().label(\"OG Image\")\n }));\n\n (form.layout(\"settings\") as ILayoutNodeAccessHandle)\n .as(\"tabs\")\n .tab(\"seo\")\n .layout(layout => [layout.row(\"ogImage\")]);\n\n const tabsNode = form.vm.layout[1] as ITabsNodeVM;\n const seoTab = tabsNode.tabs.find(t => t.id === \"seo\")!;\n expect(seoTab.layout).toHaveLength(2);\n\n const lastRow = seoTab.layout[1] as IRowNodeVM;\n expect(lastRow.fields[0].name).toBe(\"ogImage\");\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 it(\"should throw when accessing a non-existent tab ID\", () => {\n const form = createFormWithTabs();\n expect(() =>\n (form.layout(\"settings\") as ILayoutNodeAccessHandle)\n .as(\"tabs\")\n .tab(\"nonexistent\")\n ).toThrow('Tab \"nonexistent\" not found in tabs node \"settings\".');\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 = new FormModel({\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({\n id: \"settings\",\n tabs: [\n {\n id: \"general\",\n label: \"General\",\n layout: [layout.row(\"description\")]\n }\n ]\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 = new FormModel({\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({\n id: \"settings\",\n tabs: [\n {\n id: \"general\",\n label: \"General\",\n layout: [layout.row(\"description\")]\n }\n ]\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 = new FormModel({\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({\n id: \"settings\",\n tabs: [\n {\n id: \"general\",\n label: \"General\",\n layout: [layout.row(\"description\")]\n }\n ]\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 = new FormModel({\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.tabs({\n id: \"settings\",\n tabs: [\n {\n id: \"general\",\n label: \"General\",\n layout: [layout.row(\"description\")]\n },\n {\n id: \"seo\",\n label: \"SEO\",\n layout: [layout.row(\"metaTitle\")]\n }\n ]\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({\n id: \"analytics\",\n label: \"Analytics\",\n layout: [{ type: \"row\", fieldIds: [\"trackingId\"] }]\n })\n .after(\"seo\");\n\n // Modifier B: append OG Image to SEO tab\n form.fields(fields => ({\n ogImage: fields.text().label(\"OG Image\")\n }));\n\n (form.layout(\"settings\") as ILayoutNodeAccessHandle)\n .as(\"tabs\")\n .tab(\"seo\")\n .layout(layout => [layout.row(\"ogImage\")]);\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 now has metaTitle + ogImage\n const seoTab = tabsNode.tabs[1];\n expect(seoTab.layout).toHaveLength(2);\n\n // Verify all fields are in getData\n const data = form.getData();\n expect(data).toHaveProperty(\"trackingId\");\n expect(data).toHaveProperty(\"ogImage\");\n });\n });\n });\n\n describe(\"object fields (Phase 6)\", () => {\n describe(\"non-list object field\", () => {\n function createFormWithObject() {\n return new FormModel({\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 = new FormModel({\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 new FormModel({\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 = new FormModel({\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 = new FormModel({\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.tabs({\n id: \"settings\",\n tabs: [\n {\n id: \"general\",\n label: \"General\",\n layout: [layout.row(\"title\")]\n },\n {\n id: \"details\",\n label: \"Details\",\n layout: [layout.row(\"address\")]\n }\n ]\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"],"mappings":"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","ignoreList":[]}