@webiny/app-admin 6.3.0-beta.2 → 6.3.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
@@ -1,15 +1,12 @@
1
1
  import React from "react";
2
- import type { IFieldVM } from "../../../features/formModel/index.js";
3
2
  declare module "../../../features/formModel/abstractions.js" {
4
3
  interface IFieldRendererRegistry {
5
- input: {
4
+ textInput: {
6
5
  fieldType: "text";
7
6
  settings: undefined;
8
7
  };
9
8
  }
10
9
  }
11
- export declare const InputRenderer: (({ field }: {
12
- field: IFieldVM;
13
- }) => React.JSX.Element) & {
14
- displayName: string;
15
- };
10
+ export declare const InputRenderer: React.ComponentType<{
11
+ field: import("../../..").IFieldVM;
12
+ }>;
@@ -1,8 +1,8 @@
1
1
  import React from "react";
2
- import { observer } from "mobx-react-lite";
2
+ import { createFieldRenderer } from "../../../features/formModel/createFieldRenderer.js";
3
3
  import { Input } from "@webiny/admin-ui";
4
4
  import { DelayedOnChange } from "@webiny/admin-ui";
5
- export const InputRenderer = observer(({
5
+ export const InputRenderer = createFieldRenderer(({
6
6
  field
7
7
  }) => {
8
8
  return /*#__PURE__*/React.createElement(DelayedOnChange, {
@@ -1 +1 @@
1
- {"version":3,"names":["React","observer","Input","DelayedOnChange","InputRenderer","field","createElement","value","onChange","label","placeholder","description","note","required","disabled","validation","onBlur"],"sources":["InputRenderer.tsx"],"sourcesContent":["import React from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { Input } from \"@webiny/admin-ui\";\nimport { DelayedOnChange } from \"@webiny/admin-ui\";\nimport type { IFieldVM } from \"~/features/formModel/index.js\";\n\ndeclare module \"../../../features/formModel/abstractions.js\" {\n interface IFieldRendererRegistry {\n input: { fieldType: \"text\"; settings: undefined };\n }\n}\n\nexport const InputRenderer = observer(({ field }: { field: IFieldVM }) => {\n return (\n <DelayedOnChange value={field.value} onChange={value => field.onChange(value)}>\n <Input\n label={field.label}\n placeholder={field.placeholder}\n description={field.description}\n note={field.note}\n required={field.required}\n disabled={field.disabled}\n validation={field.validation}\n onBlur={() => field.onBlur()}\n />\n </DelayedOnChange>\n );\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,KAAK,QAAQ,kBAAkB;AACxC,SAASC,eAAe,QAAQ,kBAAkB;AASlD,OAAO,MAAMC,aAAa,GAAGH,QAAQ,CAAC,CAAC;EAAEI;AAA2B,CAAC,KAAK;EACtE,oBACIL,KAAA,CAAAM,aAAA,CAACH,eAAe;IAACI,KAAK,EAAEF,KAAK,CAACE,KAAM;IAACC,QAAQ,EAAED,KAAK,IAAIF,KAAK,CAACG,QAAQ,CAACD,KAAK;EAAE,gBAC1EP,KAAA,CAAAM,aAAA,CAACJ,KAAK;IACFO,KAAK,EAAEJ,KAAK,CAACI,KAAM;IACnBC,WAAW,EAAEL,KAAK,CAACK,WAAY;IAC/BC,WAAW,EAAEN,KAAK,CAACM,WAAY;IAC/BC,IAAI,EAAEP,KAAK,CAACO,IAAK;IACjBC,QAAQ,EAAER,KAAK,CAACQ,QAAS;IACzBC,QAAQ,EAAET,KAAK,CAACS,QAAS;IACzBC,UAAU,EAAEV,KAAK,CAACU,UAAW;IAC7BC,MAAM,EAAEA,CAAA,KAAMX,KAAK,CAACW,MAAM,CAAC;EAAE,CAChC,CACY,CAAC;AAE1B,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","createFieldRenderer","Input","DelayedOnChange","InputRenderer","field","createElement","value","onChange","label","placeholder","description","note","required","disabled","validation","onBlur"],"sources":["InputRenderer.tsx"],"sourcesContent":["import React from \"react\";\nimport { createFieldRenderer } from \"~/features/formModel/createFieldRenderer.js\";\nimport { Input } from \"@webiny/admin-ui\";\nimport { DelayedOnChange } from \"@webiny/admin-ui\";\n\ndeclare module \"../../../features/formModel/abstractions.js\" {\n interface IFieldRendererRegistry {\n textInput: { fieldType: \"text\"; settings: undefined };\n }\n}\n\nexport const InputRenderer = createFieldRenderer(({ field }) => {\n return (\n <DelayedOnChange value={field.value} onChange={value => field.onChange(value)}>\n <Input\n label={field.label}\n placeholder={field.placeholder}\n description={field.description}\n note={field.note}\n required={field.required}\n disabled={field.disabled}\n validation={field.validation}\n onBlur={() => field.onBlur()}\n />\n </DelayedOnChange>\n );\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,mBAAmB;AAC5B,SAASC,KAAK,QAAQ,kBAAkB;AACxC,SAASC,eAAe,QAAQ,kBAAkB;AAQlD,OAAO,MAAMC,aAAa,GAAGH,mBAAmB,CAAC,CAAC;EAAEI;AAAM,CAAC,KAAK;EAC5D,oBACIL,KAAA,CAAAM,aAAA,CAACH,eAAe;IAACI,KAAK,EAAEF,KAAK,CAACE,KAAM;IAACC,QAAQ,EAAED,KAAK,IAAIF,KAAK,CAACG,QAAQ,CAACD,KAAK;EAAE,gBAC1EP,KAAA,CAAAM,aAAA,CAACJ,KAAK;IACFO,KAAK,EAAEJ,KAAK,CAACI,KAAM;IACnBC,WAAW,EAAEL,KAAK,CAACK,WAAY;IAC/BC,WAAW,EAAEN,KAAK,CAACM,WAAY;IAC/BC,IAAI,EAAEP,KAAK,CAACO,IAAK;IACjBC,QAAQ,EAAER,KAAK,CAACQ,QAAS;IACzBC,QAAQ,EAAET,KAAK,CAACS,QAAS;IACzBC,UAAU,EAAEV,KAAK,CAACU,UAAW;IAC7BC,MAAM,EAAEA,CAAA,KAAMX,KAAK,CAACW,MAAM,CAAC;EAAE,CAChC,CACY,CAAC;AAE1B,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ declare module "../../../features/formModel/abstractions.js" {
3
+ interface IFieldRendererRegistry {
4
+ numberInput: {
5
+ fieldType: "number";
6
+ settings: undefined;
7
+ };
8
+ }
9
+ }
10
+ export declare const NumberInputRenderer: React.ComponentType<{
11
+ field: import("../../..").IFieldVM;
12
+ }>;
@@ -0,0 +1,23 @@
1
+ import React from "react";
2
+ import { createFieldRenderer } from "../../../features/formModel/createFieldRenderer.js";
3
+ import { DelayedOnChange, Input } from "@webiny/admin-ui";
4
+ export const NumberInputRenderer = createFieldRenderer(({
5
+ field
6
+ }) => {
7
+ return /*#__PURE__*/React.createElement(DelayedOnChange, {
8
+ value: field.value,
9
+ onChange: value => field.onChange(value)
10
+ }, /*#__PURE__*/React.createElement(Input, {
11
+ label: field.label,
12
+ placeholder: field.placeholder,
13
+ description: field.description,
14
+ note: field.note,
15
+ required: field.required,
16
+ disabled: field.disabled,
17
+ validation: field.validation,
18
+ onBlur: () => field.onBlur(),
19
+ type: "number"
20
+ }));
21
+ });
22
+
23
+ //# sourceMappingURL=NumberInputRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","createFieldRenderer","DelayedOnChange","Input","NumberInputRenderer","field","createElement","value","onChange","label","placeholder","description","note","required","disabled","validation","onBlur","type"],"sources":["NumberInputRenderer.tsx"],"sourcesContent":["import React from \"react\";\nimport { createFieldRenderer } from \"~/features/formModel/createFieldRenderer.js\";\nimport { DelayedOnChange, Input } from \"@webiny/admin-ui\";\n\ndeclare module \"../../../features/formModel/abstractions.js\" {\n interface IFieldRendererRegistry {\n numberInput: { fieldType: \"number\"; settings: undefined };\n }\n}\n\nexport const NumberInputRenderer = createFieldRenderer(({ field }) => {\n return (\n <DelayedOnChange value={field.value} onChange={value => field.onChange(value)}>\n <Input\n label={field.label}\n placeholder={field.placeholder}\n description={field.description}\n note={field.note}\n required={field.required}\n disabled={field.disabled}\n validation={field.validation}\n onBlur={() => field.onBlur()}\n type=\"number\"\n />\n </DelayedOnChange>\n );\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,mBAAmB;AAC5B,SAASC,eAAe,EAAEC,KAAK,QAAQ,kBAAkB;AAQzD,OAAO,MAAMC,mBAAmB,GAAGH,mBAAmB,CAAC,CAAC;EAAEI;AAAM,CAAC,KAAK;EAClE,oBACIL,KAAA,CAAAM,aAAA,CAACJ,eAAe;IAACK,KAAK,EAAEF,KAAK,CAACE,KAAM;IAACC,QAAQ,EAAED,KAAK,IAAIF,KAAK,CAACG,QAAQ,CAACD,KAAK;EAAE,gBAC1EP,KAAA,CAAAM,aAAA,CAACH,KAAK;IACFM,KAAK,EAAEJ,KAAK,CAACI,KAAM;IACnBC,WAAW,EAAEL,KAAK,CAACK,WAAY;IAC/BC,WAAW,EAAEN,KAAK,CAACM,WAAY;IAC/BC,IAAI,EAAEP,KAAK,CAACO,IAAK;IACjBC,QAAQ,EAAER,KAAK,CAACQ,QAAS;IACzBC,QAAQ,EAAET,KAAK,CAACS,QAAS;IACzBC,UAAU,EAAEV,KAAK,CAACU,UAAW;IAC7BC,MAAM,EAAEA,CAAA,KAAMX,KAAK,CAACW,MAAM,CAAC,CAAE;IAC7BC,IAAI,EAAC;EAAQ,CAChB,CACY,CAAC;AAE1B,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ declare module "../../../features/formModel/abstractions.js" {
3
+ interface IFieldRendererRegistry {
4
+ numberInputs: {
5
+ fieldType: "number";
6
+ settings?: {
7
+ addItemLabel?: string;
8
+ };
9
+ };
10
+ }
11
+ }
12
+ export declare const NumberInputsRenderer: React.ComponentType<{
13
+ field: import("../../..").IFieldVM;
14
+ }>;
@@ -0,0 +1,49 @@
1
+ import React from "react";
2
+ import { createFieldRenderer } from "../../../features/formModel/createFieldRenderer.js";
3
+ import { ReactComponent as DeleteIcon } from "@webiny/icons/delete.svg";
4
+ import { ReactComponent as AddIcon } from "@webiny/icons/add.svg";
5
+ import { Button, DelayedOnChange, FormComponentDescription, Icon, Input, Separator } from "@webiny/admin-ui";
6
+ export const NumberInputsRenderer = createFieldRenderer(({
7
+ field
8
+ }) => {
9
+ const values = Array.isArray(field.value) ? field.value : [];
10
+ const updateAt = (index, val) => {
11
+ const next = [...values];
12
+ next[index] = val;
13
+ field.onChange(next);
14
+ };
15
+ return /*#__PURE__*/React.createElement("div", {
16
+ className: "flex flex-col gap-sm"
17
+ }, /*#__PURE__*/React.createElement(Separator, {
18
+ labelPosition: "start",
19
+ variant: "accent"
20
+ }, /*#__PURE__*/React.createElement("span", {
21
+ className: "text-accent-primary text-lg font-semibold"
22
+ }, `${field.label ?? ""} ${values.length ? `(${values.length})` : ""}`)), field.description && /*#__PURE__*/React.createElement(FormComponentDescription, {
23
+ text: field.description
24
+ }), values.map((val, index) => /*#__PURE__*/React.createElement(DelayedOnChange, {
25
+ key: index,
26
+ value: val,
27
+ onChange: value => updateAt(index, value)
28
+ }, /*#__PURE__*/React.createElement(Input, {
29
+ disabled: field.disabled,
30
+ label: `Value ${index + 1}`,
31
+ placeholder: field.placeholder,
32
+ type: "number",
33
+ onEnter: () => field.addItem(""),
34
+ endIcon: /*#__PURE__*/React.createElement(Icon, {
35
+ icon: /*#__PURE__*/React.createElement(DeleteIcon, null),
36
+ label: "Delete",
37
+ onClick: () => field.removeItem(index),
38
+ className: "cursor-pointer"
39
+ })
40
+ }))), /*#__PURE__*/React.createElement(Button, {
41
+ disabled: field.disabled,
42
+ variant: "tertiary",
43
+ icon: /*#__PURE__*/React.createElement(AddIcon, null),
44
+ text: field.rendererSettings?.addItemLabel ?? "Add Value",
45
+ onClick: () => field.addItem("")
46
+ }));
47
+ });
48
+
49
+ //# sourceMappingURL=NumberInputsRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","createFieldRenderer","ReactComponent","DeleteIcon","AddIcon","Button","DelayedOnChange","FormComponentDescription","Icon","Input","Separator","NumberInputsRenderer","field","values","Array","isArray","value","updateAt","index","val","next","onChange","createElement","className","labelPosition","variant","label","length","description","text","map","key","disabled","placeholder","type","onEnter","addItem","endIcon","icon","onClick","removeItem","rendererSettings","addItemLabel"],"sources":["NumberInputsRenderer.tsx"],"sourcesContent":["import React from \"react\";\nimport { createFieldRenderer } from \"~/features/formModel/createFieldRenderer.js\";\nimport { ReactComponent as DeleteIcon } from \"@webiny/icons/delete.svg\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport {\n Button,\n DelayedOnChange,\n FormComponentDescription,\n Icon,\n Input,\n Separator\n} from \"@webiny/admin-ui\";\n\ndeclare module \"../../../features/formModel/abstractions.js\" {\n interface IFieldRendererRegistry {\n numberInputs: { fieldType: \"number\"; settings?: { addItemLabel?: string } };\n }\n}\n\nexport const NumberInputsRenderer = createFieldRenderer<\"numberInputs\">(({ field }) => {\n const values = Array.isArray(field.value) ? field.value : [];\n\n const updateAt = (index: number, val: unknown) => {\n const next = [...values];\n next[index] = val as number;\n field.onChange(next);\n };\n\n return (\n <div className={\"flex flex-col gap-sm\"}>\n <Separator labelPosition={\"start\"} variant={\"accent\"}>\n <span className={\"text-accent-primary text-lg font-semibold\"}>\n {`${field.label ?? \"\"} ${values.length ? `(${values.length})` : \"\"}`}\n </span>\n </Separator>\n {field.description && <FormComponentDescription text={field.description} />}\n {values.map((val, index) => (\n <DelayedOnChange key={index} value={val} onChange={value => updateAt(index, value)}>\n <Input\n disabled={field.disabled}\n label={`Value ${index + 1}`}\n placeholder={field.placeholder}\n type=\"number\"\n onEnter={() => field.addItem(\"\")}\n endIcon={\n <Icon\n icon={<DeleteIcon />}\n label={\"Delete\"}\n onClick={() => field.removeItem(index)}\n className={\"cursor-pointer\"}\n />\n }\n />\n </DelayedOnChange>\n ))}\n <Button\n disabled={field.disabled}\n variant={\"tertiary\"}\n icon={<AddIcon />}\n text={field.rendererSettings?.addItemLabel ?? \"Add Value\"}\n onClick={() => field.addItem(\"\")}\n />\n </div>\n );\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,mBAAmB;AAC5B,SAASC,cAAc,IAAIC,UAAU,QAAQ,0BAA0B;AACvE,SAASD,cAAc,IAAIE,OAAO,QAAQ,uBAAuB;AACjE,SACIC,MAAM,EACNC,eAAe,EACfC,wBAAwB,EACxBC,IAAI,EACJC,KAAK,EACLC,SAAS,QACN,kBAAkB;AAQzB,OAAO,MAAMC,oBAAoB,GAAGV,mBAAmB,CAAiB,CAAC;EAAEW;AAAM,CAAC,KAAK;EACnF,MAAMC,MAAM,GAAGC,KAAK,CAACC,OAAO,CAACH,KAAK,CAACI,KAAK,CAAC,GAAGJ,KAAK,CAACI,KAAK,GAAG,EAAE;EAE5D,MAAMC,QAAQ,GAAGA,CAACC,KAAa,EAAEC,GAAY,KAAK;IAC9C,MAAMC,IAAI,GAAG,CAAC,GAAGP,MAAM,CAAC;IACxBO,IAAI,CAACF,KAAK,CAAC,GAAGC,GAAa;IAC3BP,KAAK,CAACS,QAAQ,CAACD,IAAI,CAAC;EACxB,CAAC;EAED,oBACIpB,KAAA,CAAAsB,aAAA;IAAKC,SAAS,EAAE;EAAuB,gBACnCvB,KAAA,CAAAsB,aAAA,CAACZ,SAAS;IAACc,aAAa,EAAE,OAAQ;IAACC,OAAO,EAAE;EAAS,gBACjDzB,KAAA,CAAAsB,aAAA;IAAMC,SAAS,EAAE;EAA4C,GACxD,GAAGX,KAAK,CAACc,KAAK,IAAI,EAAE,IAAIb,MAAM,CAACc,MAAM,GAAG,IAAId,MAAM,CAACc,MAAM,GAAG,GAAG,EAAE,EAChE,CACC,CAAC,EACXf,KAAK,CAACgB,WAAW,iBAAI5B,KAAA,CAAAsB,aAAA,CAACf,wBAAwB;IAACsB,IAAI,EAAEjB,KAAK,CAACgB;EAAY,CAAE,CAAC,EAC1Ef,MAAM,CAACiB,GAAG,CAAC,CAACX,GAAG,EAAED,KAAK,kBACnBlB,KAAA,CAAAsB,aAAA,CAAChB,eAAe;IAACyB,GAAG,EAAEb,KAAM;IAACF,KAAK,EAAEG,GAAI;IAACE,QAAQ,EAAEL,KAAK,IAAIC,QAAQ,CAACC,KAAK,EAAEF,KAAK;EAAE,gBAC/EhB,KAAA,CAAAsB,aAAA,CAACb,KAAK;IACFuB,QAAQ,EAAEpB,KAAK,CAACoB,QAAS;IACzBN,KAAK,EAAE,SAASR,KAAK,GAAG,CAAC,EAAG;IAC5Be,WAAW,EAAErB,KAAK,CAACqB,WAAY;IAC/BC,IAAI,EAAC,QAAQ;IACbC,OAAO,EAAEA,CAAA,KAAMvB,KAAK,CAACwB,OAAO,CAAC,EAAE,CAAE;IACjCC,OAAO,eACHrC,KAAA,CAAAsB,aAAA,CAACd,IAAI;MACD8B,IAAI,eAAEtC,KAAA,CAAAsB,aAAA,CAACnB,UAAU,MAAE,CAAE;MACrBuB,KAAK,EAAE,QAAS;MAChBa,OAAO,EAAEA,CAAA,KAAM3B,KAAK,CAAC4B,UAAU,CAACtB,KAAK,CAAE;MACvCK,SAAS,EAAE;IAAiB,CAC/B;EACJ,CACJ,CACY,CACpB,CAAC,eACFvB,KAAA,CAAAsB,aAAA,CAACjB,MAAM;IACH2B,QAAQ,EAAEpB,KAAK,CAACoB,QAAS;IACzBP,OAAO,EAAE,UAAW;IACpBa,IAAI,eAAEtC,KAAA,CAAAsB,aAAA,CAAClB,OAAO,MAAE,CAAE;IAClByB,IAAI,EAAEjB,KAAK,CAAC6B,gBAAgB,EAAEC,YAAY,IAAI,WAAY;IAC1DH,OAAO,EAAEA,CAAA,KAAM3B,KAAK,CAACwB,OAAO,CAAC,EAAE;EAAE,CACpC,CACA,CAAC;AAEd,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ declare module "../../../../features/formModel/abstractions.js" {
3
+ interface IFieldRendererRegistry {
4
+ dynamicZone: {
5
+ fieldType: "object";
6
+ settings?: {
7
+ container?: boolean;
8
+ };
9
+ };
10
+ }
11
+ }
12
+ export declare const DynamicZoneRenderer: React.ComponentType<{
13
+ field: import("../../../../index.js").IFieldVM;
14
+ }>;
@@ -0,0 +1,20 @@
1
+ import React from "react";
2
+ import { createObjectFieldRenderer } from "../../../../features/formModel/createFieldRenderer.js";
3
+ import { SingleValueDynamicZone } from "./SingleValueDynamicZone.js";
4
+ import { MultiValueDynamicZone } from "./MultiValueDynamicZone.js";
5
+ export const DynamicZoneRenderer = createObjectFieldRenderer(({
6
+ field
7
+ }) => {
8
+ if (field.isList) {
9
+ return /*#__PURE__*/React.createElement(MultiValueDynamicZone, {
10
+ field: field,
11
+ showContainer: field.rendererSettings?.container !== false
12
+ });
13
+ }
14
+ return /*#__PURE__*/React.createElement(SingleValueDynamicZone, {
15
+ field: field,
16
+ showContainer: field.rendererSettings?.container !== false
17
+ });
18
+ });
19
+
20
+ //# sourceMappingURL=DynamicZoneRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","createObjectFieldRenderer","SingleValueDynamicZone","MultiValueDynamicZone","DynamicZoneRenderer","field","isList","createElement","showContainer","rendererSettings","container"],"sources":["DynamicZoneRenderer.tsx"],"sourcesContent":["import React from \"react\";\nimport { createObjectFieldRenderer } from \"~/features/formModel/createFieldRenderer.js\";\nimport { SingleValueDynamicZone } from \"./SingleValueDynamicZone.js\";\nimport { MultiValueDynamicZone } from \"./MultiValueDynamicZone.js\";\n\ndeclare module \"../../../../features/formModel/abstractions.js\" {\n interface IFieldRendererRegistry {\n dynamicZone: {\n fieldType: \"object\";\n settings?: {\n container?: boolean;\n };\n };\n }\n}\n\nexport const DynamicZoneRenderer = createObjectFieldRenderer<\"dynamicZone\">(({ field }) => {\n if (field.isList) {\n return (\n <MultiValueDynamicZone\n field={field}\n showContainer={field.rendererSettings?.container !== false}\n />\n );\n }\n\n return (\n <SingleValueDynamicZone\n field={field}\n showContainer={field.rendererSettings?.container !== false}\n />\n );\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,yBAAyB;AAClC,SAASC,sBAAsB;AAC/B,SAASC,qBAAqB;AAa9B,OAAO,MAAMC,mBAAmB,GAAGH,yBAAyB,CAAgB,CAAC;EAAEI;AAAM,CAAC,KAAK;EACvF,IAAIA,KAAK,CAACC,MAAM,EAAE;IACd,oBACIN,KAAA,CAAAO,aAAA,CAACJ,qBAAqB;MAClBE,KAAK,EAAEA,KAAM;MACbG,aAAa,EAAEH,KAAK,CAACI,gBAAgB,EAAEC,SAAS,KAAK;IAAM,CAC9D,CAAC;EAEV;EAEA,oBACIV,KAAA,CAAAO,aAAA,CAACL,sBAAsB;IACnBG,KAAK,EAAEA,KAAM;IACbG,aAAa,EAAEH,KAAK,CAACI,gBAAgB,EAAEC,SAAS,KAAK;EAAM,CAC9D,CAAC;AAEV,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ declare module "../../../../features/formModel/abstractions.js" {
3
+ interface IFieldRendererRegistry {
4
+ keyValueTags: {
5
+ fieldType: "object";
6
+ settings?: {
7
+ addItemLabel?: string;
8
+ };
9
+ };
10
+ }
11
+ }
12
+ export declare const KeyValueTagsRenderer: React.ComponentType<{
13
+ field: import("~/features/formModel/index.js").IFieldVM;
14
+ }>;
@@ -0,0 +1,65 @@
1
+ import React from "react";
2
+ import { observer } from "mobx-react-lite";
3
+ import { ReactComponent as AddIcon } from "@webiny/icons/add.svg";
4
+ import { ReactComponent as DeleteIcon } from "@webiny/icons/delete.svg";
5
+ import { Button, FormComponentDescription, FormComponentLabel, IconButton } from "@webiny/admin-ui";
6
+ import { createObjectFieldRenderer } from "../../../../features/formModel/createFieldRenderer.js";
7
+ import { NestedLayout } from "./ObjectFieldComponents.js";
8
+ export const KeyValueTagsRenderer = createObjectFieldRenderer(({
9
+ field
10
+ }) => {
11
+ if (!field.isList) {
12
+ return null;
13
+ }
14
+ return /*#__PURE__*/React.createElement(KeyValueTagsList, {
15
+ field: field
16
+ });
17
+ });
18
+ const KeyValueTagsList = createObjectFieldRenderer(({
19
+ field
20
+ }) => {
21
+ const settings = field.rendererSettings;
22
+ const hasItems = field.items.length > 0;
23
+ return /*#__PURE__*/React.createElement(React.Fragment, null, field.label && /*#__PURE__*/React.createElement(FormComponentLabel, {
24
+ text: field.label
25
+ }), field.description && /*#__PURE__*/React.createElement(FormComponentDescription, {
26
+ text: field.description
27
+ }), hasItems ? /*#__PURE__*/React.createElement("div", {
28
+ className: "flex flex-col gap-md"
29
+ }, field.items.map(item => /*#__PURE__*/React.createElement(TagRow, {
30
+ key: item.key,
31
+ item: item,
32
+ disabled: field.disabled
33
+ }))) : null, !field.disabled ? /*#__PURE__*/React.createElement("div", {
34
+ className: "mt-md"
35
+ }, /*#__PURE__*/React.createElement(Button, {
36
+ onClick: () => field.addItem(),
37
+ text: settings?.addItemLabel ?? "Add tag",
38
+ variant: "secondary",
39
+ size: "sm",
40
+ icon: /*#__PURE__*/React.createElement(AddIcon, null)
41
+ })) : null);
42
+ });
43
+ const TagRow = observer(({
44
+ item,
45
+ disabled
46
+ }) => {
47
+ const inlineLayout = [{
48
+ type: "row",
49
+ fields: item.fields
50
+ }];
51
+ return /*#__PURE__*/React.createElement("div", {
52
+ className: "flex items-center gap-sm"
53
+ }, /*#__PURE__*/React.createElement("div", {
54
+ className: "flex-1 gap-md"
55
+ }, /*#__PURE__*/React.createElement(NestedLayout, {
56
+ layout: inlineLayout
57
+ })), !disabled && /*#__PURE__*/React.createElement(IconButton, {
58
+ variant: "ghost",
59
+ size: "lg",
60
+ icon: /*#__PURE__*/React.createElement(DeleteIcon, null),
61
+ onClick: () => item.remove()
62
+ }));
63
+ });
64
+
65
+ //# sourceMappingURL=KeyValueTagsRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","observer","ReactComponent","AddIcon","DeleteIcon","Button","FormComponentDescription","FormComponentLabel","IconButton","createObjectFieldRenderer","NestedLayout","KeyValueTagsRenderer","field","isList","createElement","KeyValueTagsList","settings","rendererSettings","hasItems","items","length","Fragment","label","text","description","className","map","item","TagRow","key","disabled","onClick","addItem","addItemLabel","variant","size","icon","inlineLayout","type","fields","layout","remove"],"sources":["KeyValueTagsRenderer.tsx"],"sourcesContent":["import React from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport { ReactComponent as DeleteIcon } from \"@webiny/icons/delete.svg\";\nimport { Button, FormComponentDescription, FormComponentLabel, IconButton } from \"@webiny/admin-ui\";\nimport { createObjectFieldRenderer } from \"~/features/formModel/createFieldRenderer.js\";\nimport type { IObjectFieldItemVM } from \"~/features/formModel/index.js\";\nimport { NestedLayout } from \"./ObjectFieldComponents.js\";\n\ndeclare module \"../../../../features/formModel/abstractions.js\" {\n interface IFieldRendererRegistry {\n keyValueTags: {\n fieldType: \"object\";\n settings?: { addItemLabel?: string };\n };\n }\n}\n\nexport const KeyValueTagsRenderer = createObjectFieldRenderer(({ field }) => {\n if (!field.isList) {\n return null;\n }\n\n return <KeyValueTagsList field={field} />;\n});\n\nconst KeyValueTagsList = createObjectFieldRenderer<\"keyValueTags\">(({ field }) => {\n const settings = field.rendererSettings;\n\n const hasItems = field.items.length > 0;\n\n return (\n <>\n {field.label && <FormComponentLabel text={field.label} />}\n {field.description && <FormComponentDescription text={field.description} />}\n {hasItems ? (\n <div className={\"flex flex-col gap-md\"}>\n {field.items.map(item => (\n <TagRow key={item.key} item={item} disabled={field.disabled} />\n ))}\n </div>\n ) : null}\n {!field.disabled ? (\n <div className={\"mt-md\"}>\n <Button\n onClick={() => field.addItem()}\n text={settings?.addItemLabel ?? \"Add tag\"}\n variant={\"secondary\"}\n size={\"sm\"}\n icon={<AddIcon />}\n />\n </div>\n ) : null}\n </>\n );\n});\n\nconst TagRow = observer(({ item, disabled }: { item: IObjectFieldItemVM; disabled: boolean }) => {\n const inlineLayout = [{ type: \"row\" as const, fields: item.fields }];\n\n return (\n <div className={\"flex items-center gap-sm\"}>\n <div className={\"flex-1 gap-md\"}>\n <NestedLayout layout={inlineLayout} />\n </div>\n {!disabled && (\n <IconButton\n variant={\"ghost\"}\n size={\"lg\"}\n icon={<DeleteIcon />}\n onClick={() => item.remove()}\n />\n )}\n </div>\n );\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ import type { IObjectFieldVM } from "../../../../features/formModel/index.js";
3
+ interface MultiValueDynamicZoneProps {
4
+ field: IObjectFieldVM;
5
+ showContainer?: boolean;
6
+ }
7
+ export declare const MultiValueDynamicZone: (({ field, showContainer }: MultiValueDynamicZoneProps) => React.JSX.Element) & {
8
+ displayName: string;
9
+ };
10
+ export {};
@@ -0,0 +1,109 @@
1
+ import React from "react";
2
+ import { observer } from "mobx-react-lite";
3
+ import { Accordion, Tooltip } from "@webiny/admin-ui";
4
+ import { ReactComponent as DeleteIcon } from "@webiny/icons/delete_outline.svg";
5
+ import { ReactComponent as CloneIcon } from "@webiny/icons/library_add.svg";
6
+ import { ReactComponent as ArrowUpIcon } from "@webiny/icons/expand_less.svg";
7
+ import { ReactComponent as ArrowDownIcon } from "@webiny/icons/expand_more.svg";
8
+ import { ReactComponent as HorizontalRuleIcon } from "@webiny/icons/horizontal_rule.svg";
9
+ import { useConfirmationDialog } from "../../../../hooks/useConfirmationDialog.js";
10
+ import { NestedLayout } from "./ObjectFieldComponents.js";
11
+ import { AddTemplateButton } from "./TemplatePicker.js";
12
+ export const MultiValueDynamicZone = observer(({
13
+ field,
14
+ showContainer = true
15
+ }) => {
16
+ const itemCount = field.items.length;
17
+ const content = /*#__PURE__*/React.createElement("div", {
18
+ className: "flex flex-col gap-lg"
19
+ }, itemCount > 0 ? /*#__PURE__*/React.createElement(Accordion, {
20
+ background: "base",
21
+ variant: "container",
22
+ className: "gap-md flex flex-col"
23
+ }, field.items.map((item, index) => /*#__PURE__*/React.createElement(TemplatedListItem, {
24
+ key: item.key,
25
+ item: item,
26
+ index: index,
27
+ total: itemCount,
28
+ templates: field.availableTemplates,
29
+ disabled: field.disabled
30
+ }))) : null, !field.disabled && /*#__PURE__*/React.createElement(AddTemplateButton, {
31
+ templates: field.availableTemplates,
32
+ onSelect: template => field.addItem(template.id)
33
+ }));
34
+ if (!showContainer) {
35
+ return content;
36
+ }
37
+ const label = `${field.label || ""}${itemCount ? ` (${itemCount})` : ""}`;
38
+ return /*#__PURE__*/React.createElement(Accordion, {
39
+ background: "base",
40
+ variant: "container"
41
+ }, /*#__PURE__*/React.createElement(Accordion.Item, {
42
+ icon: /*#__PURE__*/React.createElement(Accordion.Item.Icon, {
43
+ color: "accent",
44
+ label: "Dynamic Zone",
45
+ icon: /*#__PURE__*/React.createElement(HorizontalRuleIcon, null)
46
+ }),
47
+ title: label,
48
+ defaultOpen: true
49
+ }, content));
50
+ });
51
+ const TemplatedListItem = observer(({
52
+ item,
53
+ index,
54
+ total,
55
+ templates,
56
+ disabled
57
+ }) => {
58
+ const {
59
+ showConfirmation
60
+ } = useConfirmationDialog({
61
+ title: "Delete item",
62
+ message: "Are you sure you want to delete this item? This action is not reversible.",
63
+ acceptLabel: "Yes, I'm sure!",
64
+ cancelLabel: "No, leave it."
65
+ });
66
+ const template = templates.find(t => t.id === item.templateId);
67
+ const title = template?.label || `Item #${index + 1}`;
68
+ const onDelete = () => {
69
+ showConfirmation(() => {
70
+ item.remove();
71
+ });
72
+ };
73
+ const actions = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Accordion.Item.Action, {
74
+ icon: /*#__PURE__*/React.createElement(Tooltip, {
75
+ trigger: /*#__PURE__*/React.createElement(ArrowUpIcon, null),
76
+ content: "Move up"
77
+ }),
78
+ onClick: item.moveUp,
79
+ disabled: index === 0
80
+ }), /*#__PURE__*/React.createElement(Accordion.Item.Action, {
81
+ icon: /*#__PURE__*/React.createElement(Tooltip, {
82
+ trigger: /*#__PURE__*/React.createElement(ArrowDownIcon, null),
83
+ content: "Move down"
84
+ }),
85
+ onClick: item.moveDown,
86
+ disabled: index === total - 1
87
+ }), /*#__PURE__*/React.createElement(Accordion.Item.Action.Separator, null), /*#__PURE__*/React.createElement(Accordion.Item.Action, {
88
+ icon: /*#__PURE__*/React.createElement(Tooltip, {
89
+ trigger: /*#__PURE__*/React.createElement(CloneIcon, null),
90
+ content: "Duplicate"
91
+ }),
92
+ onClick: item.duplicate
93
+ }), /*#__PURE__*/React.createElement(Accordion.Item.Action, {
94
+ icon: /*#__PURE__*/React.createElement(Tooltip, {
95
+ trigger: /*#__PURE__*/React.createElement(DeleteIcon, null),
96
+ content: "Delete"
97
+ }),
98
+ onClick: onDelete
99
+ }));
100
+ return /*#__PURE__*/React.createElement(Accordion.Item, {
101
+ title: title,
102
+ actions: disabled ? null : actions,
103
+ defaultOpen: false
104
+ }, /*#__PURE__*/React.createElement(NestedLayout, {
105
+ layout: item.layout
106
+ }));
107
+ });
108
+
109
+ //# sourceMappingURL=MultiValueDynamicZone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","observer","Accordion","Tooltip","ReactComponent","DeleteIcon","CloneIcon","ArrowUpIcon","ArrowDownIcon","HorizontalRuleIcon","useConfirmationDialog","NestedLayout","AddTemplateButton","MultiValueDynamicZone","field","showContainer","itemCount","items","length","content","createElement","className","background","variant","map","item","index","TemplatedListItem","key","total","templates","availableTemplates","disabled","onSelect","template","addItem","id","label","Item","icon","Icon","color","title","defaultOpen","showConfirmation","message","acceptLabel","cancelLabel","find","t","templateId","onDelete","remove","actions","Fragment","Action","trigger","onClick","moveUp","moveDown","Separator","duplicate","layout"],"sources":["MultiValueDynamicZone.tsx"],"sourcesContent":["import React from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { Accordion, Tooltip } from \"@webiny/admin-ui\";\nimport { ReactComponent as DeleteIcon } from \"@webiny/icons/delete_outline.svg\";\nimport { ReactComponent as CloneIcon } from \"@webiny/icons/library_add.svg\";\nimport { ReactComponent as ArrowUpIcon } from \"@webiny/icons/expand_less.svg\";\nimport { ReactComponent as ArrowDownIcon } from \"@webiny/icons/expand_more.svg\";\nimport { ReactComponent as HorizontalRuleIcon } from \"@webiny/icons/horizontal_rule.svg\";\nimport type { IObjectFieldItemVM, IObjectFieldVM } from \"~/features/formModel/index.js\";\nimport { useConfirmationDialog } from \"~/hooks/useConfirmationDialog.js\";\nimport { NestedLayout } from \"./ObjectFieldComponents.js\";\nimport { AddTemplateButton } from \"./TemplatePicker.js\";\n\ninterface MultiValueDynamicZoneProps {\n field: IObjectFieldVM;\n showContainer?: boolean;\n}\n\nexport const MultiValueDynamicZone = observer(\n ({ field, showContainer = true }: MultiValueDynamicZoneProps) => {\n const itemCount = field.items.length;\n\n const content = (\n <div className={\"flex flex-col gap-lg\"}>\n {itemCount > 0 ? (\n <Accordion\n background={\"base\"}\n variant={\"container\"}\n className={\"gap-md flex flex-col\"}\n >\n {field.items.map((item, index) => (\n <TemplatedListItem\n key={item.key}\n item={item}\n index={index}\n total={itemCount}\n templates={field.availableTemplates}\n disabled={field.disabled}\n />\n ))}\n </Accordion>\n ) : null}\n {!field.disabled && (\n <AddTemplateButton\n templates={field.availableTemplates}\n onSelect={template => field.addItem(template.id)}\n />\n )}\n </div>\n );\n\n if (!showContainer) {\n return content;\n }\n\n const label = `${field.label || \"\"}${itemCount ? ` (${itemCount})` : \"\"}`;\n\n return (\n <Accordion background={\"base\"} variant={\"container\"}>\n <Accordion.Item\n icon={\n <Accordion.Item.Icon\n color={\"accent\"}\n label={\"Dynamic Zone\"}\n icon={<HorizontalRuleIcon />}\n />\n }\n title={label}\n defaultOpen={true}\n >\n {content}\n </Accordion.Item>\n </Accordion>\n );\n }\n);\n\ninterface TemplatedListItemProps {\n item: IObjectFieldItemVM;\n index: number;\n total: number;\n templates: { id: string; label: string }[];\n disabled: boolean;\n}\n\nconst TemplatedListItem = observer(\n ({ item, index, total, templates, disabled }: TemplatedListItemProps) => {\n const { showConfirmation } = useConfirmationDialog({\n title: \"Delete item\",\n message: \"Are you sure you want to delete this item? This action is not reversible.\",\n acceptLabel: \"Yes, I'm sure!\",\n cancelLabel: \"No, leave it.\"\n });\n\n const template = templates.find(t => t.id === item.templateId);\n const title = template?.label || `Item #${index + 1}`;\n\n const onDelete = () => {\n showConfirmation(() => {\n item.remove();\n });\n };\n\n const actions = (\n <>\n <Accordion.Item.Action\n icon={<Tooltip trigger={<ArrowUpIcon />} content={\"Move up\"} />}\n onClick={item.moveUp}\n disabled={index === 0}\n />\n <Accordion.Item.Action\n icon={<Tooltip trigger={<ArrowDownIcon />} content={\"Move down\"} />}\n onClick={item.moveDown}\n disabled={index === total - 1}\n />\n <Accordion.Item.Action.Separator />\n <Accordion.Item.Action\n icon={<Tooltip trigger={<CloneIcon />} content={\"Duplicate\"} />}\n onClick={item.duplicate}\n />\n <Accordion.Item.Action\n icon={<Tooltip trigger={<DeleteIcon />} content={\"Delete\"} />}\n onClick={onDelete}\n />\n </>\n );\n\n return (\n <Accordion.Item title={title} actions={disabled ? null : actions} defaultOpen={false}>\n <NestedLayout layout={item.layout} />\n </Accordion.Item>\n );\n }\n);\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ declare module "../../../../features/formModel/abstractions.js" {
3
+ interface IFieldRendererRegistry {
4
+ objectAccordionMultiple: {
5
+ fieldType: "object";
6
+ settings?: {
7
+ open?: boolean;
8
+ container?: boolean;
9
+ itemTitle?: string | ((data: Record<string, unknown>, index: number) => string);
10
+ addItemLabel?: string;
11
+ };
12
+ };
13
+ }
14
+ }
15
+ export declare const ObjectAccordionMultipleRenderer: React.ComponentType<{
16
+ field: import("../../../../index.js").IFieldVM;
17
+ }>;
@@ -0,0 +1,55 @@
1
+ import React from "react";
2
+ import { Accordion } from "@webiny/admin-ui";
3
+ import { createObjectFieldRenderer } from "../../../../features/formModel/createFieldRenderer.js";
4
+ import { ListItemRenderer, AddItemButton } from "./ObjectFieldComponents.js";
5
+ export const ObjectAccordionMultipleRenderer = createObjectFieldRenderer(({
6
+ field
7
+ }) => {
8
+ if (!field.isList) {
9
+ return null;
10
+ }
11
+ const settings = field.rendererSettings;
12
+ const showContainer = settings?.container !== false;
13
+ const addButton = /*#__PURE__*/React.createElement(AddItemButton, {
14
+ label: settings?.addItemLabel ?? `Add ${field.label || "Item"}`,
15
+ disabled: field.disabled,
16
+ onAdd: () => field.addItem()
17
+ });
18
+ if (!showContainer) {
19
+ return /*#__PURE__*/React.createElement("div", {
20
+ className: "flex flex-col gap-lg"
21
+ }, /*#__PURE__*/React.createElement(ListItems, {
22
+ field: field
23
+ }), addButton);
24
+ }
25
+ const label = `${field.label || ""} ${field.items.length ? `(${field.items.length})` : ""}`;
26
+ return /*#__PURE__*/React.createElement("div", {
27
+ className: "flex flex-col gap-lg"
28
+ }, /*#__PURE__*/React.createElement(Accordion, {
29
+ background: "base",
30
+ variant: "container"
31
+ }, /*#__PURE__*/React.createElement(Accordion.Item, {
32
+ title: label,
33
+ defaultOpen: true
34
+ }, /*#__PURE__*/React.createElement(ListItems, {
35
+ field: field
36
+ }))), addButton);
37
+ });
38
+ const ListItems = createObjectFieldRenderer(({
39
+ field
40
+ }) => {
41
+ const settings = field.rendererSettings;
42
+ return /*#__PURE__*/React.createElement("div", {
43
+ className: "flex flex-col gap-md"
44
+ }, field.items.map((item, index) => /*#__PURE__*/React.createElement(ListItemRenderer, {
45
+ key: item.key,
46
+ item: item,
47
+ index: index,
48
+ total: field.items.length,
49
+ label: field.label,
50
+ itemTitle: settings?.itemTitle,
51
+ disabled: field.disabled
52
+ })));
53
+ });
54
+
55
+ //# sourceMappingURL=ObjectAccordionMultipleRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Accordion","createObjectFieldRenderer","ListItemRenderer","AddItemButton","ObjectAccordionMultipleRenderer","field","isList","settings","rendererSettings","showContainer","container","addButton","createElement","label","addItemLabel","disabled","onAdd","addItem","className","ListItems","items","length","background","variant","Item","title","defaultOpen","map","item","index","key","total","itemTitle"],"sources":["ObjectAccordionMultipleRenderer.tsx"],"sourcesContent":["import React from \"react\";\nimport { Accordion } from \"@webiny/admin-ui\";\nimport { createObjectFieldRenderer } from \"~/features/formModel/createFieldRenderer.js\";\nimport { ListItemRenderer, AddItemButton } from \"./ObjectFieldComponents.js\";\n\ndeclare module \"../../../../features/formModel/abstractions.js\" {\n interface IFieldRendererRegistry {\n objectAccordionMultiple: {\n fieldType: \"object\";\n settings?: {\n open?: boolean;\n container?: boolean;\n itemTitle?: string | ((data: Record<string, unknown>, index: number) => string);\n addItemLabel?: string;\n };\n };\n }\n}\n\nexport const ObjectAccordionMultipleRenderer = createObjectFieldRenderer<\"objectAccordionMultiple\">(\n ({ field }) => {\n if (!field.isList) {\n return null;\n }\n\n const settings = field.rendererSettings;\n const showContainer = settings?.container !== false;\n\n const addButton = (\n <AddItemButton\n label={settings?.addItemLabel ?? `Add ${field.label || \"Item\"}`}\n disabled={field.disabled}\n onAdd={() => field.addItem()}\n />\n );\n\n if (!showContainer) {\n return (\n <div className={\"flex flex-col gap-lg\"}>\n <ListItems field={field} />\n {addButton}\n </div>\n );\n }\n\n const label = `${field.label || \"\"} ${field.items.length ? `(${field.items.length})` : \"\"}`;\n\n return (\n <div className={\"flex flex-col gap-lg\"}>\n <Accordion background={\"base\"} variant={\"container\"}>\n <Accordion.Item title={label} defaultOpen={true}>\n <ListItems field={field} />\n </Accordion.Item>\n </Accordion>\n {addButton}\n </div>\n );\n }\n);\n\nconst ListItems = createObjectFieldRenderer<\"objectAccordionMultiple\">(({ field }) => {\n const settings = field.rendererSettings;\n\n return (\n <div className={\"flex flex-col gap-md\"}>\n {field.items.map((item, index) => (\n <ListItemRenderer\n key={item.key}\n item={item}\n index={index}\n total={field.items.length}\n label={field.label}\n itemTitle={settings?.itemTitle}\n disabled={field.disabled}\n />\n ))}\n </div>\n );\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,yBAAyB;AAClC,SAASC,gBAAgB,EAAEC,aAAa;AAgBxC,OAAO,MAAMC,+BAA+B,GAAGH,yBAAyB,CACpE,CAAC;EAAEI;AAAM,CAAC,KAAK;EACX,IAAI,CAACA,KAAK,CAACC,MAAM,EAAE;IACf,OAAO,IAAI;EACf;EAEA,MAAMC,QAAQ,GAAGF,KAAK,CAACG,gBAAgB;EACvC,MAAMC,aAAa,GAAGF,QAAQ,EAAEG,SAAS,KAAK,KAAK;EAEnD,MAAMC,SAAS,gBACXZ,KAAA,CAAAa,aAAA,CAACT,aAAa;IACVU,KAAK,EAAEN,QAAQ,EAAEO,YAAY,IAAI,OAAOT,KAAK,CAACQ,KAAK,IAAI,MAAM,EAAG;IAChEE,QAAQ,EAAEV,KAAK,CAACU,QAAS;IACzBC,KAAK,EAAEA,CAAA,KAAMX,KAAK,CAACY,OAAO,CAAC;EAAE,CAChC,CACJ;EAED,IAAI,CAACR,aAAa,EAAE;IAChB,oBACIV,KAAA,CAAAa,aAAA;MAAKM,SAAS,EAAE;IAAuB,gBACnCnB,KAAA,CAAAa,aAAA,CAACO,SAAS;MAACd,KAAK,EAAEA;IAAM,CAAE,CAAC,EAC1BM,SACA,CAAC;EAEd;EAEA,MAAME,KAAK,GAAG,GAAGR,KAAK,CAACQ,KAAK,IAAI,EAAE,IAAIR,KAAK,CAACe,KAAK,CAACC,MAAM,GAAG,IAAIhB,KAAK,CAACe,KAAK,CAACC,MAAM,GAAG,GAAG,EAAE,EAAE;EAE3F,oBACItB,KAAA,CAAAa,aAAA;IAAKM,SAAS,EAAE;EAAuB,gBACnCnB,KAAA,CAAAa,aAAA,CAACZ,SAAS;IAACsB,UAAU,EAAE,MAAO;IAACC,OAAO,EAAE;EAAY,gBAChDxB,KAAA,CAAAa,aAAA,CAACZ,SAAS,CAACwB,IAAI;IAACC,KAAK,EAAEZ,KAAM;IAACa,WAAW,EAAE;EAAK,gBAC5C3B,KAAA,CAAAa,aAAA,CAACO,SAAS;IAACd,KAAK,EAAEA;EAAM,CAAE,CACd,CACT,CAAC,EACXM,SACA,CAAC;AAEd,CACJ,CAAC;AAED,MAAMQ,SAAS,GAAGlB,yBAAyB,CAA4B,CAAC;EAAEI;AAAM,CAAC,KAAK;EAClF,MAAME,QAAQ,GAAGF,KAAK,CAACG,gBAAgB;EAEvC,oBACIT,KAAA,CAAAa,aAAA;IAAKM,SAAS,EAAE;EAAuB,GAClCb,KAAK,CAACe,KAAK,CAACO,GAAG,CAAC,CAACC,IAAI,EAAEC,KAAK,kBACzB9B,KAAA,CAAAa,aAAA,CAACV,gBAAgB;IACb4B,GAAG,EAAEF,IAAI,CAACE,GAAI;IACdF,IAAI,EAAEA,IAAK;IACXC,KAAK,EAAEA,KAAM;IACbE,KAAK,EAAE1B,KAAK,CAACe,KAAK,CAACC,MAAO;IAC1BR,KAAK,EAAER,KAAK,CAACQ,KAAM;IACnBmB,SAAS,EAAEzB,QAAQ,EAAEyB,SAAU;IAC/BjB,QAAQ,EAAEV,KAAK,CAACU;EAAS,CAC5B,CACJ,CACA,CAAC;AAEd,CAAC,CAAC","ignoreList":[]}
@@ -1,8 +1,12 @@
1
1
  import React from "react";
2
- import type { IFieldVM, IObjectFieldVM, IObjectFieldItemVM } from "../../../../features/formModel/index.js";
2
+ import type { IFieldVM, IObjectFieldVM, IObjectFieldItemVM, LayoutNodeVM } from "../../../../features/formModel/index.js";
3
3
  export declare const isObjectFieldVM: (field: IFieldVM) => field is IObjectFieldVM;
4
- export declare const ChildFields: (({ fields }: {
5
- fields: IFieldVM[];
4
+ /**
5
+ * Walks a resolved layout sub-tree. Used by dynamic-zone renderers to render
6
+ * a templated object's children via per-template layouts (Phase 8c).
7
+ */
8
+ export declare const NestedLayout: (({ layout }: {
9
+ layout: LayoutNodeVM[];
6
10
  }) => React.JSX.Element) & {
7
11
  displayName: string;
8
12
  };
@@ -4,29 +4,25 @@ import { Accordion, Button, IconButton } from "@webiny/admin-ui";
4
4
  import { ReactComponent as DeleteIcon } from "@webiny/icons/delete_outline.svg";
5
5
  import { ReactComponent as ArrowUp } from "@webiny/icons/arrow_upward.svg";
6
6
  import { ReactComponent as ArrowDown } from "@webiny/icons/arrow_downward.svg";
7
- import { useFormViewRenderers } from "../../../../features/formModel/FormView.js";
7
+ import { LayoutNodeRenderer } from "../../../../features/formModel/FormView.js";
8
8
  import { resolveItemTitle } from "./resolveItemTitle.js";
9
9
  export const isObjectFieldVM = field => {
10
10
  return field.type === "object";
11
11
  };
12
- export const ChildFields = observer(({
13
- fields
12
+
13
+ /**
14
+ * Walks a resolved layout sub-tree. Used by dynamic-zone renderers to render
15
+ * a templated object's children via per-template layouts (Phase 8c).
16
+ */
17
+ export const NestedLayout = observer(({
18
+ layout
14
19
  }) => {
15
- const {
16
- fieldRenderers
17
- } = useFormViewRenderers();
18
20
  return /*#__PURE__*/React.createElement("div", {
19
- className: "flex flex-col gap-4 p-sm"
20
- }, fields.map(childField => {
21
- const Renderer = childField.renderer ? fieldRenderers[childField.renderer] : undefined;
22
- if (!Renderer) {
23
- return null;
24
- }
25
- return /*#__PURE__*/React.createElement(Renderer, {
26
- key: childField.name,
27
- field: childField
28
- });
29
- }));
21
+ className: "flex flex-col gap-md"
22
+ }, layout.map((node, index) => /*#__PURE__*/React.createElement(LayoutNodeRenderer, {
23
+ key: index,
24
+ node: node
25
+ })));
30
26
  });
31
27
  export const ListItemRenderer = observer(({
32
28
  item,
@@ -68,8 +64,8 @@ export const ListItemRenderer = observer(({
68
64
  title: resolveItemTitle(item, index, label, itemTitle),
69
65
  actions: disabled ? null : actions,
70
66
  defaultOpen: false
71
- }, /*#__PURE__*/React.createElement(ChildFields, {
72
- fields: item.fields
67
+ }, /*#__PURE__*/React.createElement(NestedLayout, {
68
+ layout: item.layout
73
69
  })));
74
70
  });
75
71
  export const AddItemButton = ({