@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.
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 +30 -24
  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,62 @@
1
+ import { makeAutoObservable, toJS } from "mobx";
2
+ /**
3
+ * Demo presenter exercising Phase 8c.1: nested object layouts. The form has a
4
+ * top-level `page` object whose inner layout contains tabs, and one of those
5
+ * tabs contains a nested `seo` object with its own row layout. The Phase 8c.1
6
+ * registrar walks the inner layout (including tabs) and forwards the nested
7
+ * `layout.object("seo", ...)` to the seo field at build time.
8
+ */
9
+ export class FormModelPhase8c1Presenter {
10
+ lastSubmitted = null;
11
+ isSubmitting = false;
12
+ constructor(formFactory) {
13
+ this.form = formFactory.create({
14
+ fields: fields => ({
15
+ page: fields.object().label("Page").fields(f => ({
16
+ title: f.text().label("Title").defaultValue("Welcome"),
17
+ slug: f.text().label("Slug").defaultValue("welcome"),
18
+ seo: f.object().label("SEO").fields(g => ({
19
+ metaTitle: g.text().label("Meta title"),
20
+ metaDescription: g.text().label("Meta description"),
21
+ og: g.object().label("Open Graph").fields(h => ({
22
+ ogTitle: h.text().label("OG title"),
23
+ ogImage: h.text().label("OG image URL")
24
+ }))
25
+ })),
26
+ body: f.text().label("Body content")
27
+ }))
28
+ }),
29
+ layout: layout => [layout.object("page", l => [l.tabs("pageTabs").tab("general", tab => {
30
+ tab.label("General").layout(l => [l.row("title", "slug"), l.row("body")]);
31
+ }).tab("seo", tab => {
32
+ tab.label("SEO").layout(l => [l.object("seo", inner => [inner.row("metaTitle"), inner.row("metaDescription"), inner.object("og", og => [og.row("ogTitle", "ogImage")])])]);
33
+ })])]
34
+ });
35
+ makeAutoObservable(this);
36
+ }
37
+ get vm() {
38
+ return {
39
+ form: this.form.vm,
40
+ data: toJS(this.form.getData()),
41
+ lastSubmitted: this.lastSubmitted,
42
+ isSubmitting: this.isSubmitting
43
+ };
44
+ }
45
+ async submit() {
46
+ this.isSubmitting = true;
47
+ try {
48
+ const result = await this.form.submit();
49
+ if (result !== false) {
50
+ this.lastSubmitted = toJS(result);
51
+ }
52
+ } finally {
53
+ this.isSubmitting = false;
54
+ }
55
+ }
56
+ reset() {
57
+ this.form.reset();
58
+ this.lastSubmitted = null;
59
+ }
60
+ }
61
+
62
+ //# sourceMappingURL=FormModelPhase8c1Presenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["makeAutoObservable","toJS","FormModelPhase8c1Presenter","lastSubmitted","isSubmitting","constructor","formFactory","form","create","fields","page","object","label","f","title","text","defaultValue","slug","seo","g","metaTitle","metaDescription","og","h","ogTitle","ogImage","body","layout","l","tabs","tab","row","inner","vm","data","getData","submit","result","reset"],"sources":["FormModelPhase8c1Presenter.ts"],"sourcesContent":["import { makeAutoObservable, toJS } from \"mobx\";\nimport type { IFormModel, IFormModelFactory, IFormVM } from \"../abstractions.js\";\n\nexport interface FormModelPhase8c1VM {\n form: IFormVM;\n data: Record<string, unknown>;\n lastSubmitted: Record<string, unknown> | null;\n isSubmitting: boolean;\n}\n\n/**\n * Demo presenter exercising Phase 8c.1: nested object layouts. The form has a\n * top-level `page` object whose inner layout contains tabs, and one of those\n * tabs contains a nested `seo` object with its own row layout. The Phase 8c.1\n * registrar walks the inner layout (including tabs) and forwards the nested\n * `layout.object(\"seo\", ...)` to the seo field at build time.\n */\nexport class FormModelPhase8c1Presenter {\n private form: IFormModel;\n private lastSubmitted: Record<string, unknown> | null = null;\n private isSubmitting = false;\n\n constructor(formFactory: IFormModelFactory) {\n this.form = formFactory.create({\n fields: fields => ({\n page: fields\n .object()\n .label(\"Page\")\n .fields(f => ({\n title: f.text().label(\"Title\").defaultValue(\"Welcome\"),\n slug: f.text().label(\"Slug\").defaultValue(\"welcome\"),\n seo: f\n .object()\n .label(\"SEO\")\n .fields(g => ({\n metaTitle: g.text().label(\"Meta title\"),\n metaDescription: g.text().label(\"Meta description\"),\n og: g\n .object()\n .label(\"Open Graph\")\n .fields(h => ({\n ogTitle: h.text().label(\"OG title\"),\n ogImage: h.text().label(\"OG image URL\")\n }))\n })),\n body: f.text().label(\"Body content\")\n }))\n }),\n layout: layout => [\n layout.object(\"page\", l => [\n l\n .tabs(\"pageTabs\")\n .tab(\"general\", tab => {\n tab.label(\"General\").layout(l => [\n l.row(\"title\", \"slug\"),\n l.row(\"body\")\n ]);\n })\n .tab(\"seo\", tab => {\n tab.label(\"SEO\").layout(l => [\n l.object(\"seo\", inner => [\n inner.row(\"metaTitle\"),\n inner.row(\"metaDescription\"),\n inner.object(\"og\", og => [og.row(\"ogTitle\", \"ogImage\")])\n ])\n ]);\n })\n ])\n ]\n });\n\n makeAutoObservable(this);\n }\n\n get vm(): FormModelPhase8c1VM {\n return {\n form: this.form.vm,\n data: toJS(this.form.getData()),\n lastSubmitted: this.lastSubmitted,\n isSubmitting: this.isSubmitting\n };\n }\n\n async submit(): Promise<void> {\n this.isSubmitting = true;\n try {\n const result = await this.form.submit<Record<string, unknown>>();\n if (result !== false) {\n this.lastSubmitted = toJS(result);\n }\n } finally {\n this.isSubmitting = false;\n }\n }\n\n reset(): void {\n this.form.reset();\n this.lastSubmitted = null;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,9 +1,21 @@
1
1
  import { createFeature } from "@webiny/feature/admin";
