@webiny/app-admin 6.3.0-beta.1 → 6.3.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/base/Base/DefaultFieldRenderers.js +69 -5
  2. package/base/Base/DefaultFieldRenderers.js.map +1 -1
  3. package/base/Base/DefaultLayoutRenderers.js +5 -1
  4. package/base/Base/DefaultLayoutRenderers.js.map +1 -1
  5. package/base/Base/FieldRenderers/CheckboxesRenderer.d.ts +13 -0
  6. package/base/Base/FieldRenderers/CheckboxesRenderer.js +28 -0
  7. package/base/Base/FieldRenderers/CheckboxesRenderer.js.map +1 -0
  8. package/base/Base/FieldRenderers/CodeEditorRenderer.d.ts +15 -0
  9. package/base/Base/FieldRenderers/CodeEditorRenderer.js +17 -0
  10. package/base/Base/FieldRenderers/CodeEditorRenderer.js.map +1 -0
  11. package/base/Base/FieldRenderers/DateTimeInputsRenderer.d.ts +17 -0
  12. package/base/Base/FieldRenderers/DateTimeInputsRenderer.js +66 -0
  13. package/base/Base/FieldRenderers/DateTimeInputsRenderer.js.map +1 -0
  14. package/base/Base/FieldRenderers/DateTimeRenderer.d.ts +21 -0
  15. package/base/Base/FieldRenderers/DateTimeRenderer.js +46 -0
  16. package/base/Base/FieldRenderers/DateTimeRenderer.js.map +1 -0
  17. package/base/Base/FieldRenderers/FilePickerRenderer.d.ts +12 -0
  18. package/base/Base/FieldRenderers/FilePickerRenderer.js +47 -0
  19. package/base/Base/FieldRenderers/FilePickerRenderer.js.map +1 -0
  20. package/base/Base/FieldRenderers/FileUrlPickerRenderer.d.ts +12 -0
  21. package/base/Base/FieldRenderers/FileUrlPickerRenderer.js +25 -0
  22. package/base/Base/FieldRenderers/FileUrlPickerRenderer.js.map +1 -0
  23. package/base/Base/FieldRenderers/HiddenRenderer.d.ts +12 -0
  24. package/base/Base/FieldRenderers/HiddenRenderer.js +5 -0
  25. package/base/Base/FieldRenderers/HiddenRenderer.js.map +1 -0
  26. package/base/Base/FieldRenderers/HorizontalTabsRenderer.d.ts +5 -0
  27. package/base/Base/FieldRenderers/HorizontalTabsRenderer.js +27 -0
  28. package/base/Base/FieldRenderers/HorizontalTabsRenderer.js.map +1 -0
  29. package/base/Base/FieldRenderers/InputRenderer.d.ts +4 -7
  30. package/base/Base/FieldRenderers/InputRenderer.js +2 -2
  31. package/base/Base/FieldRenderers/InputRenderer.js.map +1 -1
  32. package/base/Base/FieldRenderers/NumberInputRenderer.d.ts +12 -0
  33. package/base/Base/FieldRenderers/NumberInputRenderer.js +23 -0
  34. package/base/Base/FieldRenderers/NumberInputRenderer.js.map +1 -0
  35. package/base/Base/FieldRenderers/NumberInputsRenderer.d.ts +14 -0
  36. package/base/Base/FieldRenderers/NumberInputsRenderer.js +49 -0
  37. package/base/Base/FieldRenderers/NumberInputsRenderer.js.map +1 -0
  38. package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.d.ts +14 -0
  39. package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js +20 -0
  40. package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js.map +1 -0
  41. package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.d.ts +14 -0
  42. package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.js +65 -0
  43. package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.js.map +1 -0
  44. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.d.ts +10 -0
  45. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.js +109 -0
  46. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.js.map +1 -0
  47. package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.d.ts +17 -0
  48. package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js +55 -0
  49. package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js.map +1 -0
  50. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +7 -3
  51. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js +15 -19
  52. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js.map +1 -1
  53. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.d.ts +5 -8
  54. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js +7 -50
  55. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js.map +1 -1
  56. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.d.ts +10 -0
  57. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js +64 -0
  58. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js.map +1 -0
  59. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.d.ts +10 -0
  60. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js +85 -0
  61. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js.map +1 -0
  62. package/base/Base/FieldRenderers/PassthroughRenderer.d.ts +3 -6
  63. package/base/Base/FieldRenderers/PassthroughRenderer.js +9 -23
  64. package/base/Base/FieldRenderers/PassthroughRenderer.js.map +1 -1
  65. package/base/Base/FieldRenderers/RadioButtonsRenderer.d.ts +13 -0
  66. package/base/Base/FieldRenderers/RadioButtonsRenderer.js +27 -0
  67. package/base/Base/FieldRenderers/RadioButtonsRenderer.js.map +1 -0
  68. package/base/Base/FieldRenderers/SelectRenderer.d.ts +6 -8
  69. package/base/Base/FieldRenderers/SelectRenderer.js +8 -5
  70. package/base/Base/FieldRenderers/SelectRenderer.js.map +1 -1
  71. package/base/Base/FieldRenderers/SwitchRenderer.d.ts +12 -0
  72. package/base/Base/FieldRenderers/SwitchRenderer.js +19 -0
  73. package/base/Base/FieldRenderers/SwitchRenderer.js.map +1 -0
  74. package/base/Base/FieldRenderers/TagsRenderer.d.ts +12 -0
  75. package/base/Base/FieldRenderers/TagsRenderer.js +21 -0
  76. package/base/Base/FieldRenderers/TagsRenderer.js.map +1 -0
  77. package/base/Base/FieldRenderers/TextInputsRenderer.d.ts +14 -0
  78. package/base/Base/FieldRenderers/TextInputsRenderer.js +48 -0
  79. package/base/Base/FieldRenderers/TextInputsRenderer.js.map +1 -0
  80. package/base/Base/FieldRenderers/TextareaRenderer.d.ts +3 -6
  81. package/base/Base/FieldRenderers/TextareaRenderer.js +3 -4
  82. package/base/Base/FieldRenderers/TextareaRenderer.js.map +1 -1
  83. package/base/Base/FieldRenderers/TextareasRenderer.d.ts +14 -0
  84. package/base/Base/FieldRenderers/TextareasRenderer.js +51 -0
  85. package/base/Base/FieldRenderers/TextareasRenderer.js.map +1 -0
  86. package/base/Base/FieldRenderers/VerticalTabsRenderer.js +2 -2
  87. package/base/Base/FieldRenderers/VerticalTabsRenderer.js.map +1 -1
  88. package/base/Base/Menus.js +5 -64
  89. package/base/Base/Menus.js.map +1 -1
  90. package/base/Base/RoutesConfig.js +6 -0
  91. package/base/Base/RoutesConfig.js.map +1 -1
  92. package/exports/admin/build-params.d.ts +2 -0
  93. package/exports/admin/build-params.js +3 -0
  94. package/exports/admin/build-params.js.map +1 -1
  95. package/exports/admin/form.d.ts +5 -0
  96. package/exports/admin/form.js +8 -0
  97. package/exports/admin/form.js.map +1 -1
  98. package/exports/admin/ui.d.ts +1 -0
  99. package/exports/admin/ui.js +1 -0
  100. package/exports/admin/ui.js.map +1 -1
  101. package/exports/admin.d.ts +3 -1
  102. package/exports/admin.js +3 -1
  103. package/exports/admin.js.map +1 -1
  104. package/features/formModel/ConditionRuleEvaluator.d.ts +9 -0
  105. package/features/formModel/ConditionRuleEvaluator.js +56 -0
  106. package/features/formModel/ConditionRuleEvaluator.js.map +1 -0
  107. package/features/formModel/Field.d.ts +50 -4
  108. package/features/formModel/Field.js +254 -35
  109. package/features/formModel/Field.js.map +1 -1
  110. package/features/formModel/FieldBuilder.d.ts +17 -35
  111. package/features/formModel/FieldBuilder.js +63 -100
  112. package/features/formModel/FieldBuilder.js.map +1 -1
  113. package/features/formModel/FieldBuilder.test.js +127 -13
  114. package/features/formModel/FieldBuilder.test.js.map +1 -1
  115. package/features/formModel/FieldBuilderRegistry.d.ts +4 -0
  116. package/features/formModel/FieldBuilderRegistry.js +31 -0
  117. package/features/formModel/FieldBuilderRegistry.js.map +1 -0
  118. package/features/formModel/FocusManager.d.ts +14 -0
  119. package/features/formModel/FocusManager.js +109 -0
  120. package/features/formModel/FocusManager.js.map +1 -0
  121. package/features/formModel/FormModel.d.ts +27 -31
  122. package/features/formModel/FormModel.js +210 -403
  123. package/features/formModel/FormModel.js.map +1 -1
  124. package/features/formModel/FormModel.test.js +2044 -193
  125. package/features/formModel/FormModel.test.js.map +1 -1
  126. package/features/formModel/FormModelFactory.d.ts +4 -2
  127. package/features/formModel/FormModelFactory.js +13 -3
  128. package/features/formModel/FormModelFactory.js.map +1 -1
  129. package/features/formModel/FormView.d.ts +2 -0
  130. package/features/formModel/FormView.js +44 -37
  131. package/features/formModel/FormView.js.map +1 -1
  132. package/features/formModel/LayoutBuilderFactory.d.ts +61 -0
  133. package/features/formModel/LayoutBuilderFactory.js +386 -0
  134. package/features/formModel/LayoutBuilderFactory.js.map +1 -0
  135. package/features/formModel/LayoutMutator.d.ts +11 -0
  136. package/features/formModel/LayoutMutator.js +136 -0
  137. package/features/formModel/LayoutMutator.js.map +1 -0
  138. package/features/formModel/LayoutResolver.d.ts +26 -0
  139. package/features/formModel/LayoutResolver.js +239 -0
  140. package/features/formModel/LayoutResolver.js.map +1 -0
  141. package/features/formModel/ObjectField.d.ts +55 -4
  142. package/features/formModel/ObjectField.js +499 -82
  143. package/features/formModel/ObjectField.js.map +1 -1
  144. package/features/formModel/Rules.test.d.ts +1 -0
  145. package/features/formModel/Rules.test.js +289 -0
  146. package/features/formModel/Rules.test.js.map +1 -0
  147. package/features/formModel/abstractions.d.ts +402 -52
  148. package/features/formModel/abstractions.js +55 -0
  149. package/features/formModel/abstractions.js.map +1 -1
  150. package/features/formModel/createFieldRenderer.d.ts +20 -0
  151. package/features/formModel/createFieldRenderer.js +15 -0
  152. package/features/formModel/createFieldRenderer.js.map +1 -0
  153. package/features/formModel/demo/FieldRenderersDemoPresenter.d.ts +18 -0
  154. package/features/formModel/demo/FieldRenderersDemoPresenter.js +225 -0
  155. package/features/formModel/demo/FieldRenderersDemoPresenter.js.map +1 -0
  156. package/features/formModel/demo/FormModelDemo.d.ts +4 -0
  157. package/features/formModel/demo/FormModelDemo.js +230 -0
  158. package/features/formModel/demo/FormModelDemo.js.map +1 -0
  159. package/features/formModel/demo/FormModelDemoPresenter.d.ts +22 -0
  160. package/features/formModel/demo/FormModelDemoPresenter.js +121 -0
  161. package/features/formModel/demo/FormModelDemoPresenter.js.map +1 -0
  162. package/features/formModel/demo/FormModelPhase11Presenter.d.ts +25 -0
  163. package/features/formModel/demo/FormModelPhase11Presenter.js +104 -0
  164. package/features/formModel/demo/FormModelPhase11Presenter.js.map +1 -0
  165. package/features/formModel/demo/FormModelPhase8c1Presenter.d.ts +23 -0
  166. package/features/formModel/demo/FormModelPhase8c1Presenter.js +62 -0
  167. package/features/formModel/demo/FormModelPhase8c1Presenter.js.map +1 -0
  168. package/features/formModel/feature.js +12 -0
  169. package/features/formModel/feature.js.map +1 -1
  170. package/features/formModel/fieldTypes/BooleanFieldType.d.ts +19 -0
  171. package/features/formModel/fieldTypes/BooleanFieldType.js +23 -0
  172. package/features/formModel/fieldTypes/BooleanFieldType.js.map +1 -0
  173. package/features/formModel/fieldTypes/DateTimeFieldType.d.ts +173 -0
  174. package/features/formModel/fieldTypes/DateTimeFieldType.js +369 -0
  175. package/features/formModel/fieldTypes/DateTimeFieldType.js.map +1 -0
  176. package/features/formModel/fieldTypes/FileFieldType.d.ts +18 -0
  177. package/features/formModel/fieldTypes/FileFieldType.js +20 -0
  178. package/features/formModel/fieldTypes/FileFieldType.js.map +1 -0
  179. package/features/formModel/fieldTypes/FileUrlFieldType.d.ts +18 -0
  180. package/features/formModel/fieldTypes/FileUrlFieldType.js +20 -0
  181. package/features/formModel/fieldTypes/FileUrlFieldType.js.map +1 -0
  182. package/features/formModel/fieldTypes/NumberFieldType.d.ts +19 -0
  183. package/features/formModel/fieldTypes/NumberFieldType.js +27 -0
  184. package/features/formModel/fieldTypes/NumberFieldType.js.map +1 -0
  185. package/features/formModel/fieldTypes/ObjectFieldType.d.ts +34 -0
  186. package/features/formModel/fieldTypes/ObjectFieldType.js +109 -0
  187. package/features/formModel/fieldTypes/ObjectFieldType.js.map +1 -0
  188. package/features/formModel/fieldTypes/TextFieldType.d.ts +18 -0
  189. package/features/formModel/fieldTypes/TextFieldType.js +20 -0
  190. package/features/formModel/fieldTypes/TextFieldType.js.map +1 -0
  191. package/features/formModel/fieldTypes/index.d.ts +7 -0
  192. package/features/formModel/fieldTypes/index.js +9 -0
  193. package/features/formModel/fieldTypes/index.js.map +1 -0
  194. package/features/formModel/index.d.ts +13 -4
  195. package/features/formModel/index.js +21 -2
  196. package/features/formModel/index.js.map +1 -1
  197. package/features/formModel/renderers.d.ts +15 -1
  198. package/features/formModel/renderers.js +15 -1
  199. package/features/formModel/renderers.js.map +1 -1
  200. package/features/tools/LexicalContext/LexicalContext.d.ts +14 -0
  201. package/features/tools/LexicalContext/LexicalContext.js +22 -0
  202. package/features/tools/LexicalContext/LexicalContext.js.map +1 -0
  203. package/features/tools/LexicalContext/abstractions.d.ts +11 -0
  204. package/features/tools/LexicalContext/abstractions.js +4 -0
  205. package/features/tools/LexicalContext/abstractions.js.map +1 -0
  206. package/features/tools/LexicalContext/index.d.ts +2 -0
  207. package/features/tools/LexicalContext/index.js +3 -0
  208. package/features/tools/LexicalContext/index.js.map +1 -0
  209. package/features/tools/feature.js +2 -0
  210. package/features/tools/feature.js.map +1 -1
  211. package/features/tools/index.d.ts +1 -0
  212. package/features/tools/index.js +1 -0
  213. package/features/tools/index.js.map +1 -1
  214. package/index.d.ts +8 -1
  215. package/index.js +7 -0
  216. package/index.js.map +1 -1
  217. package/package.json +31 -25
  218. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js +1 -1
  219. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js.map +1 -1
  220. package/presentation/lexicalContext/useLexicalContext.d.ts +3 -0
  221. package/presentation/lexicalContext/useLexicalContext.js +14 -0
  222. package/presentation/lexicalContext/useLexicalContext.js.map +1 -0
  223. package/presentation/textToLexicalTool/TextToLexicalTool.d.ts +3 -0
  224. package/presentation/textToLexicalTool/TextToLexicalTool.js +6 -2
  225. package/presentation/textToLexicalTool/TextToLexicalTool.js.map +1 -1
  226. package/presentation/textToLexicalTool/textToLexicalState.d.ts +2 -1
  227. package/presentation/textToLexicalTool/textToLexicalState.js +15 -3
  228. package/presentation/textToLexicalTool/textToLexicalState.js.map +1 -1
  229. package/routes.d.ts +1 -0
  230. package/routes.js +4 -0
  231. package/routes.js.map +1 -1
  232. package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.d.ts +0 -21
  233. package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.js +0 -28
  234. package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.js.map +0 -1
