@webiny/app-admin 6.4.5 → 6.6.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (928) hide show
  1. package/base/Admin.d.ts +2 -4
  2. package/base/Admin.js +9 -12
  3. package/base/Admin.js.map +1 -1
  4. package/base/Base/DefaultFieldRenderers.js +24 -0
  5. package/base/Base/DefaultFieldRenderers.js.map +1 -1
  6. package/base/Base/FieldRenderers/ApiKeyTokenRenderer.d.ts +4 -0
  7. package/base/Base/FieldRenderers/ApiKeyTokenRenderer.js +26 -0
  8. package/base/Base/FieldRenderers/ApiKeyTokenRenderer.js.map +1 -0
  9. package/base/Base/FieldRenderers/CheckboxesRenderer.js +1 -0
  10. package/base/Base/FieldRenderers/CheckboxesRenderer.js.map +1 -1
  11. package/base/Base/FieldRenderers/DateTimeInputsRenderer.js +5 -1
  12. package/base/Base/FieldRenderers/DateTimeInputsRenderer.js.map +1 -1
  13. package/base/Base/FieldRenderers/FilePickerRenderer.js +2 -0
  14. package/base/Base/FieldRenderers/FilePickerRenderer.js.map +1 -1
  15. package/base/Base/FieldRenderers/FileUrlPickerRenderer.js +1 -0
  16. package/base/Base/FieldRenderers/FileUrlPickerRenderer.js.map +1 -1
  17. package/base/Base/FieldRenderers/HorizontalTabsRenderer.js +2 -1
  18. package/base/Base/FieldRenderers/HorizontalTabsRenderer.js.map +1 -1
  19. package/base/Base/FieldRenderers/InputRenderer.js +2 -0
  20. package/base/Base/FieldRenderers/InputRenderer.js.map +1 -1
  21. package/base/Base/FieldRenderers/LexicalEditorsRenderer.d.ts +14 -0
  22. package/base/Base/FieldRenderers/LexicalEditorsRenderer.js +78 -0
  23. package/base/Base/FieldRenderers/LexicalEditorsRenderer.js.map +1 -0
  24. package/base/Base/FieldRenderers/MultiAutoCompleteRenderer.d.ts +13 -0
  25. package/base/Base/FieldRenderers/MultiAutoCompleteRenderer.js +29 -0
  26. package/base/Base/FieldRenderers/MultiAutoCompleteRenderer.js.map +1 -0
  27. package/base/Base/FieldRenderers/NumberInputRenderer.js +1 -0
  28. package/base/Base/FieldRenderers/NumberInputRenderer.js.map +1 -1
  29. package/base/Base/FieldRenderers/NumberInputsRenderer.js +19 -9
  30. package/base/Base/FieldRenderers/NumberInputsRenderer.js.map +1 -1
  31. package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.js +2 -1
  32. package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.js.map +1 -1
  33. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.js +46 -5
  34. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.js.map +1 -1
  35. package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.d.ts +1 -0
  36. package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js +6 -4
  37. package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js.map +1 -1
  38. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +2 -1
  39. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js +8 -6
  40. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js.map +1 -1
  41. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.d.ts +4 -1
  42. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js +31 -4
  43. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js.map +1 -1
  44. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js +45 -6
  45. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js.map +1 -1
  46. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.d.ts +3 -2
  47. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.js +10 -1
  48. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.js.map +1 -1
  49. package/base/Base/FieldRenderers/PasswordInputRenderer.d.ts +12 -0
  50. package/base/Base/FieldRenderers/PasswordInputRenderer.js +22 -0
  51. package/base/Base/FieldRenderers/PasswordInputRenderer.js.map +1 -0
  52. package/base/Base/FieldRenderers/PermissionsRenderer.d.ts +14 -0
  53. package/base/Base/FieldRenderers/PermissionsRenderer.js +18 -0
  54. package/base/Base/FieldRenderers/PermissionsRenderer.js.map +1 -0
  55. package/base/Base/FieldRenderers/RadioButtonsRenderer.js +1 -0
  56. package/base/Base/FieldRenderers/RadioButtonsRenderer.js.map +1 -1
  57. package/base/Base/FieldRenderers/RolesMultiSelectRenderer.d.ts +12 -0
  58. package/base/Base/FieldRenderers/RolesMultiSelectRenderer.js +21 -0
  59. package/base/Base/FieldRenderers/RolesMultiSelectRenderer.js.map +1 -0
  60. package/base/Base/FieldRenderers/SelectRenderer.js +1 -0
  61. package/base/Base/FieldRenderers/SelectRenderer.js.map +1 -1
  62. package/base/Base/FieldRenderers/TagsRenderer.js +1 -0
  63. package/base/Base/FieldRenderers/TagsRenderer.js.map +1 -1
  64. package/base/Base/FieldRenderers/TextInputsRenderer.js +19 -9
  65. package/base/Base/FieldRenderers/TextInputsRenderer.js.map +1 -1
  66. package/base/Base/FieldRenderers/TextareaRenderer.js +1 -0
  67. package/base/Base/FieldRenderers/TextareaRenderer.js.map +1 -1
  68. package/base/Base/FieldRenderers/TextareasRenderer.js +5 -1
  69. package/base/Base/FieldRenderers/TextareasRenderer.js.map +1 -1
  70. package/base/Base.d.ts +3 -1
  71. package/base/Base.js +2 -1
  72. package/base/Base.js.map +1 -1
  73. package/base/createRootContainer.js +10 -3
  74. package/base/createRootContainer.js.map +1 -1
  75. package/base/resolveApiUrl.d.ts +3 -0
  76. package/base/resolveApiUrl.js +18 -0
  77. package/base/resolveApiUrl.js.map +1 -0
  78. package/base/ui/FileManager.d.ts +2 -1
  79. package/components/BulkActions/BulkActionButton.d.ts +6 -0
  80. package/components/BulkActions/BulkActionButton.js +17 -0
  81. package/components/BulkActions/BulkActionButton.js.map +1 -0
  82. package/components/BulkActions/BulkActionRunner.d.ts +41 -0
  83. package/components/BulkActions/BulkActionRunner.js +32 -0
  84. package/components/BulkActions/BulkActionRunner.js.map +1 -0
  85. package/components/BulkActions/Worker.d.ts +9 -57
  86. package/components/BulkActions/Worker.js +5 -9
  87. package/components/BulkActions/Worker.js.map +1 -1
  88. package/components/BulkActions/index.d.ts +3 -0
  89. package/components/BulkActions/index.js +3 -0
  90. package/components/ConfirmationDialog/ConfirmationDialog.d.ts +11 -0
  91. package/components/ConfirmationDialog/ConfirmationDialog.js +41 -0
  92. package/components/ConfirmationDialog/ConfirmationDialog.js.map +1 -0
  93. package/components/ConfirmationDialog/index.d.ts +1 -0
  94. package/components/ConfirmationDialog/index.js +1 -0
  95. package/components/Dialogs/DialogsContext.js +2 -1
  96. package/components/Dialogs/DialogsContext.js.map +1 -1
  97. package/components/IconPicker/IconPicker.d.ts +7 -5
  98. package/components/IconPicker/components/IconPickerTrigger.d.ts +1 -1
  99. package/components/IconPicker/config/index.d.ts +2 -1
  100. package/components/IconPicker/plugins/customPlugin.js +4 -19
  101. package/components/IconPicker/plugins/customPlugin.js.map +1 -1
  102. package/components/ListView/ListView.d.ts +17 -0
  103. package/components/ListView/ListView.js +36 -0
  104. package/components/ListView/ListView.js.map +1 -0
  105. package/components/ListView/ListViewBottomBar.d.ts +14 -0
  106. package/components/ListView/ListViewBottomBar.js +45 -0
  107. package/components/ListView/ListViewBottomBar.js.map +1 -0
  108. package/components/ListView/ListViewBulkActions.d.ts +11 -0
  109. package/components/ListView/ListViewBulkActions.js +41 -0
  110. package/components/ListView/ListViewBulkActions.js.map +1 -0
  111. package/components/ListView/ListViewContent.d.ts +12 -0
  112. package/components/ListView/ListViewContent.js +25 -0
  113. package/components/ListView/ListViewContent.js.map +1 -0
  114. package/components/ListView/ListViewFilters.d.ts +15 -0
  115. package/components/ListView/ListViewFilters.js +21 -0
  116. package/components/ListView/ListViewFilters.js.map +1 -0
  117. package/components/ListView/ListViewHeader.d.ts +17 -0
  118. package/components/ListView/ListViewHeader.js +72 -0
  119. package/components/ListView/ListViewHeader.js.map +1 -0
  120. package/components/ListView/ListViewSidebar.d.ts +17 -0
  121. package/components/ListView/ListViewSidebar.js +25 -0
  122. package/components/ListView/ListViewSidebar.js.map +1 -0
  123. package/components/ListView/ListViewTable.d.ts +18 -0
  124. package/components/ListView/ListViewTable.js +33 -0
  125. package/components/ListView/ListViewTable.js.map +1 -0
  126. package/components/ListView/context.d.ts +3 -0
  127. package/components/ListView/context.js +11 -0
  128. package/components/ListView/context.js.map +1 -0
  129. package/components/ListView/index.d.ts +24 -0
  130. package/components/ListView/index.js +22 -0
  131. package/components/ListView/index.js.map +1 -0
  132. package/components/ListView/types.d.ts +7 -0
  133. package/components/ListView/types.js +0 -0
  134. package/components/OptionsMenu/OptionsMenuItem.d.ts +1 -0
  135. package/components/OptionsMenu/OptionsMenuItem.js +1 -0
  136. package/components/OptionsMenu/OptionsMenuItem.js.map +1 -1
  137. package/components/OverlayLayout/OverlayLayout.js +2 -4
  138. package/components/OverlayLayout/OverlayLayout.js.map +1 -1
  139. package/components/OverlayLayout/components/OverlayContent.js +0 -1
  140. package/components/OverlayLayout/components/OverlayContent.js.map +1 -1
  141. package/components/OverlayLayout/components/OverlayHeader.d.ts +1 -1
  142. package/components/Permissions/Permissions.js +2 -1
  143. package/components/Permissions/Permissions.js.map +1 -1
  144. package/components/Permissions/index.d.ts +1 -0
  145. package/components/Permissions/index.js +1 -0
  146. package/components/Permissions/mergeByName.d.ts +11 -0
  147. package/components/Permissions/mergeByName.js +33 -0
  148. package/components/Permissions/mergeByName.js.map +1 -0
  149. package/components/RolesMultiAutocomplete/index.d.ts +3 -1
  150. package/components/RolesMultiAutocomplete/index.js +24 -14
  151. package/components/RolesMultiAutocomplete/index.js.map +1 -1
  152. package/components/SimpleForm/SimpleForm.d.ts +1 -1
  153. package/components/SimpleUI/InputField.d.ts +2 -1
  154. package/components/SingleImageUpload.d.ts +1 -2
  155. package/components/SingleImageUpload.js +1 -2
  156. package/components/SingleImageUpload.js.map +1 -1
  157. package/components/Table/cells/CellAuthor.d.ts +2 -0
  158. package/components/Table/cells/CellAuthor.js +10 -0
  159. package/components/Table/cells/CellAuthor.js.map +1 -0
  160. package/components/Table/cells/CellCreated.d.ts +2 -0
  161. package/components/Table/cells/CellCreated.js +13 -0
  162. package/components/Table/cells/CellCreated.js.map +1 -0
  163. package/components/Table/cells/CellModified.d.ts +2 -0
  164. package/components/Table/cells/CellModified.js +13 -0
  165. package/components/Table/cells/CellModified.js.map +1 -0
  166. package/components/Table/cells/index.d.ts +3 -0
  167. package/components/Table/cells/index.js +3 -0
  168. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityDecorator.d.ts +9 -0
  169. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityDecorator.js +23 -0
  170. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityDecorator.js.map +1 -0
  171. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityPresenter.d.ts +9 -0
  172. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityPresenter.js +21 -0
  173. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityPresenter.js.map +1 -0
  174. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityPresenter.test.d.ts +1 -0
  175. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityPresenter.test.js +128 -0
  176. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityPresenter.test.js.map +1 -0
  177. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityRepository.d.ts +10 -0
  178. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityRepository.js +30 -0
  179. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityRepository.js.map +1 -0
  180. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityRepositoryFactory.d.ts +9 -0
  181. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityRepositoryFactory.js +18 -0
  182. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityRepositoryFactory.js.map +1 -0
  183. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityUpdater.d.ts +8 -0
  184. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityUpdater.js +16 -0
  185. package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityUpdater.js.map +1 -0
  186. package/components/Table/components/Table/ColumnVisibility/IColumnsVisibilityRepository.d.ts +5 -0
  187. package/components/Table/components/Table/ColumnVisibility/IColumnsVisibilityRepository.js +0 -0
  188. package/components/Table/components/Table/ColumnVisibility/IColumnsVisibilityUpdater.d.ts +4 -0
  189. package/components/Table/components/Table/ColumnVisibility/IColumnsVisibilityUpdater.js +0 -0
  190. package/components/Table/components/Table/ColumnVisibility/index.d.ts +7 -0
  191. package/components/Table/components/Table/ColumnVisibility/index.js +5 -0
  192. package/components/Table/components/Table/Columns/Column.d.ts +42 -0
  193. package/components/Table/components/Table/Columns/Column.js +21 -0
  194. package/components/Table/components/Table/Columns/Column.js.map +1 -0
  195. package/components/Table/components/Table/Columns/ColumnMapper.d.ts +7 -0
  196. package/components/Table/components/Table/Columns/ColumnMapper.js +34 -0
  197. package/components/Table/components/Table/Columns/ColumnMapper.js.map +1 -0
  198. package/components/Table/components/Table/Columns/ColumnsPresenter.d.ts +9 -0
  199. package/components/Table/components/Table/Columns/ColumnsPresenter.js +18 -0
  200. package/components/Table/components/Table/Columns/ColumnsPresenter.js.map +1 -0
  201. package/components/Table/components/Table/Columns/ColumnsPresenter.test.d.ts +1 -0
  202. package/components/Table/components/Table/Columns/ColumnsPresenter.test.js +73 -0
  203. package/components/Table/components/Table/Columns/ColumnsPresenter.test.js.map +1 -0
  204. package/components/Table/components/Table/Columns/ColumnsRepository.d.ts +9 -0
  205. package/components/Table/components/Table/Columns/ColumnsRepository.js +19 -0
  206. package/components/Table/components/Table/Columns/ColumnsRepository.js.map +1 -0
  207. package/components/Table/components/Table/Columns/ColumnsRepositoryFactory.d.ts +9 -0
  208. package/components/Table/components/Table/Columns/ColumnsRepositoryFactory.js +21 -0
  209. package/components/Table/components/Table/Columns/ColumnsRepositoryFactory.js.map +1 -0
  210. package/components/Table/components/Table/Columns/IColumnsRepository.d.ts +5 -0
  211. package/components/Table/components/Table/Columns/IColumnsRepository.js +0 -0
  212. package/components/Table/components/Table/Columns/index.d.ts +6 -0
  213. package/components/Table/components/Table/Columns/index.js +5 -0
  214. package/components/Table/components/Table/Table.d.ts +17 -0
  215. package/components/Table/components/Table/Table.js +47 -0
  216. package/components/Table/components/Table/Table.js.map +1 -0
  217. package/components/Table/components/Table/TableInner.d.ts +24 -0
  218. package/components/Table/components/Table/TableInner.js +40 -0
  219. package/components/Table/components/Table/TableInner.js.map +1 -0
  220. package/components/Table/components/Table/TablePresenter.d.ts +15 -0
  221. package/components/Table/components/Table/TablePresenter.js +15 -0
  222. package/components/Table/components/Table/TablePresenter.js.map +1 -0
  223. package/components/Table/components/Table/gateways/ColumnsVisibilityLocalStorageGateway.d.ts +9 -0
  224. package/components/Table/components/Table/gateways/ColumnsVisibilityLocalStorageGateway.js +15 -0
  225. package/components/Table/components/Table/gateways/ColumnsVisibilityLocalStorageGateway.js.map +1 -0
  226. package/components/Table/components/Table/gateways/IColumnsVisibilityGateway.d.ts +4 -0
  227. package/components/Table/components/Table/gateways/IColumnsVisibilityGateway.js +0 -0
  228. package/components/Table/components/Table/gateways/index.d.ts +2 -0
  229. package/components/Table/components/Table/gateways/index.js +1 -0
  230. package/components/Table/components/Table/index.d.ts +1 -0
  231. package/components/Table/components/Table/index.js +1 -0
  232. package/components/Table/components/index.d.ts +1 -0
  233. package/components/Table/components/index.js +1 -0
  234. package/components/Table/createTableData.d.ts +5 -0
  235. package/components/Table/createTableData.js +9 -0
  236. package/components/Table/createTableData.js.map +1 -0
  237. package/components/Table/index.d.ts +5 -0
  238. package/components/Table/index.js +5 -0
  239. package/components/Table/table.types.d.ts +9 -0
  240. package/components/Table/table.types.js +0 -0
  241. package/components/Table/useTableRow.d.ts +18 -0
  242. package/components/Table/useTableRow.js +22 -0
  243. package/components/Table/useTableRow.js.map +1 -0
  244. package/components/TeamAutocomplete/index.d.ts +3 -1
  245. package/components/TeamAutocomplete/index.js +13 -14
  246. package/components/TeamAutocomplete/index.js.map +1 -1
  247. package/components/TeamsMultiAutocomplete/index.d.ts +3 -1
  248. package/components/TeamsMultiAutocomplete/index.js +24 -14
  249. package/components/TeamsMultiAutocomplete/index.js.map +1 -1
  250. package/components/index.d.ts +3 -2
  251. package/components/index.js +3 -2
  252. package/config/AdminConfig/Dashboard.d.ts +2 -1
  253. package/config/AdminConfig/Form.d.ts +4 -2
  254. package/config/AdminConfig/LexicalTheme/Typography.d.ts +4 -4
  255. package/config/AdminConfig/LexicalTheme.d.ts +6 -6
  256. package/config/AdminConfig/LexicalTheme.js +0 -2
  257. package/config/AdminConfig/LexicalTheme.js.map +1 -1
  258. package/config/AdminConfig/Logo.d.ts +8 -6
  259. package/config/AdminConfig/Menu/MenuGroup.d.ts +13 -12
  260. package/config/AdminConfig/Menu/MenuItem.d.ts +7 -6
  261. package/config/AdminConfig/Menu/MenuLink.d.ts +7 -6
  262. package/config/AdminConfig/Menu/SupportMenu/SupportMenuItem.d.ts +13 -12
  263. package/config/AdminConfig/Menu/SupportMenu/SupportMenuLink.d.ts +7 -6
  264. package/config/AdminConfig/Menu/SupportMenu.d.ts +8 -6
  265. package/config/AdminConfig/Menu/UserMenu.d.ts +8 -6
  266. package/config/AdminConfig/Menu.d.ts +15 -12
  267. package/config/AdminConfig/Security.d.ts +2 -1
  268. package/config/AdminConfig/SecurityPermissions.js +2 -1
  269. package/config/AdminConfig/SecurityPermissions.js.map +1 -1
  270. package/config/AdminConfig/Tenant/TenantLogo.d.ts +8 -6
  271. package/config/AdminConfig/Tenant/TenantName.d.ts +8 -6
  272. package/config/AdminConfig/Tenant.d.ts +3 -1
  273. package/config/AdminConfig/Title.d.ts +8 -6
  274. package/config/AdminConfig.d.ts +16 -30
  275. package/config/AdminConfig.js +1 -2
  276. package/config/AdminConfig.js.map +1 -1
  277. package/config/table/Column.d.ts +34 -0
  278. package/config/table/Column.js +69 -0
  279. package/config/table/Column.js.map +1 -0
  280. package/config/table/Sorting.d.ts +11 -0
  281. package/config/table/Sorting.js +28 -0
  282. package/config/table/Sorting.js.map +1 -0
  283. package/config/table/index.d.ts +13 -0
  284. package/config/table/index.js +9 -0
  285. package/config/table/index.js.map +1 -0
  286. package/domain/securityPermissionsSchema.d.ts +20 -0
  287. package/domain/securityPermissionsSchema.js +34 -0
  288. package/domain/securityPermissionsSchema.js.map +1 -0
  289. package/errors/ErrorOverlayNetworkErrorHandler.js +4 -4
  290. package/errors/ErrorOverlayNetworkErrorHandler.js.map +1 -1
  291. package/exports/admin/form.d.ts +2 -0
  292. package/exports/admin/form.js +1 -0
  293. package/exports/admin/ui.d.ts +4 -0
  294. package/exports/admin/ui.js +2 -1
  295. package/exports/admin.d.ts +1 -0
  296. package/exports/admin.js +1 -0
  297. package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyGateway.d.ts +12 -0
  298. package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyGateway.js +50 -0
  299. package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyGateway.js.map +1 -0
  300. package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyRepository.d.ts +13 -0
  301. package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyRepository.js +25 -0
  302. package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyRepository.js.map +1 -0
  303. package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyUseCase.d.ts +11 -0
  304. package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyUseCase.js +18 -0
  305. package/features/accessManagement/apiKeys/createApiKey/CreateApiKeyUseCase.js.map +1 -0
  306. package/features/accessManagement/apiKeys/createApiKey/abstractions.d.ts +29 -0
  307. package/features/accessManagement/apiKeys/createApiKey/abstractions.js +7 -0
  308. package/features/accessManagement/apiKeys/createApiKey/abstractions.js.map +1 -0
  309. package/features/accessManagement/apiKeys/createApiKey/feature.d.ts +3 -0
  310. package/features/accessManagement/apiKeys/createApiKey/feature.js +21 -0
  311. package/features/accessManagement/apiKeys/createApiKey/feature.js.map +1 -0
  312. package/features/accessManagement/apiKeys/createApiKey/index.d.ts +3 -0
  313. package/features/accessManagement/apiKeys/createApiKey/index.js +2 -0
  314. package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyGateway.d.ts +11 -0
  315. package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyGateway.js +39 -0
  316. package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyGateway.js.map +1 -0
  317. package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyRepository.d.ts +12 -0
  318. package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyRepository.js +22 -0
  319. package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyRepository.js.map +1 -0
  320. package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyUseCase.d.ts +10 -0
  321. package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyUseCase.js +18 -0
  322. package/features/accessManagement/apiKeys/deleteApiKey/DeleteApiKeyUseCase.js.map +1 -0
  323. package/features/accessManagement/apiKeys/deleteApiKey/abstractions.d.ts +21 -0
  324. package/features/accessManagement/apiKeys/deleteApiKey/abstractions.js +7 -0
  325. package/features/accessManagement/apiKeys/deleteApiKey/abstractions.js.map +1 -0
  326. package/features/accessManagement/apiKeys/deleteApiKey/feature.d.ts +3 -0
  327. package/features/accessManagement/apiKeys/deleteApiKey/feature.js +21 -0
  328. package/features/accessManagement/apiKeys/deleteApiKey/feature.js.map +1 -0
  329. package/features/accessManagement/apiKeys/deleteApiKey/index.d.ts +3 -0
  330. package/features/accessManagement/apiKeys/deleteApiKey/index.js +2 -0
  331. package/features/accessManagement/apiKeys/getApiKey/GetApiKeyGateway.d.ts +12 -0
  332. package/features/accessManagement/apiKeys/getApiKey/GetApiKeyGateway.js +49 -0
  333. package/features/accessManagement/apiKeys/getApiKey/GetApiKeyGateway.js.map +1 -0
  334. package/features/accessManagement/apiKeys/getApiKey/GetApiKeyRepository.d.ts +11 -0
  335. package/features/accessManagement/apiKeys/getApiKey/GetApiKeyRepository.js +18 -0
  336. package/features/accessManagement/apiKeys/getApiKey/GetApiKeyRepository.js.map +1 -0
  337. package/features/accessManagement/apiKeys/getApiKey/GetApiKeyUseCase.d.ts +11 -0
  338. package/features/accessManagement/apiKeys/getApiKey/GetApiKeyUseCase.js +18 -0
  339. package/features/accessManagement/apiKeys/getApiKey/GetApiKeyUseCase.js.map +1 -0
  340. package/features/accessManagement/apiKeys/getApiKey/abstractions.d.ts +22 -0
  341. package/features/accessManagement/apiKeys/getApiKey/abstractions.js +7 -0
  342. package/features/accessManagement/apiKeys/getApiKey/abstractions.js.map +1 -0
  343. package/features/accessManagement/apiKeys/getApiKey/feature.d.ts +3 -0
  344. package/features/accessManagement/apiKeys/getApiKey/feature.js +21 -0
  345. package/features/accessManagement/apiKeys/getApiKey/feature.js.map +1 -0
  346. package/features/accessManagement/apiKeys/getApiKey/index.d.ts +3 -0
  347. package/features/accessManagement/apiKeys/getApiKey/index.js +2 -0
  348. package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysGateway.d.ts +11 -0
  349. package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysGateway.js +44 -0
  350. package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysGateway.js.map +1 -0
  351. package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysRepository.d.ts +11 -0
  352. package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysRepository.js +22 -0
  353. package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysRepository.js.map +1 -0
  354. package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysUseCase.d.ts +10 -0
  355. package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysUseCase.js +18 -0
  356. package/features/accessManagement/apiKeys/listApiKeys/ListApiKeysUseCase.js.map +1 -0
  357. package/features/accessManagement/apiKeys/listApiKeys/abstractions.d.ts +30 -0
  358. package/features/accessManagement/apiKeys/listApiKeys/abstractions.js +8 -0
  359. package/features/accessManagement/apiKeys/listApiKeys/abstractions.js.map +1 -0
  360. package/features/accessManagement/apiKeys/listApiKeys/feature.d.ts +3 -0
  361. package/features/accessManagement/apiKeys/listApiKeys/feature.js +23 -0
  362. package/features/accessManagement/apiKeys/listApiKeys/feature.js.map +1 -0
  363. package/features/accessManagement/apiKeys/listApiKeys/index.d.ts +3 -0
  364. package/features/accessManagement/apiKeys/listApiKeys/index.js +2 -0
  365. package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyGateway.d.ts +12 -0
  366. package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyGateway.js +51 -0
  367. package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyGateway.js.map +1 -0
  368. package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyRepository.d.ts +13 -0
  369. package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyRepository.js +23 -0
  370. package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyRepository.js.map +1 -0
  371. package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyUseCase.d.ts +11 -0
  372. package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyUseCase.js +18 -0
  373. package/features/accessManagement/apiKeys/updateApiKey/UpdateApiKeyUseCase.js.map +1 -0
  374. package/features/accessManagement/apiKeys/updateApiKey/abstractions.d.ts +28 -0
  375. package/features/accessManagement/apiKeys/updateApiKey/abstractions.js +7 -0
  376. package/features/accessManagement/apiKeys/updateApiKey/abstractions.js.map +1 -0
  377. package/features/accessManagement/apiKeys/updateApiKey/feature.d.ts +3 -0
  378. package/features/accessManagement/apiKeys/updateApiKey/feature.js +21 -0
  379. package/features/accessManagement/apiKeys/updateApiKey/feature.js.map +1 -0
  380. package/features/accessManagement/apiKeys/updateApiKey/index.d.ts +3 -0
  381. package/features/accessManagement/apiKeys/updateApiKey/index.js +2 -0
  382. package/features/accessManagement/constants.d.ts +5 -0
  383. package/features/accessManagement/constants.js +9 -0
  384. package/features/accessManagement/constants.js.map +1 -0
  385. package/features/accessManagement/permissions/abstractions.d.ts +17 -0
  386. package/features/accessManagement/permissions/abstractions.js +6 -0
  387. package/features/accessManagement/permissions/abstractions.js.map +1 -0
  388. package/features/accessManagement/permissions/feature.d.ts +14 -0
  389. package/features/accessManagement/permissions/feature.js +7 -0
  390. package/features/accessManagement/permissions/feature.js.map +1 -0
  391. package/features/accessManagement/roles/createRole/CreateRoleGateway.d.ts +12 -0
  392. package/features/accessManagement/roles/createRole/CreateRoleGateway.js +51 -0
  393. package/features/accessManagement/roles/createRole/CreateRoleGateway.js.map +1 -0
  394. package/features/accessManagement/roles/createRole/CreateRoleRepository.d.ts +13 -0
  395. package/features/accessManagement/roles/createRole/CreateRoleRepository.js +25 -0
  396. package/features/accessManagement/roles/createRole/CreateRoleRepository.js.map +1 -0
  397. package/features/accessManagement/roles/createRole/CreateRoleUseCase.d.ts +11 -0
  398. package/features/accessManagement/roles/createRole/CreateRoleUseCase.js +18 -0
  399. package/features/accessManagement/roles/createRole/CreateRoleUseCase.js.map +1 -0
  400. package/features/accessManagement/roles/createRole/abstractions.d.ts +29 -0
  401. package/features/accessManagement/roles/createRole/abstractions.js +7 -0
  402. package/features/accessManagement/roles/createRole/abstractions.js.map +1 -0
  403. package/features/accessManagement/roles/createRole/feature.d.ts +3 -0
  404. package/features/accessManagement/roles/createRole/feature.js +21 -0
  405. package/features/accessManagement/roles/createRole/feature.js.map +1 -0
  406. package/features/accessManagement/roles/createRole/index.d.ts +3 -0
  407. package/features/accessManagement/roles/createRole/index.js +2 -0
  408. package/features/accessManagement/roles/deleteRole/DeleteRoleGateway.d.ts +11 -0
  409. package/features/accessManagement/roles/deleteRole/DeleteRoleGateway.js +40 -0
  410. package/features/accessManagement/roles/deleteRole/DeleteRoleGateway.js.map +1 -0
  411. package/features/accessManagement/roles/deleteRole/DeleteRoleRepository.d.ts +12 -0
  412. package/features/accessManagement/roles/deleteRole/DeleteRoleRepository.js +22 -0
  413. package/features/accessManagement/roles/deleteRole/DeleteRoleRepository.js.map +1 -0
  414. package/features/accessManagement/roles/deleteRole/DeleteRoleUseCase.d.ts +10 -0
  415. package/features/accessManagement/roles/deleteRole/DeleteRoleUseCase.js +18 -0
  416. package/features/accessManagement/roles/deleteRole/DeleteRoleUseCase.js.map +1 -0
  417. package/features/accessManagement/roles/deleteRole/abstractions.d.ts +21 -0
  418. package/features/accessManagement/roles/deleteRole/abstractions.js +7 -0
  419. package/features/accessManagement/roles/deleteRole/abstractions.js.map +1 -0
  420. package/features/accessManagement/roles/deleteRole/feature.d.ts +3 -0
  421. package/features/accessManagement/roles/deleteRole/feature.js +21 -0
  422. package/features/accessManagement/roles/deleteRole/feature.js.map +1 -0
  423. package/features/accessManagement/roles/deleteRole/index.d.ts +3 -0
  424. package/features/accessManagement/roles/deleteRole/index.js +2 -0
  425. package/features/accessManagement/roles/getRole/GetRoleGateway.d.ts +12 -0
  426. package/features/accessManagement/roles/getRole/GetRoleGateway.js +50 -0
  427. package/features/accessManagement/roles/getRole/GetRoleGateway.js.map +1 -0
  428. package/features/accessManagement/roles/getRole/GetRoleRepository.d.ts +11 -0
  429. package/features/accessManagement/roles/getRole/GetRoleRepository.js +18 -0
  430. package/features/accessManagement/roles/getRole/GetRoleRepository.js.map +1 -0
  431. package/features/accessManagement/roles/getRole/GetRoleUseCase.d.ts +11 -0
  432. package/features/accessManagement/roles/getRole/GetRoleUseCase.js +18 -0
  433. package/features/accessManagement/roles/getRole/GetRoleUseCase.js.map +1 -0
  434. package/features/accessManagement/roles/getRole/abstractions.d.ts +22 -0
  435. package/features/accessManagement/roles/getRole/abstractions.js +7 -0
  436. package/features/accessManagement/roles/getRole/abstractions.js.map +1 -0
  437. package/features/accessManagement/roles/getRole/feature.d.ts +3 -0
  438. package/features/accessManagement/roles/getRole/feature.js +21 -0
  439. package/features/accessManagement/roles/getRole/feature.js.map +1 -0
  440. package/features/accessManagement/roles/getRole/index.d.ts +3 -0
  441. package/features/accessManagement/roles/getRole/index.js +2 -0
  442. package/features/accessManagement/roles/listRoles/ListRolesGateway.d.ts +11 -0
  443. package/features/accessManagement/roles/listRoles/ListRolesGateway.js +45 -0
  444. package/features/accessManagement/roles/listRoles/ListRolesGateway.js.map +1 -0
  445. package/features/accessManagement/roles/listRoles/ListRolesRepository.d.ts +11 -0
  446. package/features/accessManagement/roles/listRoles/ListRolesRepository.js +22 -0
  447. package/features/accessManagement/roles/listRoles/ListRolesRepository.js.map +1 -0
  448. package/features/accessManagement/roles/listRoles/ListRolesUseCase.d.ts +10 -0
  449. package/features/accessManagement/roles/listRoles/ListRolesUseCase.js +18 -0
  450. package/features/accessManagement/roles/listRoles/ListRolesUseCase.js.map +1 -0
  451. package/features/accessManagement/roles/listRoles/abstractions.d.ts +30 -0
  452. package/features/accessManagement/roles/listRoles/abstractions.js +8 -0
  453. package/features/accessManagement/roles/listRoles/abstractions.js.map +1 -0
  454. package/features/accessManagement/roles/listRoles/feature.d.ts +3 -0
  455. package/features/accessManagement/roles/listRoles/feature.js +23 -0
  456. package/features/accessManagement/roles/listRoles/feature.js.map +1 -0
  457. package/features/accessManagement/roles/listRoles/index.d.ts +3 -0
  458. package/features/accessManagement/roles/listRoles/index.js +2 -0
  459. package/features/accessManagement/roles/updateRole/UpdateRoleGateway.d.ts +12 -0
  460. package/features/accessManagement/roles/updateRole/UpdateRoleGateway.js +52 -0
  461. package/features/accessManagement/roles/updateRole/UpdateRoleGateway.js.map +1 -0
  462. package/features/accessManagement/roles/updateRole/UpdateRoleRepository.d.ts +13 -0
  463. package/features/accessManagement/roles/updateRole/UpdateRoleRepository.js +23 -0
  464. package/features/accessManagement/roles/updateRole/UpdateRoleRepository.js.map +1 -0
  465. package/features/accessManagement/roles/updateRole/UpdateRoleUseCase.d.ts +11 -0
  466. package/features/accessManagement/roles/updateRole/UpdateRoleUseCase.js +18 -0
  467. package/features/accessManagement/roles/updateRole/UpdateRoleUseCase.js.map +1 -0
  468. package/features/accessManagement/roles/updateRole/abstractions.d.ts +28 -0
  469. package/features/accessManagement/roles/updateRole/abstractions.js +7 -0
  470. package/features/accessManagement/roles/updateRole/abstractions.js.map +1 -0
  471. package/features/accessManagement/roles/updateRole/feature.d.ts +3 -0
  472. package/features/accessManagement/roles/updateRole/feature.js +21 -0
  473. package/features/accessManagement/roles/updateRole/feature.js.map +1 -0
  474. package/features/accessManagement/roles/updateRole/index.d.ts +3 -0
  475. package/features/accessManagement/roles/updateRole/index.js +2 -0
  476. package/features/accessManagement/teams/createTeam/CreateTeamGateway.d.ts +12 -0
  477. package/features/accessManagement/teams/createTeam/CreateTeamGateway.js +55 -0
  478. package/features/accessManagement/teams/createTeam/CreateTeamGateway.js.map +1 -0
  479. package/features/accessManagement/teams/createTeam/CreateTeamRepository.d.ts +13 -0
  480. package/features/accessManagement/teams/createTeam/CreateTeamRepository.js +25 -0
  481. package/features/accessManagement/teams/createTeam/CreateTeamRepository.js.map +1 -0
  482. package/features/accessManagement/teams/createTeam/CreateTeamUseCase.d.ts +11 -0
  483. package/features/accessManagement/teams/createTeam/CreateTeamUseCase.js +18 -0
  484. package/features/accessManagement/teams/createTeam/CreateTeamUseCase.js.map +1 -0
  485. package/features/accessManagement/teams/createTeam/abstractions.d.ts +28 -0
  486. package/features/accessManagement/teams/createTeam/abstractions.js +7 -0
  487. package/features/accessManagement/teams/createTeam/abstractions.js.map +1 -0
  488. package/features/accessManagement/teams/createTeam/feature.d.ts +3 -0
  489. package/features/accessManagement/teams/createTeam/feature.js +21 -0
  490. package/features/accessManagement/teams/createTeam/feature.js.map +1 -0
  491. package/features/accessManagement/teams/createTeam/index.d.ts +3 -0
  492. package/features/accessManagement/teams/createTeam/index.js +2 -0
  493. package/features/accessManagement/teams/deleteTeam/DeleteTeamGateway.d.ts +11 -0
  494. package/features/accessManagement/teams/deleteTeam/DeleteTeamGateway.js +40 -0
  495. package/features/accessManagement/teams/deleteTeam/DeleteTeamGateway.js.map +1 -0
  496. package/features/accessManagement/teams/deleteTeam/DeleteTeamRepository.d.ts +12 -0
  497. package/features/accessManagement/teams/deleteTeam/DeleteTeamRepository.js +22 -0
  498. package/features/accessManagement/teams/deleteTeam/DeleteTeamRepository.js.map +1 -0
  499. package/features/accessManagement/teams/deleteTeam/DeleteTeamUseCase.d.ts +10 -0
  500. package/features/accessManagement/teams/deleteTeam/DeleteTeamUseCase.js +18 -0
  501. package/features/accessManagement/teams/deleteTeam/DeleteTeamUseCase.js.map +1 -0
  502. package/features/accessManagement/teams/deleteTeam/abstractions.d.ts +21 -0
  503. package/features/accessManagement/teams/deleteTeam/abstractions.js +7 -0
  504. package/features/accessManagement/teams/deleteTeam/abstractions.js.map +1 -0
  505. package/features/accessManagement/teams/deleteTeam/feature.d.ts +3 -0
  506. package/features/accessManagement/teams/deleteTeam/feature.js +21 -0
  507. package/features/accessManagement/teams/deleteTeam/feature.js.map +1 -0
  508. package/features/accessManagement/teams/deleteTeam/index.d.ts +3 -0
  509. package/features/accessManagement/teams/deleteTeam/index.js +2 -0
  510. package/features/accessManagement/teams/getTeam/GetTeamGateway.d.ts +12 -0
  511. package/features/accessManagement/teams/getTeam/GetTeamGateway.js +54 -0
  512. package/features/accessManagement/teams/getTeam/GetTeamGateway.js.map +1 -0
  513. package/features/accessManagement/teams/getTeam/GetTeamRepository.d.ts +11 -0
  514. package/features/accessManagement/teams/getTeam/GetTeamRepository.js +18 -0
  515. package/features/accessManagement/teams/getTeam/GetTeamRepository.js.map +1 -0
  516. package/features/accessManagement/teams/getTeam/GetTeamUseCase.d.ts +11 -0
  517. package/features/accessManagement/teams/getTeam/GetTeamUseCase.js +18 -0
  518. package/features/accessManagement/teams/getTeam/GetTeamUseCase.js.map +1 -0
  519. package/features/accessManagement/teams/getTeam/abstractions.d.ts +22 -0
  520. package/features/accessManagement/teams/getTeam/abstractions.js +7 -0
  521. package/features/accessManagement/teams/getTeam/abstractions.js.map +1 -0
  522. package/features/accessManagement/teams/getTeam/feature.d.ts +3 -0
  523. package/features/accessManagement/teams/getTeam/feature.js +21 -0
  524. package/features/accessManagement/teams/getTeam/feature.js.map +1 -0
  525. package/features/accessManagement/teams/getTeam/index.d.ts +3 -0
  526. package/features/accessManagement/teams/getTeam/index.js +2 -0
  527. package/features/accessManagement/teams/listTeams/ListTeamsGateway.d.ts +11 -0
  528. package/features/accessManagement/teams/listTeams/ListTeamsGateway.js +49 -0
  529. package/features/accessManagement/teams/listTeams/ListTeamsGateway.js.map +1 -0
  530. package/features/accessManagement/teams/listTeams/ListTeamsRepository.d.ts +11 -0
  531. package/features/accessManagement/teams/listTeams/ListTeamsRepository.js +22 -0
  532. package/features/accessManagement/teams/listTeams/ListTeamsRepository.js.map +1 -0
  533. package/features/accessManagement/teams/listTeams/ListTeamsUseCase.d.ts +10 -0
  534. package/features/accessManagement/teams/listTeams/ListTeamsUseCase.js +18 -0
  535. package/features/accessManagement/teams/listTeams/ListTeamsUseCase.js.map +1 -0
  536. package/features/accessManagement/teams/listTeams/abstractions.d.ts +30 -0
  537. package/features/accessManagement/teams/listTeams/abstractions.js +8 -0
  538. package/features/accessManagement/teams/listTeams/abstractions.js.map +1 -0
  539. package/features/accessManagement/teams/listTeams/feature.d.ts +3 -0
  540. package/features/accessManagement/teams/listTeams/feature.js +23 -0
  541. package/features/accessManagement/teams/listTeams/feature.js.map +1 -0
  542. package/features/accessManagement/teams/listTeams/index.d.ts +3 -0
  543. package/features/accessManagement/teams/listTeams/index.js +2 -0
  544. package/features/accessManagement/teams/updateTeam/UpdateTeamGateway.d.ts +12 -0
  545. package/features/accessManagement/teams/updateTeam/UpdateTeamGateway.js +56 -0
  546. package/features/accessManagement/teams/updateTeam/UpdateTeamGateway.js.map +1 -0
  547. package/features/accessManagement/teams/updateTeam/UpdateTeamRepository.d.ts +13 -0
  548. package/features/accessManagement/teams/updateTeam/UpdateTeamRepository.js +23 -0
  549. package/features/accessManagement/teams/updateTeam/UpdateTeamRepository.js.map +1 -0
  550. package/features/accessManagement/teams/updateTeam/UpdateTeamUseCase.d.ts +11 -0
  551. package/features/accessManagement/teams/updateTeam/UpdateTeamUseCase.js +18 -0
  552. package/features/accessManagement/teams/updateTeam/UpdateTeamUseCase.js.map +1 -0
  553. package/features/accessManagement/teams/updateTeam/abstractions.d.ts +27 -0
  554. package/features/accessManagement/teams/updateTeam/abstractions.js +7 -0
  555. package/features/accessManagement/teams/updateTeam/abstractions.js.map +1 -0
  556. package/features/accessManagement/teams/updateTeam/feature.d.ts +3 -0
  557. package/features/accessManagement/teams/updateTeam/feature.js +21 -0
  558. package/features/accessManagement/teams/updateTeam/feature.js.map +1 -0
  559. package/features/accessManagement/teams/updateTeam/index.d.ts +3 -0
  560. package/features/accessManagement/teams/updateTeam/index.js +2 -0
  561. package/features/accessManagement/types.d.ts +34 -0
  562. package/features/accessManagement/types.js +0 -0
  563. package/features/clipboard/ClipboardService.d.ts +15 -0
  564. package/features/clipboard/ClipboardService.js +51 -0
  565. package/features/clipboard/ClipboardService.js.map +1 -0
  566. package/features/clipboard/abstractions.d.ts +14 -0
  567. package/features/clipboard/abstractions.js +5 -0
  568. package/features/clipboard/abstractions.js.map +1 -0
  569. package/features/clipboard/feature.d.ts +3 -0
  570. package/features/clipboard/feature.js +17 -0
  571. package/features/clipboard/feature.js.map +1 -0
  572. package/features/clipboard/index.d.ts +2 -0
  573. package/features/clipboard/index.js +2 -0
  574. package/features/confirmation/Confirmation.d.ts +11 -0
  575. package/features/confirmation/Confirmation.js +29 -0
  576. package/features/confirmation/Confirmation.js.map +1 -0
  577. package/features/confirmation/ConfirmationBridge.d.ts +1 -0
  578. package/features/confirmation/ConfirmationBridge.js +20 -0
  579. package/features/confirmation/ConfirmationBridge.js.map +1 -0
  580. package/features/confirmation/abstractions.d.ts +15 -0
  581. package/features/confirmation/abstractions.js +6 -0
  582. package/features/confirmation/abstractions.js.map +1 -0
  583. package/features/confirmation/feature.d.ts +1 -0
  584. package/features/confirmation/feature.js +11 -0
  585. package/features/confirmation/feature.js.map +1 -0
  586. package/features/confirmation/index.d.ts +3 -0
  587. package/features/confirmation/index.js +3 -0
  588. package/features/formModel/Field.d.ts +5 -5
  589. package/features/formModel/Field.js +69 -23
  590. package/features/formModel/Field.js.map +1 -1
  591. package/features/formModel/FieldBuilder.d.ts +8 -3
  592. package/features/formModel/FieldBuilder.js +20 -1
  593. package/features/formModel/FieldBuilder.js.map +1 -1
  594. package/features/formModel/FormErrors.d.ts +2 -1
  595. package/features/formModel/FormErrors.js +4 -3
  596. package/features/formModel/FormErrors.js.map +1 -1
  597. package/features/formModel/FormModel.d.ts +8 -2
  598. package/features/formModel/FormModel.js +33 -10
  599. package/features/formModel/FormModel.js.map +1 -1
  600. package/features/formModel/FormModel.test.js +248 -53
  601. package/features/formModel/FormModel.test.js.map +1 -1
  602. package/features/formModel/FormView.js +25 -6
  603. package/features/formModel/FormView.js.map +1 -1
  604. package/features/formModel/LayoutBuilderFactory.d.ts +3 -2
  605. package/features/formModel/LayoutBuilderFactory.js +58 -5
  606. package/features/formModel/LayoutBuilderFactory.js.map +1 -1
  607. package/features/formModel/LayoutMutator.js +6 -0
  608. package/features/formModel/LayoutMutator.js.map +1 -1
  609. package/features/formModel/LayoutResolver.d.ts +1 -0
  610. package/features/formModel/LayoutResolver.js +27 -6
  611. package/features/formModel/LayoutResolver.js.map +1 -1
  612. package/features/formModel/ObjectField.d.ts +4 -2
  613. package/features/formModel/ObjectField.js +43 -3
  614. package/features/formModel/ObjectField.js.map +1 -1
  615. package/features/formModel/abstractions.d.ts +86 -19
  616. package/features/formModel/abstractions.js.map +1 -1
  617. package/features/formModel/demo/FormModelPhase11Presenter.js +5 -5
  618. package/features/formModel/demo/FormModelPhase11Presenter.js.map +1 -1
  619. package/features/formModel/feature.js +4 -1
  620. package/features/formModel/feature.js.map +1 -1
  621. package/features/formModel/fieldTypes/ObjectFieldType.js +2 -1
  622. package/features/formModel/fieldTypes/ObjectFieldType.js.map +1 -1
  623. package/features/formModel/fieldTypes/PasswordFieldType.d.ts +18 -0
  624. package/features/formModel/fieldTypes/PasswordFieldType.js +23 -0
  625. package/features/formModel/fieldTypes/PasswordFieldType.js.map +1 -0
  626. package/features/formModel/fieldTypes/PermissionsFieldType.d.ts +18 -0
  627. package/features/formModel/fieldTypes/PermissionsFieldType.js +27 -0
  628. package/features/formModel/fieldTypes/PermissionsFieldType.js.map +1 -0
  629. package/features/formModel/fieldTypes/RolesMultiSelectFieldType.d.ts +18 -0
  630. package/features/formModel/fieldTypes/RolesMultiSelectFieldType.js +24 -0
  631. package/features/formModel/fieldTypes/RolesMultiSelectFieldType.js.map +1 -0
  632. package/features/formModel/fieldTypes/index.d.ts +3 -0
  633. package/features/formModel/fieldTypes/index.js +3 -0
  634. package/features/formModel/index.d.ts +2 -3
  635. package/features/formModel/index.js +3 -4
  636. package/features/formModel/renderers.d.ts +4 -0
  637. package/features/formModel/renderers.js +4 -0
  638. package/features/iconPicker/listCustomIcons/ListCustomIconsGateway.d.ts +11 -0
  639. package/features/iconPicker/listCustomIcons/ListCustomIconsGateway.js +49 -0
  640. package/features/iconPicker/listCustomIcons/ListCustomIconsGateway.js.map +1 -0
  641. package/features/iconPicker/listCustomIcons/abstractions.d.ts +12 -0
  642. package/features/iconPicker/listCustomIcons/abstractions.js +5 -0
  643. package/features/iconPicker/listCustomIcons/abstractions.js.map +1 -0
  644. package/features/iconPicker/listCustomIcons/feature.d.ts +1 -0
  645. package/features/iconPicker/listCustomIcons/feature.js +11 -0
  646. package/features/iconPicker/listCustomIcons/feature.js.map +1 -0
  647. package/features/iconPicker/listCustomIcons/index.d.ts +3 -0
  648. package/features/iconPicker/listCustomIcons/index.js +2 -0
  649. package/features/listCache/ListCache.d.ts +4 -1
  650. package/features/listCache/ListCache.js +13 -3
  651. package/features/listCache/ListCache.js.map +1 -1
  652. package/features/notifications/Notifications.d.ts +16 -0
  653. package/features/notifications/Notifications.js +39 -0
  654. package/features/notifications/Notifications.js.map +1 -0
  655. package/features/notifications/NotificationsPresenter.d.ts +11 -0
  656. package/features/notifications/NotificationsPresenter.js +27 -0
  657. package/features/notifications/NotificationsPresenter.js.map +1 -0
  658. package/features/notifications/NotificationsRenderer.d.ts +7 -0
  659. package/features/notifications/NotificationsRenderer.js +38 -0
  660. package/features/notifications/NotificationsRenderer.js.map +1 -0
  661. package/features/notifications/abstractions.d.ts +38 -0
  662. package/features/notifications/abstractions.js +6 -0
  663. package/features/notifications/abstractions.js.map +1 -0
  664. package/features/notifications/feature.d.ts +4 -0
  665. package/features/notifications/feature.js +20 -0
  666. package/features/notifications/feature.js.map +1 -0
  667. package/features/notifications/index.d.ts +3 -0
  668. package/features/notifications/index.js +3 -0
  669. package/features/webinySdk/WebinySdk.d.ts +2 -1
  670. package/features/webinySdk/WebinySdk.js.map +1 -1
  671. package/hooks/index.d.ts +1 -0
  672. package/hooks/index.js +1 -0
  673. package/hooks/useNamedConfirmationDialog.d.ts +9 -0
  674. package/hooks/useNamedConfirmationDialog.js +20 -0
  675. package/hooks/useNamedConfirmationDialog.js.map +1 -0
  676. package/index.d.ts +34 -1
  677. package/index.js +39 -8
  678. package/modules/AccessManagementExtension.d.ts +2 -0
  679. package/modules/AccessManagementExtension.js +151 -0
  680. package/modules/AccessManagementExtension.js.map +1 -0
  681. package/package.json +29 -37
  682. package/permissions/createPermissions.js.map +1 -1
  683. package/presentation/accessManagement/SecurityPermissions.d.ts +2 -0
  684. package/presentation/accessManagement/SecurityPermissions.js +54 -0
  685. package/presentation/accessManagement/SecurityPermissions.js.map +1 -0
  686. package/presentation/accessManagement/apiKeys/ApiKeysDataSource.d.ts +13 -0
  687. package/presentation/accessManagement/apiKeys/ApiKeysDataSource.js +23 -0
  688. package/presentation/accessManagement/apiKeys/ApiKeysDataSource.js.map +1 -0
  689. package/presentation/accessManagement/apiKeys/ApiKeysPresenter.d.ts +38 -0
  690. package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js +193 -0
  691. package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js.map +1 -0
  692. package/presentation/accessManagement/apiKeys/abstractions.d.ts +25 -0
  693. package/presentation/accessManagement/apiKeys/abstractions.js +5 -0
  694. package/presentation/accessManagement/apiKeys/abstractions.js.map +1 -0
  695. package/presentation/accessManagement/apiKeys/components/ApiKeysView.d.ts +4 -0
  696. package/presentation/accessManagement/apiKeys/components/ApiKeysView.js +234 -0
  697. package/presentation/accessManagement/apiKeys/components/ApiKeysView.js.map +1 -0
  698. package/presentation/accessManagement/apiKeys/feature.d.ts +3 -0
  699. package/presentation/accessManagement/apiKeys/feature.js +17 -0
  700. package/presentation/accessManagement/apiKeys/feature.js.map +1 -0
  701. package/presentation/accessManagement/roles/RolesDataSource.d.ts +13 -0
  702. package/presentation/accessManagement/roles/RolesDataSource.js +23 -0
  703. package/presentation/accessManagement/roles/RolesDataSource.js.map +1 -0
  704. package/presentation/accessManagement/roles/RolesPresenter.d.ts +38 -0
  705. package/presentation/accessManagement/roles/RolesPresenter.js +201 -0
  706. package/presentation/accessManagement/roles/RolesPresenter.js.map +1 -0
  707. package/presentation/accessManagement/roles/abstractions.d.ts +27 -0
  708. package/presentation/accessManagement/roles/abstractions.js +5 -0
  709. package/presentation/accessManagement/roles/abstractions.js.map +1 -0
  710. package/presentation/accessManagement/roles/components/RolesView.d.ts +4 -0
  711. package/presentation/accessManagement/roles/components/RolesView.js +232 -0
  712. package/presentation/accessManagement/roles/components/RolesView.js.map +1 -0
  713. package/presentation/accessManagement/roles/feature.d.ts +3 -0
  714. package/presentation/accessManagement/roles/feature.js +17 -0
  715. package/presentation/accessManagement/roles/feature.js.map +1 -0
  716. package/presentation/accessManagement/roles/rolesAutocomplete/RolesAutocompletePresenter.d.ts +15 -0
  717. package/presentation/accessManagement/roles/rolesAutocomplete/RolesAutocompletePresenter.js +42 -0
  718. package/presentation/accessManagement/roles/rolesAutocomplete/RolesAutocompletePresenter.js.map +1 -0
  719. package/presentation/accessManagement/roles/rolesAutocomplete/abstractions.d.ts +18 -0
  720. package/presentation/accessManagement/roles/rolesAutocomplete/abstractions.js +5 -0
  721. package/presentation/accessManagement/roles/rolesAutocomplete/abstractions.js.map +1 -0
  722. package/presentation/accessManagement/roles/rolesAutocomplete/feature.d.ts +3 -0
  723. package/presentation/accessManagement/roles/rolesAutocomplete/feature.js +17 -0
  724. package/presentation/accessManagement/roles/rolesAutocomplete/feature.js.map +1 -0
  725. package/presentation/accessManagement/roles/rolesAutocomplete/index.d.ts +3 -0
  726. package/presentation/accessManagement/roles/rolesAutocomplete/index.js +2 -0
  727. package/presentation/accessManagement/routes.d.ts +21 -0
  728. package/presentation/accessManagement/routes.js +36 -0
  729. package/presentation/accessManagement/routes.js.map +1 -0
  730. package/presentation/accessManagement/teams/TeamsDataSource.d.ts +13 -0
  731. package/presentation/accessManagement/teams/TeamsDataSource.js +23 -0
  732. package/presentation/accessManagement/teams/TeamsDataSource.js.map +1 -0
  733. package/presentation/accessManagement/teams/TeamsPresenter.d.ts +39 -0
  734. package/presentation/accessManagement/teams/TeamsPresenter.js +200 -0
  735. package/presentation/accessManagement/teams/TeamsPresenter.js.map +1 -0
  736. package/presentation/accessManagement/teams/abstractions.d.ts +26 -0
  737. package/presentation/accessManagement/teams/abstractions.js +5 -0
  738. package/presentation/accessManagement/teams/abstractions.js.map +1 -0
  739. package/presentation/accessManagement/teams/components/TeamsView.d.ts +4 -0
  740. package/presentation/accessManagement/teams/components/TeamsView.js +214 -0
  741. package/presentation/accessManagement/teams/components/TeamsView.js.map +1 -0
  742. package/presentation/accessManagement/teams/feature.d.ts +3 -0
  743. package/presentation/accessManagement/teams/feature.js +17 -0
  744. package/presentation/accessManagement/teams/feature.js.map +1 -0
  745. package/presentation/accessManagement/teams/teamsAutocomplete/TeamsAutocompletePresenter.d.ts +15 -0
  746. package/presentation/accessManagement/teams/teamsAutocomplete/TeamsAutocompletePresenter.js +42 -0
  747. package/presentation/accessManagement/teams/teamsAutocomplete/TeamsAutocompletePresenter.js.map +1 -0
  748. package/presentation/accessManagement/teams/teamsAutocomplete/abstractions.d.ts +18 -0
  749. package/presentation/accessManagement/teams/teamsAutocomplete/abstractions.js +5 -0
  750. package/presentation/accessManagement/teams/teamsAutocomplete/abstractions.js.map +1 -0
  751. package/presentation/accessManagement/teams/teamsAutocomplete/feature.d.ts +3 -0
  752. package/presentation/accessManagement/teams/teamsAutocomplete/feature.js +17 -0
  753. package/presentation/accessManagement/teams/teamsAutocomplete/feature.js.map +1 -0
  754. package/presentation/accessManagement/teams/teamsAutocomplete/index.d.ts +3 -0
  755. package/presentation/accessManagement/teams/teamsAutocomplete/index.js +2 -0
  756. package/presentation/iconPicker/customIcons/CustomIconsPresenter.d.ts +16 -0
  757. package/presentation/iconPicker/customIcons/CustomIconsPresenter.js +40 -0
  758. package/presentation/iconPicker/customIcons/CustomIconsPresenter.js.map +1 -0
  759. package/presentation/iconPicker/customIcons/abstractions.d.ts +14 -0
  760. package/presentation/iconPicker/customIcons/abstractions.js +5 -0
  761. package/presentation/iconPicker/customIcons/abstractions.js.map +1 -0
  762. package/presentation/iconPicker/customIcons/feature.d.ts +3 -0
  763. package/presentation/iconPicker/customIcons/feature.js +17 -0
  764. package/presentation/iconPicker/customIcons/feature.js.map +1 -0
  765. package/presentation/iconPicker/customIcons/index.d.ts +3 -0
  766. package/presentation/iconPicker/customIcons/index.js +2 -0
  767. package/presentation/installation/components/SystemInstaller/SystemInstaller.js +3 -1
  768. package/presentation/installation/components/SystemInstaller/SystemInstaller.js.map +1 -1
  769. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.d.ts +1 -1
  770. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js +1 -1
  771. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js.map +1 -1
  772. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep.js +5 -4
  773. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep.js.map +1 -1
  774. package/presentation/installation/components/SystemInstaller/steps/FinishSetup.js +1 -1
  775. package/presentation/installation/components/SystemInstaller/steps/FinishSetup.js.map +1 -1
  776. package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js +7 -5
  777. package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js.map +1 -1
  778. package/presentation/listPresenter/FolderAwareDataSource.d.ts +50 -0
  779. package/presentation/listPresenter/FolderAwareDataSource.js +132 -0
  780. package/presentation/listPresenter/FolderAwareDataSource.js.map +1 -0
  781. package/presentation/listPresenter/ListPresenter.d.ts +4 -0
  782. package/presentation/listPresenter/ListPresenter.js +30 -4
  783. package/presentation/listPresenter/ListPresenter.js.map +1 -1
  784. package/presentation/listPresenter/QueryMatcher.d.ts +56 -0
  785. package/presentation/listPresenter/QueryMatcher.js +59 -0
  786. package/presentation/listPresenter/QueryMatcher.js.map +1 -0
  787. package/presentation/listPresenter/SimpleDataSource.d.ts +15 -0
  788. package/presentation/listPresenter/SimpleDataSource.js +70 -0
  789. package/presentation/listPresenter/SimpleDataSource.js.map +1 -0
  790. package/presentation/listPresenter/abstractions.d.ts +9 -0
  791. package/presentation/listPresenter/abstractions.js.map +1 -1
  792. package/presentation/listPresenter/index.d.ts +5 -0
  793. package/presentation/listPresenter/index.js +3 -0
  794. package/presentation/security/components/HasPermission.d.ts +1 -1
  795. package/presentation/tenancy/TenancyProvider.js +0 -4
  796. package/presentation/tenancy/TenancyProvider.js.map +1 -1
  797. package/presentation/trashBin/TrashBinDataSource.d.ts +16 -0
  798. package/presentation/trashBin/TrashBinDataSource.js +82 -0
  799. package/presentation/trashBin/TrashBinDataSource.js.map +1 -0
  800. package/presentation/trashBin/TrashBinPresenter.d.ts +20 -0
  801. package/presentation/trashBin/TrashBinPresenter.js +114 -0
  802. package/presentation/trashBin/TrashBinPresenter.js.map +1 -0
  803. package/presentation/trashBin/abstractions.d.ts +105 -0
  804. package/presentation/trashBin/abstractions.js +9 -0
  805. package/presentation/trashBin/abstractions.js.map +1 -0
  806. package/presentation/trashBin/components/Actions/DeleteItemAction.d.ts +2 -0
  807. package/presentation/trashBin/components/Actions/DeleteItemAction.js +20 -0
  808. package/presentation/trashBin/components/Actions/DeleteItemAction.js.map +1 -0
  809. package/presentation/trashBin/components/Actions/RestoreItemAction.d.ts +2 -0
  810. package/presentation/trashBin/components/Actions/RestoreItemAction.js +19 -0
  811. package/presentation/trashBin/components/Actions/RestoreItemAction.js.map +1 -0
  812. package/presentation/trashBin/components/Actions/index.d.ts +2 -0
  813. package/presentation/trashBin/components/Actions/index.js +2 -0
  814. package/presentation/trashBin/components/BulkActions/DeleteItems.d.ts +4 -0
  815. package/presentation/trashBin/components/BulkActions/DeleteItems.js +72 -0
  816. package/presentation/trashBin/components/BulkActions/DeleteItems.js.map +1 -0
  817. package/presentation/trashBin/components/BulkActions/RestoreItems.d.ts +4 -0
  818. package/presentation/trashBin/components/BulkActions/RestoreItems.js +81 -0
  819. package/presentation/trashBin/components/BulkActions/RestoreItems.js.map +1 -0
  820. package/presentation/trashBin/components/BulkActions/RestoreItemsReportMessage.d.ts +5 -0
  821. package/presentation/trashBin/components/BulkActions/RestoreItemsReportMessage.js +12 -0
  822. package/presentation/trashBin/components/BulkActions/RestoreItemsReportMessage.js.map +1 -0
  823. package/presentation/trashBin/components/BulkActions/index.d.ts +2 -0
  824. package/presentation/trashBin/components/BulkActions/index.js +2 -0
  825. package/presentation/trashBin/components/Cells/CellActions.d.ts +2 -0
  826. package/presentation/trashBin/components/Cells/CellActions.js +18 -0
  827. package/presentation/trashBin/components/Cells/CellActions.js.map +1 -0
  828. package/presentation/trashBin/components/Cells/CellCreatedBy.d.ts +2 -0
  829. package/presentation/trashBin/components/Cells/CellCreatedBy.js +11 -0
  830. package/presentation/trashBin/components/Cells/CellCreatedBy.js.map +1 -0
  831. package/presentation/trashBin/components/Cells/CellDeletedBy.d.ts +2 -0
  832. package/presentation/trashBin/components/Cells/CellDeletedBy.js +11 -0
  833. package/presentation/trashBin/components/Cells/CellDeletedBy.js.map +1 -0
  834. package/presentation/trashBin/components/Cells/CellDeletedOn.d.ts +2 -0
  835. package/presentation/trashBin/components/Cells/CellDeletedOn.js +14 -0
  836. package/presentation/trashBin/components/Cells/CellDeletedOn.js.map +1 -0
  837. package/presentation/trashBin/components/Cells/CellTitle.d.ts +2 -0
  838. package/presentation/trashBin/components/Cells/CellTitle.js +21 -0
  839. package/presentation/trashBin/components/Cells/CellTitle.js.map +1 -0
  840. package/presentation/trashBin/components/Cells/index.d.ts +5 -0
  841. package/presentation/trashBin/components/Cells/index.js +5 -0
  842. package/presentation/trashBin/components/TrashBinConfigs.d.ts +2 -0
  843. package/presentation/trashBin/components/TrashBinConfigs.js +55 -0
  844. package/presentation/trashBin/components/TrashBinConfigs.js.map +1 -0
  845. package/presentation/trashBin/components/TrashBinOverlay.d.ts +12 -0
  846. package/presentation/trashBin/components/TrashBinOverlay.js +139 -0
  847. package/presentation/trashBin/components/TrashBinOverlay.js.map +1 -0
  848. package/presentation/trashBin/components/TrashBinTable.d.ts +2 -0
  849. package/presentation/trashBin/components/TrashBinTable.js +48 -0
  850. package/presentation/trashBin/components/TrashBinTable.js.map +1 -0
  851. package/presentation/trashBin/configs/Browser/BulkAction.d.ts +34 -0
  852. package/presentation/trashBin/configs/Browser/BulkAction.js +59 -0
  853. package/presentation/trashBin/configs/Browser/BulkAction.js.map +1 -0
  854. package/presentation/trashBin/configs/Browser/EntryAction.d.ts +18 -0
  855. package/presentation/trashBin/configs/Browser/EntryAction.js +36 -0
  856. package/presentation/trashBin/configs/Browser/EntryAction.js.map +1 -0
  857. package/presentation/trashBin/configs/Browser/Table/Column.d.ts +16 -0
  858. package/presentation/trashBin/configs/Browser/Table/Column.js +9 -0
  859. package/presentation/trashBin/configs/Browser/Table/Column.js.map +1 -0
  860. package/presentation/trashBin/configs/Browser/Table/Sorting.d.ts +5 -0
  861. package/presentation/trashBin/configs/Browser/Table/Sorting.js +6 -0
  862. package/presentation/trashBin/configs/Browser/Table/Sorting.js.map +1 -0
  863. package/presentation/trashBin/configs/Browser/Table/index.d.ts +18 -0
  864. package/presentation/trashBin/configs/Browser/Table/index.js +9 -0
  865. package/presentation/trashBin/configs/Browser/Table/index.js.map +1 -0
  866. package/presentation/trashBin/configs/Browser/index.d.ts +40 -0
  867. package/presentation/trashBin/configs/Browser/index.js +11 -0
  868. package/presentation/trashBin/configs/Browser/index.js.map +1 -0
  869. package/presentation/trashBin/configs/TrashBinListConfig.d.ts +46 -0
  870. package/presentation/trashBin/configs/TrashBinListConfig.js +43 -0
  871. package/presentation/trashBin/configs/TrashBinListConfig.js.map +1 -0
  872. package/presentation/trashBin/configs/index.d.ts +1 -0
  873. package/presentation/trashBin/configs/index.js +1 -0
  874. package/presentation/trashBin/feature.d.ts +3 -0
  875. package/presentation/trashBin/feature.js +17 -0
  876. package/presentation/trashBin/feature.js.map +1 -0
  877. package/presentation/trashBin/hooks/index.d.ts +4 -0
  878. package/presentation/trashBin/hooks/index.js +4 -0
  879. package/presentation/trashBin/hooks/useDeleteTrashBinItem.d.ts +8 -0
  880. package/presentation/trashBin/hooks/useDeleteTrashBinItem.js +33 -0
  881. package/presentation/trashBin/hooks/useDeleteTrashBinItem.js.map +1 -0
  882. package/presentation/trashBin/hooks/useRestoreTrashBinItem.d.ts +8 -0
  883. package/presentation/trashBin/hooks/useRestoreTrashBinItem.js +35 -0
  884. package/presentation/trashBin/hooks/useRestoreTrashBinItem.js.map +1 -0
  885. package/presentation/trashBin/hooks/useTrashBinItem.d.ts +11 -0
  886. package/presentation/trashBin/hooks/useTrashBinItem.js +7 -0
  887. package/presentation/trashBin/hooks/useTrashBinItem.js.map +1 -0
  888. package/presentation/trashBin/hooks/useTrashBinPresenter.d.ts +13 -0
  889. package/presentation/trashBin/hooks/useTrashBinPresenter.js +7 -0
  890. package/presentation/trashBin/hooks/useTrashBinPresenter.js.map +1 -0
  891. package/presentation/trashBin/index.d.ts +6 -0
  892. package/presentation/trashBin/index.js +6 -0
  893. package/base/plugins/AddGraphQLQuerySelection.d.ts +0 -8
  894. package/base/plugins/AddGraphQLQuerySelection.js +0 -19
  895. package/base/plugins/AddGraphQLQuerySelection.js.map +0 -1
  896. package/base/providers/ApolloProvider.d.ts +0 -13
  897. package/base/providers/ApolloProvider.js +0 -10
  898. package/base/providers/ApolloProvider.js.map +0 -1
  899. package/components/IconPicker/plugins/graphql.d.ts +0 -20
  900. package/components/IconPicker/plugins/graphql.js +0 -22
  901. package/components/IconPicker/plugins/graphql.js.map +0 -1
  902. package/components/RoleAutocomplete/graphql.d.ts +0 -1
  903. package/components/RoleAutocomplete/graphql.js +0 -19
  904. package/components/RoleAutocomplete/graphql.js.map +0 -1
  905. package/components/RoleAutocomplete/index.d.ts +0 -7
  906. package/components/RoleAutocomplete/index.js +0 -26
  907. package/components/RoleAutocomplete/index.js.map +0 -1
  908. package/components/RolesMultiAutocomplete/graphql.d.ts +0 -1
  909. package/components/RolesMultiAutocomplete/graphql.js +0 -24
  910. package/components/RolesMultiAutocomplete/graphql.js.map +0 -1
  911. package/components/TeamAutocomplete/graphql.d.ts +0 -1
  912. package/components/TeamAutocomplete/graphql.js +0 -19
  913. package/components/TeamAutocomplete/graphql.js.map +0 -1
  914. package/components/TeamsMultiAutocomplete/graphql.d.ts +0 -1
  915. package/components/TeamsMultiAutocomplete/graphql.js +0 -24
  916. package/components/TeamsMultiAutocomplete/graphql.js.map +0 -1
  917. package/config/AdminConfig/LexicalTheme/AllowCustomColors.d.ts +0 -5
  918. package/config/AdminConfig/LexicalTheme/AllowCustomColors.js +0 -18
  919. package/config/AdminConfig/LexicalTheme/AllowCustomColors.js.map +0 -1
  920. package/features/apolloClient/abstraction.d.ts +0 -5
  921. package/features/apolloClient/abstraction.js +0 -5
  922. package/features/apolloClient/abstraction.js.map +0 -1
  923. package/features/apolloClient/feature.d.ts +0 -2
  924. package/features/apolloClient/feature.js +0 -31
  925. package/features/apolloClient/feature.js.map +0 -1
  926. package/plugins/MenuPlugin.d.ts +0 -37
  927. package/plugins/MenuPlugin.js +0 -20
  928. package/plugins/MenuPlugin.js.map +0 -1
