@webiny/app-admin 6.3.0-beta.2 → 6.3.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/base/Base/DefaultFieldRenderers.js +69 -5
- package/base/Base/DefaultFieldRenderers.js.map +1 -1
- package/base/Base/DefaultLayoutRenderers.js +5 -1
- package/base/Base/DefaultLayoutRenderers.js.map +1 -1
- package/base/Base/FieldRenderers/CheckboxesRenderer.d.ts +13 -0
- package/base/Base/FieldRenderers/CheckboxesRenderer.js +28 -0
- package/base/Base/FieldRenderers/CheckboxesRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/CodeEditorRenderer.d.ts +15 -0
- package/base/Base/FieldRenderers/CodeEditorRenderer.js +17 -0
- package/base/Base/FieldRenderers/CodeEditorRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/DateTimeInputsRenderer.d.ts +17 -0
- package/base/Base/FieldRenderers/DateTimeInputsRenderer.js +66 -0
- package/base/Base/FieldRenderers/DateTimeInputsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/DateTimeRenderer.d.ts +21 -0
- package/base/Base/FieldRenderers/DateTimeRenderer.js +46 -0
- package/base/Base/FieldRenderers/DateTimeRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/FilePickerRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/FilePickerRenderer.js +47 -0
- package/base/Base/FieldRenderers/FilePickerRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/FileUrlPickerRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/FileUrlPickerRenderer.js +25 -0
- package/base/Base/FieldRenderers/FileUrlPickerRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/HiddenRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/HiddenRenderer.js +5 -0
- package/base/Base/FieldRenderers/HiddenRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/HorizontalTabsRenderer.d.ts +5 -0
- package/base/Base/FieldRenderers/HorizontalTabsRenderer.js +27 -0
- package/base/Base/FieldRenderers/HorizontalTabsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/InputRenderer.d.ts +4 -7
- package/base/Base/FieldRenderers/InputRenderer.js +2 -2
- package/base/Base/FieldRenderers/InputRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/NumberInputRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/NumberInputRenderer.js +23 -0
- package/base/Base/FieldRenderers/NumberInputRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/NumberInputsRenderer.d.ts +14 -0
- package/base/Base/FieldRenderers/NumberInputsRenderer.js +49 -0
- package/base/Base/FieldRenderers/NumberInputsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.d.ts +14 -0
- package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js +20 -0
- package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.d.ts +14 -0
- package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.js +65 -0
- package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.d.ts +10 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.js +109 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.d.ts +17 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js +55 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +7 -3
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js +15 -19
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.d.ts +5 -8
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js +7 -50
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.d.ts +10 -0
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js +64 -0
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.d.ts +10 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js +85 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js.map +1 -0
- package/base/Base/FieldRenderers/PassthroughRenderer.d.ts +3 -6
- package/base/Base/FieldRenderers/PassthroughRenderer.js +9 -23
- package/base/Base/FieldRenderers/PassthroughRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/RadioButtonsRenderer.d.ts +13 -0
- package/base/Base/FieldRenderers/RadioButtonsRenderer.js +27 -0
- package/base/Base/FieldRenderers/RadioButtonsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/SelectRenderer.d.ts +6 -8
- package/base/Base/FieldRenderers/SelectRenderer.js +8 -5
- package/base/Base/FieldRenderers/SelectRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/SwitchRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/SwitchRenderer.js +19 -0
- package/base/Base/FieldRenderers/SwitchRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/TagsRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/TagsRenderer.js +21 -0
- package/base/Base/FieldRenderers/TagsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/TextInputsRenderer.d.ts +14 -0
- package/base/Base/FieldRenderers/TextInputsRenderer.js +48 -0
- package/base/Base/FieldRenderers/TextInputsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/TextareaRenderer.d.ts +3 -6
- package/base/Base/FieldRenderers/TextareaRenderer.js +3 -4
- package/base/Base/FieldRenderers/TextareaRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/TextareasRenderer.d.ts +14 -0
- package/base/Base/FieldRenderers/TextareasRenderer.js +51 -0
- package/base/Base/FieldRenderers/TextareasRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/VerticalTabsRenderer.js +2 -2
- package/base/Base/FieldRenderers/VerticalTabsRenderer.js.map +1 -1
- package/base/Base/Menus.js +5 -64
- package/base/Base/Menus.js.map +1 -1
- package/base/Base/RoutesConfig.js +6 -0
- package/base/Base/RoutesConfig.js.map +1 -1
- package/exports/admin/build-params.d.ts +2 -0
- package/exports/admin/build-params.js +3 -0
- package/exports/admin/build-params.js.map +1 -1
- package/exports/admin/form.d.ts +5 -0
- package/exports/admin/form.js +8 -0
- package/exports/admin/form.js.map +1 -1
- package/exports/admin/ui.d.ts +1 -0
- package/exports/admin/ui.js +1 -0
- package/exports/admin/ui.js.map +1 -1
- package/exports/admin.d.ts +3 -1
- package/exports/admin.js +3 -1
- package/exports/admin.js.map +1 -1
- package/features/formModel/ConditionRuleEvaluator.d.ts +9 -0
- package/features/formModel/ConditionRuleEvaluator.js +56 -0
- package/features/formModel/ConditionRuleEvaluator.js.map +1 -0
- package/features/formModel/Field.d.ts +50 -4
- package/features/formModel/Field.js +254 -35
- package/features/formModel/Field.js.map +1 -1
- package/features/formModel/FieldBuilder.d.ts +17 -35
- package/features/formModel/FieldBuilder.js +63 -100
- package/features/formModel/FieldBuilder.js.map +1 -1
- package/features/formModel/FieldBuilder.test.js +127 -13
- package/features/formModel/FieldBuilder.test.js.map +1 -1
- package/features/formModel/FieldBuilderRegistry.d.ts +4 -0
- package/features/formModel/FieldBuilderRegistry.js +31 -0
- package/features/formModel/FieldBuilderRegistry.js.map +1 -0
- package/features/formModel/FocusManager.d.ts +14 -0
- package/features/formModel/FocusManager.js +109 -0
- package/features/formModel/FocusManager.js.map +1 -0
- package/features/formModel/FormModel.d.ts +27 -31
- package/features/formModel/FormModel.js +210 -403
- package/features/formModel/FormModel.js.map +1 -1
- package/features/formModel/FormModel.test.js +2044 -193
- package/features/formModel/FormModel.test.js.map +1 -1
- package/features/formModel/FormModelFactory.d.ts +4 -2
- package/features/formModel/FormModelFactory.js +13 -3
- package/features/formModel/FormModelFactory.js.map +1 -1
- package/features/formModel/FormView.d.ts +2 -0
- package/features/formModel/FormView.js +44 -37
- package/features/formModel/FormView.js.map +1 -1
- package/features/formModel/LayoutBuilderFactory.d.ts +61 -0
- package/features/formModel/LayoutBuilderFactory.js +386 -0
- package/features/formModel/LayoutBuilderFactory.js.map +1 -0
- package/features/formModel/LayoutMutator.d.ts +11 -0
- package/features/formModel/LayoutMutator.js +136 -0
- package/features/formModel/LayoutMutator.js.map +1 -0
- package/features/formModel/LayoutResolver.d.ts +26 -0
- package/features/formModel/LayoutResolver.js +239 -0
- package/features/formModel/LayoutResolver.js.map +1 -0
- package/features/formModel/ObjectField.d.ts +55 -4
- package/features/formModel/ObjectField.js +499 -82
- package/features/formModel/ObjectField.js.map +1 -1
- package/features/formModel/Rules.test.d.ts +1 -0
- package/features/formModel/Rules.test.js +289 -0
- package/features/formModel/Rules.test.js.map +1 -0
- package/features/formModel/abstractions.d.ts +402 -52
- package/features/formModel/abstractions.js +55 -0
- package/features/formModel/abstractions.js.map +1 -1
- package/features/formModel/createFieldRenderer.d.ts +20 -0
- package/features/formModel/createFieldRenderer.js +15 -0
- package/features/formModel/createFieldRenderer.js.map +1 -0
- package/features/formModel/demo/FieldRenderersDemoPresenter.d.ts +18 -0
- package/features/formModel/demo/FieldRenderersDemoPresenter.js +225 -0
- package/features/formModel/demo/FieldRenderersDemoPresenter.js.map +1 -0
- package/features/formModel/demo/FormModelDemo.d.ts +4 -0
- package/features/formModel/demo/FormModelDemo.js +230 -0
- package/features/formModel/demo/FormModelDemo.js.map +1 -0
- package/features/formModel/demo/FormModelDemoPresenter.d.ts +22 -0
- package/features/formModel/demo/FormModelDemoPresenter.js +121 -0
- package/features/formModel/demo/FormModelDemoPresenter.js.map +1 -0
- package/features/formModel/demo/FormModelPhase11Presenter.d.ts +25 -0
- package/features/formModel/demo/FormModelPhase11Presenter.js +104 -0
- package/features/formModel/demo/FormModelPhase11Presenter.js.map +1 -0
- package/features/formModel/demo/FormModelPhase8c1Presenter.d.ts +23 -0
- package/features/formModel/demo/FormModelPhase8c1Presenter.js +62 -0
- package/features/formModel/demo/FormModelPhase8c1Presenter.js.map +1 -0
- package/features/formModel/feature.js +12 -0
- package/features/formModel/feature.js.map +1 -1
- package/features/formModel/fieldTypes/BooleanFieldType.d.ts +19 -0
- package/features/formModel/fieldTypes/BooleanFieldType.js +23 -0
- package/features/formModel/fieldTypes/BooleanFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/DateTimeFieldType.d.ts +173 -0
- package/features/formModel/fieldTypes/DateTimeFieldType.js +369 -0
- package/features/formModel/fieldTypes/DateTimeFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/FileFieldType.d.ts +18 -0
- package/features/formModel/fieldTypes/FileFieldType.js +20 -0
- package/features/formModel/fieldTypes/FileFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/FileUrlFieldType.d.ts +18 -0
- package/features/formModel/fieldTypes/FileUrlFieldType.js +20 -0
- package/features/formModel/fieldTypes/FileUrlFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/NumberFieldType.d.ts +19 -0
- package/features/formModel/fieldTypes/NumberFieldType.js +27 -0
- package/features/formModel/fieldTypes/NumberFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/ObjectFieldType.d.ts +34 -0
- package/features/formModel/fieldTypes/ObjectFieldType.js +109 -0
- package/features/formModel/fieldTypes/ObjectFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/TextFieldType.d.ts +18 -0
- package/features/formModel/fieldTypes/TextFieldType.js +20 -0
- package/features/formModel/fieldTypes/TextFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/index.d.ts +7 -0
- package/features/formModel/fieldTypes/index.js +9 -0
- package/features/formModel/fieldTypes/index.js.map +1 -0
- package/features/formModel/index.d.ts +13 -4
- package/features/formModel/index.js +21 -2
- package/features/formModel/index.js.map +1 -1
- package/features/formModel/renderers.d.ts +15 -1
- package/features/formModel/renderers.js +15 -1
- package/features/formModel/renderers.js.map +1 -1
- package/features/tools/LexicalContext/LexicalContext.d.ts +14 -0
- package/features/tools/LexicalContext/LexicalContext.js +22 -0
- package/features/tools/LexicalContext/LexicalContext.js.map +1 -0
- package/features/tools/LexicalContext/abstractions.d.ts +11 -0
- package/features/tools/LexicalContext/abstractions.js +4 -0
- package/features/tools/LexicalContext/abstractions.js.map +1 -0
- package/features/tools/LexicalContext/index.d.ts +2 -0
- package/features/tools/LexicalContext/index.js +3 -0
- package/features/tools/LexicalContext/index.js.map +1 -0
- package/features/tools/feature.js +2 -0
- package/features/tools/feature.js.map +1 -1
- package/features/tools/index.d.ts +1 -0
- package/features/tools/index.js +1 -0
- package/features/tools/index.js.map +1 -1
- package/index.d.ts +8 -1
- package/index.js +7 -0
- package/index.js.map +1 -1
- package/package.json +30 -24
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js +1 -1
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js.map +1 -1
- package/presentation/lexicalContext/useLexicalContext.d.ts +3 -0
- package/presentation/lexicalContext/useLexicalContext.js +14 -0
- package/presentation/lexicalContext/useLexicalContext.js.map +1 -0
- package/presentation/textToLexicalTool/TextToLexicalTool.d.ts +3 -0
- package/presentation/textToLexicalTool/TextToLexicalTool.js +6 -2
- package/presentation/textToLexicalTool/TextToLexicalTool.js.map +1 -1
- package/presentation/textToLexicalTool/textToLexicalState.d.ts +2 -1
- package/presentation/textToLexicalTool/textToLexicalState.js +15 -3
- package/presentation/textToLexicalTool/textToLexicalState.js.map +1 -1
- package/routes.d.ts +1 -0
- package/routes.js +4 -0
- package/routes.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.d.ts +0 -21
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.js +0 -28
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.js.map +0 -1
|
@@ -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":"AAAA,SAASA,aAAa;AACtB,SAASC,oBAAoB;AAQ7B,OAAO,MAAMC,YAAY,CAAC;EACtBC,WAAWA,CAASC,OAA4B,EAAE;IAAA,KAA9BA,OAA4B,GAA5BA,OAA4B;EAAG;EAEnDC,cAAcA,CAACC,IAAY,EAAEC,MAAoB,EAA0B;IACvE,MAAMC,QAAQ,GAAGF,IAAI,CAACG,KAAK,CAAC,GAAG,CAAC;IAChC,OAAO,IAAI,CAACC,UAAU,CAACH,MAAM,EAAEC,QAAQ,EAAE,IAAI,CAACJ,OAAO,CAAC;EAC1D;EAEQM,UAAUA,CACdH,MAAoB,EACpBC,QAAkB,EAClBG,UAA+B,EACT;IACtB,MAAMC,MAAM,GAAGJ,QAAQ,CAAC,CAAC,CAAC;IAE1B,KAAK,MAAMK,IAAI,IAAIN,MAAM,EAAE;MACvB,QAAQM,IAAI,CAACC,IAAI;QACb,KAAK,KAAK;UAAE;YACR,IAAI,CAACD,IAAI,CAACE,QAAQ,CAACC,QAAQ,CAACJ,MAAM,CAAC,EAAE;cACjC;YACJ;YACA,OAAO,IAAI,CAACK,aAAa,CAACL,MAAM,EAAEJ,QAAQ,EAAEG,UAAU,CAAC;UAC3D;QACA,KAAK,QAAQ;UAAE;YACX,IAAIE,IAAI,CAACK,SAAS,KAAKN,MAAM,EAAE;cAC3B;YACJ;YACA,OAAO,IAAI,CAACO,kBAAkB,CAACN,IAAI,EAAEL,QAAQ,EAAEG,UAAU,CAAC;UAC9D;QACA,KAAK,MAAM;UAAE;YACT,MAAMS,MAAM,GAAGP,IAAI,CAACQ,EAAE,IAAIpB,oBAAoB,CAACqB,WAAW,CAACT,IAAI,CAAC;YAChE,KAAK,MAAMU,GAAG,IAAIV,IAAI,CAACW,IAAI,EAAE;cACzB,MAAMC,MAAM,GAAG,IAAI,CAACf,UAAU,CAACa,GAAG,CAAChB,MAAM,EAAEC,QAAQ,EAAEG,UAAU,CAAC;cAChE,IAAIc,MAAM,KAAK,IAAI,EAAE;gBACjB,OAAO,CAAC;kBAAEL,MAAM;kBAAEM,KAAK,EAAEH,GAAG,CAACF;gBAAG,CAAC,EAAE,GAAGI,MAAM,CAAC;cACjD;YACJ;YACA;UACJ;MACJ;IACJ;IACA,OAAO,IAAI;EACf;EAEQR,aAAaA,CACjBC,SAAiB,EACjBV,QAAkB,EAClBG,UAA+B,EACT;IACtB,IAAIH,QAAQ,CAACmB,MAAM,KAAK,CAAC,EAAE;MACvB,OAAO,EAAE;IACb;IACA,MAAMC,KAAK,GAAGjB,UAAU,CAACkB,GAAG,CAACX,SAAS,CAAC;IACvC,IAAI,CAACU,KAAK,IAAI,CAAC5B,aAAa,CAAC4B,KAAK,CAAC,EAAE;MACjC,OAAO,EAAE;IACb;IACA,MAAME,UAAU,GAAG,IAAI,CAACC,iBAAiB,CAACH,KAAK,EAAEpB,QAAQ,CAAC;IAC1D,IAAI,CAACsB,UAAU,EAAE;MACb,OAAO,EAAE;IACb;IACA,MAAME,KAAK,GAAGJ,KAAK,CAACK,cAAc,CAAC,CAAC;IACpC,IAAI,CAACD,KAAK,EAAE;MACR,OAAO,EAAE;IACb;IACA,OAAO,IAAI,CAACtB,UAAU,CAACsB,KAAK,EAAEF,UAAU,CAACtB,QAAQ,EAAEsB,UAAU,CAACI,QAAQ,CAAC;EAC3E;EAEQf,kBAAkBA,CACtBN,IAAiB,EACjBL,QAAkB,EAClBG,UAA+B,EACT;IACtB,IAAIH,QAAQ,CAACmB,MAAM,KAAK,CAAC,EAAE;MACvB,OAAO,EAAE;IACb;IACA,MAAMC,KAAK,GAAGjB,UAAU,CAACkB,GAAG,CAAChB,IAAI,CAACK,SAAS,CAAC;IAC5C,IAAI,CAACU,KAAK,IAAI,CAAC5B,aAAa,CAAC4B,KAAK,CAAC,EAAE;MACjC,OAAO,EAAE;IACb;IACA,MAAME,UAAU,GAAG,IAAI,CAACC,iBAAiB,CAACH,KAAK,EAAEpB,QAAQ,CAAC;IAC1D,IAAI,CAACsB,UAAU,EAAE;MACb,OAAO,EAAE;IACb;IACA,MAAME,KAAK,GAAGG,KAAK,CAACC,OAAO,CAACvB,IAAI,CAACmB,KAAK,CAAC,GACjCnB,IAAI,CAACmB,KAAK,GACVJ,KAAK,CAACS,gBAAgB,GACnBxB,IAAI,CAACmB,KAAK,CAACJ,KAAK,CAACS,gBAAgB,CAAC,IAAI,IAAI,GAC3C,IAAI;IACZ,IAAI,CAACL,KAAK,EAAE;MACR,MAAMM,MAAM,GAAGV,KAAK,CAACK,cAAc,CAAC,CAAC;MACrC,IAAI,CAACK,MAAM,EAAE;QACT,OAAO,EAAE;MACb;MACA,OAAO,IAAI,CAAC5B,UAAU,CAAC4B,MAAM,EAAER,UAAU,CAACtB,QAAQ,EAAEsB,UAAU,CAACI,QAAQ,CAAC;IAC5E;IACA,OAAO,IAAI,CAACxB,UAAU,CAACsB,KAAK,EAAEF,UAAU,CAACtB,QAAQ,EAAEsB,UAAU,CAACI,QAAQ,CAAC;EAC3E;EAEQH,iBAAiBA,CACrBH,KAAmB,EACnBpB,QAAkB,EAC0C;IAC5D,MAAM+B,WAAW,GAAG/B,QAAQ,CAAC,CAAC,CAAC;IAC/B,IAAIoB,KAAK,CAACY,MAAM,EAAE;MACd,MAAMC,KAAK,GAAGC,QAAQ,CAACH,WAAW,EAAE,EAAE,CAAC;MACvC,IAAI,CAACI,KAAK,CAACF,KAAK,CAAC,EAAE;QACf,MAAMG,IAAI,GAAGhB,KAAK,CAACiB,KAAK,CAACJ,KAAK,CAAC;QAC/B,IAAI,CAACG,IAAI,EAAE;UACP,OAAO,IAAI;QACf;QACA,OAAO;UAAEpC,QAAQ,EAAEA,QAAQ,CAACsC,KAAK,CAAC,CAAC,CAAC;UAAEZ,QAAQ,EAAEU,IAAI,CAACV;QAAS,CAAC;MACnE;IACJ;IACA,OAAO;MAAE1B,QAAQ,EAAEA,QAAQ,CAACsC,KAAK,CAAC,CAAC,CAAC;MAAEZ,QAAQ,EAAEN,KAAK,CAACM;IAAS,CAAC;EACpE;AACJ","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
|
|
10
|
+
private _formRuleErrors;
|
|
10
11
|
private _activeTabs;
|
|
11
|
-
|
|
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
|
-
|
|
29
|
-
private
|
|
30
|
-
private
|
|
31
|
-
private
|
|
32
|
-
private
|
|
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
|
}
|