@@ -0,0 +1,14 @@
1
+ import type { IField, LayoutNode } from "./abstractions.js";
2
+ export interface TabActivation {
3
+ tabKey: string;
4
+ tabId: string;
5
+ }
6
+ export declare class FocusManager {
7
+ private _fields;
8
+ constructor(_fields: Map<string, IField>);
9
+ buildFocusPath(name: string, layout: LayoutNode[]): TabActivation[] | null;
10
+ private walkLayout;
11
+ private diveIntoField;
12
+ private diveIntoObjectNode;
13
+ private resolveChildScope;
14
+ }
@@ -0,0 +1,109 @@
1
+ import { isObjectField } from "./ObjectField.js";
2
+ import { LayoutBuilderFactory } from "./LayoutBuilderFactory.js";
3
+ export class FocusManager {
4
+ constructor(_fields) {
5
+ this._fields = _fields;
6
+ }
7
+ buildFocusPath(name, layout) {
8
+ const segments = name.split(".");
9
+ return this.walkLayout(layout, segments, this._fields);
10
+ }
11
+ walkLayout(layout, segments, fieldScope) {
12
+ const target = segments[0];
13
+ for (const node of layout) {
14
+ switch (node.type) {
15
+ case "row":
16
+ {
17
+ if (!node.fieldIds.includes(target)) {
18
+ break;
19
+ }
20
+ return this.diveIntoField(target, segments, fieldScope);
21
+ }
22
+ case "object":
23
+ {
24
+ if (node.fieldName !== target) {
25
+ break;
26
+ }
27
+ return this.diveIntoObjectNode(node, segments, fieldScope);
28
+ }
29
+ case "tabs":
30
+ {
31
+ const tabKey = node.id || LayoutBuilderFactory.tabsNodeKey(node);
32
+ for (const tab of node.tabs) {
33
+ const result = this.walkLayout(tab.layout, segments, fieldScope);
34
+ if (result !== null) {
35
+ return [{
36
+ tabKey,
37
+ tabId: tab.id
38
+ }, ...result];
39
+ }
40
+ }
41
+ break;
42
+ }
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ diveIntoField(fieldName, segments, fieldScope) {
48
+ if (segments.length === 1) {
49
+ return [];
50
+ }
51
+ const field = fieldScope.get(fieldName);
52
+ if (!field || !isObjectField(field)) {
53
+ return [];
54
+ }
55
+ const childScope = this.resolveChildScope(field, segments);
56
+ if (!childScope) {
57
+ return [];
58
+ }
59
+ const inner = field.getInnerLayout();
60
+ if (!inner) {
61
+ return [];
62
+ }
63
+ return this.walkLayout(inner, childScope.segments, childScope.children);
64
+ }
65
+ diveIntoObjectNode(node, segments, fieldScope) {
66
+ if (segments.length === 1) {
67
+ return [];
68
+ }
69
+ const field = fieldScope.get(node.fieldName);
70
+ if (!field || !isObjectField(field)) {
71
+ return [];
72
+ }
73
+ const childScope = this.resolveChildScope(field, segments);
74
+ if (!childScope) {
75
+ return [];
76
+ }
77
+ const inner = Array.isArray(node.inner) ? node.inner : field.activeTemplateId ? node.inner[field.activeTemplateId] ?? null : null;
78
+ if (!inner) {
79
+ const stored = field.getInnerLayout();
80
+ if (!stored) {
81
+ return [];
82
+ }
83
+ return this.walkLayout(stored, childScope.segments, childScope.children);
84
+ }
85
+ return this.walkLayout(inner, childScope.segments, childScope.children);
86
+ }
87
+ resolveChildScope(field, segments) {
88
+ const nextSegment = segments[1];
89
+ if (field.isList) {
90
+ const index = parseInt(nextSegment, 10);
91
+ if (!isNaN(index)) {
92
+ const item = field.items[index];
93
+ if (!item) {
94
+ return null;
95
+ }
96
+ return {
97
+ segments: segments.slice(2),
98
+ children: item.children
99
+ };
100
+ }
101
+ }
102
+ return {
103
+ segments: segments.slice(1),
104
+ children: field.children
105
+ };
106
+ }
107
+ }
108
+
109
+ //# sourceMappingURL=FocusManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isObjectField","LayoutBuilderFactory","FocusManager","constructor","_fields","buildFocusPath","name","layout","segments","split","walkLayout","fieldScope","target","node","type","fieldIds","includes","diveIntoField","fieldName","diveIntoObjectNode","tabKey","id","tabsNodeKey","tab","tabs","result","tabId","length","field","get","childScope","resolveChildScope","inner","getInnerLayout","children","Array","isArray","activeTemplateId","stored","nextSegment","isList","index","parseInt","isNaN","item","items","slice"],"sources":["FocusManager.ts"],"sourcesContent":["import { isObjectField } from \"./ObjectField.js\";\nimport { LayoutBuilderFactory } from \"./LayoutBuilderFactory.js\";\nimport type { IField, IObjectField, LayoutNode, IObjectNode } from \"./abstractions.js\";\n\nexport interface TabActivation {\n tabKey: string;\n tabId: string;\n}\n\nexport class FocusManager {\n constructor(private _fields: Map<string, IField>) {}\n\n buildFocusPath(name: string, layout: LayoutNode[]): TabActivation[] | null {\n const segments = name.split(\".\");\n return this.walkLayout(layout, segments, this._fields);\n }\n\n private walkLayout(\n layout: LayoutNode[],\n segments: string[],\n fieldScope: Map<string, IField>\n ): TabActivation[] | null {\n const target = segments[0];\n\n for (const node of layout) {\n switch (node.type) {\n case \"row\": {\n if (!node.fieldIds.includes(target)) {\n break;\n }\n return this.diveIntoField(target, segments, fieldScope);\n }\n case \"object\": {\n if (node.fieldName !== target) {\n break;\n }\n return this.diveIntoObjectNode(node, segments, fieldScope);\n }\n case \"tabs\": {\n const tabKey = node.id || LayoutBuilderFactory.tabsNodeKey(node);\n for (const tab of node.tabs) {\n const result = this.walkLayout(tab.layout, segments, fieldScope);\n if (result !== null) {\n return [{ tabKey, tabId: tab.id }, ...result];\n }\n }\n break;\n }\n }\n }\n return null;\n }\n\n private diveIntoField(\n fieldName: string,\n segments: string[],\n fieldScope: Map<string, IField>\n ): TabActivation[] | null {\n if (segments.length === 1) {\n return [];\n }\n const field = fieldScope.get(fieldName);\n if (!field || !isObjectField(field)) {\n return [];\n }\n const childScope = this.resolveChildScope(field, segments);\n if (!childScope) {\n return [];\n }\n const inner = field.getInnerLayout();\n if (!inner) {\n return [];\n }\n return this.walkLayout(inner, childScope.segments, childScope.children);\n }\n\n private diveIntoObjectNode(\n node: IObjectNode,\n segments: string[],\n fieldScope: Map<string, IField>\n ): TabActivation[] | null {\n if (segments.length === 1) {\n return [];\n }\n const field = fieldScope.get(node.fieldName);\n if (!field || !isObjectField(field)) {\n return [];\n }\n const childScope = this.resolveChildScope(field, segments);\n if (!childScope) {\n return [];\n }\n const inner = Array.isArray(node.inner)\n ? node.inner\n : field.activeTemplateId\n ? (node.inner[field.activeTemplateId] ?? null)\n : null;\n if (!inner) {\n const stored = field.getInnerLayout();\n if (!stored) {\n return [];\n }\n return this.walkLayout(stored, childScope.segments, childScope.children);\n }\n return this.walkLayout(inner, childScope.segments, childScope.children);\n }\n\n private resolveChildScope(\n field: IObjectField,\n segments: string[]\n ): { segments: string[]; children: Map<string, IField> } | null {\n const nextSegment = segments[1];\n if (field.isList) {\n const index = parseInt(nextSegment, 10);\n if (!isNaN(index)) {\n const item = field.items[index];\n if (!item) {\n return null;\n }\n return { segments: segments.slice(2), children: item.children };\n }\n }\n return { segments: segments.slice(1), children: field.children };\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,15 +1,29 @@
1
- import type { IFormModel, IField, IFieldBuilder, IFieldBuilderRegistry, IFormVM, IFormError, IFormModelConfig, ILayoutModifier, IPositionedLayoutNode, ILayoutNodeAccessHandle, LayoutNode } from "./abstractions.js";
1
+ import type { IFormModel, IField, IFieldBuilder, IFieldBuilderRegistry, IFormVM, IFormError, IFormModelConfig, ILayoutBuilder, ILayoutNodeBuilder, ILayoutModifier, IPositionedLayoutNode, ILayoutNodeAccessHandle, IRule, LayoutNode, LayoutNodeVM, FormRule } from "./abstractions.js";
2
2
  export declare class FormModel implements IFormModel {
3
3
  private _fields;
4
+ private _builders;
4
5
  private _layout;
5
6
  private _baseline;
6
7
  private _submitted;
7
8
  private _validateOnChange;
8
9
  private _isValid;
9
- private _errors;
10
+ private _formRuleErrors;
10
11
  private _activeTabs;
11
- constructor(config: IFormModelConfig);
12
+ private _ruleEvaluators;
13
+ private _warnedRuleTypes;
14
+ private _formRules;
15
+ private _lastFocusedField;
16
+ private _registry;
17
+ private _layoutMutator;
18
+ private _layoutResolver;
19
+ private _focusManager;
20
+ constructor(config: IFormModelConfig, registry: IFieldBuilderRegistry);
21
+ evaluateRules(rules: IRule[] | undefined): {
22
+ visible: boolean;
23
+ disabled: boolean;
24
+ };
12
25
  field(name: string): IField;
26
+ focusField(name: string): void;
13
27
  fields(factory: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder | undefined>): void;
14
28
  layout(factory: (layout: ILayoutModifier) => (LayoutNode | IPositionedLayoutNode)[]): void;
15
29
  layout(nodeId: string): ILayoutNodeAccessHandle;
@@ -19,43 +33,25 @@ export declare class FormModel implements IFormModel {
19
33
  reset(): void;
20
34
  get isDirty(): boolean;
21
35
  get isValid(): boolean | null;
36
+ get submitted(): boolean;
22
37
  get errors(): IFormError[];
38
+ addRule(rule: FormRule): void;
39
+ setLayout(factory: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]): void;
23
40
  validate(): Promise<boolean>;
24
41
  submit<T = Record<string, unknown>>(): Promise<T | false>;
25
42
  get vm(): IFormVM;
43
+ get registry(): IFieldBuilderRegistry;
44
+ resolveChildLayout(layout: LayoutNode[], children: Map<string, IField>): LayoutNodeVM[];
26
45
  getField(name: string): IField | undefined;
27
46
  getFields(): Map<string, IField>;
28
- private _resolveLayout;
29
- private _resolveLayoutNode;
30
- private _resolveRowNode;
31
- private _resolveSeparatorNode;
32
- private _resolveTabsNode;
33
- private _resolveElementNode;
34
- private _tabHasErrors;
35
- private _collectFieldIdsFromLayout;
36
- private _tabsNodeKey;
47
+ getFieldBuilders(predicate?: (builder: IFieldBuilder) => boolean): IFieldBuilder[];
48
+ private _runFormRule;
49
+ private _tryGetField;
50
+ private _registerObjectNodeLayouts;
51
+ private _propagateAncestorRules;
37
52
  private _generateDefaultLayout;
38
53
  private _warnOrphanFields;
39
54
  private _snapshotBaseline;
40
55
  private _resetAllValidation;
41
- /**
42
- * Find the index of a layout node that matches the given target.
43
- * Matches: row containing fieldId, tabs by id, element by id/renderer.
44
- * Returns -1 if not found.
45
- */
46
- private _findLayoutIndex;
47
- private _nodeMatchesTarget;
48
- /**
49
- * Remove a target from the layout tree. Handles field IDs in rows,
50
- * and node IDs for tabs/elements. Drops rows that become empty.
51
- */
52
- private _removeFromLayout;
53
- /**
54
- * Insert a layout node relative to a target field ID.
55
- */
56
- private _insertIntoLayout;
57
- private _createModifierLayoutAPI;
58
- private _accessLayoutNode;
59
56
  private _createField;
60
- private _isPositionedNode;
61
57
  }