2
2
  import { FormModelFactory as Abstraction } from "./abstractions.js";
3
3
  import { FormModelFactory } from "./FormModelFactory.js";
4
+ import { ConditionRuleEvaluator } from "./ConditionRuleEvaluator.js";
5
+ import { FieldBuilderRegistry } from "./FieldBuilderRegistry.js";
6
+ import { TextFieldType, NumberFieldType, BooleanFieldType, DateTimeFieldType, FileFieldType, FileUrlFieldType, ObjectFieldType } from "./fieldTypes/index.js";
4
7
  export const FormModelFeature = createFeature({
5
8
  name: "FormModel",
6
9
  register(container) {
10
+ container.register(TextFieldType);
11
+ container.register(NumberFieldType);
12
+ container.register(BooleanFieldType);
13
+ container.register(DateTimeFieldType);
14
+ container.register(FileFieldType);
15
+ container.register(FileUrlFieldType);
16
+ container.register(ObjectFieldType);
17
+ container.register(FieldBuilderRegistry).inSingletonScope();
18
+ container.register(ConditionRuleEvaluator).inSingletonScope();
7
19
  container.register(FormModelFactory).inSingletonScope();
8
20
  },
9
21
  resolve(container) {
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","FormModelFactory","Abstraction","FormModelFeature","name","register","container","inSingletonScope","resolve","formModelFactory"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { FormModelFactory as Abstraction } from \"./abstractions.js\";\nimport { FormModelFactory } from \"./FormModelFactory.js\";\n\nexport const FormModelFeature = createFeature({\n name: \"FormModel\",\n register(container) {\n container.register(FormModelFactory).inSingletonScope();\n },\n resolve(container) {\n return {\n formModelFactory: container.resolve(Abstraction)\n };\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,uBAAuB;AACrD,SAASC,gBAAgB,IAAIC,WAAW;AACxC,SAASD,gBAAgB;AAEzB,OAAO,MAAME,gBAAgB,GAAGH,aAAa,CAAC;EAC1CI,IAAI,EAAE,WAAW;EACjBC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACJ,gBAAgB,CAAC,CAACM,gBAAgB,CAAC,CAAC;EAC3D,CAAC;EACDC,OAAOA,CAACF,SAAS,EAAE;IACf,OAAO;MACHG,gBAAgB,EAAEH,SAAS,CAACE,OAAO,CAACN,WAAW;IACnD,CAAC;EACL;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createFeature","FormModelFactory","Abstraction","ConditionRuleEvaluator","FieldBuilderRegistry","TextFieldType","NumberFieldType","BooleanFieldType","DateTimeFieldType","FileFieldType","FileUrlFieldType","ObjectFieldType","FormModelFeature","name","register","container","inSingletonScope","resolve","formModelFactory"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { FormModelFactory as Abstraction } from \"./abstractions.js\";\nimport { FormModelFactory } from \"./FormModelFactory.js\";\nimport { ConditionRuleEvaluator } from \"./ConditionRuleEvaluator.js\";\nimport { FieldBuilderRegistry } from \"./FieldBuilderRegistry.js\";\nimport {\n TextFieldType,\n NumberFieldType,\n BooleanFieldType,\n DateTimeFieldType,\n FileFieldType,\n FileUrlFieldType,\n ObjectFieldType\n} from \"./fieldTypes/index.js\";\n\nexport const FormModelFeature = createFeature({\n name: \"FormModel\",\n register(container) {\n container.register(TextFieldType);\n container.register(NumberFieldType);\n container.register(BooleanFieldType);\n container.register(DateTimeFieldType);\n container.register(FileFieldType);\n container.register(FileUrlFieldType);\n container.register(ObjectFieldType);\n\n container.register(FieldBuilderRegistry).inSingletonScope();\n container.register(ConditionRuleEvaluator).inSingletonScope();\n container.register(FormModelFactory).inSingletonScope();\n },\n resolve(container) {\n return {\n formModelFactory: container.resolve(Abstraction)\n };\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,uBAAuB;AACrD,SAASC,gBAAgB,IAAIC,WAAW;AACxC,SAASD,gBAAgB;AACzB,SAASE,sBAAsB;AAC/B,SAASC,oBAAoB;AAC7B,SACIC,aAAa,EACbC,eAAe,EACfC,gBAAgB,EAChBC,iBAAiB,EACjBC,aAAa,EACbC,gBAAgB,EAChBC,eAAe;AAGnB,OAAO,MAAMC,gBAAgB,GAAGZ,aAAa,CAAC;EAC1Ca,IAAI,EAAE,WAAW;EACjBC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACT,aAAa,CAAC;IACjCU,SAAS,CAACD,QAAQ,CAACR,eAAe,CAAC;IACnCS,SAAS,CAACD,QAAQ,CAACP,gBAAgB,CAAC;IACpCQ,SAAS,CAACD,QAAQ,CAACN,iBAAiB,CAAC;IACrCO,SAAS,CAACD,QAAQ,CAACL,aAAa,CAAC;IACjCM,SAAS,CAACD,QAAQ,CAACJ,gBAAgB,CAAC;IACpCK,SAAS,CAACD,QAAQ,CAACH,eAAe,CAAC;IAEnCI,SAAS,CAACD,QAAQ,CAACV,oBAAoB,CAAC,CAACY,gBAAgB,CAAC,CAAC;IAC3DD,SAAS,CAACD,QAAQ,CAACX,sBAAsB,CAAC,CAACa,gBAAgB,CAAC,CAAC;IAC7DD,SAAS,CAACD,QAAQ,CAACb,gBAAgB,CAAC,CAACe,gBAAgB,CAAC,CAAC;EAC3D,CAAC;EACDC,OAAOA,CAACF,SAAS,EAAE;IACf,OAAO;MACHG,gBAAgB,EAAEH,SAAS,CAACE,OAAO,CAACf,WAAW;IACnD,CAAC;EACL;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ import { type IFieldTypeFactory } from "../abstractions.js";
2
+ import { FieldBuilder } from "../FieldBuilder.js";
3
+ export declare class BooleanFieldBuilder extends FieldBuilder<"boolean"> {
4
+ constructor();
5
+ normalizeValue(value: unknown): unknown;
6
+ }
7
+ declare class BooleanFieldTypeFactory implements IFieldTypeFactory {
8
+ readonly type = "boolean";
9
+ create(): BooleanFieldBuilder;
10
+ }
11
+ export declare const BooleanFieldType: typeof BooleanFieldTypeFactory & {
12
+ __abstraction: import("@webiny/di").Abstraction<IFieldTypeFactory>;
13
+ };
14
+ declare module "../abstractions.js" {
15
+ interface IFieldBuilderRegistry {
16
+ boolean(): IFieldBuilder<"boolean", false, boolean | null>;
17
+ }
18
+ }
19
+ export {};
@@ -0,0 +1,23 @@
1
+ import { FieldType } from "../abstractions.js";
2
+ import { FieldBuilder } from "../FieldBuilder.js";
3
+ export class BooleanFieldBuilder extends FieldBuilder {
4
+ constructor() {
5
+ super("boolean");
6
+ this._config.renderer = "switch";
7
+ }
8
+ normalizeValue(value) {
9
+ return Boolean(value);
10
+ }
11
+ }
12
+ class BooleanFieldTypeFactory {
13
+ type = "boolean";
14
+ create() {
15
+ return new BooleanFieldBuilder();
16
+ }
17
+ }
18
+ export const BooleanFieldType = FieldType.createImplementation({
19
+ implementation: BooleanFieldTypeFactory,
20
+ dependencies: []
21
+ });
22
+
23
+ //# sourceMappingURL=BooleanFieldType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FieldType","FieldBuilder","BooleanFieldBuilder","constructor","_config","renderer","normalizeValue","value","Boolean","BooleanFieldTypeFactory","type","create","BooleanFieldType","createImplementation","implementation","dependencies"],"sources":["BooleanFieldType.ts"],"sourcesContent":["import { FieldType, type IFieldTypeFactory } from \"../abstractions.js\";\nimport { FieldBuilder } from \"../FieldBuilder.js\";\n\nexport class BooleanFieldBuilder extends FieldBuilder<\"boolean\"> {\n constructor() {\n super(\"boolean\");\n this._config.renderer = \"switch\";\n }\n\n override normalizeValue(value: unknown): unknown {\n return Boolean(value);\n }\n}\n\nclass BooleanFieldTypeFactory implements IFieldTypeFactory {\n readonly type = \"boolean\";\n create() {\n return new BooleanFieldBuilder();\n }\n}\n\nexport const BooleanFieldType = FieldType.createImplementation({\n implementation: BooleanFieldTypeFactory,\n dependencies: []\n});\n\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n boolean(): IFieldBuilder<\"boolean\", false, boolean | null>;\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS;AAClB,SAASC,YAAY;AAErB,OAAO,MAAMC,mBAAmB,SAASD,YAAY,CAAY;EAC7DE,WAAWA,CAAA,EAAG;IACV,KAAK,CAAC,SAAS,CAAC;IAChB,IAAI,CAACC,OAAO,CAACC,QAAQ,GAAG,QAAQ;EACpC;EAESC,cAAcA,CAACC,KAAc,EAAW;IAC7C,OAAOC,OAAO,CAACD,KAAK,CAAC;EACzB;AACJ;AAEA,MAAME,uBAAuB,CAA8B;EAC9CC,IAAI,GAAG,SAAS;EACzBC,MAAMA,CAAA,EAAG;IACL,OAAO,IAAIT,mBAAmB,CAAC,CAAC;EACpC;AACJ;AAEA,OAAO,MAAMU,gBAAgB,GAAGZ,SAAS,CAACa,oBAAoB,CAAC;EAC3DC,cAAc,EAAEL,uBAAuB;EACvCM,YAAY,EAAE;AAClB,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,173 @@
1
+ import { type IFieldTypeFactory } from "../abstractions.js";
2
+ import { FieldBuilder } from "../FieldBuilder.js";
3
+ export declare class DateTimeFieldBuilder extends FieldBuilder<"datetime"> {
4
+ private _subtype;
5
+ constructor();
6
+ list(): this;
7
+ /**
8
+ * Calendar date only.
9
+ * @example datetime().dateOnly()
10
+ *
11
+ * Value format: `"2026-05-01"` (YYYY-MM-DD)
12
+ */
13
+ dateOnly(): this;
14
+ /**
15
+ * Time only, no date component.
16
+ * @example datetime().timeOnly()
17
+ *
18
+ * Value format: `"14:30:00"` (HH:mm:ss)
19
+ */
20
+ timeOnly(): this;
21
+ /**
22
+ * Date and time with explicit timezone offset.
23
+ * @example datetime().withTimezone()
24
+ *
25
+ * Value format: `"2026-05-01T14:30:00+02:00"` (ISO 8601 with offset)
26
+ */
27
+ withTimezone(): this;
28
+ /**
29
+ * Date and time in UTC, no timezone offset.
30
+ * @example datetime().withoutTimezone()
31
+ *
32
+ * Value format: `"2026-05-01T14:30:00.000Z"` (ISO 8601 UTC)
33
+ */
34
+ withoutTimezone(): this;
35
+ /**
36
+ * Month and year picker.
37
+ * @example datetime().monthOnly()
38
+ *
39
+ * Value format: `"2026-05"` (YYYY-MM)
40
+ */
41
+ monthOnly(): this;
42
+ /**
43
+ * ISO week picker. Selecting any day highlights and selects the full week.
44
+ * @example
45
+ * datetime().weekOnly()
46
+ * datetime().weekOnly({ startsOn: 1 }) // weeks start on Monday
47
+ *
48
+ * Value format: `"2026-W18"` (YYYY-Www)
49
+ */
50
+ weekOnly(options?: {
51
+ startsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
52
+ }): this;
53
+ /**
54
+ * Year picker with a scrollable grid.
55
+ * @example
56
+ * datetime().yearOnly()
57
+ * datetime().yearOnly({ range: [2010, 2030] })
58
+ *
59
+ * Value format: `2026` (number)
60
+ */
61
+ yearOnly(options?: {
62
+ range?: [number, number];
63
+ }): this;
64
+ /**
65
+ * Date range picker with a two-month calendar.
66
+ * @example datetime().dateRange()
67
+ *
68
+ * Value format: `{ from: "2026-05-01", to: "2026-05-15" }`
69
+ */
70
+ dateRange(): this;
71
+ /**
72
+ * Select multiple individual dates.
73
+ * @example datetime().multipleDates()
74
+ *
75
+ * Value format: `["2026-05-01", "2026-05-03"]`
76
+ */
77
+ multipleDates(): this;
78
+ /**
79
+ * Select multiple months.
80
+ * @example datetime().multipleMonths()
81
+ *
82
+ * Value format: `["2026-01", "2026-03"]`
83
+ */
84
+ multipleMonths(): this;
85
+ /**
86
+ * Select multiple years.
87
+ * @example
88
+ * datetime().multipleYears()
89
+ * datetime().multipleYears({ range: [2020, 2035] })
90
+ *
91
+ * Value format: `[2024, 2025, 2026]`
92
+ */
93
+ multipleYears(options?: {
94
+ range?: [number, number];
95
+ }): this;
96
+ /**
97
+ * Add quick-select preset buttons to the picker. Available on all variants.
98
+ * Each preset's `value` function is called at click time, and the variant
99
+ * handles formatting the Date into its value type.
100
+ * @example
101
+ * datetime().dateOnly().presets([
102
+ * { label: "Today", value: () => new Date() },
103
+ * { label: "In a week", value: () => addDays(new Date(), 7) }
104
+ * ])
105
+ */
106
+ presets(presets: Array<{
107
+ label: string;
108
+ value: () => Date;
109
+ }>): this;
110
+ /**
111
+ * Customize the display format shown in the picker trigger.
112
+ * Uses date-fns format tokens.
113
+ * @example
114
+ * datetime().dateOnly().displayFormat("MM/dd/yyyy") // "05/01/2026"
115
+ * datetime().dateOnly().displayFormat("dd MMM yyyy") // "01 May 2026"
116
+ * datetime().monthOnly().displayFormat("MMMM yyyy") // "May 2026"
117
+ */
118
+ displayFormat(format: string): this;
119
+ normalizeValue(value: unknown): unknown;
120
+ }
121
+ declare class DateTimeFieldTypeFactory implements IFieldTypeFactory {
122
+ readonly type = "datetime";
123
+ create(_registry: any): DateTimeFieldBuilder;
124
+ }
125
+ export declare const DateTimeFieldType: typeof DateTimeFieldTypeFactory & {
126
+ __abstraction: import("@webiny/di").Abstraction<IFieldTypeFactory>;
127
+ };
128
+ declare module "../abstractions.js" {
129
+ interface IFieldBuilderRegistry {
130
+ /**
131
+ * Defines a field that stores date and/or time values.
132
+ *
133
+ * Variant methods (pick one):
134
+ * - `dateOnly()` — "2026-05-01"
135
+ * - `timeOnly()` — "14:30:00"
136
+ * - `withoutTimezone()` — "2026-05-01T14:30:00.000Z"
137
+ * - `withTimezone()` — "2026-05-01T14:30:00+02:00"
138
+ * - `monthOnly()` — "2026-05"
139
+ * - `weekOnly()` — "2026-W18"
140
+ * - `yearOnly()` — 2026
141
+ * - `dateRange()` — { from: "2026-05-01", to: "2026-05-15" }
142
+ * - `multipleDates()` — ["2026-05-01", "2026-05-03"]
143
+ * - `multipleMonths()` — ["2026-01", "2026-03"]
144
+ * - `multipleYears()` — [2024, 2025, 2026]
145
+ *
146
+ * Configuration methods (chain after variant):
147
+ * - `.presets([...])` — quick-select buttons (all variants)
148
+ * - `.displayFormat("MM/dd/yyyy")` — customize trigger display
149
+ *
150
+ * Variant-specific options (passed to variant method):
151
+ * - `yearOnly({ range: [2020, 2030] })` — year range
152
+ * - `multipleYears({ range: [2020, 2035] })` — year range
153
+ * - `weekOnly({ startsOn: 1 })` — first day of week (0=Sun, 1=Mon)
154
+ *
155
+ * @example
156
+ * datetime() // full UTC datetime (default)
157
+ * datetime().dateOnly() // birthdays, due dates, holidays
158
+ * datetime().timeOnly() // opening hours, daily reminders
159
+ * datetime().withTimezone() // events tied to a specific locale
160
+ * datetime().withoutTimezone() // timestamps, logs, sortable moments
161
+ * datetime().monthOnly() // billing cycles, report periods
162
+ * datetime().weekOnly() // sprint planning, weekly schedules
163
+ * datetime().yearOnly({ range: [2010, 2030] }) // fiscal years
164
+ * datetime().dateRange() // vacation requests, booking windows
165
+ * datetime().multipleDates() // blackout dates, recurring events
166
+ * datetime().multipleMonths() // seasonal availability
167
+ * datetime().multipleYears({ range: [2020, 2035] }) // multi-year budgets
168
+ * datetime().dateOnly().presets([...]).displayFormat("dd/MM/yyyy")
169
+ */
170
+ datetime(): DateTimeFieldBuilder;
171
+ }
172
+ }
173
+ export {};