@@ -19,6 +19,7 @@ export interface IFieldConfig {
19
19
  note?: string;
20
20
  placeholder?: string;
21
21
  defaultValue?: unknown;
22
+ autoFocus?: boolean;
22
23
  renderer?: string;
23
24
  rendererSettings?: Record<string, unknown>;
24
25
  isList?: boolean;
@@ -27,7 +28,7 @@ export interface IFieldConfig {
27
28
  requiredMessage?: string;
28
29
  disabled: boolean;
29
30
  schema?: z.ZodTypeAny;
30
- options?: IValueOption[] | ((form: IFormModel) => IValueOption[]);
31
+ options?: IValueOption[] | ((params: IFieldCallbackParams) => IValueOption[]);
31
32
  normalizeValue?: (value: unknown) => unknown;
32
33
  beforeChangeCallbacks?: BeforeChangeCallback[];
33
34
  afterChangeCallbacks?: AfterChangeCallback[];
@@ -35,19 +36,34 @@ export interface IFieldConfig {
35
36
  onBlurCallbacks?: OnBlurCallback[];
36
37
  requiredWhenCallbacks?: RequiredWhenCallback[];
37
38
  hiddenWhenCallbacks?: HiddenWhenCallback[];
39
+ disabledWhenCallbacks?: DisabledWhenCallback[];
38
40
  computed?: ComputedFieldCallback;
39
41
  computedUntilDirty?: ComputedFieldCallback;
40
42
  tags?: string[];
41
43
  cloneValue?: CloneValueCallback;
44
+ context?: FieldContextCallback;
42
45
  rules?: IRule[];
43
46
  }
47
+ export interface IFieldScope {
48
+ field(name: string): IField;
49
+ parent(): IFieldScope;
50
+ }
51
+ export interface IFieldNavigator {
52
+ parent(): IFieldScope;
53
+ }
54
+ export interface IFieldCallbackParams {
55
+ field: IFieldNavigator;
56
+ form: IFormModel;
57
+ }
44
58
  export interface IRequiredWhenCallbackConfig {
45
- fn: (form: IFormModel) => boolean;
59
+ fn: (params: IFieldCallbackParams) => boolean;
46
60
  message?: string;
47
61
  }
48
62
  export type RequiredWhenCallback = IRequiredWhenCallbackConfig;
49
- export type HiddenWhenCallback = (form: IFormModel) => boolean;
50
- export type ComputedFieldCallback = (form: IFormModel) => unknown;
63
+ export type HiddenWhenCallback = (params: IFieldCallbackParams) => boolean;
64
+ export type DisabledWhenCallback = (params: IFieldCallbackParams) => boolean;
65
+ export type ComputedFieldCallback = (params: IFieldCallbackParams) => unknown;
66
+ export type FieldContextCallback = (params: IFieldCallbackParams) => Record<string, unknown>;
51
67
  export type RuleAction = "hide" | "disable";
52
68
  export type RuleOperator = "eq" | "neq" | "isEmpty" | "isNotEmpty" | "isTruthy" | "isFalsy" | "matches";
53
69
  export interface IRule {
@@ -79,6 +95,7 @@ export interface IFieldVM {
79
95
  description?: string;
80
96
  note?: string;
81
97
  placeholder?: string;
98
+ autoFocus?: boolean;
82
99
  value: unknown;
83
100
  validation: IFieldValidation;
84
101
  validating: boolean;
@@ -95,6 +112,7 @@ export interface IFieldVM {
95
112
  removeItem: (index: number) => void;
96
113
  focusRequested: boolean;
97
114
  clearFocusRequest: () => void;
115
+ context: Record<string, unknown>;
98
116
  }
99
117
  export interface IObjectFieldVM extends IFieldVM {
100
118
  type: "object";
@@ -123,6 +141,8 @@ export interface IObjectFieldVM extends IFieldVM {
123
141
  activeTemplateId: string | null;
124
142
  /** Switch to a different template. Discards values not present in the new template. */
125
143
  setTemplate: (templateId: string) => void;
144
+ /** Returns a cloned copy of the current single-value data with cloneValue transforms applied. */
145
+ getClonedData: () => Record<string, unknown>;
126
146
  }
127
147
  export interface IObjectFieldItemVM {
128
148
  key: string;
@@ -137,6 +157,7 @@ export interface IObjectFieldItemVM {
137
157
  moveUp: () => void;
138
158
  moveDown: () => void;
139
159
  duplicate: () => void;
160
+ getClonedData: () => Record<string, unknown>;
140
161
  /** The template id of this item, if the parent list is templated. */
141
162
  templateId?: string;
142
163
  }
@@ -182,7 +203,7 @@ export interface IField {
182
203
  * form state. The built-in `.required()` flag (if set) always counts as a
183
204
  * truthy check and cannot be overridden.
184
205
  */
185
- addRequiredWhen(fn: (form: IFormModel) => boolean, message?: string): void;
206
+ addRequiredWhen(fn: (params: IFieldCallbackParams) => boolean, message?: string): void;
186
207
  /**
187
208
  * Mark this field as a derived value computed from `fn(form)`. The field
188
209
  * stays editable (no auto-disable) and is excluded from `isDirty` while
@@ -299,12 +320,12 @@ export interface IListItemField {
299
320
  readonly templateId?: string;
300
321
  getData(): Record<string, unknown>;
301
322
  }
302
- export type BeforeChangeCallback = (value: unknown, form: IFormModel) => unknown;
303
- export type AfterChangeCallback = (value: unknown, form: IFormModel) => void;
304
- export type AfterSetValueCallback = (value: unknown, form: IFormModel) => void;
305
- export type OnBlurCallback = (value: unknown, form: IFormModel) => void;
323
+ export type BeforeChangeCallback = (value: unknown, params: IFieldCallbackParams) => unknown;
324
+ export type AfterChangeCallback = (value: unknown, params: IFieldCallbackParams) => void;
325
+ export type AfterSetValueCallback = (value: unknown, params: IFieldCallbackParams) => void;
326
+ export type OnBlurCallback = (value: unknown, params: IFieldCallbackParams) => void;
306
327
  export type CloneValueCallback = (value: unknown) => unknown;
307
- export type LayoutNode = IRowNode | ISeparatorNode | ITabsNode | IElementNode | IObjectNode;
328
+ export type LayoutNode = IRowNode | ISeparatorNode | IAlertNode | ITabsNode | IElementNode | IObjectNode;
308
329
  export interface IRowNode {
309
330
  type: "row";
310
331
  fieldIds: string[];
@@ -314,6 +335,9 @@ export interface IRowNode {
314
335
  export type IRowNodeHandle = IRowBuilder;
315
336
  export interface ISeparatorNode {
316
337
  type: "separator";
338
+ title?: string;
339
+ description?: string;
340
+ rules?: IRule[];
317
341
  }
318
342
  export interface ITabDefinition {
319
343
  id: string;
@@ -340,9 +364,16 @@ export interface ITabsNode {
340
364
  type: "tabs";
341
365
  id?: string;
342
366
  renderer?: string;
367
+ rendererSettings?: Record<string, unknown>;
343
368
  tabs: ITabDefinition[];
344
369
  rules?: IRule[];
345
370
  }
371
+ export interface IAlertNode {
372
+ type: "alert";
373
+ message?: string;
374
+ alertType?: "info" | "success" | "warning" | "danger";
375
+ rules?: IRule[];
376
+ }
346
377
  export interface IElementNode {
347
378
  type: "element";
348
379
  id?: string;
@@ -375,8 +406,17 @@ export interface IRowBuilder extends ILayoutNodeBuilder {
375
406
  build(): IRowNode;
376
407
  }
377
408
  export interface ISeparatorBuilder extends ILayoutNodeBuilder {
409
+ title(text: string): this;
410
+ description(text: string): this;
411
+ rules(rules: IRule[]): this;
378
412
  build(): ISeparatorNode;
379
413
  }
414
+ export interface IAlertBuilder extends ILayoutNodeBuilder {
415
+ message(text: string): this;
416
+ alertType(type: "info" | "success" | "warning" | "danger"): this;
417
+ rules(rules: IRule[]): this;
418
+ build(): IAlertNode;
419
+ }
380
420
  export interface ITabBuilder {
381
421
  label(text: string): this;
382
422
  description(text: string): this;
@@ -385,7 +425,7 @@ export interface ITabBuilder {
385
425
  rules(rules: IRule[]): this;
386
426
  }
387
427
  export interface ITabsBuilder extends ILayoutNodeBuilder {
388
- renderer(name: string): this;
428
+ renderer(name: string, settings?: Record<string, unknown>): this;
389
429
  tab(id: string, configure: (tab: ITabBuilder) => void): this;
390
430
  before(target: string): this;
391
431
  after(target: string): this;
@@ -398,13 +438,20 @@ export interface IElementBuilder extends ILayoutNodeBuilder {
398
438
  export interface IObjectBuilder extends ILayoutNodeBuilder {
399
439
  build(): IObjectNode;
400
440
  }
401
- export type LayoutNodeVM = IRowNodeVM | ISeparatorNodeVM | ITabsNodeVM | IElementNodeVM;
441
+ export type LayoutNodeVM = IRowNodeVM | ISeparatorNodeVM | IAlertNodeVM | ITabsNodeVM | IElementNodeVM;
402
442
  export interface IRowNodeVM {
403
443
  type: "row";
404
444
  fields: IFieldVM[];
405
445
  }
406
446
  export interface ISeparatorNodeVM {
407
447
  type: "separator";
448
+ title?: string;
449
+ description?: string;
450
+ }
451
+ export interface IAlertNodeVM {
452
+ type: "alert";
453
+ message?: string;
454
+ alertType: "info" | "success" | "warning" | "danger";
408
455
  }
409
456
  export interface ITabDefinitionVM {
410
457
  id: string;
@@ -419,6 +466,7 @@ export interface ITabsNodeVM {
419
466
  type: "tabs";
420
467
  id?: string;
421
468
  renderer?: string;
469
+ rendererSettings?: Record<string, unknown>;
422
470
  tabs: ITabDefinitionVM[];
423
471
  disabled: boolean;
424
472
  activeTabId: string;
@@ -470,6 +518,7 @@ export interface IFormModifier {
470
518
  export interface ILayoutModifier {
471
519
  row(...fieldIds: string[]): ILayoutNodeHandle;
472
520
  separator(): ILayoutNodeHandle;
521
+ alert(): ILayoutNodeHandle;
473
522
  tabs(config: {
474
523
  id?: string;
475
524
  renderer?: string;
@@ -490,12 +539,15 @@ export interface IFormError {
490
539
  export interface IFormVM {
491
540
  layout: LayoutNodeVM[];
492
541
  errors: IFormError[];
542
+ hasErrors: boolean;
493
543
  isDirty: boolean;
494
544
  isValid: boolean | null;
495
545
  submitCount: number;
496
546
  focusField(path: string): void;
497
547
  getData(): Record<string, unknown>;
498
- setData(data: Record<string, unknown>): void;
548
+ setData(data: Record<string, unknown>, options?: {
549
+ dirty?: boolean;
550
+ }): void;
499
551
  }
500
552
  /**
501
553
  * Imperative form-level rule. Receives the live form and may return a flat
@@ -526,10 +578,14 @@ export interface IFormModel<T = Record<string, any>> {
526
578
  */
527
579
  addRule(rule: FormRule): void;
528
580
  getData(): T;
529
- setData(data: T): void;
581
+ setData(data: T, options?: {
582
+ dirty?: boolean;
583
+ }): void;
530
584
  reset(): void;
531
585
  validate(): Promise<boolean>;
532
- submit<T = Record<string, unknown>>(): Promise<T | false>;
586
+ submit<T = Record<string, unknown>>(options?: {
587
+ skipValidation?: boolean;
588
+ }): Promise<T | false>;
533
589
  evaluateRules(rules: IRule[] | undefined): {
534
590
  visible: boolean;
535
591
  disabled: boolean;
@@ -542,6 +598,7 @@ export interface IFormModel<T = Record<string, any>> {
542
598
  readonly errors: IFormError[];
543
599
  readonly vm: IFormVM;
544
600
  getFieldBuilders(predicate?: (builder: IFieldBuilder) => boolean): IFieldBuilder[];
601
+ traverse(callback: (builder: IFieldBuilder) => void): void;
545
602
  resolveChildLayout(layout: LayoutNode[], children: Map<string, IField>): LayoutNodeVM[];
546
603
  readonly registry: IFieldBuilderRegistry;
547
604
  }
@@ -561,6 +618,9 @@ export declare namespace FormModel {
561
618
  type LayoutNodeBuilder = ILayoutNodeBuilder;
562
619
  type RowBuilder = IRowBuilder;
563
620
  type SeparatorBuilder = ISeparatorBuilder;
621
+ type AlertBuilder = IAlertBuilder;
622
+ type AlertNode = IAlertNode;
623
+ type AlertNodeVM = IAlertNodeVM;
564
624
  type TabBuilder = ITabBuilder;
565
625
  type TabsBuilder = ITabsBuilder;
566
626
  type ElementBuilder = IElementBuilder;
@@ -597,8 +657,10 @@ export declare namespace FormModel {
597
657
  type RuleEvaluator = IRuleEvaluator;
598
658
  type FormRuleFunction = FormRuleFn;
599
659
  type FormRuleType = FormRule;
600
- type RequiredWhen = (form: IFormModel) => boolean;
660
+ type CallbackParams = IFieldCallbackParams;
661
+ type RequiredWhen = (params: IFieldCallbackParams) => boolean;
601
662
  type HiddenWhen = HiddenWhenCallback;
663
+ type DisabledWhen = DisabledWhenCallback;
602
664
  type Computed = ComputedFieldCallback;
603
665
  }
604
666
  export interface IFormModelFactory {
@@ -613,6 +675,7 @@ export interface IFormModelConfig {
613
675
  export interface ILayoutBuilder {
614
676
  row(...fieldIds: string[]): IRowBuilder;
615
677
  separator(): ISeparatorBuilder;
678
+ alert(): IAlertBuilder;
616
679
  tabs(id?: string): ITabsBuilder;
617
680
  element(renderer: string, props?: Record<string, unknown>): IElementBuilder;
618
681
  /**
@@ -634,18 +697,20 @@ export interface IFieldBuilder<TType extends string = string, TOptions extends b
634
697
  description(text: string): this;
635
698
  note(text: string): this;
636
699
  placeholder(text: string): this;
700
+ autoFocus(value?: boolean): this;
637
701
  schema(zodSchema: z.ZodTypeAny): this;
638
702
  defaultValue(value: unknown): this;
639
703
  renderer<TName extends FieldRendererName<TType, TOptions>>(name: TName, ...args: undefined extends FieldRendererSettings<TName> ? [settings?: FieldRendererSettings<TName>] : FieldRendererSettings<TName> extends undefined ? [] : [settings: FieldRendererSettings<TName>]): this;
640
704
  hidden(): this;
641
- hiddenWhen(fn: (form: IFormModel) => boolean): this;
705
+ hiddenWhen(fn: HiddenWhenCallback): this;
706
+ disabledWhen(fn: DisabledWhenCallback): this;
642
707
  required(message?: string): this;
643
708
  /**
644
709
  * Conditional required check. Multiple `requiredWhen()` calls chain — the
645
710
  * first one to return `true` for the current form state makes the field
646
711
  * required. Built-in `.required()` (if set) is evaluated alongside.
647
712
  */
648
- requiredWhen(fn: (form: IFormModel) => boolean, message?: string): this;
713
+ requiredWhen(fn: (params: IFieldCallbackParams) => boolean, message?: string): this;
649
714
  list(): this;
650
715
  disabled(value?: boolean): this;
651
716
  rules(rules: IRule[]): this;
@@ -654,6 +719,8 @@ export interface IFieldBuilder<TType extends string = string, TOptions extends b
654
719
  afterSetValue(fn: AfterSetValueCallback): this;
655
720
  onBlur(fn: OnBlurCallback): this;
656
721
  cloneValue(fn: CloneValueCallback): this;
722
+ getName(): string;
723
+ getType(): string;
657
724
  getTags(): string[];
658
725
  tags(tags: string[]): this;
659
726
  /**
@@ -672,7 +739,7 @@ export interface IFieldBuilder<TType extends string = string, TOptions extends b
672
739
  build(name: string): IFieldConfig;
673
740
  }
674
741
  export interface IOptionsFieldBuilder<TType extends string, TValue = unknown> extends IFieldBuilder<TType, false, TValue> {
675
- options(opts: IValueOption<OptionValueType<TType>>[] | ((form: IFormModel) => IValueOption<OptionValueType<TType>>[])): IFieldBuilder<TType, true, TValue>;
742
+ options(opts: IValueOption<OptionValueType<TType>>[] | ((params: IFieldCallbackParams) => IValueOption<OptionValueType<TType>>[])): IFieldBuilder<TType, true, TValue>;
676
743
  }
677
744
  export interface IObjectFieldBuilder extends IFieldBuilder<"object", false, Record<string, unknown> | null> {
678
745
  fields(fn: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>): this;
@@ -1 +1 @@
1
- {"version":3,"file":"features/formModel/abstractions.js","sources":["../../../src/features/formModel/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { z } from \"zod\";\nimport type { Icon } from \"~/components/IconPicker/types.js\";\n\n// ---------------------------------------------------------------------------\n// Renderer registry — augmented by each renderer via declare module\n// ---------------------------------------------------------------------------\n\nexport interface IFieldRendererRegistry {}\n\nexport type FieldRendererName<\n TType extends string = string,\n TOptions extends boolean = boolean\n> = string extends TType\n ? keyof IFieldRendererRegistry & string\n : {\n [K in keyof IFieldRendererRegistry]: TType extends IFieldRendererRegistry[K][\"fieldType\"]\n ? boolean extends TOptions\n ? K\n : TOptions extends true\n ? IFieldRendererRegistry[K] extends { options: true }\n ? K\n : never\n : IFieldRendererRegistry[K] extends { options: true }\n ? never\n : K\n : never;\n }[keyof IFieldRendererRegistry] &\n string;\n\nexport type FieldRendererSettings<TName extends string> = TName extends keyof IFieldRendererRegistry\n ? IFieldRendererRegistry[TName][\"settings\"]\n : Record<string, unknown> | undefined;\n\n// ---------------------------------------------------------------------------\n// Field types\n// ---------------------------------------------------------------------------\n\nexport interface IFieldConfig {\n name: string;\n type: string;\n label?: string;\n help?: string;\n description?: string;\n note?: string;\n placeholder?: string;\n defaultValue?: unknown;\n renderer?: string;\n rendererSettings?: Record<string, unknown>;\n isList?: boolean;\n hidden: boolean;\n required: boolean;\n requiredMessage?: string;\n disabled: boolean;\n schema?: z.ZodTypeAny;\n options?: IValueOption[] | ((form: IFormModel) => IValueOption[]);\n normalizeValue?: (value: unknown) => unknown;\n beforeChangeCallbacks?: BeforeChangeCallback[];\n afterChangeCallbacks?: AfterChangeCallback[];\n afterSetValueCallbacks?: AfterSetValueCallback[];\n onBlurCallbacks?: OnBlurCallback[];\n requiredWhenCallbacks?: RequiredWhenCallback[];\n hiddenWhenCallbacks?: HiddenWhenCallback[];\n computed?: ComputedFieldCallback;\n computedUntilDirty?: ComputedFieldCallback;\n tags?: string[];\n cloneValue?: CloneValueCallback;\n rules?: IRule[];\n}\n\nexport interface IRequiredWhenCallbackConfig {\n fn: (form: IFormModel) => boolean;\n message?: string;\n}\n\nexport type RequiredWhenCallback = IRequiredWhenCallbackConfig;\n\nexport type HiddenWhenCallback = (form: IFormModel) => boolean;\n\nexport type ComputedFieldCallback = (form: IFormModel) => unknown;\n\n// ---------------------------------------------------------------------------\n// Rules system\n// ---------------------------------------------------------------------------\n\nexport type RuleAction = \"hide\" | \"disable\";\n\nexport type RuleOperator =\n | \"eq\"\n | \"neq\"\n | \"isEmpty\"\n | \"isNotEmpty\"\n | \"isTruthy\"\n | \"isFalsy\"\n | \"matches\";\n\nexport interface IRule {\n type: string;\n target: string;\n operator: RuleOperator | (string & {});\n value: string | null;\n action: RuleAction;\n}\n\nexport interface IRuleEvaluator {\n canEvaluate(rule: IRule): boolean;\n evaluate(rule: IRule, form: IFormModel): boolean;\n}\n\nexport interface IValueOption<V extends string | number = string | number> {\n label: string;\n value: V;\n disabled?: boolean;\n}\n\nexport type OptionValueType<TType extends string> = TType extends \"number\" ? number : string;\n\nexport interface IFieldValidation {\n isValid: boolean | null;\n message?: string;\n}\n\nexport interface IFieldVM {\n name: string;\n type: string;\n label?: string;\n help?: string;\n description?: string;\n note?: string;\n placeholder?: string;\n value: unknown;\n validation: IFieldValidation;\n validating: boolean;\n required: boolean;\n visible: boolean;\n disabled: boolean;\n renderer?: string;\n rendererSettings?: Record<string, unknown>;\n isList?: boolean;\n options?: IValueOption[];\n onChange: (value: unknown) => void;\n onBlur: () => void;\n addItem: (value?: unknown) => void;\n removeItem: (index: number) => void;\n focusRequested: boolean;\n clearFocusRequest: () => void;\n}\n\nexport interface IObjectFieldVM extends IFieldVM {\n type: \"object\";\n isList: boolean;\n /** Child field VMs for non-list object fields. */\n fields: IFieldVM[];\n /**\n * Resolved layout for non-list object fields. For templated objects, resolves\n * against the active template's per-template layout (if registered via\n * `layout.object()`), otherwise defaults to one row per visible child.\n * For list-mode fields, see `items[].layout`.\n */\n layout: LayoutNodeVM[];\n /** Items for list-mode object fields. */\n items: IObjectFieldItemVM[];\n /** Append a new item. Templated lists require a template id. */\n addItem: (value?: unknown) => void;\n moveItem: (fromIndex: number, toIndex: number) => void;\n /** Duplicate a list item (including its `_templateId` when templated) and insert it after the source. */\n duplicateItem: (index: number) => void;\n /** True when the object has templates defined. */\n isTemplated: boolean;\n /** Templates visible in the picker (filtered by each template's reactive `visible`). */\n availableTemplates: ITemplateVM[];\n /** Currently active template id (single-object mode), or null if no template picked. */\n activeTemplateId: string | null;\n /** Switch to a different template. Discards values not present in the new template. */\n setTemplate: (templateId: string) => void;\n}\n\nexport interface IObjectFieldItemVM {\n key: string;\n fields: IFieldVM[];\n /**\n * Resolved layout for this item. For templated lists, resolves against the\n * item's template-specific layout (if registered via `layout.object()`),\n * otherwise defaults to one row per visible child.\n */\n layout: LayoutNodeVM[];\n remove: () => void;\n moveUp: () => void;\n moveDown: () => void;\n duplicate: () => void;\n /** The template id of this item, if the parent list is templated. */\n templateId?: string;\n}\n\n/**\n * VM exposed for each available template in the picker.\n */\nexport interface ITemplateIcon {\n type: string;\n name: string;\n}\n\nexport interface ITemplateVM {\n id: string;\n label: string;\n icon?: ITemplateIcon;\n}\n\nexport interface IField {\n readonly name: string;\n readonly type: string;\n readonly visible: boolean;\n readonly disabled: boolean;\n readonly vm: IFieldVM;\n readonly config: IFieldConfig;\n getValue<T = unknown>(): T;\n setValue(value: unknown): void;\n setValueSilent(value: unknown): void;\n setDisabled(value: boolean): void;\n setVisible(value: boolean): void;\n setForm(form: IFormModel, parentPath?: string): void;\n setAncestorRules(rules: IRule[]): void;\n setValidation(validation: IFieldValidation): void;\n resetValidation(): void;\n validate(options?: { force?: boolean }): Promise<boolean>;\n remove(): void;\n addBeforeChange(cb: BeforeChangeCallback): void;\n addAfterChange(cb: AfterChangeCallback): void;\n addAfterSetValue(cb: AfterSetValueCallback): void;\n addOnBlur(cb: OnBlurCallback): void;\n /**\n * Append a conditional required check. Multiple callbacks chain additively;\n * the first one returning `true` makes the field required for the current\n * form state. The built-in `.required()` flag (if set) always counts as a\n * truthy check and cannot be overridden.\n */\n addRequiredWhen(fn: (form: IFormModel) => boolean, message?: string): void;\n /**\n * Mark this field as a derived value computed from `fn(form)`. The field\n * stays editable (no auto-disable) and is excluded from `isDirty` while\n * still tracking the computed value. Validation continues to apply.\n */\n setComputed(fn: ComputedFieldCallback): void;\n /**\n * Same as `setComputed`, but the field switches to manual mode the first\n * time the user edits its value. After that, the computed callback no\n * longer overrides user input.\n */\n setComputedUntilDirty(fn: ComputedFieldCallback): void;\n blur(): void;\n as<T extends keyof FieldTypeMap>(type: T): FieldTypeMap[T];\n readonly qualifiedName: string;\n focus(): void;\n requestFocus(): void;\n clearFocusRequest(): void;\n}\n\n/**\n * Maps field type strings to their typed field interfaces.\n * Extended via module augmentation when new field types are registered.\n */\nexport interface ITypedField<V> extends IField {\n getValue<T = V>(): T;\n}\n\ntype InferFieldTypeMap = {\n [K in keyof IFieldBuilderRegistry]: ReturnType<\n IFieldBuilderRegistry[K]\n > extends IObjectFieldBuilder\n ? IObjectField\n : ReturnType<IFieldBuilderRegistry[K]> extends { readonly __valueType?: infer V }\n ? ITypedField<V>\n : IField;\n};\n\nexport type FieldTypeMap = { [K in keyof InferFieldTypeMap]: InferFieldTypeMap[K] };\n\nexport type FileValue = {\n id: string;\n name: string;\n size: number;\n mimeType: string;\n src: string;\n width: number | undefined;\n height: number | undefined;\n};\n\n// ---------------------------------------------------------------------------\n// Object / List field types\n// ---------------------------------------------------------------------------\n\nexport interface IObjectFieldConfig extends IFieldConfig {\n childBuilders: Record<string, IFieldBuilder>;\n isList: boolean;\n listSchema?: z.ZodTypeAny;\n templates?: ITemplateConfig[];\n}\n\nexport interface ITemplateBuilder {\n label(text: string): this;\n icon(icon: ITemplateIcon): this;\n fields(factory: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>): this;\n visible(predicate: (form: IFormModel) => boolean): this;\n}\n\nexport interface ITemplateConfig {\n id: string;\n label: string;\n icon?: ITemplateIcon;\n childBuilders: Record<string, IFieldBuilder>;\n visible?: (form: IFormModel) => boolean;\n}\n\nexport interface IObjectField extends ITypedField<Record<string, unknown> | null> {\n readonly isList: boolean;\n readonly children: Map<string, IField>;\n readonly items: IListItemField[];\n readonly isTemplated: boolean;\n readonly activeTemplateId: string | null;\n readonly availableTemplates: ITemplateVM[];\n /**\n * Add, replace, or remove children on this object field at runtime.\n * Mirrors `form.fields()` but scoped to this object's children. Existing\n * keys are replaced; new keys are appended; passing `undefined` removes.\n * Throws on templated objects — each template owns its own fields.\n */\n fields(\n factory: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder | undefined>\n ): void;\n /**\n * Register an inner layout used by the field's VM (`field.layout` for\n * single objects, `item.layout` for list items).\n *\n * Pass `LayoutNode[]` for non-templated objects (the layout applies to the\n * single object or every list item). Pass `Record<templateId, LayoutNode[]>`\n * for templated objects (each entry applies when that template is active\n * or for each list item with that template). Templates without an entry\n * fall back to default one-row-per-visible-child.\n */\n setInnerLayout(layout: LayoutNode[] | Record<string, LayoutNode[]>): void;\n /**\n * Append a new list item.\n * - Non-templated list: `addItem(data?)` — data hydrates the new item.\n * - Templated list: `addItem(templateId, data?)` — templateId picks the variant.\n */\n addItem(\n templateIdOrData?: string | Record<string, unknown>,\n data?: Record<string, unknown>\n ): void;\n removeItem(index: number): void;\n moveItem(fromIndex: number, toIndex: number): void;\n /** Duplicate a list item (including its `_templateId`) and insert after the source. */\n duplicateItem(index: number): void;\n setTemplate(templateId: string): void;\n /**\n * Runtime template management. Available on every object field but throws\n * when called on a non-templated field (`isTemplated === false`).\n */\n readonly templates: IObjectFieldTemplates;\n getInnerLayout(): LayoutNode[] | null;\n getData(): Record<string, unknown> | Record<string, unknown>[];\n}\n\nexport interface IObjectFieldTemplates {\n add(id: string, configure: (t: ITemplateBuilder) => void): void;\n remove(templateId: string): void;\n}\n\nexport interface IListItemField {\n readonly key: string;\n readonly children: Map<string, IField>;\n readonly templateId?: string;\n getData(): Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Callback types\n// ---------------------------------------------------------------------------\n\nexport type BeforeChangeCallback = (value: unknown, form: IFormModel) => unknown;\nexport type AfterChangeCallback = (value: unknown, form: IFormModel) => void;\nexport type AfterSetValueCallback = (value: unknown, form: IFormModel) => void;\nexport type OnBlurCallback = (value: unknown, form: IFormModel) => void;\nexport type CloneValueCallback = (value: unknown) => unknown;\n\n// ---------------------------------------------------------------------------\n// Layout types\n// ---------------------------------------------------------------------------\n\nexport type LayoutNode = IRowNode | ISeparatorNode | ITabsNode | IElementNode | IObjectNode;\n\nexport interface IRowNode {\n type: \"row\";\n fieldIds: string[];\n position?: LayoutPosition;\n}\n\n/** @deprecated Use IRowBuilder instead */\nexport type IRowNodeHandle = IRowBuilder;\n\nexport interface ISeparatorNode {\n type: \"separator\";\n}\n\nexport interface ITabDefinition {\n id: string;\n label: string;\n description?: string;\n icon?: Icon;\n layout: LayoutNode[];\n rules?: IRule[];\n}\n\n/**\n * User-facing tab spec accepted by `layout.tabs(...)`. The layout is supplied\n * as a callback receiving the layout builder, mirroring `layout.object(...)`.\n * Resolved to `ITabDefinition` (with `layout: LayoutNode[]`) at build time.\n */\nexport interface ITabDefinitionInput {\n id: string;\n label: string;\n description?: string;\n icon?: Icon;\n layout: (layout: ILayoutBuilder) => ILayoutNodeBuilder[];\n rules?: IRule[];\n}\n\nexport interface ITabsNode {\n type: \"tabs\";\n id?: string;\n renderer?: string;\n tabs: ITabDefinition[];\n rules?: IRule[];\n}\n\nexport interface IElementNode {\n type: \"element\";\n id?: string;\n renderer: string;\n props?: Record<string, unknown>;\n}\n\n/**\n * Layout node that references an object field and registers an inner layout\n * on it. Resolved as a single-field row in the outer layout — the inner\n * layout is exposed on the field's VM (`field.layout` for single objects,\n * `item.layout` for list items).\n *\n * - For non-templated objects, `inner` is `LayoutNode[]` (one layout, applied\n * to the single object or every list item).\n * - For templated objects, `inner` is `Record<templateId, LayoutNode[]>` —\n * each entry is the layout used when that template is active (or for each\n * list item with that template).\n */\nexport interface IObjectNode {\n type: \"object\";\n fieldName: string;\n inner: LayoutNode[] | Record<string, LayoutNode[]>;\n}\n\n// ---------------------------------------------------------------------------\n// Layout node builders\n// ---------------------------------------------------------------------------\n\nexport interface ILayoutNodeBuilder {\n build(): LayoutNode;\n}\n\nexport interface IRowBuilder extends ILayoutNodeBuilder {\n before(target: string): IRowBuilder;\n after(target: string): IRowBuilder;\n build(): IRowNode;\n}\n\nexport interface ISeparatorBuilder extends ILayoutNodeBuilder {\n build(): ISeparatorNode;\n}\n\nexport interface ITabBuilder {\n label(text: string): this;\n description(text: string): this;\n icon(icon: Icon): this;\n layout(factory: (l: ILayoutBuilder) => ILayoutNodeBuilder[]): this;\n rules(rules: IRule[]): this;\n}\n\nexport interface ITabsBuilder extends ILayoutNodeBuilder {\n renderer(name: string): this;\n tab(id: string, configure: (tab: ITabBuilder) => void): this;\n before(target: string): this;\n after(target: string): this;\n rules(rules: IRule[]): this;\n build(): ITabsNode;\n}\n\nexport interface IElementBuilder extends ILayoutNodeBuilder {\n build(): IElementNode;\n}\n\nexport interface IObjectBuilder extends ILayoutNodeBuilder {\n build(): IObjectNode;\n}\n\n// ---------------------------------------------------------------------------\n// Layout VM types\n// ---------------------------------------------------------------------------\n\nexport type LayoutNodeVM = IRowNodeVM | ISeparatorNodeVM | ITabsNodeVM | IElementNodeVM;\n\nexport interface IRowNodeVM {\n type: \"row\";\n fields: IFieldVM[];\n}\n\nexport interface ISeparatorNodeVM {\n type: \"separator\";\n}\n\nexport interface ITabDefinitionVM {\n id: string;\n label: string;\n description?: string;\n icon?: Icon;\n hasErrors: boolean;\n disabled: boolean;\n layout: LayoutNodeVM[];\n}\n\nexport interface ITabsNodeVM {\n type: \"tabs\";\n id?: string;\n renderer?: string;\n tabs: ITabDefinitionVM[];\n disabled: boolean;\n activeTabId: string;\n setActiveTab: (id: string) => void;\n}\n\nexport interface IElementNodeVM {\n type: \"element\";\n renderer: string;\n props?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Layout modifier types\n// ---------------------------------------------------------------------------\n\nexport type LayoutPosition =\n | { type: \"before\"; target: string }\n | { type: \"after\"; target: string }\n | { type: \"replace\"; target: string };\n\nexport interface IPositionedLayoutNode {\n node: LayoutNode;\n position?: LayoutPosition;\n}\n\n/**\n * Chainable handle returned by modifier layout.row().\n * Can be used as-is (appended) or positioned via .before()/.after()/.replace().\n */\nexport interface ILayoutNodeHandle extends IPositionedLayoutNode {\n before(target: string): IPositionedLayoutNode;\n after(target: string): IPositionedLayoutNode;\n replace(target: string): IPositionedLayoutNode;\n}\n\n// ---------------------------------------------------------------------------\n// Named layout node access types\n// ---------------------------------------------------------------------------\n\nexport interface LayoutNodeHandleMap {\n tabs: ITabsBuilder;\n element: IElementNode;\n object: IObjectNode;\n}\n\nexport interface ILayoutNodeAccessHandle {\n as<T extends keyof LayoutNodeHandleMap>(type: T): LayoutNodeHandleMap[T];\n}\n\n/** @deprecated Use ITabsBuilder instead */\nexport type ITabsHandle = ITabsBuilder;\n\n/** @deprecated Use ITabBuilder instead */\nexport type ITabHandle = ITabBuilder;\n\n// ---------------------------------------------------------------------------\n// Modifier types\n// ---------------------------------------------------------------------------\n\nexport interface IFormModifier {\n modify(form: IFormModel): void;\n}\n\nexport interface ILayoutModifier {\n row(...fieldIds: string[]): ILayoutNodeHandle;\n separator(): ILayoutNodeHandle;\n tabs(config: {\n id?: string;\n renderer?: string;\n tabs: ITabDefinitionInput[];\n rules?: IRule[];\n }): ILayoutNodeHandle;\n element(renderer: string, props?: Record<string, unknown>): ILayoutNodeHandle;\n object(\n fieldName: string,\n layout: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]\n ): ILayoutNodeHandle;\n object(\n fieldName: string,\n templateLayouts: Record<string, (layout: ILayoutBuilder) => ILayoutNodeBuilder[]>\n ): ILayoutNodeHandle;\n remove(target: string): void;\n}\n\n// ---------------------------------------------------------------------------\n// Form types\n// ---------------------------------------------------------------------------\n\nexport interface IFormError {\n path: string;\n label?: string;\n breadcrumb?: string[];\n message: string;\n}\n\nexport interface IFormVM {\n layout: LayoutNodeVM[];\n errors: IFormError[];\n isDirty: boolean;\n isValid: boolean | null;\n submitCount: number;\n focusField(path: string): void;\n getData(): Record<string, unknown>;\n setData(data: Record<string, unknown>): void;\n}\n\n/**\n * Imperative form-level rule. Receives the live form and may return a flat\n * list of errors (sync or async). Errors are merged into `form.errors` and\n * surfaced on per-field validation when their `path` matches a known field.\n */\nexport type FormRuleFn = (\n form: IFormModel\n) => IFormError[] | undefined | void | Promise<IFormError[] | undefined | void>;\n\n/**\n * A form-level rule. Either a Zod schema (validated against `form.getData()`)\n * or an imperative function returning an error list.\n */\nexport type FormRule = z.ZodTypeAny | FormRuleFn;\n\nexport interface IFormModel<T = Record<string, any>> {\n field(name: string): IField;\n fields(\n factory: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder | undefined>\n ): void;\n layout(factory: (layout: ILayoutModifier) => (LayoutNode | IPositionedLayoutNode)[]): void;\n layout(nodeId: string): ILayoutNodeAccessHandle;\n /**\n * Replace the entire layout. Re-registers per-field inner layouts and\n * propagates ancestor rules. Use `layout()` (modifier form) for additive\n * changes.\n */\n setLayout(factory: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]): void;\n /**\n * Append a form-level validation rule. Runs after per-field validation.\n * Accepts a Zod schema (validated against `getData()`) or an imperative\n * function returning a list of errors.\n */\n addRule(rule: FormRule): void;\n getData(): T;\n setData(data: T): void;\n reset(): void;\n validate(): Promise<boolean>;\n submit<T = Record<string, unknown>>(): Promise<T | false>;\n evaluateRules(rules: IRule[] | undefined): { visible: boolean; disabled: boolean };\n focusField(name: string): void;\n readonly isDirty: boolean;\n readonly isValid: boolean | null;\n readonly submitted: boolean;\n readonly submitCount: number;\n readonly errors: IFormError[];\n readonly vm: IFormVM;\n getFieldBuilders(predicate?: (builder: IFieldBuilder) => boolean): IFieldBuilder[];\n resolveChildLayout(layout: LayoutNode[], children: Map<string, IField>): LayoutNodeVM[];\n readonly registry: IFieldBuilderRegistry;\n}\n\n// ---------------------------------------------------------------------------\n// FormModel namespace — groups all public types under one import\n// ---------------------------------------------------------------------------\n\nexport namespace FormModel {\n export type FieldConfig = IFieldConfig;\n export type ValueOption = IValueOption;\n export type FieldValidation = IFieldValidation;\n export type FieldVM = IFieldVM;\n export type Field = IField;\n export type ObjectField = IObjectField;\n export type ObjectFieldConfig = IObjectFieldConfig;\n export type BeforeChange = BeforeChangeCallback;\n export type AfterChange = AfterChangeCallback;\n export type AfterSetValue = AfterSetValueCallback;\n export type OnBlur = OnBlurCallback;\n export type CloneValue = CloneValueCallback;\n export type LayoutNodeBuilder = ILayoutNodeBuilder;\n export type RowBuilder = IRowBuilder;\n export type SeparatorBuilder = ISeparatorBuilder;\n export type TabBuilder = ITabBuilder;\n export type TabsBuilder = ITabsBuilder;\n export type ElementBuilder = IElementBuilder;\n export type ObjectBuilder = IObjectBuilder;\n export type RowNode = IRowNode;\n /** @deprecated Use RowBuilder instead */\n export type RowNodeHandle = IRowNodeHandle;\n export type RowNodeVM = IRowNodeVM;\n export type SeparatorNode = ISeparatorNode;\n export type SeparatorNodeVM = ISeparatorNodeVM;\n export type TabsNode = ITabsNode;\n export type TabDefinition = ITabDefinition;\n export type TabDefinitionInput = ITabDefinitionInput;\n export type TabsNodeVM = ITabsNodeVM;\n export type TabDefinitionVM = ITabDefinitionVM;\n export type TabIcon = Icon;\n export type ElementNode = IElementNode;\n export type ElementNodeVM = IElementNodeVM;\n export type ObjectNode = IObjectNode;\n export type ObjectFieldVM = IObjectFieldVM;\n export type ObjectFieldItemVM = IObjectFieldItemVM;\n export type TemplateBuilder = ITemplateBuilder;\n export type TemplateConfig = ITemplateConfig;\n export type TemplateIcon = ITemplateIcon;\n export type TemplateVM = ITemplateVM;\n export type ObjectFieldTemplatesAPI = IObjectFieldTemplates;\n export type FormError = IFormError;\n export type FormVM = IFormVM;\n export type Interface<T = Record<string, any>> = IFormModel<T>;\n export type Modifier = IFormModifier;\n export type LayoutModifier = ILayoutModifier;\n export type Rule = IRule;\n export type Action = RuleAction;\n export type RuleEvaluator = IRuleEvaluator;\n export type FormRuleFunction = FormRuleFn;\n export type FormRuleType = FormRule;\n export type RequiredWhen = (form: IFormModel) => boolean;\n export type HiddenWhen = HiddenWhenCallback;\n export type Computed = ComputedFieldCallback;\n}\n\n// ---------------------------------------------------------------------------\n// FormModelFactory abstraction\n// ---------------------------------------------------------------------------\n\nexport interface IFormModelFactory {\n create<T = Record<string, any>>(config: IFormModelConfig): IFormModel<T>;\n}\n\nexport interface IFormModelConfig {\n fields: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>;\n layout?: (layout: ILayoutBuilder) => ILayoutNodeBuilder[];\n validateOnSubmit?: boolean;\n ruleEvaluators?: IRuleEvaluator[];\n}\n\nexport interface ILayoutBuilder {\n row(...fieldIds: string[]): IRowBuilder;\n separator(): ISeparatorBuilder;\n tabs(id?: string): ITabsBuilder;\n element(renderer: string, props?: Record<string, unknown>): IElementBuilder;\n /**\n * Reference an object field and register its inner layout.\n *\n * Non-templated: pass a single layout factory; the layout applies to the\n * single object or to every list item. Templated: pass a map of factories\n * keyed by template id; each entry applies when that template is active\n * (or for each list item with that template). Templates without an entry\n * fall back to default one-row-per-visible-child.\n */\n object(\n fieldName: string,\n layout: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]\n ): IObjectBuilder;\n object(\n fieldName: string,\n templateLayouts: Record<string, (layout: ILayoutBuilder) => ILayoutNodeBuilder[]>\n ): IObjectBuilder;\n}\n\nexport interface IFieldBuilder<\n TType extends string = string,\n TOptions extends boolean = false,\n TValue = unknown\n> {\n readonly __valueType?: TValue;\n label(text: string): this;\n help(text: string): this;\n description(text: string): this;\n note(text: string): this;\n placeholder(text: string): this;\n schema(zodSchema: z.ZodTypeAny): this;\n defaultValue(value: unknown): this;\n renderer<TName extends FieldRendererName<TType, TOptions>>(\n name: TName,\n ...args: undefined extends FieldRendererSettings<TName>\n ? [settings?: FieldRendererSettings<TName>]\n : FieldRendererSettings<TName> extends undefined\n ? []\n : [settings: FieldRendererSettings<TName>]\n ): this;\n hidden(): this;\n hiddenWhen(fn: (form: IFormModel) => boolean): this;\n required(message?: string): this;\n /**\n * Conditional required check. Multiple `requiredWhen()` calls chain — the\n * first one to return `true` for the current form state makes the field\n * required. Built-in `.required()` (if set) is evaluated alongside.\n */\n requiredWhen(fn: (form: IFormModel) => boolean, message?: string): this;\n list(): this;\n disabled(value?: boolean): this;\n rules(rules: IRule[]): this;\n beforeChange(fn: BeforeChangeCallback): this;\n afterChange(fn: AfterChangeCallback): this;\n afterSetValue(fn: AfterSetValueCallback): this;\n onBlur(fn: OnBlurCallback): this;\n cloneValue(fn: CloneValueCallback): this;\n getTags(): string[];\n tags(tags: string[]): this;\n /**\n * Mark this field as a derived value computed from `fn(form)`. The field\n * stays editable; user edits are accepted but the computed value continues\n * to flow whenever a dependency changes. To make the user \"win\", use\n * `computedUntilDirty()` instead.\n */\n computed(fn: ComputedFieldCallback): this;\n /**\n * Same as `computed`, but the field switches to manual mode the first time\n * its value is changed via the UI. After that, `fn(form)` no longer\n * overrides user input.\n */\n computedUntilDirty(fn: ComputedFieldCallback): this;\n build(name: string): IFieldConfig;\n}\n\nexport interface IOptionsFieldBuilder<TType extends string, TValue = unknown> extends IFieldBuilder<\n TType,\n false,\n TValue\n> {\n options(\n opts:\n | IValueOption<OptionValueType<TType>>[]\n | ((form: IFormModel) => IValueOption<OptionValueType<TType>>[])\n ): IFieldBuilder<TType, true, TValue>;\n}\n\nexport interface IObjectFieldBuilder extends IFieldBuilder<\n \"object\",\n false,\n Record<string, unknown> | null\n> {\n fields(fn: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>): this;\n list(): this;\n listSchema(schema: z.ZodTypeAny): this;\n template(id: string, configure: (t: ITemplateBuilder) => void): this;\n}\n\nexport interface IFieldBuilderRegistry {}\n\n// ---------------------------------------------------------------------------\n// Field type plugin system\n// ---------------------------------------------------------------------------\n\nexport interface IFieldTypeFactory {\n readonly type: string;\n create(registry: IFieldBuilderRegistry): IFieldBuilder;\n}\n\nexport const FieldType = createAbstraction<IFieldTypeFactory>(\"FormModel/FieldType\");\n\nexport namespace FieldType {\n export type Interface = IFieldTypeFactory;\n export type FieldBuilder = IFieldBuilder;\n export type FieldBuilderRegistry = IFieldBuilderRegistry;\n}\n\nexport const FieldBuilderRegistry = createAbstraction<IFieldBuilderRegistry>(\n \"FormModel/FieldBuilderRegistry\"\n);\n\nexport namespace FieldBuilderRegistry {\n export type Interface = IFieldBuilderRegistry;\n}\n\nexport const FormModelFactory = createAbstraction<IFormModelFactory>(\"FormModelFactory\");\n\nexport namespace FormModelFactory {\n export type Interface = IFormModelFactory;\n export type Config = IFormModelConfig;\n export type LayoutBuilder = ILayoutBuilder;\n export type FieldBuilder = IFieldBuilder;\n export type OptionsFieldBuilder<TType extends string> = IOptionsFieldBuilder<TType>;\n export type ObjectFieldBuilder = IObjectFieldBuilder;\n export type FieldBuilderRegistry = IFieldBuilderRegistry;\n}\n\nexport const RuleEvaluator = createAbstraction<IRuleEvaluator>(\"FormModelRuleEvaluator\");\n\nexport namespace RuleEvaluator {\n export type Interface = IRuleEvaluator;\n export type Rule = IRule;\n export type Action = RuleAction;\n}\n"],"names":["FieldType","createAbstraction","FieldBuilderRegistry","FormModelFactory","RuleEvaluator"],"mappings":";AAi3BO,MAAMA,YAAYC,kBAAqC;AAQvD,MAAMC,uBAAuBD,kBAChC;AAOG,MAAME,mBAAmBF,kBAAqC;AAY9D,MAAMG,gBAAgBH,kBAAkC"}
1
+ {"version":3,"file":"features/formModel/abstractions.js","sources":["../../../src/features/formModel/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { z } from \"zod\";\nimport type { Icon } from \"~/components/IconPicker/types.js\";\n\n// ---------------------------------------------------------------------------\n// Renderer registry — augmented by each renderer via declare module\n// ---------------------------------------------------------------------------\n\nexport interface IFieldRendererRegistry {}\n\nexport type FieldRendererName<\n TType extends string = string,\n TOptions extends boolean = boolean\n> = string extends TType\n ? keyof IFieldRendererRegistry & string\n : {\n [K in keyof IFieldRendererRegistry]: TType extends IFieldRendererRegistry[K][\"fieldType\"]\n ? boolean extends TOptions\n ? K\n : TOptions extends true\n ? IFieldRendererRegistry[K] extends { options: true }\n ? K\n : never\n : IFieldRendererRegistry[K] extends { options: true }\n ? never\n : K\n : never;\n }[keyof IFieldRendererRegistry] &\n string;\n\nexport type FieldRendererSettings<TName extends string> = TName extends keyof IFieldRendererRegistry\n ? IFieldRendererRegistry[TName][\"settings\"]\n : Record<string, unknown> | undefined;\n\n// ---------------------------------------------------------------------------\n// Field types\n// ---------------------------------------------------------------------------\n\nexport interface IFieldConfig {\n name: string;\n type: string;\n label?: string;\n help?: string;\n description?: string;\n note?: string;\n placeholder?: string;\n defaultValue?: unknown;\n autoFocus?: boolean;\n renderer?: string;\n rendererSettings?: Record<string, unknown>;\n isList?: boolean;\n hidden: boolean;\n required: boolean;\n requiredMessage?: string;\n disabled: boolean;\n schema?: z.ZodTypeAny;\n options?: IValueOption[] | ((params: IFieldCallbackParams) => IValueOption[]);\n normalizeValue?: (value: unknown) => unknown;\n beforeChangeCallbacks?: BeforeChangeCallback[];\n afterChangeCallbacks?: AfterChangeCallback[];\n afterSetValueCallbacks?: AfterSetValueCallback[];\n onBlurCallbacks?: OnBlurCallback[];\n requiredWhenCallbacks?: RequiredWhenCallback[];\n hiddenWhenCallbacks?: HiddenWhenCallback[];\n disabledWhenCallbacks?: DisabledWhenCallback[];\n computed?: ComputedFieldCallback;\n computedUntilDirty?: ComputedFieldCallback;\n tags?: string[];\n cloneValue?: CloneValueCallback;\n context?: FieldContextCallback;\n rules?: IRule[];\n}\n\nexport interface IFieldScope {\n field(name: string): IField;\n parent(): IFieldScope;\n}\n\nexport interface IFieldNavigator {\n parent(): IFieldScope;\n}\n\nexport interface IFieldCallbackParams {\n field: IFieldNavigator;\n form: IFormModel;\n}\n\nexport interface IRequiredWhenCallbackConfig {\n fn: (params: IFieldCallbackParams) => boolean;\n message?: string;\n}\n\nexport type RequiredWhenCallback = IRequiredWhenCallbackConfig;\n\nexport type HiddenWhenCallback = (params: IFieldCallbackParams) => boolean;\n\nexport type DisabledWhenCallback = (params: IFieldCallbackParams) => boolean;\n\nexport type ComputedFieldCallback = (params: IFieldCallbackParams) => unknown;\n\nexport type FieldContextCallback = (params: IFieldCallbackParams) => Record<string, unknown>;\n\n// ---------------------------------------------------------------------------\n// Rules system\n// ---------------------------------------------------------------------------\n\nexport type RuleAction = \"hide\" | \"disable\";\n\nexport type RuleOperator =\n | \"eq\"\n | \"neq\"\n | \"isEmpty\"\n | \"isNotEmpty\"\n | \"isTruthy\"\n | \"isFalsy\"\n | \"matches\";\n\nexport interface IRule {\n type: string;\n target: string;\n operator: RuleOperator | (string & {});\n value: string | null;\n action: RuleAction;\n}\n\nexport interface IRuleEvaluator {\n canEvaluate(rule: IRule): boolean;\n evaluate(rule: IRule, form: IFormModel): boolean;\n}\n\nexport interface IValueOption<V extends string | number = string | number> {\n label: string;\n value: V;\n disabled?: boolean;\n}\n\nexport type OptionValueType<TType extends string> = TType extends \"number\" ? number : string;\n\nexport interface IFieldValidation {\n isValid: boolean | null;\n message?: string;\n}\n\nexport interface IFieldVM {\n name: string;\n type: string;\n label?: string;\n help?: string;\n description?: string;\n note?: string;\n placeholder?: string;\n autoFocus?: boolean;\n value: unknown;\n validation: IFieldValidation;\n validating: boolean;\n required: boolean;\n visible: boolean;\n disabled: boolean;\n renderer?: string;\n rendererSettings?: Record<string, unknown>;\n isList?: boolean;\n options?: IValueOption[];\n onChange: (value: unknown) => void;\n onBlur: () => void;\n addItem: (value?: unknown) => void;\n removeItem: (index: number) => void;\n focusRequested: boolean;\n clearFocusRequest: () => void;\n context: Record<string, unknown>;\n}\n\nexport interface IObjectFieldVM extends IFieldVM {\n type: \"object\";\n isList: boolean;\n /** Child field VMs for non-list object fields. */\n fields: IFieldVM[];\n /**\n * Resolved layout for non-list object fields. For templated objects, resolves\n * against the active template's per-template layout (if registered via\n * `layout.object()`), otherwise defaults to one row per visible child.\n * For list-mode fields, see `items[].layout`.\n */\n layout: LayoutNodeVM[];\n /** Items for list-mode object fields. */\n items: IObjectFieldItemVM[];\n /** Append a new item. Templated lists require a template id. */\n addItem: (value?: unknown) => void;\n moveItem: (fromIndex: number, toIndex: number) => void;\n /** Duplicate a list item (including its `_templateId` when templated) and insert it after the source. */\n duplicateItem: (index: number) => void;\n /** True when the object has templates defined. */\n isTemplated: boolean;\n /** Templates visible in the picker (filtered by each template's reactive `visible`). */\n availableTemplates: ITemplateVM[];\n /** Currently active template id (single-object mode), or null if no template picked. */\n activeTemplateId: string | null;\n /** Switch to a different template. Discards values not present in the new template. */\n setTemplate: (templateId: string) => void;\n /** Returns a cloned copy of the current single-value data with cloneValue transforms applied. */\n getClonedData: () => Record<string, unknown>;\n}\n\nexport interface IObjectFieldItemVM {\n key: string;\n fields: IFieldVM[];\n /**\n * Resolved layout for this item. For templated lists, resolves against the\n * item's template-specific layout (if registered via `layout.object()`),\n * otherwise defaults to one row per visible child.\n */\n layout: LayoutNodeVM[];\n remove: () => void;\n moveUp: () => void;\n moveDown: () => void;\n duplicate: () => void;\n getClonedData: () => Record<string, unknown>;\n /** The template id of this item, if the parent list is templated. */\n templateId?: string;\n}\n\n/**\n * VM exposed for each available template in the picker.\n */\nexport interface ITemplateIcon {\n type: string;\n name: string;\n}\n\nexport interface ITemplateVM {\n id: string;\n label: string;\n icon?: ITemplateIcon;\n}\n\nexport interface IField {\n readonly name: string;\n readonly type: string;\n readonly visible: boolean;\n readonly disabled: boolean;\n readonly vm: IFieldVM;\n readonly config: IFieldConfig;\n getValue<T = unknown>(): T;\n setValue(value: unknown): void;\n setValueSilent(value: unknown): void;\n setDisabled(value: boolean): void;\n setVisible(value: boolean): void;\n setForm(form: IFormModel, parentPath?: string): void;\n setAncestorRules(rules: IRule[]): void;\n setValidation(validation: IFieldValidation): void;\n resetValidation(): void;\n validate(options?: { force?: boolean }): Promise<boolean>;\n remove(): void;\n addBeforeChange(cb: BeforeChangeCallback): void;\n addAfterChange(cb: AfterChangeCallback): void;\n addAfterSetValue(cb: AfterSetValueCallback): void;\n addOnBlur(cb: OnBlurCallback): void;\n /**\n * Append a conditional required check. Multiple callbacks chain additively;\n * the first one returning `true` makes the field required for the current\n * form state. The built-in `.required()` flag (if set) always counts as a\n * truthy check and cannot be overridden.\n */\n addRequiredWhen(fn: (params: IFieldCallbackParams) => boolean, message?: string): void;\n /**\n * Mark this field as a derived value computed from `fn(form)`. The field\n * stays editable (no auto-disable) and is excluded from `isDirty` while\n * still tracking the computed value. Validation continues to apply.\n */\n setComputed(fn: ComputedFieldCallback): void;\n /**\n * Same as `setComputed`, but the field switches to manual mode the first\n * time the user edits its value. After that, the computed callback no\n * longer overrides user input.\n */\n setComputedUntilDirty(fn: ComputedFieldCallback): void;\n blur(): void;\n as<T extends keyof FieldTypeMap>(type: T): FieldTypeMap[T];\n readonly qualifiedName: string;\n focus(): void;\n requestFocus(): void;\n clearFocusRequest(): void;\n}\n\n/**\n * Maps field type strings to their typed field interfaces.\n * Extended via module augmentation when new field types are registered.\n */\nexport interface ITypedField<V> extends IField {\n getValue<T = V>(): T;\n}\n\ntype InferFieldTypeMap = {\n [K in keyof IFieldBuilderRegistry]: ReturnType<\n IFieldBuilderRegistry[K]\n > extends IObjectFieldBuilder\n ? IObjectField\n : ReturnType<IFieldBuilderRegistry[K]> extends { readonly __valueType?: infer V }\n ? ITypedField<V>\n : IField;\n};\n\nexport type FieldTypeMap = { [K in keyof InferFieldTypeMap]: InferFieldTypeMap[K] };\n\nexport type FileValue = {\n id: string;\n name: string;\n size: number;\n mimeType: string;\n src: string;\n width: number | undefined;\n height: number | undefined;\n};\n\n// ---------------------------------------------------------------------------\n// Object / List field types\n// ---------------------------------------------------------------------------\n\nexport interface IObjectFieldConfig extends IFieldConfig {\n childBuilders: Record<string, IFieldBuilder>;\n isList: boolean;\n listSchema?: z.ZodTypeAny;\n templates?: ITemplateConfig[];\n}\n\nexport interface ITemplateBuilder {\n label(text: string): this;\n icon(icon: ITemplateIcon): this;\n fields(factory: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>): this;\n visible(predicate: (form: IFormModel) => boolean): this;\n}\n\nexport interface ITemplateConfig {\n id: string;\n label: string;\n icon?: ITemplateIcon;\n childBuilders: Record<string, IFieldBuilder>;\n visible?: (form: IFormModel) => boolean;\n}\n\nexport interface IObjectField extends ITypedField<Record<string, unknown> | null> {\n readonly isList: boolean;\n readonly children: Map<string, IField>;\n readonly items: IListItemField[];\n readonly isTemplated: boolean;\n readonly activeTemplateId: string | null;\n readonly availableTemplates: ITemplateVM[];\n /**\n * Add, replace, or remove children on this object field at runtime.\n * Mirrors `form.fields()` but scoped to this object's children. Existing\n * keys are replaced; new keys are appended; passing `undefined` removes.\n * Throws on templated objects — each template owns its own fields.\n */\n fields(\n factory: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder | undefined>\n ): void;\n /**\n * Register an inner layout used by the field's VM (`field.layout` for\n * single objects, `item.layout` for list items).\n *\n * Pass `LayoutNode[]` for non-templated objects (the layout applies to the\n * single object or every list item). Pass `Record<templateId, LayoutNode[]>`\n * for templated objects (each entry applies when that template is active\n * or for each list item with that template). Templates without an entry\n * fall back to default one-row-per-visible-child.\n */\n setInnerLayout(layout: LayoutNode[] | Record<string, LayoutNode[]>): void;\n /**\n * Append a new list item.\n * - Non-templated list: `addItem(data?)` — data hydrates the new item.\n * - Templated list: `addItem(templateId, data?)` — templateId picks the variant.\n */\n addItem(\n templateIdOrData?: string | Record<string, unknown>,\n data?: Record<string, unknown>\n ): void;\n removeItem(index: number): void;\n moveItem(fromIndex: number, toIndex: number): void;\n /** Duplicate a list item (including its `_templateId`) and insert after the source. */\n duplicateItem(index: number): void;\n setTemplate(templateId: string): void;\n /**\n * Runtime template management. Available on every object field but throws\n * when called on a non-templated field (`isTemplated === false`).\n */\n readonly templates: IObjectFieldTemplates;\n getInnerLayout(): LayoutNode[] | null;\n getData(): Record<string, unknown> | Record<string, unknown>[];\n}\n\nexport interface IObjectFieldTemplates {\n add(id: string, configure: (t: ITemplateBuilder) => void): void;\n remove(templateId: string): void;\n}\n\nexport interface IListItemField {\n readonly key: string;\n readonly children: Map<string, IField>;\n readonly templateId?: string;\n getData(): Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Callback types\n// ---------------------------------------------------------------------------\n\nexport type BeforeChangeCallback = (value: unknown, params: IFieldCallbackParams) => unknown;\nexport type AfterChangeCallback = (value: unknown, params: IFieldCallbackParams) => void;\nexport type AfterSetValueCallback = (value: unknown, params: IFieldCallbackParams) => void;\nexport type OnBlurCallback = (value: unknown, params: IFieldCallbackParams) => void;\nexport type CloneValueCallback = (value: unknown) => unknown;\n\n// ---------------------------------------------------------------------------\n// Layout types\n// ---------------------------------------------------------------------------\n\nexport type LayoutNode =\n | IRowNode\n | ISeparatorNode\n | IAlertNode\n | ITabsNode\n | IElementNode\n | IObjectNode;\n\nexport interface IRowNode {\n type: \"row\";\n fieldIds: string[];\n position?: LayoutPosition;\n}\n\n/** @deprecated Use IRowBuilder instead */\nexport type IRowNodeHandle = IRowBuilder;\n\nexport interface ISeparatorNode {\n type: \"separator\";\n title?: string;\n description?: string;\n rules?: IRule[];\n}\n\nexport interface ITabDefinition {\n id: string;\n label: string;\n description?: string;\n icon?: Icon;\n layout: LayoutNode[];\n rules?: IRule[];\n}\n\n/**\n * User-facing tab spec accepted by `layout.tabs(...)`. The layout is supplied\n * as a callback receiving the layout builder, mirroring `layout.object(...)`.\n * Resolved to `ITabDefinition` (with `layout: LayoutNode[]`) at build time.\n */\nexport interface ITabDefinitionInput {\n id: string;\n label: string;\n description?: string;\n icon?: Icon;\n layout: (layout: ILayoutBuilder) => ILayoutNodeBuilder[];\n rules?: IRule[];\n}\n\nexport interface ITabsNode {\n type: \"tabs\";\n id?: string;\n renderer?: string;\n rendererSettings?: Record<string, unknown>;\n tabs: ITabDefinition[];\n rules?: IRule[];\n}\n\nexport interface IAlertNode {\n type: \"alert\";\n message?: string;\n alertType?: \"info\" | \"success\" | \"warning\" | \"danger\";\n rules?: IRule[];\n}\n\nexport interface IElementNode {\n type: \"element\";\n id?: string;\n renderer: string;\n props?: Record<string, unknown>;\n}\n\n/**\n * Layout node that references an object field and registers an inner layout\n * on it. Resolved as a single-field row in the outer layout — the inner\n * layout is exposed on the field's VM (`field.layout` for single objects,\n * `item.layout` for list items).\n *\n * - For non-templated objects, `inner` is `LayoutNode[]` (one layout, applied\n * to the single object or every list item).\n * - For templated objects, `inner` is `Record<templateId, LayoutNode[]>` —\n * each entry is the layout used when that template is active (or for each\n * list item with that template).\n */\nexport interface IObjectNode {\n type: \"object\";\n fieldName: string;\n inner: LayoutNode[] | Record<string, LayoutNode[]>;\n}\n\n// ---------------------------------------------------------------------------\n// Layout node builders\n// ---------------------------------------------------------------------------\n\nexport interface ILayoutNodeBuilder {\n build(): LayoutNode;\n}\n\nexport interface IRowBuilder extends ILayoutNodeBuilder {\n before(target: string): IRowBuilder;\n after(target: string): IRowBuilder;\n build(): IRowNode;\n}\n\nexport interface ISeparatorBuilder extends ILayoutNodeBuilder {\n title(text: string): this;\n description(text: string): this;\n rules(rules: IRule[]): this;\n build(): ISeparatorNode;\n}\n\nexport interface IAlertBuilder extends ILayoutNodeBuilder {\n message(text: string): this;\n alertType(type: \"info\" | \"success\" | \"warning\" | \"danger\"): this;\n rules(rules: IRule[]): this;\n build(): IAlertNode;\n}\n\nexport interface ITabBuilder {\n label(text: string): this;\n description(text: string): this;\n icon(icon: Icon): this;\n layout(factory: (l: ILayoutBuilder) => ILayoutNodeBuilder[]): this;\n rules(rules: IRule[]): this;\n}\n\nexport interface ITabsBuilder extends ILayoutNodeBuilder {\n renderer(name: string, settings?: Record<string, unknown>): this;\n tab(id: string, configure: (tab: ITabBuilder) => void): this;\n before(target: string): this;\n after(target: string): this;\n rules(rules: IRule[]): this;\n build(): ITabsNode;\n}\n\nexport interface IElementBuilder extends ILayoutNodeBuilder {\n build(): IElementNode;\n}\n\nexport interface IObjectBuilder extends ILayoutNodeBuilder {\n build(): IObjectNode;\n}\n\n// ---------------------------------------------------------------------------\n// Layout VM types\n// ---------------------------------------------------------------------------\n\nexport type LayoutNodeVM =\n | IRowNodeVM\n | ISeparatorNodeVM\n | IAlertNodeVM\n | ITabsNodeVM\n | IElementNodeVM;\n\nexport interface IRowNodeVM {\n type: \"row\";\n fields: IFieldVM[];\n}\n\nexport interface ISeparatorNodeVM {\n type: \"separator\";\n title?: string;\n description?: string;\n}\n\nexport interface IAlertNodeVM {\n type: \"alert\";\n message?: string;\n alertType: \"info\" | \"success\" | \"warning\" | \"danger\";\n}\n\nexport interface ITabDefinitionVM {\n id: string;\n label: string;\n description?: string;\n icon?: Icon;\n hasErrors: boolean;\n disabled: boolean;\n layout: LayoutNodeVM[];\n}\n\nexport interface ITabsNodeVM {\n type: \"tabs\";\n id?: string;\n renderer?: string;\n rendererSettings?: Record<string, unknown>;\n tabs: ITabDefinitionVM[];\n disabled: boolean;\n activeTabId: string;\n setActiveTab: (id: string) => void;\n}\n\nexport interface IElementNodeVM {\n type: \"element\";\n renderer: string;\n props?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Layout modifier types\n// ---------------------------------------------------------------------------\n\nexport type LayoutPosition =\n | { type: \"before\"; target: string }\n | { type: \"after\"; target: string }\n | { type: \"replace\"; target: string };\n\nexport interface IPositionedLayoutNode {\n node: LayoutNode;\n position?: LayoutPosition;\n}\n\n/**\n * Chainable handle returned by modifier layout.row().\n * Can be used as-is (appended) or positioned via .before()/.after()/.replace().\n */\nexport interface ILayoutNodeHandle extends IPositionedLayoutNode {\n before(target: string): IPositionedLayoutNode;\n after(target: string): IPositionedLayoutNode;\n replace(target: string): IPositionedLayoutNode;\n}\n\n// ---------------------------------------------------------------------------\n// Named layout node access types\n// ---------------------------------------------------------------------------\n\nexport interface LayoutNodeHandleMap {\n tabs: ITabsBuilder;\n element: IElementNode;\n object: IObjectNode;\n}\n\nexport interface ILayoutNodeAccessHandle {\n as<T extends keyof LayoutNodeHandleMap>(type: T): LayoutNodeHandleMap[T];\n}\n\n/** @deprecated Use ITabsBuilder instead */\nexport type ITabsHandle = ITabsBuilder;\n\n/** @deprecated Use ITabBuilder instead */\nexport type ITabHandle = ITabBuilder;\n\n// ---------------------------------------------------------------------------\n// Modifier types\n// ---------------------------------------------------------------------------\n\nexport interface IFormModifier {\n modify(form: IFormModel): void;\n}\n\nexport interface ILayoutModifier {\n row(...fieldIds: string[]): ILayoutNodeHandle;\n separator(): ILayoutNodeHandle;\n alert(): ILayoutNodeHandle;\n tabs(config: {\n id?: string;\n renderer?: string;\n tabs: ITabDefinitionInput[];\n rules?: IRule[];\n }): ILayoutNodeHandle;\n element(renderer: string, props?: Record<string, unknown>): ILayoutNodeHandle;\n object(\n fieldName: string,\n layout: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]\n ): ILayoutNodeHandle;\n object(\n fieldName: string,\n templateLayouts: Record<string, (layout: ILayoutBuilder) => ILayoutNodeBuilder[]>\n ): ILayoutNodeHandle;\n remove(target: string): void;\n}\n\n// ---------------------------------------------------------------------------\n// Form types\n// ---------------------------------------------------------------------------\n\nexport interface IFormError {\n path: string;\n label?: string;\n breadcrumb?: string[];\n message: string;\n}\n\nexport interface IFormVM {\n layout: LayoutNodeVM[];\n errors: IFormError[];\n hasErrors: boolean;\n isDirty: boolean;\n isValid: boolean | null;\n submitCount: number;\n focusField(path: string): void;\n getData(): Record<string, unknown>;\n setData(data: Record<string, unknown>, options?: { dirty?: boolean }): void;\n}\n\n/**\n * Imperative form-level rule. Receives the live form and may return a flat\n * list of errors (sync or async). Errors are merged into `form.errors` and\n * surfaced on per-field validation when their `path` matches a known field.\n */\nexport type FormRuleFn = (\n form: IFormModel\n) => IFormError[] | undefined | void | Promise<IFormError[] | undefined | void>;\n\n/**\n * A form-level rule. Either a Zod schema (validated against `form.getData()`)\n * or an imperative function returning an error list.\n */\nexport type FormRule = z.ZodTypeAny | FormRuleFn;\n\nexport interface IFormModel<T = Record<string, any>> {\n field(name: string): IField;\n fields(\n factory: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder | undefined>\n ): void;\n layout(factory: (layout: ILayoutModifier) => (LayoutNode | IPositionedLayoutNode)[]): void;\n layout(nodeId: string): ILayoutNodeAccessHandle;\n /**\n * Replace the entire layout. Re-registers per-field inner layouts and\n * propagates ancestor rules. Use `layout()` (modifier form) for additive\n * changes.\n */\n setLayout(factory: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]): void;\n /**\n * Append a form-level validation rule. Runs after per-field validation.\n * Accepts a Zod schema (validated against `getData()`) or an imperative\n * function returning a list of errors.\n */\n addRule(rule: FormRule): void;\n getData(): T;\n setData(data: T, options?: { dirty?: boolean }): void;\n reset(): void;\n validate(): Promise<boolean>;\n submit<T = Record<string, unknown>>(options?: { skipValidation?: boolean }): Promise<T | false>;\n evaluateRules(rules: IRule[] | undefined): { visible: boolean; disabled: boolean };\n focusField(name: string): void;\n readonly isDirty: boolean;\n readonly isValid: boolean | null;\n readonly submitted: boolean;\n readonly submitCount: number;\n readonly errors: IFormError[];\n readonly vm: IFormVM;\n getFieldBuilders(predicate?: (builder: IFieldBuilder) => boolean): IFieldBuilder[];\n traverse(callback: (builder: IFieldBuilder) => void): void;\n resolveChildLayout(layout: LayoutNode[], children: Map<string, IField>): LayoutNodeVM[];\n readonly registry: IFieldBuilderRegistry;\n}\n\n// ---------------------------------------------------------------------------\n// FormModel namespace — groups all public types under one import\n// ---------------------------------------------------------------------------\n\nexport namespace FormModel {\n export type FieldConfig = IFieldConfig;\n export type ValueOption = IValueOption;\n export type FieldValidation = IFieldValidation;\n export type FieldVM = IFieldVM;\n export type Field = IField;\n export type ObjectField = IObjectField;\n export type ObjectFieldConfig = IObjectFieldConfig;\n export type BeforeChange = BeforeChangeCallback;\n export type AfterChange = AfterChangeCallback;\n export type AfterSetValue = AfterSetValueCallback;\n export type OnBlur = OnBlurCallback;\n export type CloneValue = CloneValueCallback;\n export type LayoutNodeBuilder = ILayoutNodeBuilder;\n export type RowBuilder = IRowBuilder;\n export type SeparatorBuilder = ISeparatorBuilder;\n export type AlertBuilder = IAlertBuilder;\n export type AlertNode = IAlertNode;\n export type AlertNodeVM = IAlertNodeVM;\n export type TabBuilder = ITabBuilder;\n export type TabsBuilder = ITabsBuilder;\n export type ElementBuilder = IElementBuilder;\n export type ObjectBuilder = IObjectBuilder;\n export type RowNode = IRowNode;\n /** @deprecated Use RowBuilder instead */\n export type RowNodeHandle = IRowNodeHandle;\n export type RowNodeVM = IRowNodeVM;\n export type SeparatorNode = ISeparatorNode;\n export type SeparatorNodeVM = ISeparatorNodeVM;\n export type TabsNode = ITabsNode;\n export type TabDefinition = ITabDefinition;\n export type TabDefinitionInput = ITabDefinitionInput;\n export type TabsNodeVM = ITabsNodeVM;\n export type TabDefinitionVM = ITabDefinitionVM;\n export type TabIcon = Icon;\n export type ElementNode = IElementNode;\n export type ElementNodeVM = IElementNodeVM;\n export type ObjectNode = IObjectNode;\n export type ObjectFieldVM = IObjectFieldVM;\n export type ObjectFieldItemVM = IObjectFieldItemVM;\n export type TemplateBuilder = ITemplateBuilder;\n export type TemplateConfig = ITemplateConfig;\n export type TemplateIcon = ITemplateIcon;\n export type TemplateVM = ITemplateVM;\n export type ObjectFieldTemplatesAPI = IObjectFieldTemplates;\n export type FormError = IFormError;\n export type FormVM = IFormVM;\n export type Interface<T = Record<string, any>> = IFormModel<T>;\n export type Modifier = IFormModifier;\n export type LayoutModifier = ILayoutModifier;\n export type Rule = IRule;\n export type Action = RuleAction;\n export type RuleEvaluator = IRuleEvaluator;\n export type FormRuleFunction = FormRuleFn;\n export type FormRuleType = FormRule;\n export type CallbackParams = IFieldCallbackParams;\n export type RequiredWhen = (params: IFieldCallbackParams) => boolean;\n export type HiddenWhen = HiddenWhenCallback;\n export type DisabledWhen = DisabledWhenCallback;\n export type Computed = ComputedFieldCallback;\n}\n\n// ---------------------------------------------------------------------------\n// FormModelFactory abstraction\n// ---------------------------------------------------------------------------\n\nexport interface IFormModelFactory {\n create<T = Record<string, any>>(config: IFormModelConfig): IFormModel<T>;\n}\n\nexport interface IFormModelConfig {\n fields: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>;\n layout?: (layout: ILayoutBuilder) => ILayoutNodeBuilder[];\n validateOnSubmit?: boolean;\n ruleEvaluators?: IRuleEvaluator[];\n}\n\nexport interface ILayoutBuilder {\n row(...fieldIds: string[]): IRowBuilder;\n separator(): ISeparatorBuilder;\n alert(): IAlertBuilder;\n tabs(id?: string): ITabsBuilder;\n element(renderer: string, props?: Record<string, unknown>): IElementBuilder;\n /**\n * Reference an object field and register its inner layout.\n *\n * Non-templated: pass a single layout factory; the layout applies to the\n * single object or to every list item. Templated: pass a map of factories\n * keyed by template id; each entry applies when that template is active\n * (or for each list item with that template). Templates without an entry\n * fall back to default one-row-per-visible-child.\n */\n object(\n fieldName: string,\n layout: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]\n ): IObjectBuilder;\n object(\n fieldName: string,\n templateLayouts: Record<string, (layout: ILayoutBuilder) => ILayoutNodeBuilder[]>\n ): IObjectBuilder;\n}\n\nexport interface IFieldBuilder<\n TType extends string = string,\n TOptions extends boolean = false,\n TValue = unknown\n> {\n readonly __valueType?: TValue;\n label(text: string): this;\n help(text: string): this;\n description(text: string): this;\n note(text: string): this;\n placeholder(text: string): this;\n autoFocus(value?: boolean): this;\n schema(zodSchema: z.ZodTypeAny): this;\n defaultValue(value: unknown): this;\n renderer<TName extends FieldRendererName<TType, TOptions>>(\n name: TName,\n ...args: undefined extends FieldRendererSettings<TName>\n ? [settings?: FieldRendererSettings<TName>]\n : FieldRendererSettings<TName> extends undefined\n ? []\n : [settings: FieldRendererSettings<TName>]\n ): this;\n hidden(): this;\n hiddenWhen(fn: HiddenWhenCallback): this;\n disabledWhen(fn: DisabledWhenCallback): this;\n required(message?: string): this;\n /**\n * Conditional required check. Multiple `requiredWhen()` calls chain — the\n * first one to return `true` for the current form state makes the field\n * required. Built-in `.required()` (if set) is evaluated alongside.\n */\n requiredWhen(fn: (params: IFieldCallbackParams) => boolean, message?: string): this;\n list(): this;\n disabled(value?: boolean): this;\n rules(rules: IRule[]): this;\n beforeChange(fn: BeforeChangeCallback): this;\n afterChange(fn: AfterChangeCallback): this;\n afterSetValue(fn: AfterSetValueCallback): this;\n onBlur(fn: OnBlurCallback): this;\n cloneValue(fn: CloneValueCallback): this;\n getName(): string;\n getType(): string;\n getTags(): string[];\n tags(tags: string[]): this;\n /**\n * Mark this field as a derived value computed from `fn(form)`. The field\n * stays editable; user edits are accepted but the computed value continues\n * to flow whenever a dependency changes. To make the user \"win\", use\n * `computedUntilDirty()` instead.\n */\n computed(fn: ComputedFieldCallback): this;\n /**\n * Same as `computed`, but the field switches to manual mode the first time\n * its value is changed via the UI. After that, `fn(form)` no longer\n * overrides user input.\n */\n computedUntilDirty(fn: ComputedFieldCallback): this;\n build(name: string): IFieldConfig;\n}\n\nexport interface IOptionsFieldBuilder<TType extends string, TValue = unknown> extends IFieldBuilder<\n TType,\n false,\n TValue\n> {\n options(\n opts:\n | IValueOption<OptionValueType<TType>>[]\n | ((params: IFieldCallbackParams) => IValueOption<OptionValueType<TType>>[])\n ): IFieldBuilder<TType, true, TValue>;\n}\n\nexport interface IObjectFieldBuilder extends IFieldBuilder<\n \"object\",\n false,\n Record<string, unknown> | null\n> {\n fields(fn: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>): this;\n list(): this;\n listSchema(schema: z.ZodTypeAny): this;\n template(id: string, configure: (t: ITemplateBuilder) => void): this;\n}\n\nexport interface IFieldBuilderRegistry {}\n\n// ---------------------------------------------------------------------------\n// Field type plugin system\n// ---------------------------------------------------------------------------\n\nexport interface IFieldTypeFactory {\n readonly type: string;\n create(registry: IFieldBuilderRegistry): IFieldBuilder;\n}\n\nexport const FieldType = createAbstraction<IFieldTypeFactory>(\"FormModel/FieldType\");\n\nexport namespace FieldType {\n export type Interface = IFieldTypeFactory;\n export type FieldBuilder = IFieldBuilder;\n export type FieldBuilderRegistry = IFieldBuilderRegistry;\n}\n\nexport const FieldBuilderRegistry = createAbstraction<IFieldBuilderRegistry>(\n \"FormModel/FieldBuilderRegistry\"\n);\n\nexport namespace FieldBuilderRegistry {\n export type Interface = IFieldBuilderRegistry;\n}\n\nexport const FormModelFactory = createAbstraction<IFormModelFactory>(\"FormModelFactory\");\n\nexport namespace FormModelFactory {\n export type Interface = IFormModelFactory;\n export type Config = IFormModelConfig;\n export type LayoutBuilder = ILayoutBuilder;\n export type FieldBuilder = IFieldBuilder;\n export type OptionsFieldBuilder<TType extends string> = IOptionsFieldBuilder<TType>;\n export type ObjectFieldBuilder = IObjectFieldBuilder;\n export type FieldBuilderRegistry = IFieldBuilderRegistry;\n}\n\nexport const RuleEvaluator = createAbstraction<IRuleEvaluator>(\"FormModelRuleEvaluator\");\n\nexport namespace RuleEvaluator {\n export type Interface = IRuleEvaluator;\n export type Rule = IRule;\n export type Action = RuleAction;\n}\n"],"names":["FieldType","createAbstraction","FieldBuilderRegistry","FormModelFactory","RuleEvaluator"],"mappings":";AAi8BO,MAAMA,YAAYC,kBAAqC;AAQvD,MAAMC,uBAAuBD,kBAChC;AAOG,MAAME,mBAAmBF,kBAAqC;AAY9D,MAAMG,gBAAgBH,kBAAkC"}
@@ -8,9 +8,9 @@ class FormModelPhase11Presenter {
8
8
  fields: (fields)=>({
9
9
  first: fields.text().label("First name").defaultValue("Ada"),
10
10
  last: fields.text().label("Last name").defaultValue("Lovelace"),
11
- fullName: fields.text().label("Full name (computed)").computed((f)=>`${f.field("first").getValue()} ${f.field("last").getValue()}`),
12
- slug: fields.text().label("Slug (computed until you edit it)").computedUntilDirty((f)=>{
13
- const full = `${f.field("first").getValue()} ${f.field("last").getValue()}`;
11
+ fullName: fields.text().label("Full name (computed)").computed(({ form })=>`${form.field("first").getValue()} ${form.field("last").getValue()}`),
12
+ slug: fields.text().label("Slug (computed until you edit it)").computedUntilDirty(({ form })=>{
13
+ const full = `${form.field("first").getValue()} ${form.field("last").getValue()}`;
14
14
  return full.trim().toLowerCase().replace(/\s+/g, "-");
15
15
  }),
16
16
  plan: fields.text().label("Plan").defaultValue("free").options([
@@ -27,7 +27,7 @@ class FormModelPhase11Presenter {
27
27
  value: "enterprise"
28
28
  }
29
29
  ]),
30
- seats: fields.text().label("Number of seats").help("Required when plan is pro or enterprise").requiredWhen((f)=>"pro" === f.field("plan").getValue(), "Pro plan needs a seat count"),
30
+ seats: fields.text().label("Number of seats").help("Required when plan is pro or enterprise").requiredWhen(({ form })=>"pro" === form.field("plan").getValue(), "Pro plan needs a seat count"),
31
31
  profile: fields.object().label("Profile").fields((f)=>({
32
32
  title: f.text().label("Title")
33
33
  })),
@@ -39,7 +39,7 @@ class FormModelPhase11Presenter {
39
39
  company: f.text().label("Company"),
40
40
  bio: f.text().label("Short bio")
41
41
  }));
42
- this.form.field("seats").addRequiredWhen((f)=>"enterprise" === f.field("plan").getValue(), "Enterprise plan needs a seat count too");
42
+ this.form.field("seats").addRequiredWhen(({ form })=>"enterprise" === form.field("plan").getValue(), "Enterprise plan needs a seat count too");
43
43
  this.form.addRule(z.object({
44
44
  password: z.string().nullable(),
45
45
  confirm: z.string().nullable()
@@ -1 +1 @@
1
- {"version":3,"file":"features/formModel/demo/FormModelPhase11Presenter.js","sources":["../../../../src/features/formModel/demo/FormModelPhase11Presenter.ts"],"sourcesContent":["import { makeAutoObservable, toJS } from \"mobx\";\nimport { z } from \"zod\";\nimport type { IFormModel, IFormModelFactory, IFormVM } from \"../abstractions.js\";\n\nexport interface FormModelPhase11VM {\n form: IFormVM;\n data: Record<string, unknown>;\n lastSubmitted: Record<string, unknown> | null;\n isSubmitting: boolean;\n formErrors: { path: string; message: string }[];\n}\n\n/**\n * Demo presenter exercising Phase 11 features: requiredWhen (builder + modifier\n * chaining), computed/computedUntilDirty, .extend() on object fields, form-level\n * addRule (Zod + imperative), and setLayout.\n */\nexport class FormModelPhase11Presenter {\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 first: fields.text().label(\"First name\").defaultValue(\"Ada\"),\n last: fields.text().label(\"Last name\").defaultValue(\"Lovelace\"),\n fullName: fields\n .text()\n .label(\"Full name (computed)\")\n .computed(f => `${f.field(\"first\").getValue()} ${f.field(\"last\").getValue()}`),\n slug: fields\n .text()\n .label(\"Slug (computed until you edit it)\")\n .computedUntilDirty(f => {\n const full = `${f.field(\"first\").getValue()} ${f.field(\"last\").getValue()}`;\n return full.trim().toLowerCase().replace(/\\s+/g, \"-\");\n }),\n plan: fields\n .text()\n .label(\"Plan\")\n .defaultValue(\"free\")\n .options([\n { label: \"Free\", value: \"free\" },\n { label: \"Pro\", value: \"pro\" },\n { label: \"Enterprise\", value: \"enterprise\" }\n ]),\n seats: fields\n .text()\n .label(\"Number of seats\")\n .help(\"Required when plan is pro or enterprise\")\n .requiredWhen(\n f => f.field(\"plan\").getValue() === \"pro\",\n \"Pro plan needs a seat count\"\n ),\n profile: fields\n .object()\n .label(\"Profile\")\n .fields(f => ({\n title: f.text().label(\"Title\")\n })),\n password: fields.text().label(\"Password\"),\n confirm: fields.text().label(\"Confirm password\")\n })\n });\n\n // Modifier-style: add children to the existing \"profile\" object field.\n this.form\n .field(\"profile\")\n .as(\"object\")\n .fields(f => ({\n company: f.text().label(\"Company\"),\n bio: f.text().label(\"Short bio\")\n }));\n\n // Modifier-style requiredWhen: chains with the builder-defined one above.\n // First truthy callback wins.\n this.form\n .field(\"seats\")\n .addRequiredWhen(\n f => f.field(\"plan\").getValue() === \"enterprise\",\n \"Enterprise plan needs a seat count too\"\n );\n\n // Form-level Zod rule: confirm must match password.\n this.form.addRule(\n z\n .object({\n password: z.string().nullable(),\n confirm: z.string().nullable()\n })\n .refine(d => d.password === d.confirm || (!d.password && !d.confirm), {\n message: \"Passwords must match\",\n path: [\"confirm\"]\n })\n );\n\n // Imperative form-level rule.\n this.form.addRule(f => {\n const slug = String(f.field(\"slug\").getValue() ?? \"\");\n if (slug.length > 0 && slug.length < 3) {\n return [{ path: \"slug\", message: \"Slug must be at least 3 characters\" }];\n }\n return [];\n });\n\n // setLayout — full replacement.\n this.form.setLayout(layout => [\n layout.row(\"first\", \"last\"),\n layout.row(\"fullName\"),\n layout.row(\"slug\"),\n layout.separator(),\n layout.row(\"plan\", \"seats\"),\n layout.separator(),\n layout.object(\"profile\", l => [l.row(\"title\"), l.row(\"company\"), l.row(\"bio\")]),\n layout.separator(),\n layout.row(\"password\", \"confirm\")\n ]);\n\n makeAutoObservable(this);\n }\n\n get vm(): FormModelPhase11VM {\n return {\n form: this.form.vm,\n data: toJS(this.form.getData()),\n lastSubmitted: this.lastSubmitted,\n isSubmitting: this.isSubmitting,\n formErrors: this.form.errors.map(e => ({\n path: e.path,\n message: e.message\n }))\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"],"names":["FormModelPhase11Presenter","formFactory","fields","f","full","z","d","slug","String","layout","l","makeAutoObservable","toJS","e","result"],"mappings":";;AAiBO,MAAMA;IAKT,YAAYC,WAA8B,CAAE;aAHpC,aAAa,GAAmC;aAChD,YAAY,GAAG;QAGnB,IAAI,CAAC,IAAI,GAAGA,YAAY,MAAM,CAAC;YAC3B,QAAQC,CAAAA,SAAW;oBACf,OAAOA,OAAO,IAAI,GAAG,KAAK,CAAC,cAAc,YAAY,CAAC;oBACtD,MAAMA,OAAO,IAAI,GAAG,KAAK,CAAC,aAAa,YAAY,CAAC;oBACpD,UAAUA,OACL,IAAI,GACJ,KAAK,CAAC,wBACN,QAAQ,CAACC,CAAAA,IAAK,GAAGA,EAAE,KAAK,CAAC,SAAS,QAAQ,GAAG,CAAC,EAAEA,EAAE,KAAK,CAAC,QAAQ,QAAQ,IAAI;oBACjF,MAAMD,OACD,IAAI,GACJ,KAAK,CAAC,qCACN,kBAAkB,CAACC,CAAAA;wBAChB,MAAMC,OAAO,GAAGD,EAAE,KAAK,CAAC,SAAS,QAAQ,GAAG,CAAC,EAAEA,EAAE,KAAK,CAAC,QAAQ,QAAQ,IAAI;wBAC3E,OAAOC,KAAK,IAAI,GAAG,WAAW,GAAG,OAAO,CAAC,QAAQ;oBACrD;oBACJ,MAAMF,OACD,IAAI,GACJ,KAAK,CAAC,QACN,YAAY,CAAC,QACb,OAAO,CAAC;wBACL;4BAAE,OAAO;4BAAQ,OAAO;wBAAO;wBAC/B;4BAAE,OAAO;4BAAO,OAAO;wBAAM;wBAC7B;4BAAE,OAAO;4BAAc,OAAO;wBAAa;qBAC9C;oBACL,OAAOA,OACF,IAAI,GACJ,KAAK,CAAC,mBACN,IAAI,CAAC,2CACL,YAAY,CACTC,CAAAA,IAAKA,AAA+B,UAA/BA,EAAE,KAAK,CAAC,QAAQ,QAAQ,IAC7B;oBAER,SAASD,OACJ,MAAM,GACN,KAAK,CAAC,WACN,MAAM,CAACC,CAAAA,IAAM;4BACV,OAAOA,EAAE,IAAI,GAAG,KAAK,CAAC;wBAC1B;oBACJ,UAAUD,OAAO,IAAI,GAAG,KAAK,CAAC;oBAC9B,SAASA,OAAO,IAAI,GAAG,KAAK,CAAC;gBACjC;QACJ;QAGA,IAAI,CAAC,IAAI,CACJ,KAAK,CAAC,WACN,EAAE,CAAC,UACH,MAAM,CAACC,CAAAA,IAAM;gBACV,SAASA,EAAE,IAAI,GAAG,KAAK,CAAC;gBACxB,KAAKA,EAAE,IAAI,GAAG,KAAK,CAAC;YACxB;QAIJ,IAAI,CAAC,IAAI,CACJ,KAAK,CAAC,SACN,eAAe,CACZA,CAAAA,IAAKA,AAA+B,iBAA/BA,EAAE,KAAK,CAAC,QAAQ,QAAQ,IAC7B;QAIR,IAAI,CAAC,IAAI,CAAC,OAAO,CACbE,EAAAA,MACW,CAAC;YACJ,UAAUA,EAAE,MAAM,GAAG,QAAQ;YAC7B,SAASA,EAAE,MAAM,GAAG,QAAQ;QAChC,GACC,MAAM,CAACC,CAAAA,IAAKA,EAAE,QAAQ,KAAKA,EAAE,OAAO,IAAK,CAACA,EAAE,QAAQ,IAAI,CAACA,EAAE,OAAO,EAAG;YAClE,SAAS;YACT,MAAM;gBAAC;aAAU;QACrB;QAIR,IAAI,CAAC,IAAI,CAAC,OAAO,CAACH,CAAAA;YACd,MAAMI,OAAOC,OAAOL,EAAE,KAAK,CAAC,QAAQ,QAAQ,MAAM;YAClD,IAAII,KAAK,MAAM,GAAG,KAAKA,KAAK,MAAM,GAAG,GACjC,OAAO;gBAAC;oBAAE,MAAM;oBAAQ,SAAS;gBAAqC;aAAE;YAE5E,OAAO,EAAE;QACb;QAGA,IAAI,CAAC,IAAI,CAAC,SAAS,CAACE,CAAAA,SAAU;gBAC1BA,OAAO,GAAG,CAAC,SAAS;gBACpBA,OAAO,GAAG,CAAC;gBACXA,OAAO,GAAG,CAAC;gBACXA,OAAO,SAAS;gBAChBA,OAAO,GAAG,CAAC,QAAQ;gBACnBA,OAAO,SAAS;gBAChBA,OAAO,MAAM,CAAC,WAAWC,CAAAA,IAAK;wBAACA,EAAE,GAAG,CAAC;wBAAUA,EAAE,GAAG,CAAC;wBAAYA,EAAE,GAAG,CAAC;qBAAO;gBAC9ED,OAAO,SAAS;gBAChBA,OAAO,GAAG,CAAC,YAAY;aAC1B;QAEDE,mBAAmB,IAAI;IAC3B;IAEA,IAAI,KAAyB;QACzB,OAAO;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;YAClB,MAAMC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO;YAC5B,eAAe,IAAI,CAAC,aAAa;YACjC,cAAc,IAAI,CAAC,YAAY;YAC/B,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAACC,CAAAA,IAAM;oBACnC,MAAMA,EAAE,IAAI;oBACZ,SAASA,EAAE,OAAO;gBACtB;QACJ;IACJ;IAEA,MAAM,SAAwB;QAC1B,IAAI,CAAC,YAAY,GAAG;QACpB,IAAI;YACA,MAAMC,SAAS,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;YACrC,IAAIA,AAAW,UAAXA,QACA,IAAI,CAAC,aAAa,GAAGF,KAAKE;QAElC,SAAU;YACN,IAAI,CAAC,YAAY,GAAG;QACxB;IACJ;IAEA,QAAc;QACV,IAAI,CAAC,IAAI,CAAC,KAAK;QACf,IAAI,CAAC,aAAa,GAAG;IACzB;AACJ"}
1
+ {"version":3,"file":"features/formModel/demo/FormModelPhase11Presenter.js","sources":["../../../../src/features/formModel/demo/FormModelPhase11Presenter.ts"],"sourcesContent":["import { makeAutoObservable, toJS } from \"mobx\";\nimport { z } from \"zod\";\nimport type { IFormModel, IFormModelFactory, IFormVM } from \"../abstractions.js\";\n\nexport interface FormModelPhase11VM {\n form: IFormVM;\n data: Record<string, unknown>;\n lastSubmitted: Record<string, unknown> | null;\n isSubmitting: boolean;\n formErrors: { path: string; message: string }[];\n}\n\n/**\n * Demo presenter exercising Phase 11 features: requiredWhen (builder + modifier\n * chaining), computed/computedUntilDirty, .extend() on object fields, form-level\n * addRule (Zod + imperative), and setLayout.\n */\nexport class FormModelPhase11Presenter {\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 first: fields.text().label(\"First name\").defaultValue(\"Ada\"),\n last: fields.text().label(\"Last name\").defaultValue(\"Lovelace\"),\n fullName: fields\n .text()\n .label(\"Full name (computed)\")\n .computed(\n ({ form }) =>\n `${form.field(\"first\").getValue()} ${form.field(\"last\").getValue()}`\n ),\n slug: fields\n .text()\n .label(\"Slug (computed until you edit it)\")\n .computedUntilDirty(({ form }) => {\n const full = `${form.field(\"first\").getValue()} ${form.field(\"last\").getValue()}`;\n return full.trim().toLowerCase().replace(/\\s+/g, \"-\");\n }),\n plan: fields\n .text()\n .label(\"Plan\")\n .defaultValue(\"free\")\n .options([\n { label: \"Free\", value: \"free\" },\n { label: \"Pro\", value: \"pro\" },\n { label: \"Enterprise\", value: \"enterprise\" }\n ]),\n seats: fields\n .text()\n .label(\"Number of seats\")\n .help(\"Required when plan is pro or enterprise\")\n .requiredWhen(\n ({ form }) => form.field(\"plan\").getValue() === \"pro\",\n \"Pro plan needs a seat count\"\n ),\n profile: fields\n .object()\n .label(\"Profile\")\n .fields(f => ({\n title: f.text().label(\"Title\")\n })),\n password: fields.text().label(\"Password\"),\n confirm: fields.text().label(\"Confirm password\")\n })\n });\n\n // Modifier-style: add children to the existing \"profile\" object field.\n this.form\n .field(\"profile\")\n .as(\"object\")\n .fields(f => ({\n company: f.text().label(\"Company\"),\n bio: f.text().label(\"Short bio\")\n }));\n\n // Modifier-style requiredWhen: chains with the builder-defined one above.\n // First truthy callback wins.\n this.form\n .field(\"seats\")\n .addRequiredWhen(\n ({ form }) => form.field(\"plan\").getValue() === \"enterprise\",\n \"Enterprise plan needs a seat count too\"\n );\n\n // Form-level Zod rule: confirm must match password.\n this.form.addRule(\n z\n .object({\n password: z.string().nullable(),\n confirm: z.string().nullable()\n })\n .refine(d => d.password === d.confirm || (!d.password && !d.confirm), {\n message: \"Passwords must match\",\n path: [\"confirm\"]\n })\n );\n\n // Imperative form-level rule.\n this.form.addRule(f => {\n const slug = String(f.field(\"slug\").getValue() ?? \"\");\n if (slug.length > 0 && slug.length < 3) {\n return [{ path: \"slug\", message: \"Slug must be at least 3 characters\" }];\n }\n return [];\n });\n\n // setLayout — full replacement.\n this.form.setLayout(layout => [\n layout.row(\"first\", \"last\"),\n layout.row(\"fullName\"),\n layout.row(\"slug\"),\n layout.separator(),\n layout.row(\"plan\", \"seats\"),\n layout.separator(),\n layout.object(\"profile\", l => [l.row(\"title\"), l.row(\"company\"), l.row(\"bio\")]),\n layout.separator(),\n layout.row(\"password\", \"confirm\")\n ]);\n\n makeAutoObservable(this);\n }\n\n get vm(): FormModelPhase11VM {\n return {\n form: this.form.vm,\n data: toJS(this.form.getData()),\n lastSubmitted: this.lastSubmitted,\n isSubmitting: this.isSubmitting,\n formErrors: this.form.errors.map(e => ({\n path: e.path,\n message: e.message\n }))\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"],"names":["FormModelPhase11Presenter","formFactory","fields","form","full","f","z","d","slug","String","layout","l","makeAutoObservable","toJS","e","result"],"mappings":";;AAiBO,MAAMA;IAKT,YAAYC,WAA8B,CAAE;aAHpC,aAAa,GAAmC;aAChD,YAAY,GAAG;QAGnB,IAAI,CAAC,IAAI,GAAGA,YAAY,MAAM,CAAC;YAC3B,QAAQC,CAAAA,SAAW;oBACf,OAAOA,OAAO,IAAI,GAAG,KAAK,CAAC,cAAc,YAAY,CAAC;oBACtD,MAAMA,OAAO,IAAI,GAAG,KAAK,CAAC,aAAa,YAAY,CAAC;oBACpD,UAAUA,OACL,IAAI,GACJ,KAAK,CAAC,wBACN,QAAQ,CACL,CAAC,EAAEC,IAAI,EAAE,GACL,GAAGA,KAAK,KAAK,CAAC,SAAS,QAAQ,GAAG,CAAC,EAAEA,KAAK,KAAK,CAAC,QAAQ,QAAQ,IAAI;oBAEhF,MAAMD,OACD,IAAI,GACJ,KAAK,CAAC,qCACN,kBAAkB,CAAC,CAAC,EAAEC,IAAI,EAAE;wBACzB,MAAMC,OAAO,GAAGD,KAAK,KAAK,CAAC,SAAS,QAAQ,GAAG,CAAC,EAAEA,KAAK,KAAK,CAAC,QAAQ,QAAQ,IAAI;wBACjF,OAAOC,KAAK,IAAI,GAAG,WAAW,GAAG,OAAO,CAAC,QAAQ;oBACrD;oBACJ,MAAMF,OACD,IAAI,GACJ,KAAK,CAAC,QACN,YAAY,CAAC,QACb,OAAO,CAAC;wBACL;4BAAE,OAAO;4BAAQ,OAAO;wBAAO;wBAC/B;4BAAE,OAAO;4BAAO,OAAO;wBAAM;wBAC7B;4BAAE,OAAO;4BAAc,OAAO;wBAAa;qBAC9C;oBACL,OAAOA,OACF,IAAI,GACJ,KAAK,CAAC,mBACN,IAAI,CAAC,2CACL,YAAY,CACT,CAAC,EAAEC,IAAI,EAAE,GAAKA,AAAkC,UAAlCA,KAAK,KAAK,CAAC,QAAQ,QAAQ,IACzC;oBAER,SAASD,OACJ,MAAM,GACN,KAAK,CAAC,WACN,MAAM,CAACG,CAAAA,IAAM;4BACV,OAAOA,EAAE,IAAI,GAAG,KAAK,CAAC;wBAC1B;oBACJ,UAAUH,OAAO,IAAI,GAAG,KAAK,CAAC;oBAC9B,SAASA,OAAO,IAAI,GAAG,KAAK,CAAC;gBACjC;QACJ;QAGA,IAAI,CAAC,IAAI,CACJ,KAAK,CAAC,WACN,EAAE,CAAC,UACH,MAAM,CAACG,CAAAA,IAAM;gBACV,SAASA,EAAE,IAAI,GAAG,KAAK,CAAC;gBACxB,KAAKA,EAAE,IAAI,GAAG,KAAK,CAAC;YACxB;QAIJ,IAAI,CAAC,IAAI,CACJ,KAAK,CAAC,SACN,eAAe,CACZ,CAAC,EAAEF,IAAI,EAAE,GAAKA,AAAkC,iBAAlCA,KAAK,KAAK,CAAC,QAAQ,QAAQ,IACzC;QAIR,IAAI,CAAC,IAAI,CAAC,OAAO,CACbG,EAAAA,MACW,CAAC;YACJ,UAAUA,EAAE,MAAM,GAAG,QAAQ;YAC7B,SAASA,EAAE,MAAM,GAAG,QAAQ;QAChC,GACC,MAAM,CAACC,CAAAA,IAAKA,EAAE,QAAQ,KAAKA,EAAE,OAAO,IAAK,CAACA,EAAE,QAAQ,IAAI,CAACA,EAAE,OAAO,EAAG;YAClE,SAAS;YACT,MAAM;gBAAC;aAAU;QACrB;QAIR,IAAI,CAAC,IAAI,CAAC,OAAO,CAACF,CAAAA;YACd,MAAMG,OAAOC,OAAOJ,EAAE,KAAK,CAAC,QAAQ,QAAQ,MAAM;YAClD,IAAIG,KAAK,MAAM,GAAG,KAAKA,KAAK,MAAM,GAAG,GACjC,OAAO;gBAAC;oBAAE,MAAM;oBAAQ,SAAS;gBAAqC;aAAE;YAE5E,OAAO,EAAE;QACb;QAGA,IAAI,CAAC,IAAI,CAAC,SAAS,CAACE,CAAAA,SAAU;gBAC1BA,OAAO,GAAG,CAAC,SAAS;gBACpBA,OAAO,GAAG,CAAC;gBACXA,OAAO,GAAG,CAAC;gBACXA,OAAO,SAAS;gBAChBA,OAAO,GAAG,CAAC,QAAQ;gBACnBA,OAAO,SAAS;gBAChBA,OAAO,MAAM,CAAC,WAAWC,CAAAA,IAAK;wBAACA,EAAE,GAAG,CAAC;wBAAUA,EAAE,GAAG,CAAC;wBAAYA,EAAE,GAAG,CAAC;qBAAO;gBAC9ED,OAAO,SAAS;gBAChBA,OAAO,GAAG,CAAC,YAAY;aAC1B;QAEDE,mBAAmB,IAAI;IAC3B;IAEA,IAAI,KAAyB;QACzB,OAAO;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;YAClB,MAAMC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO;YAC5B,eAAe,IAAI,CAAC,aAAa;YACjC,cAAc,IAAI,CAAC,YAAY;YAC/B,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAACC,CAAAA,IAAM;oBACnC,MAAMA,EAAE,IAAI;oBACZ,SAASA,EAAE,OAAO;gBACtB;QACJ;IACJ;IAEA,MAAM,SAAwB;QAC1B,IAAI,CAAC,YAAY,GAAG;QACpB,IAAI;YACA,MAAMC,SAAS,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;YACrC,IAAIA,AAAW,UAAXA,QACA,IAAI,CAAC,aAAa,GAAGF,KAAKE;QAElC,SAAU;YACN,IAAI,CAAC,YAAY,GAAG;QACxB;IACJ;IAEA,QAAc;QACV,IAAI,CAAC,IAAI,CAAC,KAAK;QACf,IAAI,CAAC,aAAa,GAAG;IACzB;AACJ"}
@@ -3,7 +3,7 @@ import { FormModelFactory } from "./abstractions.js";
3
3
  import { FormModelFactory as external_FormModelFactory_js_FormModelFactory } from "./FormModelFactory.js";
4
4
  import { ConditionRuleEvaluator } from "./ConditionRuleEvaluator.js";
5
5
  import { FieldBuilderRegistry } from "./FieldBuilderRegistry.js";
6
- import { BooleanFieldType, DateTimeFieldType, FileFieldType, FileUrlFieldType, LexicalFieldType, NumberFieldType, ObjectFieldType, TextFieldType } from "./fieldTypes/index.js";
6
+ import { BooleanFieldType, DateTimeFieldType, FileFieldType, FileUrlFieldType, LexicalFieldType, NumberFieldType, ObjectFieldType, PasswordFieldType, PermissionsFieldType, RolesMultiSelectFieldType, TextFieldType } from "./fieldTypes/index.js";
7
7
  const FormModelFeature = createFeature({
8
8
  name: "FormModel",
9
9
  register (container) {
@@ -15,6 +15,9 @@ const FormModelFeature = createFeature({
15
15
  container.register(FileUrlFieldType);
16
16
  container.register(ObjectFieldType);
17
17
  container.register(LexicalFieldType);
18
+ container.register(PasswordFieldType);
19
+ container.register(PermissionsFieldType);
20
+ container.register(RolesMultiSelectFieldType);
18
21
  container.register(FieldBuilderRegistry).inSingletonScope();
19
22
  container.register(ConditionRuleEvaluator).inSingletonScope();
20
23
  container.register(external_FormModelFactory_js_FormModelFactory).inSingletonScope();
@@ -1 +1 @@
1
- {"version":3,"file":"features/formModel/feature.js","sources":["../../../src/features/formModel/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 LexicalFieldType\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 container.register(LexicalFieldType);\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"],"names":["FormModelFeature","createFeature","container","TextFieldType","NumberFieldType","BooleanFieldType","DateTimeFieldType","FileFieldType","FileUrlFieldType","ObjectFieldType","LexicalFieldType","FieldBuilderRegistry","ConditionRuleEvaluator","FormModelFactory","Abstraction"],"mappings":";;;;;;AAgBO,MAAMA,mBAAmBC,cAAc;IAC1C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QACnBH,UAAU,QAAQ,CAACI;QACnBJ,UAAU,QAAQ,CAACK;QACnBL,UAAU,QAAQ,CAACM;QACnBN,UAAU,QAAQ,CAACO;QACnBP,UAAU,QAAQ,CAACQ;QAEnBR,UAAU,QAAQ,CAACS,sBAAsB,gBAAgB;QACzDT,UAAU,QAAQ,CAACU,wBAAwB,gBAAgB;QAC3DV,UAAU,QAAQ,CAACW,+CAAkB,gBAAgB;IACzD;IACA,SAAQX,SAAS;QACb,OAAO;YACH,kBAAkBA,UAAU,OAAO,CAACY;QACxC;IACJ;AACJ"}
1
+ {"version":3,"file":"features/formModel/feature.js","sources":["../../../src/features/formModel/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 LexicalFieldType,\n PasswordFieldType,\n PermissionsFieldType,\n RolesMultiSelectFieldType\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 container.register(LexicalFieldType);\n container.register(PasswordFieldType);\n container.register(PermissionsFieldType);\n container.register(RolesMultiSelectFieldType);\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"],"names":["FormModelFeature","createFeature","container","TextFieldType","NumberFieldType","BooleanFieldType","DateTimeFieldType","FileFieldType","FileUrlFieldType","ObjectFieldType","LexicalFieldType","PasswordFieldType","PermissionsFieldType","RolesMultiSelectFieldType","FieldBuilderRegistry","ConditionRuleEvaluator","FormModelFactory","Abstraction"],"mappings":";;;;;;AAmBO,MAAMA,mBAAmBC,cAAc;IAC1C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QACnBH,UAAU,QAAQ,CAACI;QACnBJ,UAAU,QAAQ,CAACK;QACnBL,UAAU,QAAQ,CAACM;QACnBN,UAAU,QAAQ,CAACO;QACnBP,UAAU,QAAQ,CAACQ;QACnBR,UAAU,QAAQ,CAACS;QACnBT,UAAU,QAAQ,CAACU;QACnBV,UAAU,QAAQ,CAACW;QAEnBX,UAAU,QAAQ,CAACY,sBAAsB,gBAAgB;QACzDZ,UAAU,QAAQ,CAACa,wBAAwB,gBAAgB;QAC3Db,UAAU,QAAQ,CAACc,+CAAkB,gBAAgB;IACzD;IACA,SAAQd,SAAS;QACb,OAAO;YACH,kBAAkBA,UAAU,OAAO,CAACe;QACxC;IACJ;AACJ"}
@@ -25,6 +25,7 @@ function createTemplateBuilder() {
25
25
  _build (id, registry) {
26
26
  const childBuilders = fieldsFactory ? fieldsFactory(registry) : {};
27
27
  if ("_templateId" in childBuilders) throw new Error(`Template "${id}" defines a reserved field "_templateId". The discriminator is added automatically.`);
28
+ for (const [fieldName, builder] of Object.entries(childBuilders))if (builder) builder.build(fieldName);
28
29
  return {
29
30
  id,
30
31
  label,
@@ -67,10 +68,10 @@ class ObjectFieldBuilder extends FieldBuilder {
67
68
  return this;
68
69
  }
69
70
  build(name) {
71
+ this._config.name = name;
70
72
  if (this._templates && Object.keys(this._childBuilders).length > 0) throw new Error(`Object field "${name}" has both .fields() and .template() defined. Templates are mutually exclusive with .fields(); each template defines its own children.`);
71
73
  return {
72
74
  ...this._config,
73
- name,
74
75
  childBuilders: this._childBuilders,
75
76
  isList: this._isList,
76
77
  listSchema: this._listSchema,