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

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 (921) hide show
  1. package/assets/icons/add-18px.js +20 -0
  2. package/assets/icons/add-18px.js.map +1 -0
  3. package/assets/icons/arrow_drop_down-24px.js +20 -0
  4. package/assets/icons/arrow_drop_down-24px.js.map +1 -0
  5. package/assets/icons/attach_file_black_24dp.js +20 -0
  6. package/assets/icons/attach_file_black_24dp.js.map +1 -0
  7. package/assets/icons/baseline-menu-24px.js +20 -0
  8. package/assets/icons/baseline-menu-24px.js.map +1 -0
  9. package/assets/icons/baseline-notification_important-24px.js +19 -0
  10. package/assets/icons/baseline-notification_important-24px.js.map +1 -0
  11. package/assets/icons/baseline-security-24px.js +19 -0
  12. package/assets/icons/baseline-security-24px.js.map +1 -0
  13. package/assets/icons/file_download.js +19 -0
  14. package/assets/icons/file_download.js.map +1 -0
  15. package/assets/icons/file_upload.js +19 -0
  16. package/assets/icons/file_upload.js.map +1 -0
  17. package/assets/icons/filter-24px.js +23 -0
  18. package/assets/icons/filter-24px.js.map +1 -0
  19. package/assets/icons/github-brands.js +19 -0
  20. package/assets/icons/github-brands.js.map +1 -0
  21. package/assets/icons/highlight-24px.js +19 -0
  22. package/assets/icons/highlight-24px.js.map +1 -0
  23. package/assets/icons/icon-community.js +18 -0
  24. package/assets/icons/icon-community.js.map +1 -0
  25. package/assets/icons/icon-documentation.js +18 -0
  26. package/assets/icons/icon-documentation.js.map +1 -0
  27. package/assets/icons/info.js +19 -0
  28. package/assets/icons/info.js.map +1 -0
  29. package/assets/icons/insert_drive_file-24px.js +19 -0
  30. package/assets/icons/insert_drive_file-24px.js.map +1 -0
  31. package/assets/icons/insert_photo-24px.js +19 -0
  32. package/assets/icons/insert_photo-24px.js.map +1 -0
  33. package/assets/icons/label-24px.js +19 -0
  34. package/assets/icons/label-24px.js.map +1 -0
  35. package/assets/icons/round-account_circle-24px.js +19 -0
  36. package/assets/icons/round-account_circle-24px.js.map +1 -0
  37. package/assets/icons/round-add-24px.js +20 -0
  38. package/assets/icons/round-add-24px.js.map +1 -0
  39. package/assets/icons/round-arrow_drop_down-24px.js +19 -0
  40. package/assets/icons/round-arrow_drop_down-24px.js.map +1 -0
  41. package/assets/icons/round-chevron_right-24px.js +20 -0
  42. package/assets/icons/round-chevron_right-24px.js.map +1 -0
  43. package/assets/icons/round-feedback-24px.js +20 -0
  44. package/assets/icons/round-feedback-24px.js.map +1 -0
  45. package/assets/icons/round-help-24px.js +19 -0
  46. package/assets/icons/round-help-24px.js.map +1 -0
  47. package/assets/icons/round-invert_colors-24px.js +20 -0
  48. package/assets/icons/round-invert_colors-24px.js.map +1 -0
  49. package/assets/icons/round-keyboard_arrow_down-24px.js +17 -0
  50. package/assets/icons/round-keyboard_arrow_down-24px.js.map +1 -0
  51. package/assets/icons/round-keyboard_arrow_up-24px.js +17 -0
  52. package/assets/icons/round-keyboard_arrow_up-24px.js.map +1 -0
  53. package/assets/icons/round-lock_open-24px.js +22 -0
  54. package/assets/icons/round-lock_open-24px.js.map +1 -0
  55. package/assets/icons/round-more_vert-24px.js +20 -0
  56. package/assets/icons/round-more_vert-24px.js.map +1 -0
  57. package/assets/icons/round-open_in_new-24px.js +20 -0
  58. package/assets/icons/round-open_in_new-24px.js.map +1 -0
  59. package/assets/icons/round-settings-24px.js +20 -0
  60. package/assets/icons/round-settings-24px.js.map +1 -0
  61. package/assets/icons/search-24px.js +21 -0
  62. package/assets/icons/search-24px.js.map +1 -0
  63. package/assets/icons/slack-logo.js +14 -0
  64. package/assets/icons/slack-logo.js.map +1 -0
  65. package/assets/icons/today-24px.js +19 -0
  66. package/assets/icons/today-24px.js.map +1 -0
  67. package/assets/icons/touch_app.js +20 -0
  68. package/assets/icons/touch_app.js.map +1 -0
  69. package/assets/images/webiny-logo.js +34 -0
  70. package/assets/images/webiny-logo.js.map +1 -0
  71. package/assets/images/webiny-orange-logo.js +34 -0
  72. package/assets/images/webiny-orange-logo.js.map +1 -0
  73. package/base/Admin.js +37 -28
  74. package/base/Admin.js.map +1 -1
  75. package/base/Base/DefaultFieldRenderers.js +73 -70
  76. package/base/Base/DefaultFieldRenderers.js.map +1 -1
  77. package/base/Base/DefaultLayoutRenderers.js +9 -10
  78. package/base/Base/DefaultLayoutRenderers.js.map +1 -1
  79. package/base/Base/FieldRenderers/CheckboxesRenderer.js +22 -23
  80. package/base/Base/FieldRenderers/CheckboxesRenderer.js.map +1 -1
  81. package/base/Base/FieldRenderers/CodeEditorRenderer.js +10 -13
  82. package/base/Base/FieldRenderers/CodeEditorRenderer.js.map +1 -1
  83. package/base/Base/FieldRenderers/DateTimeInputsRenderer.js +60 -60
  84. package/base/Base/FieldRenderers/DateTimeInputsRenderer.js.map +1 -1
  85. package/base/Base/FieldRenderers/DateTimeRenderer.js +38 -39
  86. package/base/Base/FieldRenderers/DateTimeRenderer.js.map +1 -1
  87. package/base/Base/FieldRenderers/FilePickerRenderer.d.ts +2 -1
  88. package/base/Base/FieldRenderers/FilePickerRenderer.js +37 -40
  89. package/base/Base/FieldRenderers/FilePickerRenderer.js.map +1 -1
  90. package/base/Base/FieldRenderers/FileUrlPickerRenderer.js +15 -20
  91. package/base/Base/FieldRenderers/FileUrlPickerRenderer.js.map +1 -1
  92. package/base/Base/FieldRenderers/HiddenRenderer.js +3 -3
  93. package/base/Base/FieldRenderers/HiddenRenderer.js.map +1 -1
  94. package/base/Base/FieldRenderers/HorizontalTabsRenderer.js +20 -21
  95. package/base/Base/FieldRenderers/HorizontalTabsRenderer.js.map +1 -1
  96. package/base/Base/FieldRenderers/InputRenderer.js +16 -20
  97. package/base/Base/FieldRenderers/InputRenderer.js.map +1 -1
  98. package/base/Base/FieldRenderers/MultiFilePickerRenderer.d.ts +13 -0
  99. package/base/Base/FieldRenderers/MultiFilePickerRenderer.js +70 -0
  100. package/base/Base/FieldRenderers/MultiFilePickerRenderer.js.map +1 -0
  101. package/base/Base/FieldRenderers/NumberInputRenderer.js +16 -19
  102. package/base/Base/FieldRenderers/NumberInputRenderer.js.map +1 -1
  103. package/base/Base/FieldRenderers/NumberInputsRenderer.js +45 -44
  104. package/base/Base/FieldRenderers/NumberInputsRenderer.js.map +1 -1
  105. package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js +10 -13
  106. package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js.map +1 -1
  107. package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.js +50 -56
  108. package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.js.map +1 -1
  109. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.js +87 -99
  110. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.js.map +1 -1
  111. package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js +41 -48
  112. package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js.map +1 -1
  113. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +1 -2
  114. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js +62 -78
  115. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js.map +1 -1
  116. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js +12 -15
  117. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js.map +1 -1
  118. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js +48 -54
  119. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js.map +1 -1
  120. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js +62 -79
  121. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js.map +1 -1
  122. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.js +14 -17
  123. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.js.map +1 -1
  124. package/base/Base/FieldRenderers/PassthroughRenderer.js +8 -11
  125. package/base/Base/FieldRenderers/PassthroughRenderer.js.map +1 -1
  126. package/base/Base/FieldRenderers/RadioButtonsRenderer.js +21 -22
  127. package/base/Base/FieldRenderers/RadioButtonsRenderer.js.map +1 -1
  128. package/base/Base/FieldRenderers/SelectRenderer.js +23 -24
  129. package/base/Base/FieldRenderers/SelectRenderer.js.map +1 -1
  130. package/base/Base/FieldRenderers/SwitchRenderer.js +12 -15
  131. package/base/Base/FieldRenderers/SwitchRenderer.js.map +1 -1
  132. package/base/Base/FieldRenderers/TagsRenderer.js +15 -16
  133. package/base/Base/FieldRenderers/TagsRenderer.js.map +1 -1
  134. package/base/Base/FieldRenderers/TextInputsRenderer.js +44 -43
  135. package/base/Base/FieldRenderers/TextInputsRenderer.js.map +1 -1
  136. package/base/Base/FieldRenderers/TextareaRenderer.js +17 -21
  137. package/base/Base/FieldRenderers/TextareaRenderer.js.map +1 -1
  138. package/base/Base/FieldRenderers/TextareasRenderer.js +47 -46
  139. package/base/Base/FieldRenderers/TextareasRenderer.js.map +1 -1
  140. package/base/Base/FieldRenderers/VerticalTabsRenderer.js +35 -36
  141. package/base/Base/FieldRenderers/VerticalTabsRenderer.js.map +1 -1
  142. package/base/Base/LexicalPreset.js +56 -60
  143. package/base/Base/LexicalPreset.js.map +1 -1
  144. package/base/Base/Menus/SupportMenuItems.js +9 -13
  145. package/base/Base/Menus/SupportMenuItems.js.map +1 -1
  146. package/base/Base/Menus/WebinyVersion.js +19 -20
  147. package/base/Base/Menus/WebinyVersion.js.map +1 -1
  148. package/base/Base/Menus.js +52 -66
  149. package/base/Base/Menus.js.map +1 -1
  150. package/base/Base/RoutesConfig.js +21 -29
  151. package/base/Base/RoutesConfig.js.map +1 -1
  152. package/base/Base/Tenant/wby-horizontal.js +33 -0
  153. package/base/Base/Tenant/wby-horizontal.js.map +1 -0
  154. package/base/Base/Tenant/wby-square.js +20 -0
  155. package/base/Base/Tenant/wby-square.js.map +1 -0
  156. package/base/Base/Tenant.js +17 -19
  157. package/base/Base/Tenant.js.map +1 -1
  158. package/base/Base/UserMenu/ExitTenant.js +18 -29
  159. package/base/Base/UserMenu/ExitTenant.js.map +1 -1
  160. package/base/Base/UserMenu/SignOut.js +13 -14
  161. package/base/Base/UserMenu/SignOut.js.map +1 -1
  162. package/base/Base/UserMenu/UserInfo.js +23 -36
  163. package/base/Base/UserMenu/UserInfo.js.map +1 -1
  164. package/base/Base/UserMenu.js +12 -13
  165. package/base/Base/UserMenu.js.map +1 -1
  166. package/base/Base.js +4 -5
  167. package/base/Base.js.map +1 -1
  168. package/base/TelemetryAdminAppStart.js +9 -12
  169. package/base/TelemetryAdminAppStart.js.map +1 -1
  170. package/base/WebinyVersion.js +19 -20
  171. package/base/WebinyVersion.js.map +1 -1
  172. package/base/createRootContainer.js +42 -40
  173. package/base/createRootContainer.js.map +1 -1
  174. package/base/plugins/AddGraphQLQuerySelection.js +12 -11
  175. package/base/plugins/AddGraphQLQuerySelection.js.map +1 -1
  176. package/base/providers/AdminUiStateProvider.js +5 -10
  177. package/base/providers/AdminUiStateProvider.js.map +1 -1
  178. package/base/providers/ApolloProvider.js +8 -11
  179. package/base/providers/ApolloProvider.js.map +1 -1
  180. package/base/providers/UiProviders.js +18 -27
  181. package/base/providers/UiProviders.js.map +1 -1
  182. package/base/providers/UiStateProvider.js +5 -10
  183. package/base/providers/UiStateProvider.js.map +1 -1
  184. package/base/ui/Brand.js +4 -5
  185. package/base/ui/Brand.js.map +1 -1
  186. package/base/ui/CenteredView.d.ts +1 -1
  187. package/base/ui/CenteredView.js +9 -13
  188. package/base/ui/CenteredView.js.map +1 -1
  189. package/base/ui/Dashboard.js +4 -5
  190. package/base/ui/Dashboard.js.map +1 -1
  191. package/base/ui/FileManager.js +38 -60
  192. package/base/ui/FileManager.js.map +1 -1
  193. package/base/ui/Layout.js +4 -8
  194. package/base/ui/Layout.js.map +1 -1
  195. package/base/ui/LoginScreen.js +16 -21
  196. package/base/ui/LoginScreen.js.map +1 -1
  197. package/base/ui/Logo.js +4 -5
  198. package/base/ui/Logo.js.map +1 -1
  199. package/base/ui/Navigation.js +11 -14
  200. package/base/ui/Navigation.js.map +1 -1
  201. package/base/ui/NotFound.js +4 -5
  202. package/base/ui/NotFound.js.map +1 -1
  203. package/base/ui/Tags.js +12 -16
  204. package/base/ui/Tags.js.map +1 -1
  205. package/base/ui/TenantSelector.js +4 -5
  206. package/base/ui/TenantSelector.js.map +1 -1
  207. package/base/ui/UserMenu/UserMenu.js +4 -5
  208. package/base/ui/UserMenu/UserMenu.js.map +1 -1
  209. package/base/ui/UserMenu/UserMenuHandle.js +4 -5
  210. package/base/ui/UserMenu/UserMenuHandle.js.map +1 -1
  211. package/base/ui/UserMenu/UserMenuItem.d.ts +4 -4
  212. package/base/ui/UserMenu/UserMenuItem.js +5 -15
  213. package/base/ui/UserMenu/UserMenuItem.js.map +1 -1
  214. package/base/ui/UserMenu/UserMenuLink.d.ts +4 -4
  215. package/base/ui/UserMenu/UserMenuLink.js +5 -15
  216. package/base/ui/UserMenu/UserMenuLink.js.map +1 -1
  217. package/base/ui/UserMenu/UserMenuSeparator.d.ts +2 -2
  218. package/base/ui/UserMenu/UserMenuSeparator.js +3 -5
  219. package/base/ui/UserMenu/UserMenuSeparator.js.map +1 -1
  220. package/base/ui/UserMenu.js +6 -13
  221. package/base/ui/UserMenu.js.map +1 -1
  222. package/components/AdminLayout.js +6 -10
  223. package/components/AdminLayout.js.map +1 -1
  224. package/components/BulkActions/Worker.js +57 -120
  225. package/components/BulkActions/Worker.js.map +1 -1
  226. package/components/BulkActions/index.js +0 -2
  227. package/components/BulkActions/useDialogWithReport/DialogMessage.js +17 -21
  228. package/components/BulkActions/useDialogWithReport/DialogMessage.js.map +1 -1
  229. package/components/BulkActions/useDialogWithReport/index.js +0 -2
  230. package/components/BulkActions/useDialogWithReport/useDialogWithReport.js +33 -44
  231. package/components/BulkActions/useDialogWithReport/useDialogWithReport.js.map +1 -1
  232. package/components/Buttons/Buttons.js +44 -71
  233. package/components/Buttons/Buttons.js.map +1 -1
  234. package/components/Buttons/Buttons.styles.js +9 -15
  235. package/components/Buttons/Buttons.styles.js.map +1 -1
  236. package/components/Buttons/index.js +1 -3
  237. package/components/Buttons/useButtons.js +15 -20
  238. package/components/Buttons/useButtons.js.map +1 -1
  239. package/components/DeveloperMode/DeveloperMode.js +5 -14
  240. package/components/DeveloperMode/DeveloperMode.js.map +1 -1
  241. package/components/DeveloperMode/index.js +0 -2
  242. package/components/Dialogs/Dialog.d.ts +2 -2
  243. package/components/Dialogs/Dialog.js +46 -59
  244. package/components/Dialogs/Dialog.js.map +1 -1
  245. package/components/Dialogs/DialogParamsContext.js +6 -7
  246. package/components/Dialogs/DialogParamsContext.js.map +1 -1
  247. package/components/Dialogs/DialogsContext.d.ts +2 -2
  248. package/components/Dialogs/DialogsContext.js +129 -149
  249. package/components/Dialogs/DialogsContext.js.map +1 -1
  250. package/components/Dialogs/useDialogs.js +5 -6
  251. package/components/Dialogs/useDialogs.js.map +1 -1
  252. package/components/EmptyView.js +26 -31
  253. package/components/EmptyView.js.map +1 -1
  254. package/components/Filters/Filters.js +15 -16
  255. package/components/Filters/Filters.js.map +1 -1
  256. package/components/Filters/FiltersToggle.js +18 -23
  257. package/components/Filters/FiltersToggle.js.map +1 -1
  258. package/components/Filters/index.js +0 -2
  259. package/components/FloatingActionButton.js +13 -15
  260. package/components/FloatingActionButton.js.map +1 -1
  261. package/components/IconPicker/IconPicker.js +24 -26
  262. package/components/IconPicker/IconPicker.js.map +1 -1
  263. package/components/IconPicker/IconPickerComponent.js +56 -72
  264. package/components/IconPicker/IconPickerComponent.js.map +1 -1
  265. package/components/IconPicker/IconPickerPresenter.js +64 -70
  266. package/components/IconPicker/IconPickerPresenter.js.map +1 -1
  267. package/components/IconPicker/IconPickerPresenter.test.js +79 -105
  268. package/components/IconPicker/IconPickerPresenter.test.js.map +1 -1
  269. package/components/IconPicker/IconPickerPresenterProvider.js +10 -16
  270. package/components/IconPicker/IconPickerPresenterProvider.js.map +1 -1
  271. package/components/IconPicker/IconPickerTab.js +97 -140
  272. package/components/IconPicker/IconPickerTab.js.map +1 -1
  273. package/components/IconPicker/IconRenderer.js +15 -23
  274. package/components/IconPicker/IconRenderer.js.map +1 -1
  275. package/components/IconPicker/IconRepository.js +41 -40
  276. package/components/IconPicker/IconRepository.js.map +1 -1
  277. package/components/IconPicker/IconRepository.test.js +56 -63
  278. package/components/IconPicker/IconRepository.test.js.map +1 -1
  279. package/components/IconPicker/IconRepositoryFactory.js +15 -11
  280. package/components/IconPicker/IconRepositoryFactory.js.map +1 -1
  281. package/components/IconPicker/Loading.js +47 -46
  282. package/components/IconPicker/Loading.js.map +1 -1
  283. package/components/IconPicker/components/IconPickerCell.js +18 -20
  284. package/components/IconPicker/components/IconPickerCell.js.map +1 -1
  285. package/components/IconPicker/components/IconPickerContent.js +27 -35
  286. package/components/IconPicker/components/IconPickerContent.js.map +1 -1
  287. package/components/IconPicker/components/IconPickerRow.js +5 -10
  288. package/components/IconPicker/components/IconPickerRow.js.map +1 -1
  289. package/components/IconPicker/components/IconPickerTrigger.js +42 -44
  290. package/components/IconPicker/components/IconPickerTrigger.js.map +1 -1
  291. package/components/IconPicker/components/index.js +0 -2
  292. package/components/IconPicker/config/Emojis.js +19 -21
  293. package/components/IconPicker/config/Emojis.js.map +1 -1
  294. package/components/IconPicker/config/FontAwesomeIcons.js +54 -58
  295. package/components/IconPicker/config/FontAwesomeIcons.js.map +1 -1
  296. package/components/IconPicker/config/IconPackProvider.js +17 -19
  297. package/components/IconPicker/config/IconPackProvider.js.map +1 -1
  298. package/components/IconPicker/config/IconType.js +48 -80
  299. package/components/IconPicker/config/IconType.js.map +1 -1
  300. package/components/IconPicker/config/index.js +28 -31
  301. package/components/IconPicker/config/index.js.map +1 -1
  302. package/components/IconPicker/defaultIcon.js +6 -5
  303. package/components/IconPicker/defaultIcon.js.map +1 -1
  304. package/components/IconPicker/index.js +0 -2
  305. package/components/IconPicker/plugins/customPlugin.js +87 -110
  306. package/components/IconPicker/plugins/customPlugin.js.map +1 -1
  307. package/components/IconPicker/plugins/emojisPlugin.js +90 -115
  308. package/components/IconPicker/plugins/emojisPlugin.js.map +1 -1
  309. package/components/IconPicker/plugins/graphql.js +3 -8
  310. package/components/IconPicker/plugins/graphql.js.map +1 -1
  311. package/components/IconPicker/plugins/iconsPlugin.js +73 -104
  312. package/components/IconPicker/plugins/iconsPlugin.js.map +1 -1
  313. package/components/IconPicker/types.js +4 -7
  314. package/components/IconPicker/types.js.map +1 -1
  315. package/components/LexicalEditor/LexicalEditor.js +40 -38
  316. package/components/LexicalEditor/LexicalEditor.js.map +1 -1
  317. package/components/LexicalEditor/LexicalLinkForm.js +80 -86
  318. package/components/LexicalEditor/LexicalLinkForm.js.map +1 -1
  319. package/components/LexicalEditor/index.js +0 -2
  320. package/components/LexicalEditor/lexicalValueFromHtml.js +21 -28
  321. package/components/LexicalEditor/lexicalValueFromHtml.js.map +1 -1
  322. package/components/LexicalEditor/lexicalValueWithHtml.js +24 -30
  323. package/components/LexicalEditor/lexicalValueWithHtml.js.map +1 -1
  324. package/components/MultiImageUpload.js +4 -13
  325. package/components/MultiImageUpload.js.map +1 -1
  326. package/components/NotAuthorizedError/NotAuthorizedError.js +16 -17
  327. package/components/NotAuthorizedError/NotAuthorizedError.js.map +1 -1
  328. package/components/NotAuthorizedError/SecureRouteError.js +297 -0
  329. package/components/NotAuthorizedError/SecureRouteError.js.map +1 -0
  330. package/components/NotAuthorizedError/index.js +0 -2
  331. package/components/OptionsMenu/OptionsMenu.js +20 -19
  332. package/components/OptionsMenu/OptionsMenu.js.map +1 -1
  333. package/components/OptionsMenu/OptionsMenuItem.js +15 -14
  334. package/components/OptionsMenu/OptionsMenuItem.js.map +1 -1
  335. package/components/OptionsMenu/OptionsMenuLink.js +13 -14
  336. package/components/OptionsMenu/OptionsMenuLink.js.map +1 -1
  337. package/components/OptionsMenu/index.js +0 -2
  338. package/components/OptionsMenu/useOptionsMenuItem.js +13 -18
  339. package/components/OptionsMenu/useOptionsMenuItem.js.map +1 -1
  340. package/components/OverlayLayout/OverlayLayout.js +35 -38
  341. package/components/OverlayLayout/OverlayLayout.js.map +1 -1
  342. package/components/OverlayLayout/components/OverlayBackdrop.js +6 -11
  343. package/components/OverlayLayout/components/OverlayBackdrop.js.map +1 -1
  344. package/components/OverlayLayout/components/OverlayContent.js +18 -17
  345. package/components/OverlayLayout/components/OverlayContent.js.map +1 -1
  346. package/components/OverlayLayout/components/OverlayHeader.js +30 -37
  347. package/components/OverlayLayout/components/OverlayHeader.js.map +1 -1
  348. package/components/OverlayLayout/components/OverlayRoot.js +13 -17
  349. package/components/OverlayLayout/components/OverlayRoot.js.map +1 -1
  350. package/components/OverlayLayout/components/index.js +0 -2
  351. package/components/OverlayLayout/index.js +0 -2
  352. package/components/Permissions/CannotUseAaclAlert.js +10 -11
  353. package/components/Permissions/CannotUseAaclAlert.js.map +1 -1
  354. package/components/Permissions/Permissions.js +32 -41
  355. package/components/Permissions/Permissions.js.map +1 -1
  356. package/components/Permissions/PermissionsGroup.js +9 -15
  357. package/components/Permissions/PermissionsGroup.js.map +1 -1
  358. package/components/Permissions/StyledComponents.js +9 -16
  359. package/components/Permissions/StyledComponents.js.map +1 -1
  360. package/components/Permissions/index.js +1 -3
  361. package/components/RegisterFeature.js +14 -21
  362. package/components/RegisterFeature.js.map +1 -1
  363. package/components/ResizablePanels/index.js +0 -2
  364. package/components/RoleAutocomplete/graphql.js +3 -2
  365. package/components/RoleAutocomplete/graphql.js.map +1 -1
  366. package/components/RoleAutocomplete/index.d.ts +5 -3
  367. package/components/RoleAutocomplete/index.js +21 -13
  368. package/components/RoleAutocomplete/index.js.map +1 -1
  369. package/components/RolesMultiAutocomplete/graphql.js +3 -2
  370. package/components/RolesMultiAutocomplete/graphql.js.map +1 -1
  371. package/components/RolesMultiAutocomplete/index.d.ts +5 -3
  372. package/components/RolesMultiAutocomplete/index.js +21 -14
  373. package/components/RolesMultiAutocomplete/index.js.map +1 -1
  374. package/components/SearchUI.js +18 -25
  375. package/components/SearchUI.js.map +1 -1
  376. package/components/SimpleForm/SimpleForm.d.ts +1 -1
  377. package/components/SimpleForm/SimpleForm.js +54 -73
  378. package/components/SimpleForm/SimpleForm.js.map +1 -1
  379. package/components/SimpleForm/index.js +1 -3
  380. package/components/SimpleUI/InputField.js +71 -64
  381. package/components/SimpleUI/InputField.js.map +1 -1
  382. package/components/SingleImageUpload.d.ts +2 -2
  383. package/components/SingleImageUpload.js +37 -58
  384. package/components/SingleImageUpload.js.map +1 -1
  385. package/components/SplitView/SplitView.js +47 -57
  386. package/components/SplitView/SplitView.js.map +1 -1
  387. package/components/SplitView/index.js +1 -3
  388. package/components/TeamAutocomplete/graphql.js +3 -2
  389. package/components/TeamAutocomplete/graphql.js.map +1 -1
  390. package/components/TeamAutocomplete/index.d.ts +5 -3
  391. package/components/TeamAutocomplete/index.js +21 -13
  392. package/components/TeamAutocomplete/index.js.map +1 -1
  393. package/components/TeamsMultiAutocomplete/graphql.js +3 -2
  394. package/components/TeamsMultiAutocomplete/graphql.js.map +1 -1
  395. package/components/TeamsMultiAutocomplete/index.d.ts +5 -3
  396. package/components/TeamsMultiAutocomplete/index.js +21 -14
  397. package/components/TeamsMultiAutocomplete/index.js.map +1 -1
  398. package/components/Wcp.js +27 -38
  399. package/components/Wcp.js.map +1 -1
  400. package/components/index.js +10 -13
  401. package/config/AdminConfig/Dashboard.js +3 -2
  402. package/config/AdminConfig/Dashboard.js.map +1 -1
  403. package/config/AdminConfig/Dialog.js +15 -17
  404. package/config/AdminConfig/Dialog.js.map +1 -1
  405. package/config/AdminConfig/FieldRenderer.js +15 -17
  406. package/config/AdminConfig/FieldRenderer.js.map +1 -1
  407. package/config/AdminConfig/Form.js +4 -3
  408. package/config/AdminConfig/Form.js.map +1 -1
  409. package/config/AdminConfig/LayoutRenderer.js +15 -17
  410. package/config/AdminConfig/LayoutRenderer.js.map +1 -1
  411. package/config/AdminConfig/LexicalTheme/Color.js +34 -41
  412. package/config/AdminConfig/LexicalTheme/Color.js.map +1 -1
  413. package/config/AdminConfig/LexicalTheme/Typography.js +61 -74
  414. package/config/AdminConfig/LexicalTheme/Typography.js.map +1 -1
  415. package/config/AdminConfig/LexicalTheme.js +4 -3
  416. package/config/AdminConfig/LexicalTheme.js.map +1 -1
  417. package/config/AdminConfig/Logo.d.ts +1 -1
  418. package/config/AdminConfig/Logo.js +15 -17
  419. package/config/AdminConfig/Logo.js.map +1 -1
  420. package/config/AdminConfig/Menu/MenuGroup.d.ts +3 -3
  421. package/config/AdminConfig/Menu/MenuGroup.js +7 -9
  422. package/config/AdminConfig/Menu/MenuGroup.js.map +1 -1
  423. package/config/AdminConfig/Menu/MenuItem.d.ts +2 -2
  424. package/config/AdminConfig/Menu/MenuItem.js +5 -7
  425. package/config/AdminConfig/Menu/MenuItem.js.map +1 -1
  426. package/config/AdminConfig/Menu/MenuLink.d.ts +2 -2
  427. package/config/AdminConfig/Menu/MenuLink.js +12 -15
  428. package/config/AdminConfig/Menu/MenuLink.js.map +1 -1
  429. package/config/AdminConfig/Menu/SupportMenu/SupportMenuItem.d.ts +2 -2
  430. package/config/AdminConfig/Menu/SupportMenu/SupportMenuItem.js +6 -8
  431. package/config/AdminConfig/Menu/SupportMenu/SupportMenuItem.js.map +1 -1
  432. package/config/AdminConfig/Menu/SupportMenu/SupportMenuLink.d.ts +1 -1
  433. package/config/AdminConfig/Menu/SupportMenu/SupportMenuLink.js +4 -6
  434. package/config/AdminConfig/Menu/SupportMenu/SupportMenuLink.js.map +1 -1
  435. package/config/AdminConfig/Menu/SupportMenu.d.ts +3 -3
  436. package/config/AdminConfig/Menu/SupportMenu.js +30 -41
  437. package/config/AdminConfig/Menu/SupportMenu.js.map +1 -1
  438. package/config/AdminConfig/Menu/UserMenu/UserMenuItem.js +4 -4
  439. package/config/AdminConfig/Menu/UserMenu/UserMenuItem.js.map +1 -1
  440. package/config/AdminConfig/Menu/UserMenu/UserMenuLink.js +4 -4
  441. package/config/AdminConfig/Menu/UserMenu/UserMenuLink.js.map +1 -1
  442. package/config/AdminConfig/Menu/UserMenu/UserMenuSeparator.js +0 -2
  443. package/config/AdminConfig/Menu/UserMenu/types.js +0 -3
  444. package/config/AdminConfig/Menu/UserMenu.d.ts +31 -31
  445. package/config/AdminConfig/Menu/UserMenu.js +39 -52
  446. package/config/AdminConfig/Menu/UserMenu.js.map +1 -1
  447. package/config/AdminConfig/Menu/types.js +0 -3
  448. package/config/AdminConfig/Menu.d.ts +42 -42
  449. package/config/AdminConfig/Menu.js +57 -73
  450. package/config/AdminConfig/Menu.js.map +1 -1
  451. package/config/AdminConfig/Route.js +4 -5
  452. package/config/AdminConfig/Route.js.map +1 -1
  453. package/config/AdminConfig/Security.js +3 -2
  454. package/config/AdminConfig/Security.js.map +1 -1
  455. package/config/AdminConfig/SecurityPermissions.js +20 -27
  456. package/config/AdminConfig/SecurityPermissions.js.map +1 -1
  457. package/config/AdminConfig/Tenant/TenantLogo.d.ts +1 -1
  458. package/config/AdminConfig/Tenant/TenantLogo.js +18 -20
  459. package/config/AdminConfig/Tenant/TenantLogo.js.map +1 -1
  460. package/config/AdminConfig/Tenant/TenantName.d.ts +1 -1
  461. package/config/AdminConfig/Tenant/TenantName.js +14 -15
  462. package/config/AdminConfig/Tenant/TenantName.js.map +1 -1
  463. package/config/AdminConfig/Tenant.js +6 -9
  464. package/config/AdminConfig/Tenant.js.map +1 -1
  465. package/config/AdminConfig/Theme/assignColor.js +51 -18
  466. package/config/AdminConfig/Theme/assignColor.js.map +1 -1
  467. package/config/AdminConfig/Theme/consts.js +20 -2
  468. package/config/AdminConfig/Theme/consts.js.map +1 -1
  469. package/config/AdminConfig/Theme/types.js +0 -3
  470. package/config/AdminConfig/Theme.js +8 -15
  471. package/config/AdminConfig/Theme.js.map +1 -1
  472. package/config/AdminConfig/Title.d.ts +1 -1
  473. package/config/AdminConfig/Title.js +11 -12
  474. package/config/AdminConfig/Title.js.map +1 -1
  475. package/config/AdminConfig/Widget.js +24 -31
  476. package/config/AdminConfig/Widget.js.map +1 -1
  477. package/config/AdminConfig.js +47 -59
  478. package/config/AdminConfig.js.map +1 -1
  479. package/config/createAdminConfig.js +55 -86
  480. package/config/createAdminConfig.js.map +1 -1
  481. package/domain/Identity.js +78 -88
  482. package/domain/Identity.js.map +1 -1
  483. package/errors/ErrorOverlayNetworkErrorHandler.js +37 -52
  484. package/errors/ErrorOverlayNetworkErrorHandler.js.map +1 -1
  485. package/errors/TenantIsDisabled.js +19 -20
  486. package/errors/TenantIsDisabled.js.map +1 -1
  487. package/exports/admin/build-params.js +0 -5
  488. package/exports/admin/configs.js +0 -2
  489. package/exports/admin/form.js +3 -18
  490. package/exports/admin/security.js +1 -7
  491. package/exports/admin/tenancy.js +0 -2
  492. package/exports/admin/ui.js +1 -4
  493. package/exports/admin.js +1 -4
  494. package/features/apolloClient/abstraction.js +2 -1
  495. package/features/apolloClient/abstraction.js.map +1 -1
  496. package/features/apolloClient/feature.js +22 -30
  497. package/features/apolloClient/feature.js.map +1 -1
  498. package/features/buildParams/BuildParams.js +20 -14
  499. package/features/buildParams/BuildParams.js.map +1 -1
  500. package/features/buildParams/abstractions.js +3 -2
  501. package/features/buildParams/abstractions.js.map +1 -1
  502. package/features/buildParams/feature.js +11 -10
  503. package/features/buildParams/feature.js.map +1 -1
  504. package/features/buildParams/index.js +0 -2
  505. package/features/formModel/ConditionRuleEvaluator.js +39 -46
  506. package/features/formModel/ConditionRuleEvaluator.js.map +1 -1
  507. package/features/formModel/Field.d.ts +1 -0
  508. package/features/formModel/Field.js +334 -411
  509. package/features/formModel/Field.js.map +1 -1
  510. package/features/formModel/FieldBuilder.d.ts +2 -1
  511. package/features/formModel/FieldBuilder.js +148 -171
  512. package/features/formModel/FieldBuilder.js.map +1 -1
  513. package/features/formModel/FieldBuilder.test.js +217 -201
  514. package/features/formModel/FieldBuilder.test.js.map +1 -1
  515. package/features/formModel/FieldBuilderRegistry.js +23 -25
  516. package/features/formModel/FieldBuilderRegistry.js.map +1 -1
  517. package/features/formModel/FocusManager.js +69 -95
  518. package/features/formModel/FocusManager.js.map +1 -1
  519. package/features/formModel/FormErrors.d.ts +9 -0
  520. package/features/formModel/FormErrors.js +35 -0
  521. package/features/formModel/FormErrors.js.map +1 -0
  522. package/features/formModel/FormModel.d.ts +2 -0
  523. package/features/formModel/FormModel.js +391 -396
  524. package/features/formModel/FormModel.js.map +1 -1
  525. package/features/formModel/FormModel.test.js +3791 -3354
  526. package/features/formModel/FormModel.test.js.map +1 -1
  527. package/features/formModel/FormModelFactory.js +27 -17
  528. package/features/formModel/FormModelFactory.js.map +1 -1
  529. package/features/formModel/FormView.d.ts +2 -1
  530. package/features/formModel/FormView.js +168 -156
  531. package/features/formModel/FormView.js.map +1 -1
  532. package/features/formModel/LayoutBuilderFactory.js +300 -370
  533. package/features/formModel/LayoutBuilderFactory.js.map +1 -1
  534. package/features/formModel/LayoutMutator.js +118 -125
  535. package/features/formModel/LayoutMutator.js.map +1 -1
  536. package/features/formModel/LayoutResolver.js +174 -214
  537. package/features/formModel/LayoutResolver.js.map +1 -1
  538. package/features/formModel/ObjectField.js +524 -724
  539. package/features/formModel/ObjectField.js.map +1 -1
  540. package/features/formModel/PresenterErrors.d.ts +9 -0
  541. package/features/formModel/PresenterErrors.js +32 -0
  542. package/features/formModel/PresenterErrors.js.map +1 -0
  543. package/features/formModel/Rules.test.js +311 -276
  544. package/features/formModel/Rules.test.js.map +1 -1
  545. package/features/formModel/abstractions.d.ts +10 -0
  546. package/features/formModel/abstractions.js +5 -114
  547. package/features/formModel/abstractions.js.map +1 -1
  548. package/features/formModel/createFieldRenderer.js +33 -10
  549. package/features/formModel/createFieldRenderer.js.map +1 -1
  550. package/features/formModel/demo/FieldRenderersDemoPresenter.js +289 -220
  551. package/features/formModel/demo/FieldRenderersDemoPresenter.js.map +1 -1
  552. package/features/formModel/demo/FormModelDemo.js +191 -215
  553. package/features/formModel/demo/FormModelDemo.js.map +1 -1
  554. package/features/formModel/demo/FormModelDemoPresenter.js +132 -113
  555. package/features/formModel/demo/FormModelDemoPresenter.js.map +1 -1
  556. package/features/formModel/demo/FormModelPhase11Presenter.js +101 -98
  557. package/features/formModel/demo/FormModelPhase11Presenter.js.map +1 -1
  558. package/features/formModel/demo/FormModelPhase8c1Presenter.js +64 -57
  559. package/features/formModel/demo/FormModelPhase8c1Presenter.js.map +1 -1
  560. package/features/formModel/feature.js +23 -22
  561. package/features/formModel/feature.js.map +1 -1
  562. package/features/formModel/fieldTypes/BooleanFieldType.js +18 -15
  563. package/features/formModel/fieldTypes/BooleanFieldType.js.map +1 -1
  564. package/features/formModel/fieldTypes/DateTimeFieldType.js +218 -341
  565. package/features/formModel/fieldTypes/DateTimeFieldType.js.map +1 -1
  566. package/features/formModel/fieldTypes/FileFieldType.d.ts +12 -1
  567. package/features/formModel/fieldTypes/FileFieldType.js +48 -12
  568. package/features/formModel/fieldTypes/FileFieldType.js.map +1 -1
  569. package/features/formModel/fieldTypes/FileUrlFieldType.js +15 -12
  570. package/features/formModel/fieldTypes/FileUrlFieldType.js.map +1 -1
  571. package/features/formModel/fieldTypes/NumberFieldType.js +19 -18
  572. package/features/formModel/fieldTypes/NumberFieldType.js.map +1 -1
  573. package/features/formModel/fieldTypes/ObjectFieldType.js +80 -94
  574. package/features/formModel/fieldTypes/ObjectFieldType.js.map +1 -1
  575. package/features/formModel/fieldTypes/TextFieldType.js +15 -12
  576. package/features/formModel/fieldTypes/TextFieldType.js.map +1 -1
  577. package/features/formModel/fieldTypes/index.js +7 -9
  578. package/features/formModel/index.d.ts +2 -0
  579. package/features/formModel/index.js +11 -29
  580. package/features/formModel/renderers.js +0 -4
  581. package/features/formModel/useFieldRenderers.js +10 -14
  582. package/features/formModel/useFieldRenderers.js.map +1 -1
  583. package/features/formModel/useLayoutRenderers.js +10 -14
  584. package/features/formModel/useLayoutRenderers.js.map +1 -1
  585. package/features/listCache/ListCache.d.ts +28 -0
  586. package/features/listCache/ListCache.js +48 -0
  587. package/features/listCache/ListCache.js.map +1 -0
  588. package/features/listCache/index.d.ts +2 -0
  589. package/features/listCache/index.js +1 -0
  590. package/features/security/AuthenticationContext/AuthenticationContext.js +27 -26
  591. package/features/security/AuthenticationContext/AuthenticationContext.js.map +1 -1
  592. package/features/security/AuthenticationContext/GraphQLClientDecorator.js +23 -22
  593. package/features/security/AuthenticationContext/GraphQLClientDecorator.js.map +1 -1
  594. package/features/security/AuthenticationContext/InternalIdTokenProvider.js +15 -12
  595. package/features/security/AuthenticationContext/InternalIdTokenProvider.js.map +1 -1
  596. package/features/security/AuthenticationContext/abstractions.js +3 -2
  597. package/features/security/AuthenticationContext/abstractions.js.map +1 -1
  598. package/features/security/AuthenticationContext/feature.js +15 -14
  599. package/features/security/AuthenticationContext/feature.js.map +1 -1
  600. package/features/security/AuthenticationContext/index.js +0 -2
  601. package/features/security/AuthenticationContext/types.js +0 -3
  602. package/features/security/IdentityContext/IdentityContext.js +18 -17
  603. package/features/security/IdentityContext/IdentityContext.js.map +1 -1
  604. package/features/security/IdentityContext/abstractions.js +2 -1
  605. package/features/security/IdentityContext/abstractions.js.map +1 -1
  606. package/features/security/IdentityContext/feature.js +13 -12
  607. package/features/security/IdentityContext/feature.js.map +1 -1
  608. package/features/security/IdentityContext/index.js +0 -2
  609. package/features/security/LogIn/IdentityMapper.js +8 -7
  610. package/features/security/LogIn/IdentityMapper.js.map +1 -1
  611. package/features/security/LogIn/LogInGateway.js +17 -19
  612. package/features/security/LogIn/LogInGateway.js.map +1 -1
  613. package/features/security/LogIn/LogInRepository.js +16 -14
  614. package/features/security/LogIn/LogInRepository.js.map +1 -1
  615. package/features/security/LogIn/LogInUseCase.js +23 -31
  616. package/features/security/LogIn/LogInUseCase.js.map +1 -1
  617. package/features/security/LogIn/abstractions.js +5 -16
  618. package/features/security/LogIn/abstractions.js.map +1 -1
  619. package/features/security/LogIn/createLoginMutation.js +2 -3
  620. package/features/security/LogIn/createLoginMutation.js.map +1 -1
  621. package/features/security/LogIn/feature.js +16 -15
  622. package/features/security/LogIn/feature.js.map +1 -1
  623. package/features/security/LogIn/index.js +0 -2
  624. package/features/security/LogOut/LogOutUseCase.js +18 -16
  625. package/features/security/LogOut/LogOutUseCase.js.map +1 -1
  626. package/features/security/LogOut/abstractions.js +2 -1
  627. package/features/security/LogOut/abstractions.js.map +1 -1
  628. package/features/security/LogOut/feature.js +12 -11
  629. package/features/security/LogOut/feature.js.map +1 -1
  630. package/features/security/LogOut/index.js +0 -2
  631. package/features/security/SecurityFeature.js +9 -8
  632. package/features/security/SecurityFeature.js.map +1 -1
  633. package/features/telemetry/TelemetryService.js +11 -12
  634. package/features/telemetry/TelemetryService.js.map +1 -1
  635. package/features/telemetry/abstractions.js +2 -1
  636. package/features/telemetry/abstractions.js.map +1 -1
  637. package/features/telemetry/feature.js +13 -12
  638. package/features/telemetry/feature.js.map +1 -1
  639. package/features/telemetry/index.js +0 -2
  640. package/features/tenancy/GraphQLClientDecorator.js +23 -20
  641. package/features/tenancy/GraphQLClientDecorator.js.map +1 -1
  642. package/features/tenancy/TenantContext.js +46 -50
  643. package/features/tenancy/TenantContext.js.map +1 -1
  644. package/features/tenancy/abstractions.js +2 -1
  645. package/features/tenancy/abstractions.js.map +1 -1
  646. package/features/tenancy/feature.js +25 -35
  647. package/features/tenancy/feature.js.map +1 -1
  648. package/features/tenancy/types.js +0 -3
  649. package/features/tools/LexicalContext/LexicalContext.js +20 -17
  650. package/features/tools/LexicalContext/LexicalContext.js.map +1 -1
  651. package/features/tools/LexicalContext/abstractions.js +2 -1
  652. package/features/tools/LexicalContext/abstractions.js.map +1 -1
  653. package/features/tools/LexicalContext/index.js +0 -2
  654. package/features/tools/ToolPipelineRunner.js +26 -24
  655. package/features/tools/ToolPipelineRunner.js.map +1 -1
  656. package/features/tools/ToolRegistry.js +32 -23
  657. package/features/tools/ToolRegistry.js.map +1 -1
  658. package/features/tools/abstractions.js +4 -3
  659. package/features/tools/abstractions.js.map +1 -1
  660. package/features/tools/feature.js +17 -16
  661. package/features/tools/feature.js.map +1 -1
  662. package/features/tools/index.js +1 -3
  663. package/features/wcp/ReactLicense.js +53 -52
  664. package/features/wcp/ReactLicense.js.map +1 -1
  665. package/features/wcp/WcpGateway.js +21 -20
  666. package/features/wcp/WcpGateway.js.map +1 -1
  667. package/features/wcp/WcpService.js +57 -67
  668. package/features/wcp/WcpService.js.map +1 -1
  669. package/features/wcp/abstractions.js +3 -2
  670. package/features/wcp/abstractions.js.map +1 -1
  671. package/features/wcp/feature.js +14 -13
  672. package/features/wcp/feature.js.map +1 -1
  673. package/features/wcp/types.js +0 -3
  674. package/features/webinySdk/WebinySdk.js +19 -18
  675. package/features/webinySdk/WebinySdk.js.map +1 -1
  676. package/features/webinySdk/abstractions.js +2 -5
  677. package/features/webinySdk/abstractions.js.map +1 -1
  678. package/features/webinySdk/feature.js +13 -12
  679. package/features/webinySdk/feature.js.map +1 -1
  680. package/features/webinySdk/index.js +0 -2
  681. package/hooks/index.js +0 -2
  682. package/hooks/useConfirmationDialog.d.ts +1 -1
  683. package/hooks/useConfirmationDialog.js +31 -38
  684. package/hooks/useConfirmationDialog.js.map +1 -1
  685. package/hooks/useDialog.js +14 -15
  686. package/hooks/useDialog.js.map +1 -1
  687. package/hooks/useHotkeys.js +52 -85
  688. package/hooks/useHotkeys.js.map +1 -1
  689. package/hooks/useIsMounted.js +12 -11
  690. package/hooks/useIsMounted.js.map +1 -1
  691. package/hooks/useKeyHandler.js +45 -53
  692. package/hooks/useKeyHandler.js.map +1 -1
  693. package/hooks/useModKey.js +20 -25
  694. package/hooks/useModKey.js.map +1 -1
  695. package/hooks/useOpenDialog.js +13 -13
  696. package/hooks/useOpenDialog.js.map +1 -1
  697. package/hooks/useShiftKey.d.ts +5 -1
  698. package/hooks/useShiftKey.js +38 -29
  699. package/hooks/useShiftKey.js.map +1 -1
  700. package/hooks/useSnackbar.d.ts +3 -0
  701. package/hooks/useSnackbar.js +26 -28
  702. package/hooks/useSnackbar.js.map +1 -1
  703. package/hooks/useStateIfMounted.js +14 -12
  704. package/hooks/useStateIfMounted.js.map +1 -1
  705. package/hooks/useStateWithCallback.js +18 -14
  706. package/hooks/useStateWithCallback.js.map +1 -1
  707. package/hooks/useToggler.js +12 -11
  708. package/hooks/useToggler.js.map +1 -1
  709. package/index.d.ts +4 -1
  710. package/index.js +15 -31
  711. package/package.json +29 -29
  712. package/permissions/PermissionRenderer.js +179 -193
  713. package/permissions/PermissionRenderer.js.map +1 -1
  714. package/permissions/PermissionValueContext.js +13 -20
  715. package/permissions/PermissionValueContext.js.map +1 -1
  716. package/permissions/createHasPermission.js +32 -40
  717. package/permissions/createHasPermission.js.map +1 -1
  718. package/permissions/createPermissionSchema.js +6 -5
  719. package/permissions/createPermissionSchema.js.map +1 -1
  720. package/permissions/createPermissions.js +125 -185
  721. package/permissions/createPermissions.js.map +1 -1
  722. package/permissions/createPermissions.test.js +190 -158
  723. package/permissions/createPermissions.test.js.map +1 -1
  724. package/permissions/index.js +2 -4
  725. package/permissions/types.js +0 -3
  726. package/permissions/usePermissionForm.js +133 -232
  727. package/permissions/usePermissionForm.js.map +1 -1
  728. package/permissions/usePermissions.js +6 -5
  729. package/permissions/usePermissions.js.map +1 -1
  730. package/plugins/MenuPlugin.js +15 -14
  731. package/plugins/MenuPlugin.js.map +1 -1
  732. package/presentation/browserFilePicker/BrowserFilePicker.d.ts +3 -0
  733. package/presentation/browserFilePicker/BrowserFilePicker.js +88 -0
  734. package/presentation/browserFilePicker/BrowserFilePicker.js.map +1 -0
  735. package/presentation/browserFilePicker/BrowserFilePickerPresenter.d.ts +10 -0
  736. package/presentation/browserFilePicker/BrowserFilePickerPresenter.js +84 -0
  737. package/presentation/browserFilePicker/BrowserFilePickerPresenter.js.map +1 -0
  738. package/presentation/browserFilePicker/index.d.ts +3 -0
  739. package/presentation/browserFilePicker/index.js +2 -0
  740. package/presentation/browserFilePicker/types.d.ts +53 -0
  741. package/presentation/browserFilePicker/types.js +0 -0
  742. package/presentation/browserFilePicker/utils.d.ts +2 -0
  743. package/presentation/browserFilePicker/utils.js +16 -0
  744. package/presentation/browserFilePicker/utils.js.map +1 -0
  745. package/presentation/buildParams/useBuildParams.js +2 -3
  746. package/presentation/buildParams/useBuildParams.js.map +1 -1
  747. package/presentation/installation/components/SystemInstaller/SystemInstaller.js +46 -53
  748. package/presentation/installation/components/SystemInstaller/SystemInstaller.js.map +1 -1
  749. package/presentation/installation/components/SystemInstaller/SystemInstallerProvider.js +9 -14
  750. package/presentation/installation/components/SystemInstaller/SystemInstallerProvider.js.map +1 -1
  751. package/presentation/installation/components/SystemInstaller/index.js +0 -2
  752. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js +14 -29
  753. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js.map +1 -1
  754. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/usePasswordValidator.js +11 -10
  755. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/usePasswordValidator.js.map +1 -1
  756. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep.js +60 -60
  757. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep.js.map +1 -1
  758. package/presentation/installation/components/SystemInstaller/steps/BasicInfoStep.js +75 -85
  759. package/presentation/installation/components/SystemInstaller/steps/BasicInfoStep.js.map +1 -1
  760. package/presentation/installation/components/SystemInstaller/steps/Center.js +5 -8
  761. package/presentation/installation/components/SystemInstaller/steps/Center.js.map +1 -1
  762. package/presentation/installation/components/SystemInstaller/steps/Container.js +18 -24
  763. package/presentation/installation/components/SystemInstaller/steps/Container.js.map +1 -1
  764. package/presentation/installation/components/SystemInstaller/steps/FinishSetup.js +48 -53
  765. package/presentation/installation/components/SystemInstaller/steps/FinishSetup.js.map +1 -1
  766. package/presentation/installation/components/SystemInstaller/steps/IntroductionStep.js +13 -16
  767. package/presentation/installation/components/SystemInstaller/steps/IntroductionStep.js.map +1 -1
  768. package/presentation/installation/components/SystemInstaller/steps/introduction.js +723 -0
  769. package/presentation/installation/components/SystemInstaller/steps/introduction.js.map +1 -0
  770. package/presentation/installation/components/SystemInstaller/steps/referralSources.js +14 -1
  771. package/presentation/installation/components/SystemInstaller/steps/referralSources.js.map +1 -1
  772. package/presentation/installation/presenters/SystemInstaller/SystemInstallerGateway.js +27 -28
  773. package/presentation/installation/presenters/SystemInstaller/SystemInstallerGateway.js.map +1 -1
  774. package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js +117 -124
  775. package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js.map +1 -1
  776. package/presentation/installation/presenters/SystemInstaller/SystemInstallerRepository.js +23 -21
  777. package/presentation/installation/presenters/SystemInstaller/SystemInstallerRepository.js.map +1 -1
  778. package/presentation/installation/presenters/SystemInstaller/abstractions.js +4 -3
  779. package/presentation/installation/presenters/SystemInstaller/abstractions.js.map +1 -1
  780. package/presentation/installation/presenters/SystemInstaller/feature.js +15 -14
  781. package/presentation/installation/presenters/SystemInstaller/feature.js.map +1 -1
  782. package/presentation/installation/presenters/SystemInstaller/index.js +0 -2
  783. package/presentation/lexicalContext/useLexicalContext.js +11 -8
  784. package/presentation/lexicalContext/useLexicalContext.js.map +1 -1
  785. package/presentation/listPresenter/ListPresenter.d.ts +30 -0
  786. package/presentation/listPresenter/ListPresenter.js +216 -0
  787. package/presentation/listPresenter/ListPresenter.js.map +1 -0
  788. package/presentation/listPresenter/ListPresenter.test.d.ts +1 -0
  789. package/presentation/listPresenter/ListPresenter.test.js +816 -0
  790. package/presentation/listPresenter/ListPresenter.test.js.map +1 -0
  791. package/presentation/listPresenter/SelectionController.d.ts +21 -0
  792. package/presentation/listPresenter/SelectionController.js +74 -0
  793. package/presentation/listPresenter/SelectionController.js.map +1 -0
  794. package/presentation/listPresenter/abstractions.d.ts +107 -0
  795. package/presentation/listPresenter/abstractions.js +5 -0
  796. package/presentation/listPresenter/abstractions.js.map +1 -0
  797. package/presentation/listPresenter/feature.d.ts +3 -0
  798. package/presentation/listPresenter/feature.js +17 -0
  799. package/presentation/listPresenter/feature.js.map +1 -0
  800. package/presentation/listPresenter/index.d.ts +3 -0
  801. package/presentation/listPresenter/index.js +2 -0
  802. package/presentation/security/components/HasPermission.js +15 -25
  803. package/presentation/security/components/HasPermission.js.map +1 -1
  804. package/presentation/security/components/SecureRoute.js +6 -12
  805. package/presentation/security/components/SecureRoute.js.map +1 -1
  806. package/presentation/security/hooks/useAuthentication.js +11 -17
  807. package/presentation/security/hooks/useAuthentication.js.map +1 -1
  808. package/presentation/security/hooks/useIdentity.js +19 -18
  809. package/presentation/security/hooks/useIdentity.js.map +1 -1
  810. package/presentation/security/hooks/useSecurity.js +14 -24
  811. package/presentation/security/hooks/useSecurity.js.map +1 -1
  812. package/presentation/tenancy/TenancyProvider.js +23 -36
  813. package/presentation/tenancy/TenancyProvider.js.map +1 -1
  814. package/presentation/tenancy/createTenancyProvider.js +6 -11
  815. package/presentation/tenancy/createTenancyProvider.js.map +1 -1
  816. package/presentation/tenancy/useTenantContext.js +17 -18
  817. package/presentation/tenancy/useTenantContext.js.map +1 -1
  818. package/presentation/textToLexicalTool/TextToLexicalTool.js +20 -18
  819. package/presentation/textToLexicalTool/TextToLexicalTool.js.map +1 -1
  820. package/presentation/textToLexicalTool/feature.js +6 -5
  821. package/presentation/textToLexicalTool/feature.js.map +1 -1
  822. package/presentation/textToLexicalTool/textToLexicalState.js +28 -28
  823. package/presentation/textToLexicalTool/textToLexicalState.js.map +1 -1
  824. package/presentation/wcp/WcpProvider.js +16 -26
  825. package/presentation/wcp/WcpProvider.js.map +1 -1
  826. package/presentation/wcp/useWcp.js +11 -12
  827. package/presentation/wcp/useWcp.js.map +1 -1
  828. package/routes.d.ts +0 -1
  829. package/routes.js +14 -17
  830. package/routes.js.map +1 -1
  831. package/static/svg/SecureRouteError.e8b15981.svg +1 -0
  832. package/static/svg/add-18px.b3062af6.svg +3 -0
  833. package/static/svg/arrow_drop_down-24px.da74d713.svg +4 -0
  834. package/static/svg/attach_file_black_24dp.7fb13a7e.svg +1 -0
  835. package/static/svg/baseline-menu-24px.071b179d.svg +4 -0
  836. package/static/svg/baseline-notification_important-24px.29277e73.svg +4 -0
  837. package/static/svg/baseline-security-24px.12e519cc.svg +4 -0
  838. package/static/svg/file_download.afe3fbec.svg +1 -0
  839. package/static/svg/file_upload.6865d820.svg +1 -0
  840. package/static/svg/filter-24px.886d9ff0.svg +8 -0
  841. package/static/svg/github-brands.6311f0fa.svg +1 -0
  842. package/static/svg/highlight-24px.959a97f7.svg +1 -0
  843. package/static/svg/icon-community.cd087355.svg +16 -0
  844. package/static/svg/icon-documentation.a189d24c.svg +16 -0
  845. package/static/svg/info.fe810b72.svg +1 -0
  846. package/static/svg/insert_drive_file-24px.39d490eb.svg +1 -0
  847. package/static/svg/insert_photo-24px.81a5f945.svg +1 -0
  848. package/static/svg/introduction.108720aa.svg +154 -0
  849. package/static/svg/label-24px.9deafa4f.svg +1 -0
  850. package/static/svg/round-account_circle-24px.f0b48cb7.svg +1 -0
  851. package/static/svg/round-add-24px.4a5219b4.svg +16 -0
  852. package/static/svg/round-arrow_drop_down-24px.5fdf92d1.svg +1 -0
  853. package/static/svg/round-chevron_right-24px.34936511.svg +12 -0
  854. package/static/svg/round-feedback-24px.4dae7231.svg +54 -0
  855. package/static/svg/round-help-24px.a61b1d66.svg +1 -0
  856. package/static/svg/round-invert_colors-24px.a229a1dd.svg +52 -0
  857. package/static/svg/round-keyboard_arrow_down-24px.6febe804.svg +16 -0
  858. package/static/svg/round-keyboard_arrow_up-24px.b1f7db34.svg +16 -0
  859. package/static/svg/round-lock_open-24px.d527f6a5.svg +60 -0
  860. package/static/svg/round-more_vert-24px.68d41b07.svg +12 -0
  861. package/static/svg/round-open_in_new-24px.be5b4ddd.svg +44 -0
  862. package/static/svg/round-settings-24px.c0b3056f.svg +4 -0
  863. package/static/svg/search-24px.3c0f88dd.svg +20 -0
  864. package/static/svg/slack-logo.7ee35e7f.svg +1 -0
  865. package/static/svg/today-24px.df206362.svg +1 -0
  866. package/static/svg/touch_app.debf3744.svg +1 -0
  867. package/static/svg/wby-horizontal.03327bf6.svg +23 -0
  868. package/static/svg/wby-square.ff8f47c3.svg +3 -0
  869. package/static/svg/webiny-logo.ef56725c.svg +20 -0
  870. package/static/svg/webiny-orange-logo.4eccf0f2.svg +20 -0
  871. package/types.js +0 -3
  872. package/components/BulkActions/index.js.map +0 -1
  873. package/components/BulkActions/useDialogWithReport/index.js.map +0 -1
  874. package/components/Buttons/index.js.map +0 -1
  875. package/components/DeveloperMode/index.js.map +0 -1
  876. package/components/Filters/index.js.map +0 -1
  877. package/components/IconPicker/components/index.js.map +0 -1
  878. package/components/IconPicker/index.js.map +0 -1
  879. package/components/LexicalEditor/index.js.map +0 -1
  880. package/components/NotAuthorizedError/index.js.map +0 -1
  881. package/components/OptionsMenu/index.js.map +0 -1
  882. package/components/OverlayLayout/components/index.js.map +0 -1
  883. package/components/OverlayLayout/index.js.map +0 -1
  884. package/components/Permissions/index.js.map +0 -1
  885. package/components/ResizablePanels/index.js.map +0 -1
  886. package/components/SimpleForm/index.js.map +0 -1
  887. package/components/SplitView/index.js.map +0 -1
  888. package/components/index.js.map +0 -1
  889. package/config/AdminConfig/Menu/UserMenu/UserMenuSeparator.js.map +0 -1
  890. package/config/AdminConfig/Menu/UserMenu/types.js.map +0 -1
  891. package/config/AdminConfig/Menu/types.js.map +0 -1
  892. package/config/AdminConfig/Theme/types.js.map +0 -1
  893. package/exports/admin/build-params.js.map +0 -1
  894. package/exports/admin/configs.js.map +0 -1
  895. package/exports/admin/form.js.map +0 -1
  896. package/exports/admin/security.js.map +0 -1
  897. package/exports/admin/tenancy.js.map +0 -1
  898. package/exports/admin/ui.js.map +0 -1
  899. package/exports/admin.js.map +0 -1
  900. package/features/buildParams/index.js.map +0 -1
  901. package/features/formModel/fieldTypes/index.js.map +0 -1
  902. package/features/formModel/index.js.map +0 -1
  903. package/features/formModel/renderers.js.map +0 -1
  904. package/features/security/AuthenticationContext/index.js.map +0 -1
  905. package/features/security/AuthenticationContext/types.js.map +0 -1
  906. package/features/security/IdentityContext/index.js.map +0 -1
  907. package/features/security/LogIn/index.js.map +0 -1
  908. package/features/security/LogOut/index.js.map +0 -1
  909. package/features/telemetry/index.js.map +0 -1
  910. package/features/tenancy/types.js.map +0 -1
  911. package/features/tools/LexicalContext/index.js.map +0 -1
  912. package/features/tools/index.js.map +0 -1
  913. package/features/wcp/types.js.map +0 -1
  914. package/features/webinySdk/index.js.map +0 -1
  915. package/hooks/index.js.map +0 -1
  916. package/index.js.map +0 -1
  917. package/permissions/index.js.map +0 -1
  918. package/permissions/types.js.map +0 -1
  919. package/presentation/installation/components/SystemInstaller/index.js.map +0 -1
  920. package/presentation/installation/presenters/SystemInstaller/index.js.map +0 -1
  921. package/types.js.map +0 -1
@@ -1,256 +1,157 @@
1
- import { useMemo, useCallback } from "react";
1
+ import { useCallback, useMemo } from "react";
2
2
  function hasAction(entity, name) {
3
- return entity.actions?.some(a => a.name === name) ?? false;
3
+ return entity.actions?.some((a)=>a.name === name) ?? false;
4
4
  }
5
-
6
- /** Resolve fullAccess config into a concrete Permission object. */
7
5
  function resolveFullAccess(schema) {
8
- const name = `${schema.prefix}.*`;
9
- if (schema.fullAccess === true) {
6
+ const name = `${schema.prefix}.*`;
7
+ if (true === schema.fullAccess) return {
8
+ name
9
+ };
10
10
  return {
11
- name
11
+ name,
12
+ ...schema.fullAccess
12
13
  };
13
- }
14
- return {
15
- name,
16
- ...schema.fullAccess
17
- };
18
14
  }
19
-
20
- /** Resolve readOnlyAccess config into a concrete Permission[]. */
21
15
  function resolveReadOnlyAccess(schema) {
22
- if (!schema.readOnlyAccess) {
23
- return undefined;
24
- }
25
- if (schema.readOnlyAccess === true) {
26
- return [{
27
- name: `${schema.prefix}.*`,
28
- rwd: "r"
29
- }];
30
- }
31
- return schema.readOnlyAccess;
16
+ if (!schema.readOnlyAccess) return;
17
+ if (true === schema.readOnlyAccess) return [
18
+ {
19
+ name: `${schema.prefix}.*`,
20
+ rwd: "r"
21
+ }
22
+ ];
23
+ return schema.readOnlyAccess;
32
24
  }
33
-
34
- /**
35
- * Deserialize Permission[] into form data based on the schema.
36
- */
37
25
  function deserializePermissions(schema, value) {
38
- if (!Array.isArray(value)) {
39
- return {
40
- accessLevel: "no"
26
+ if (!Array.isArray(value)) return {
27
+ accessLevel: "no"
41
28
  };
42
- }
43
-
44
- // Check for read-only access by looking for the synthetic marker permission.
45
- if (value.some(p => p.name === `$${schema.prefix}.readonly`)) {
46
- return {
47
- accessLevel: "read-only"
29
+ if (value.some((p)=>p.name === `$${schema.prefix}.readonly`)) return {
30
+ accessLevel: "read-only"
48
31
  };
49
- }
50
-
51
- // Check for full access: either wildcard or the schema's fullAccess permission.
52
- const fullAccessName = `${schema.prefix}.*`;
53
- const hasFullAccess = value.some(p => p.name === "*" || p.name === fullAccessName);
54
- if (hasFullAccess) {
55
- return {
56
- accessLevel: "full"
32
+ const fullAccessName = `${schema.prefix}.*`;
33
+ const hasFullAccess = value.some((p)=>"*" === p.name || p.name === fullAccessName);
34
+ if (hasFullAccess) return {
35
+ accessLevel: "full"
57
36
  };
58
- }
59
-
60
- // Filter permissions that belong to this schema's prefix.
61
- const ownPermissions = value.filter(p => p.name.startsWith(schema.prefix));
62
- if (ownPermissions.length === 0) {
63
- return {
64
- accessLevel: "no"
37
+ const ownPermissions = value.filter((p)=>p.name.startsWith(schema.prefix));
38
+ if (0 === ownPermissions.length) return {
39
+ accessLevel: "no"
65
40
  };
66
- }
67
-
68
- // Custom access level — extract per-entity form fields.
69
- const data = {
70
- accessLevel: "custom"
71
- };
72
- const entities = schema.entities || [];
73
- for (const entity of entities) {
74
- const perm = ownPermissions.find(p => p.name === entity.permission);
75
- if (!perm) {
76
- continue;
77
- }
78
-
79
- // Access scope: "own" if perm.own === true, else "full".
80
- if (perm.own === true) {
81
- data[`${entity.id}AccessScope`] = "own";
82
- } else {
83
- data[`${entity.id}AccessScope`] = "full";
84
- }
85
-
86
- // Process actions.
87
- for (const action of entity.actions ?? []) {
88
- if (action.name === "rwd") {
89
- data[`${entity.id}RWD`] = perm.rwd || "r";
90
- } else if (action.name === "pw") {
91
- data[`${entity.id}PW`] = perm.pw ? perm.pw.split("") : [];
92
- } else {
93
- // Custom boolean action.
94
- data[`${entity.id}Action_${action.name}`] = perm[action.name] === true;
95
- }
41
+ const data = {
42
+ accessLevel: "custom"
43
+ };
44
+ const entities = schema.entities || [];
45
+ for (const entity of entities){
46
+ const perm = ownPermissions.find((p)=>p.name === entity.permission);
47
+ if (perm) {
48
+ if (true === perm.own) data[`${entity.id}AccessScope`] = "own";
49
+ else data[`${entity.id}AccessScope`] = "full";
50
+ for (const action of entity.actions ?? [])if ("rwd" === action.name) data[`${entity.id}RWD`] = perm.rwd || "r";
51
+ else if ("pw" === action.name) data[`${entity.id}PW`] = perm.pw ? perm.pw.split("") : [];
52
+ else data[`${entity.id}Action_${action.name}`] = true === perm[action.name];
53
+ }
96
54
  }
97
- }
98
- return data;
55
+ return data;
99
56
  }
100
-
101
- /**
102
- * Serialize form data into Permission[] based on the schema.
103
- */
104
57
  function serializePermissions(schema, formData, currentValue) {
105
- // Start by filtering out all permissions belonging to this schema's prefix.
106
- const filtered = Array.isArray(currentValue) ? currentValue.filter(p => !p.name.startsWith(schema.prefix) && !p.name.startsWith(`$${schema.prefix}`)) : [];
107
- if (formData.accessLevel === "no" || !formData.accessLevel) {
108
- return filtered;
109
- }
110
- if (formData.accessLevel === "full") {
111
- return [...filtered, resolveFullAccess(schema)];
112
- }
113
- const readOnlyPermissions = resolveReadOnlyAccess(schema);
114
- if (formData.accessLevel === "read-only" && readOnlyPermissions) {
115
- return [...filtered, {
116
- name: `$${schema.prefix}.readonly`
117
- }, ...readOnlyPermissions];
118
- }
119
- const entities = schema.entities || [];
120
-
121
- // Custom access build entity permissions.
122
- // First, build a map of entity definitions by ID for dependency lookups.
123
- const entityMap = new Map();
124
- for (const entity of entities) {
125
- entityMap.set(entity.id, entity);
126
- }
127
-
128
- // Resolve cascading "own" scopes: if a parent is "own", children must be "own" too.
129
- const resolvedScopes = new Map();
130
- for (const entity of entities) {
131
- const scope = formData[`${entity.id}AccessScope`];
132
- if (!scope || scope === "no") {
133
- continue;
134
- }
135
- let resolvedScope = scope;
136
-
137
- // If this entity depends on a parent and the parent scope is "own",
138
- // force this entity's scope to "own" as well.
139
- if (entity.dependsOn) {
140
- const parentScope = resolvedScopes.get(entity.dependsOn.entity);
141
- if (parentScope === "own") {
142
- resolvedScope = "own";
143
- }
144
- }
145
- resolvedScopes.set(entity.id, resolvedScope);
146
- }
147
-
148
- // Prune resolved scopes based on dependencies (must run before building permissions
149
- // so that transitive dependencies are properly pruned).
150
- for (const entity of entities) {
151
- if (!entity.dependsOn || !resolvedScopes.has(entity.id)) {
152
- continue;
153
- }
154
- const parentScope = resolvedScopes.get(entity.dependsOn.entity);
155
- if (!parentScope) {
156
- // Parent entity is not enabled — prune child.
157
- resolvedScopes.delete(entity.id);
158
- continue;
159
- }
160
- const parentEntity = entityMap.get(entity.dependsOn.entity);
161
- if (parentEntity && hasAction(parentEntity, "rwd")) {
162
- const parentRwd = parentScope === "own" ? "rwd" : formData[`${entity.dependsOn.entity}RWD`] || "r";
163
- if (!parentRwd.includes(entity.dependsOn.requires)) {
164
- // Parent doesn't have the required action — prune child.
165
- resolvedScopes.delete(entity.id);
166
- }
167
- }
168
- }
169
-
170
- // Build permissions from the pruned resolved scopes.
171
- const permissions = [];
172
- for (const entity of entities) {
173
- const scope = resolvedScopes.get(entity.id);
174
- if (!scope) {
175
- continue;
176
- }
177
- const perm = {
178
- name: entity.permission
179
- };
180
- if (scope === "own") {
181
- perm.own = true;
182
- if (hasAction(entity, "rwd")) {
183
- perm.rwd = "rwd";
184
- }
185
- } else if (hasAction(entity, "rwd")) {
186
- perm.rwd = formData[`${entity.id}RWD`] || "r";
58
+ const filtered = Array.isArray(currentValue) ? currentValue.filter((p)=>!p.name.startsWith(schema.prefix) && !p.name.startsWith(`$${schema.prefix}`)) : [];
59
+ if ("no" === formData.accessLevel || !formData.accessLevel) return filtered;
60
+ if ("full" === formData.accessLevel) return [
61
+ ...filtered,
62
+ resolveFullAccess(schema)
63
+ ];
64
+ const readOnlyPermissions = resolveReadOnlyAccess(schema);
65
+ if ("read-only" === formData.accessLevel && readOnlyPermissions) return [
66
+ ...filtered,
67
+ {
68
+ name: `$${schema.prefix}.readonly`
69
+ },
70
+ ...readOnlyPermissions
71
+ ];
72
+ const entities = schema.entities || [];
73
+ const entityMap = new Map();
74
+ for (const entity of entities)entityMap.set(entity.id, entity);
75
+ const resolvedScopes = new Map();
76
+ for (const entity of entities){
77
+ const scope = formData[`${entity.id}AccessScope`];
78
+ if (!scope || "no" === scope) continue;
79
+ let resolvedScope = scope;
80
+ if (entity.dependsOn) {
81
+ const parentScope = resolvedScopes.get(entity.dependsOn.entity);
82
+ if ("own" === parentScope) resolvedScope = "own";
83
+ }
84
+ resolvedScopes.set(entity.id, resolvedScope);
187
85
  }
188
-
189
- // Process non-rwd actions.
190
- for (const action of entity.actions ?? []) {
191
- if (action.name === "rwd") {
192
- continue; // Already handled above.
193
- }
194
- if (action.name === "pw") {
195
- const pw = formData[`${entity.id}PW`] || [];
196
- if (pw.length > 0) {
197
- perm.pw = pw.join("");
86
+ for (const entity of entities){
87
+ if (!entity.dependsOn || !resolvedScopes.has(entity.id)) continue;
88
+ const parentScope = resolvedScopes.get(entity.dependsOn.entity);
89
+ if (!parentScope) {
90
+ resolvedScopes.delete(entity.id);
91
+ continue;
198
92
  }
199
- } else {
200
- // Custom boolean action.
201
- if (formData[`${entity.id}Action_${action.name}`]) {
202
- perm[action.name] = true;
93
+ const parentEntity = entityMap.get(entity.dependsOn.entity);
94
+ if (parentEntity && hasAction(parentEntity, "rwd")) {
95
+ const parentRwd = "own" === parentScope ? "rwd" : formData[`${entity.dependsOn.entity}RWD`] || "r";
96
+ if (!parentRwd.includes(entity.dependsOn.requires)) resolvedScopes.delete(entity.id);
203
97
  }
204
- }
205
- }
206
- permissions.push(perm);
207
- }
208
- return [...filtered, ...permissions];
209
- }
210
-
211
- /**
212
- * Hook that bridges a permission schema with a Form component.
213
- *
214
- * Handles bidirectional transformation between Permission[] and form data,
215
- * with optional custom serialize/deserialize callbacks for app-specific needs.
216
- */
217
- export function usePermissionForm(schema, options) {
218
- const {
219
- value,
220
- onChange
221
- } = options;
222
- const formData = useMemo(() => {
223
- let data = deserializePermissions(schema, value);
224
-
225
- // Merge custom deserialized data if provided.
226
- if (options.deserialize) {
227
- const extra = options.deserialize(Array.isArray(value) ? value : []);
228
- data = {
229
- ...data,
230
- ...extra
231
- };
232
98
  }
233
- return data;
234
- }, []);
235
- const onFormChange = useCallback(data => {
236
- let result = serializePermissions(schema, data, value);
237
-
238
- // Apply custom serializer if provided.
239
- if (options.serialize) {
240
- result = options.serialize(data, result.filter(p => p.name.startsWith(schema.prefix)));
241
- // Re-add non-schema permissions that were filtered out.
242
- const nonSchemaPermissions = Array.isArray(value) ? value.filter(p => !p.name.startsWith(schema.prefix) && !p.name.startsWith(`$${schema.prefix}`)) : [];
243
- result = [...nonSchemaPermissions, ...result];
99
+ const permissions = [];
100
+ for (const entity of entities){
101
+ const scope = resolvedScopes.get(entity.id);
102
+ if (!scope) continue;
103
+ const perm = {
104
+ name: entity.permission
105
+ };
106
+ if ("own" === scope) {
107
+ perm.own = true;
108
+ if (hasAction(entity, "rwd")) perm.rwd = "rwd";
109
+ } else if (hasAction(entity, "rwd")) perm.rwd = formData[`${entity.id}RWD`] || "r";
110
+ for (const action of entity.actions ?? [])if ("rwd" !== action.name) {
111
+ if ("pw" === action.name) {
112
+ const pw = formData[`${entity.id}PW`] || [];
113
+ if (pw.length > 0) perm.pw = pw.join("");
114
+ } else if (formData[`${entity.id}Action_${action.name}`]) perm[action.name] = true;
115
+ }
116
+ permissions.push(perm);
244
117
  }
245
- onChange(result);
246
- }, [value]);
247
- return {
248
- formData,
249
- onFormChange
250
- };
118
+ return [
119
+ ...filtered,
120
+ ...permissions
121
+ ];
251
122
  }
252
-
253
- // Export the pure functions for unit testing.
254
- export { deserializePermissions, serializePermissions };
123
+ function usePermissionForm(schema, options) {
124
+ const { value, onChange } = options;
125
+ const formData = useMemo(()=>{
126
+ let data = deserializePermissions(schema, value);
127
+ if (options.deserialize) {
128
+ const extra = options.deserialize(Array.isArray(value) ? value : []);
129
+ data = {
130
+ ...data,
131
+ ...extra
132
+ };
133
+ }
134
+ return data;
135
+ }, []);
136
+ const onFormChange = useCallback((data)=>{
137
+ let result = serializePermissions(schema, data, value);
138
+ if (options.serialize) {
139
+ result = options.serialize(data, result.filter((p)=>p.name.startsWith(schema.prefix)));
140
+ const nonSchemaPermissions = Array.isArray(value) ? value.filter((p)=>!p.name.startsWith(schema.prefix) && !p.name.startsWith(`$${schema.prefix}`)) : [];
141
+ result = [
142
+ ...nonSchemaPermissions,
143
+ ...result
144
+ ];
145
+ }
146
+ onChange(result);
147
+ }, [
148
+ value
149
+ ]);
150
+ return {
151
+ formData,
152
+ onFormChange
153
+ };
154
+ }
155
+ export { deserializePermissions, serializePermissions, usePermissionForm };
255
156
 
256
157
  //# sourceMappingURL=usePermissionForm.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","useCallback","hasAction","entity","name","actions","some","a","resolveFullAccess","schema","prefix","fullAccess","resolveReadOnlyAccess","readOnlyAccess","undefined","rwd","deserializePermissions","value","Array","isArray","accessLevel","p","fullAccessName","hasFullAccess","ownPermissions","filter","startsWith","length","data","entities","perm","find","permission","own","id","action","pw","split","serializePermissions","formData","currentValue","filtered","readOnlyPermissions","entityMap","Map","set","resolvedScopes","scope","resolvedScope","dependsOn","parentScope","get","has","delete","parentEntity","parentRwd","includes","requires","permissions","join","push","usePermissionForm","options","onChange","deserialize","extra","onFormChange","result","serialize","nonSchemaPermissions"],"sources":["usePermissionForm.ts"],"sourcesContent":["import { useMemo, useCallback } from \"react\";\nimport type {\n Permission,\n PermissionSchema,\n EntityDefinition,\n UsePermissionFormOptions,\n UsePermissionFormResult\n} from \"./types.js\";\n\nfunction hasAction(entity: EntityDefinition, name: string): boolean {\n return entity.actions?.some(a => a.name === name) ?? false;\n}\n\n/** Resolve fullAccess config into a concrete Permission object. */\nfunction resolveFullAccess(schema: PermissionSchema): Permission {\n const name = `${schema.prefix}.*`;\n if (schema.fullAccess === true) {\n return { name };\n }\n return { name, ...schema.fullAccess };\n}\n\n/** Resolve readOnlyAccess config into a concrete Permission[]. */\nfunction resolveReadOnlyAccess(schema: PermissionSchema): Permission[] | undefined {\n if (!schema.readOnlyAccess) {\n return undefined;\n }\n if (schema.readOnlyAccess === true) {\n return [{ name: `${schema.prefix}.*`, rwd: \"r\" }];\n }\n return schema.readOnlyAccess;\n}\n\n/**\n * Deserialize Permission[] into form data based on the schema.\n */\nfunction deserializePermissions(\n schema: PermissionSchema,\n value: Permission[]\n): Record<string, any> {\n if (!Array.isArray(value)) {\n return { accessLevel: \"no\" };\n }\n\n // Check for read-only access by looking for the synthetic marker permission.\n if (value.some(p => p.name === `$${schema.prefix}.readonly`)) {\n return { accessLevel: \"read-only\" };\n }\n\n // Check for full access: either wildcard or the schema's fullAccess permission.\n const fullAccessName = `${schema.prefix}.*`;\n const hasFullAccess = value.some(p => p.name === \"*\" || p.name === fullAccessName);\n if (hasFullAccess) {\n return { accessLevel: \"full\" };\n }\n\n // Filter permissions that belong to this schema's prefix.\n const ownPermissions = value.filter(p => p.name.startsWith(schema.prefix));\n if (ownPermissions.length === 0) {\n return { accessLevel: \"no\" };\n }\n\n // Custom access level — extract per-entity form fields.\n const data: Record<string, any> = { accessLevel: \"custom\" };\n const entities = schema.entities || [];\n\n for (const entity of entities) {\n const perm = ownPermissions.find(p => p.name === entity.permission);\n if (!perm) {\n continue;\n }\n\n // Access scope: \"own\" if perm.own === true, else \"full\".\n if (perm.own === true) {\n data[`${entity.id}AccessScope`] = \"own\";\n } else {\n data[`${entity.id}AccessScope`] = \"full\";\n }\n\n // Process actions.\n for (const action of entity.actions ?? []) {\n if (action.name === \"rwd\") {\n data[`${entity.id}RWD`] = perm.rwd || \"r\";\n } else if (action.name === \"pw\") {\n data[`${entity.id}PW`] = perm.pw ? perm.pw.split(\"\") : [];\n } else {\n // Custom boolean action.\n data[`${entity.id}Action_${action.name}`] = perm[action.name] === true;\n }\n }\n }\n\n return data;\n}\n\n/**\n * Serialize form data into Permission[] based on the schema.\n */\nfunction serializePermissions(\n schema: PermissionSchema,\n formData: Record<string, any>,\n currentValue: Permission[]\n): Permission[] {\n // Start by filtering out all permissions belonging to this schema's prefix.\n const filtered = Array.isArray(currentValue)\n ? currentValue.filter(\n p => !p.name.startsWith(schema.prefix) && !p.name.startsWith(`$${schema.prefix}`)\n )\n : [];\n\n if (formData.accessLevel === \"no\" || !formData.accessLevel) {\n return filtered;\n }\n\n if (formData.accessLevel === \"full\") {\n return [...filtered, resolveFullAccess(schema)];\n }\n\n const readOnlyPermissions = resolveReadOnlyAccess(schema);\n if (formData.accessLevel === \"read-only\" && readOnlyPermissions) {\n return [...filtered, { name: `$${schema.prefix}.readonly` }, ...readOnlyPermissions];\n }\n\n const entities = schema.entities || [];\n\n // Custom access — build entity permissions.\n // First, build a map of entity definitions by ID for dependency lookups.\n const entityMap = new Map<string, EntityDefinition>();\n for (const entity of entities) {\n entityMap.set(entity.id, entity);\n }\n\n // Resolve cascading \"own\" scopes: if a parent is \"own\", children must be \"own\" too.\n const resolvedScopes = new Map<string, string>();\n for (const entity of entities) {\n const scope = formData[`${entity.id}AccessScope`];\n if (!scope || scope === \"no\") {\n continue;\n }\n\n let resolvedScope = scope;\n\n // If this entity depends on a parent and the parent scope is \"own\",\n // force this entity's scope to \"own\" as well.\n if (entity.dependsOn) {\n const parentScope = resolvedScopes.get(entity.dependsOn.entity);\n if (parentScope === \"own\") {\n resolvedScope = \"own\";\n }\n }\n\n resolvedScopes.set(entity.id, resolvedScope);\n }\n\n // Prune resolved scopes based on dependencies (must run before building permissions\n // so that transitive dependencies are properly pruned).\n for (const entity of entities) {\n if (!entity.dependsOn || !resolvedScopes.has(entity.id)) {\n continue;\n }\n\n const parentScope = resolvedScopes.get(entity.dependsOn.entity);\n if (!parentScope) {\n // Parent entity is not enabled — prune child.\n resolvedScopes.delete(entity.id);\n continue;\n }\n\n const parentEntity = entityMap.get(entity.dependsOn.entity);\n if (parentEntity && hasAction(parentEntity, \"rwd\")) {\n const parentRwd =\n parentScope === \"own\" ? \"rwd\" : formData[`${entity.dependsOn.entity}RWD`] || \"r\";\n if (!parentRwd.includes(entity.dependsOn.requires)) {\n // Parent doesn't have the required action — prune child.\n resolvedScopes.delete(entity.id);\n }\n }\n }\n\n // Build permissions from the pruned resolved scopes.\n const permissions: Permission[] = [];\n\n for (const entity of entities) {\n const scope = resolvedScopes.get(entity.id);\n if (!scope) {\n continue;\n }\n\n const perm: Permission = {\n name: entity.permission\n };\n\n if (scope === \"own\") {\n perm.own = true;\n if (hasAction(entity, \"rwd\")) {\n perm.rwd = \"rwd\";\n }\n } else if (hasAction(entity, \"rwd\")) {\n perm.rwd = formData[`${entity.id}RWD`] || \"r\";\n }\n\n // Process non-rwd actions.\n for (const action of entity.actions ?? []) {\n if (action.name === \"rwd\") {\n continue; // Already handled above.\n }\n\n if (action.name === \"pw\") {\n const pw: string[] = formData[`${entity.id}PW`] || [];\n if (pw.length > 0) {\n perm.pw = pw.join(\"\");\n }\n } else {\n // Custom boolean action.\n if (formData[`${entity.id}Action_${action.name}`]) {\n perm[action.name] = true;\n }\n }\n }\n\n permissions.push(perm);\n }\n\n return [...filtered, ...permissions];\n}\n\n/**\n * Hook that bridges a permission schema with a Form component.\n *\n * Handles bidirectional transformation between Permission[] and form data,\n * with optional custom serialize/deserialize callbacks for app-specific needs.\n */\nexport function usePermissionForm(\n schema: PermissionSchema,\n options: UsePermissionFormOptions\n): UsePermissionFormResult {\n const { value, onChange } = options;\n\n const formData = useMemo(() => {\n let data = deserializePermissions(schema, value);\n\n // Merge custom deserialized data if provided.\n if (options.deserialize) {\n const extra = options.deserialize(Array.isArray(value) ? value : []);\n data = { ...data, ...extra };\n }\n\n return data;\n }, []);\n\n const onFormChange = useCallback(\n (data: Record<string, any>) => {\n let result = serializePermissions(schema, data, value);\n\n // Apply custom serializer if provided.\n if (options.serialize) {\n result = options.serialize(\n data,\n result.filter(p => p.name.startsWith(schema.prefix))\n );\n // Re-add non-schema permissions that were filtered out.\n const nonSchemaPermissions = Array.isArray(value)\n ? value.filter(\n p =>\n !p.name.startsWith(schema.prefix) &&\n !p.name.startsWith(`$${schema.prefix}`)\n )\n : [];\n result = [...nonSchemaPermissions, ...result];\n }\n\n onChange(result);\n },\n [value]\n );\n\n return { formData, onFormChange };\n}\n\n// Export the pure functions for unit testing.\nexport { deserializePermissions, serializePermissions };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"permissions/usePermissionForm.js","sources":["../../src/permissions/usePermissionForm.ts"],"sourcesContent":["import { useMemo, useCallback } from \"react\";\nimport type {\n Permission,\n PermissionSchema,\n EntityDefinition,\n UsePermissionFormOptions,\n UsePermissionFormResult\n} from \"./types.js\";\n\nfunction hasAction(entity: EntityDefinition, name: string): boolean {\n return entity.actions?.some(a => a.name === name) ?? false;\n}\n\n/** Resolve fullAccess config into a concrete Permission object. */\nfunction resolveFullAccess(schema: PermissionSchema): Permission {\n const name = `${schema.prefix}.*`;\n if (schema.fullAccess === true) {\n return { name };\n }\n return { name, ...schema.fullAccess };\n}\n\n/** Resolve readOnlyAccess config into a concrete Permission[]. */\nfunction resolveReadOnlyAccess(schema: PermissionSchema): Permission[] | undefined {\n if (!schema.readOnlyAccess) {\n return undefined;\n }\n if (schema.readOnlyAccess === true) {\n return [{ name: `${schema.prefix}.*`, rwd: \"r\" }];\n }\n return schema.readOnlyAccess;\n}\n\n/**\n * Deserialize Permission[] into form data based on the schema.\n */\nfunction deserializePermissions(\n schema: PermissionSchema,\n value: Permission[]\n): Record<string, any> {\n if (!Array.isArray(value)) {\n return { accessLevel: \"no\" };\n }\n\n // Check for read-only access by looking for the synthetic marker permission.\n if (value.some(p => p.name === `$${schema.prefix}.readonly`)) {\n return { accessLevel: \"read-only\" };\n }\n\n // Check for full access: either wildcard or the schema's fullAccess permission.\n const fullAccessName = `${schema.prefix}.*`;\n const hasFullAccess = value.some(p => p.name === \"*\" || p.name === fullAccessName);\n if (hasFullAccess) {\n return { accessLevel: \"full\" };\n }\n\n // Filter permissions that belong to this schema's prefix.\n const ownPermissions = value.filter(p => p.name.startsWith(schema.prefix));\n if (ownPermissions.length === 0) {\n return { accessLevel: \"no\" };\n }\n\n // Custom access level — extract per-entity form fields.\n const data: Record<string, any> = { accessLevel: \"custom\" };\n const entities = schema.entities || [];\n\n for (const entity of entities) {\n const perm = ownPermissions.find(p => p.name === entity.permission);\n if (!perm) {\n continue;\n }\n\n // Access scope: \"own\" if perm.own === true, else \"full\".\n if (perm.own === true) {\n data[`${entity.id}AccessScope`] = \"own\";\n } else {\n data[`${entity.id}AccessScope`] = \"full\";\n }\n\n // Process actions.\n for (const action of entity.actions ?? []) {\n if (action.name === \"rwd\") {\n data[`${entity.id}RWD`] = perm.rwd || \"r\";\n } else if (action.name === \"pw\") {\n data[`${entity.id}PW`] = perm.pw ? perm.pw.split(\"\") : [];\n } else {\n // Custom boolean action.\n data[`${entity.id}Action_${action.name}`] = perm[action.name] === true;\n }\n }\n }\n\n return data;\n}\n\n/**\n * Serialize form data into Permission[] based on the schema.\n */\nfunction serializePermissions(\n schema: PermissionSchema,\n formData: Record<string, any>,\n currentValue: Permission[]\n): Permission[] {\n // Start by filtering out all permissions belonging to this schema's prefix.\n const filtered = Array.isArray(currentValue)\n ? currentValue.filter(\n p => !p.name.startsWith(schema.prefix) && !p.name.startsWith(`$${schema.prefix}`)\n )\n : [];\n\n if (formData.accessLevel === \"no\" || !formData.accessLevel) {\n return filtered;\n }\n\n if (formData.accessLevel === \"full\") {\n return [...filtered, resolveFullAccess(schema)];\n }\n\n const readOnlyPermissions = resolveReadOnlyAccess(schema);\n if (formData.accessLevel === \"read-only\" && readOnlyPermissions) {\n return [...filtered, { name: `$${schema.prefix}.readonly` }, ...readOnlyPermissions];\n }\n\n const entities = schema.entities || [];\n\n // Custom access — build entity permissions.\n // First, build a map of entity definitions by ID for dependency lookups.\n const entityMap = new Map<string, EntityDefinition>();\n for (const entity of entities) {\n entityMap.set(entity.id, entity);\n }\n\n // Resolve cascading \"own\" scopes: if a parent is \"own\", children must be \"own\" too.\n const resolvedScopes = new Map<string, string>();\n for (const entity of entities) {\n const scope = formData[`${entity.id}AccessScope`];\n if (!scope || scope === \"no\") {\n continue;\n }\n\n let resolvedScope = scope;\n\n // If this entity depends on a parent and the parent scope is \"own\",\n // force this entity's scope to \"own\" as well.\n if (entity.dependsOn) {\n const parentScope = resolvedScopes.get(entity.dependsOn.entity);\n if (parentScope === \"own\") {\n resolvedScope = \"own\";\n }\n }\n\n resolvedScopes.set(entity.id, resolvedScope);\n }\n\n // Prune resolved scopes based on dependencies (must run before building permissions\n // so that transitive dependencies are properly pruned).\n for (const entity of entities) {\n if (!entity.dependsOn || !resolvedScopes.has(entity.id)) {\n continue;\n }\n\n const parentScope = resolvedScopes.get(entity.dependsOn.entity);\n if (!parentScope) {\n // Parent entity is not enabled — prune child.\n resolvedScopes.delete(entity.id);\n continue;\n }\n\n const parentEntity = entityMap.get(entity.dependsOn.entity);\n if (parentEntity && hasAction(parentEntity, \"rwd\")) {\n const parentRwd =\n parentScope === \"own\" ? \"rwd\" : formData[`${entity.dependsOn.entity}RWD`] || \"r\";\n if (!parentRwd.includes(entity.dependsOn.requires)) {\n // Parent doesn't have the required action — prune child.\n resolvedScopes.delete(entity.id);\n }\n }\n }\n\n // Build permissions from the pruned resolved scopes.\n const permissions: Permission[] = [];\n\n for (const entity of entities) {\n const scope = resolvedScopes.get(entity.id);\n if (!scope) {\n continue;\n }\n\n const perm: Permission = {\n name: entity.permission\n };\n\n if (scope === \"own\") {\n perm.own = true;\n if (hasAction(entity, \"rwd\")) {\n perm.rwd = \"rwd\";\n }\n } else if (hasAction(entity, \"rwd\")) {\n perm.rwd = formData[`${entity.id}RWD`] || \"r\";\n }\n\n // Process non-rwd actions.\n for (const action of entity.actions ?? []) {\n if (action.name === \"rwd\") {\n continue; // Already handled above.\n }\n\n if (action.name === \"pw\") {\n const pw: string[] = formData[`${entity.id}PW`] || [];\n if (pw.length > 0) {\n perm.pw = pw.join(\"\");\n }\n } else {\n // Custom boolean action.\n if (formData[`${entity.id}Action_${action.name}`]) {\n perm[action.name] = true;\n }\n }\n }\n\n permissions.push(perm);\n }\n\n return [...filtered, ...permissions];\n}\n\n/**\n * Hook that bridges a permission schema with a Form component.\n *\n * Handles bidirectional transformation between Permission[] and form data,\n * with optional custom serialize/deserialize callbacks for app-specific needs.\n */\nexport function usePermissionForm(\n schema: PermissionSchema,\n options: UsePermissionFormOptions\n): UsePermissionFormResult {\n const { value, onChange } = options;\n\n const formData = useMemo(() => {\n let data = deserializePermissions(schema, value);\n\n // Merge custom deserialized data if provided.\n if (options.deserialize) {\n const extra = options.deserialize(Array.isArray(value) ? value : []);\n data = { ...data, ...extra };\n }\n\n return data;\n }, []);\n\n const onFormChange = useCallback(\n (data: Record<string, any>) => {\n let result = serializePermissions(schema, data, value);\n\n // Apply custom serializer if provided.\n if (options.serialize) {\n result = options.serialize(\n data,\n result.filter(p => p.name.startsWith(schema.prefix))\n );\n // Re-add non-schema permissions that were filtered out.\n const nonSchemaPermissions = Array.isArray(value)\n ? value.filter(\n p =>\n !p.name.startsWith(schema.prefix) &&\n !p.name.startsWith(`$${schema.prefix}`)\n )\n : [];\n result = [...nonSchemaPermissions, ...result];\n }\n\n onChange(result);\n },\n [value]\n );\n\n return { formData, onFormChange };\n}\n\n// Export the pure functions for unit testing.\nexport { deserializePermissions, serializePermissions };\n"],"names":["hasAction","entity","name","a","resolveFullAccess","schema","resolveReadOnlyAccess","deserializePermissions","value","Array","p","fullAccessName","hasFullAccess","ownPermissions","data","entities","perm","action","serializePermissions","formData","currentValue","filtered","readOnlyPermissions","entityMap","Map","resolvedScopes","scope","resolvedScope","parentScope","parentEntity","parentRwd","permissions","pw","usePermissionForm","options","onChange","useMemo","extra","onFormChange","useCallback","result","nonSchemaPermissions"],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import { useContainer } from "@webiny/app";
2
- export function createUsePermissions(abstraction) {
3
- return function usePermissions() {
4
- const container = useContainer();
5
- return container.resolve(abstraction);
6
- };
2
+ function createUsePermissions(abstraction) {
3
+ return function() {
4
+ const container = useContainer();
5
+ return container.resolve(abstraction);
6
+ };
7
7
  }
8
+ export { createUsePermissions };
8
9
 
9
10
  //# sourceMappingURL=usePermissions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useContainer","createUsePermissions","abstraction","usePermissions","container","resolve"],"sources":["usePermissions.ts"],"sourcesContent":["import { useContainer } from \"@webiny/app\";\nimport type { Abstraction } from \"@webiny/di\";\nimport type { PermissionSchemaConfig } from \"./types.js\";\nimport type { UsePermissionsResult } from \"./types.js\";\n\nexport function createUsePermissions<const S extends PermissionSchemaConfig>(\n abstraction: Abstraction<UsePermissionsResult<S>>\n): () => UsePermissionsResult<S> {\n return function usePermissions(): UsePermissionsResult<S> {\n const container = useContainer();\n return container.resolve(abstraction);\n };\n}\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,aAAa;AAK1C,OAAO,SAASC,oBAAoBA,CAChCC,WAAiD,EACpB;EAC7B,OAAO,SAASC,cAAcA,CAAA,EAA4B;IACtD,MAAMC,SAAS,GAAGJ,YAAY,CAAC,CAAC;IAChC,OAAOI,SAAS,CAACC,OAAO,CAACH,WAAW,CAAC;EACzC,CAAC;AACL","ignoreList":[]}
1
+ {"version":3,"file":"permissions/usePermissions.js","sources":["../../src/permissions/usePermissions.ts"],"sourcesContent":["import { useContainer } from \"@webiny/app\";\nimport type { Abstraction } from \"@webiny/di\";\nimport type { PermissionSchemaConfig } from \"./types.js\";\nimport type { UsePermissionsResult } from \"./types.js\";\n\nexport function createUsePermissions<const S extends PermissionSchemaConfig>(\n abstraction: Abstraction<UsePermissionsResult<S>>\n): () => UsePermissionsResult<S> {\n return function usePermissions(): UsePermissionsResult<S> {\n const container = useContainer();\n return container.resolve(abstraction);\n };\n}\n"],"names":["createUsePermissions","abstraction","container","useContainer"],"mappings":";AAKO,SAASA,qBACZC,WAAiD;IAEjD,OAAO;QACH,MAAMC,YAAYC;QAClB,OAAOD,UAAU,OAAO,CAACD;IAC7B;AACJ"}
@@ -1,19 +1,20 @@
1
1
  import { Plugin } from "@webiny/plugins";
2
- export class MenuPlugin extends Plugin {
3
- static type = "admin-menu";
4
- constructor(config) {
5
- super();
6
- this._config = config || {};
7
- }
8
- get order() {
9
- return this._config.order;
10
- }
11
- render(props) {
12
- if (!this._config.render) {
13
- return null;
2
+ class MenuPlugin extends Plugin {
3
+ static{
4
+ this.type = "admin-menu";
5
+ }
6
+ constructor(config){
7
+ super();
8
+ this._config = config || {};
9
+ }
10
+ get order() {
11
+ return this._config.order;
12
+ }
13
+ render(props) {
14
+ if (!this._config.render) return null;
15
+ return this._config.render(props);
14
16
  }
15
- return this._config.render(props);
16
- }
17
17
  }
18
+ export { MenuPlugin };
18
19
 
19
20
  //# sourceMappingURL=MenuPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Plugin","MenuPlugin","type","constructor","config","_config","order","render","props"],"sources":["MenuPlugin.ts"],"sourcesContent":["import type * as React from \"react\";\nimport { Plugin } from \"@webiny/plugins\";\n\nexport interface MenuProps {\n name: string;\n label: React.ReactNode;\n icon: React.ReactElement;\n children: React.ReactNode;\n onClick?: (toggleSection: () => void) => void;\n}\n\nexport interface SectionProps {\n label: React.ReactNode;\n children: React.ReactNode;\n icon?: React.ReactElement;\n}\n\nexport interface ItemProps {\n label: React.ReactNode;\n path: string;\n style?: React.CSSProperties;\n onClick?: () => any;\n}\n\ninterface Props {\n Menu: React.ComponentType<MenuProps>;\n Section: React.ComponentType<SectionProps>;\n Item: React.ComponentType<ItemProps>;\n}\n\ninterface Config {\n render(props: Props): React.ReactNode;\n order?: number;\n}\n\nexport class MenuPlugin extends Plugin {\n public static override readonly type: string = \"admin-menu\";\n private readonly _config: Partial<Config>;\n\n public constructor(config?: Config) {\n super();\n this._config = config || {};\n }\n\n get order() {\n return this._config.order;\n }\n\n public render(props: Props): React.ReactNode {\n if (!this._config.render) {\n return null;\n }\n return this._config.render(props);\n }\n}\n"],"mappings":"AACA,SAASA,MAAM,QAAQ,iBAAiB;AAkCxC,OAAO,MAAMC,UAAU,SAASD,MAAM,CAAC;EACnC,OAAgCE,IAAI,GAAW,YAAY;EAGpDC,WAAWA,CAACC,MAAe,EAAE;IAChC,KAAK,CAAC,CAAC;IACP,IAAI,CAACC,OAAO,GAAGD,MAAM,IAAI,CAAC,CAAC;EAC/B;EAEA,IAAIE,KAAKA,CAAA,EAAG;IACR,OAAO,IAAI,CAACD,OAAO,CAACC,KAAK;EAC7B;EAEOC,MAAMA,CAACC,KAAY,EAAmB;IACzC,IAAI,CAAC,IAAI,CAACH,OAAO,CAACE,MAAM,EAAE;MACtB,OAAO,IAAI;IACf;IACA,OAAO,IAAI,CAACF,OAAO,CAACE,MAAM,CAACC,KAAK,CAAC;EACrC;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"plugins/MenuPlugin.js","sources":["../../src/plugins/MenuPlugin.ts"],"sourcesContent":["import type * as React from \"react\";\nimport { Plugin } from \"@webiny/plugins\";\n\nexport interface MenuProps {\n name: string;\n label: React.ReactNode;\n icon: React.ReactElement;\n children: React.ReactNode;\n onClick?: (toggleSection: () => void) => void;\n}\n\nexport interface SectionProps {\n label: React.ReactNode;\n children: React.ReactNode;\n icon?: React.ReactElement;\n}\n\nexport interface ItemProps {\n label: React.ReactNode;\n path: string;\n style?: React.CSSProperties;\n onClick?: () => any;\n}\n\ninterface Props {\n Menu: React.ComponentType<MenuProps>;\n Section: React.ComponentType<SectionProps>;\n Item: React.ComponentType<ItemProps>;\n}\n\ninterface Config {\n render(props: Props): React.ReactNode;\n order?: number;\n}\n\nexport class MenuPlugin extends Plugin {\n public static override readonly type: string = \"admin-menu\";\n private readonly _config: Partial<Config>;\n\n public constructor(config?: Config) {\n super();\n this._config = config || {};\n }\n\n get order() {\n return this._config.order;\n }\n\n public render(props: Props): React.ReactNode {\n if (!this._config.render) {\n return null;\n }\n return this._config.render(props);\n }\n}\n"],"names":["MenuPlugin","Plugin","config","props"],"mappings":";AAmCO,MAAMA,mBAAmBC;;aACI,IAAI,GAAW;;IAG/C,YAAmBC,MAAe,CAAE;QAChC,KAAK;QACL,IAAI,CAAC,OAAO,GAAGA,UAAU,CAAC;IAC9B;IAEA,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;IAC7B;IAEO,OAAOC,KAAY,EAAmB;QACzC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EACpB,OAAO;QAEX,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAACA;IAC/B;AACJ"}
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import type { BrowserFilePickerProps } from "./types.js";
3
+ export declare function BrowserFilePicker({ accept, multiple, maxSize, multipleMaxSize, multipleMaxCount, convertToBase64, onSuccess, onError, children, id: externalId }: BrowserFilePickerProps): React.JSX.Element;
@@ -0,0 +1,88 @@
1
+ import react, { useCallback, useId, useMemo, useRef } from "react";
2
+ import { BrowserFilePickerPresenter } from "./BrowserFilePickerPresenter.js";
3
+ function BrowserFilePicker({ accept = [], multiple = false, maxSize = "2mb", multipleMaxSize = "10mb", multipleMaxCount = null, convertToBase64 = false, onSuccess, onError, children, id: externalId }) {
4
+ const generatedId = useId();
5
+ const inputId = externalId ?? generatedId;
6
+ const inputRef = useRef(null);
7
+ const browseCallbacksRef = useRef(null);
8
+ const presenter = useMemo(()=>new BrowserFilePickerPresenter({
9
+ accept,
10
+ multiple,
11
+ maxSize,
12
+ multipleMaxSize,
13
+ multipleMaxCount,
14
+ convertToBase64
15
+ }), [
16
+ accept,
17
+ multiple,
18
+ maxSize,
19
+ multipleMaxSize,
20
+ multipleMaxCount,
21
+ convertToBase64
22
+ ]);
23
+ const resolveCallbacks = useCallback(()=>{
24
+ const overrides = browseCallbacksRef.current;
25
+ return {
26
+ onSuccess: overrides?.onSuccess ?? onSuccess,
27
+ onError: overrides?.onError ?? onError
28
+ };
29
+ }, [
30
+ onSuccess,
31
+ onError
32
+ ]);
33
+ const handleFiles = useCallback(async (files)=>{
34
+ await presenter.processFiles(files, resolveCallbacks());
35
+ if (inputRef.current) inputRef.current.value = "";
36
+ browseCallbacksRef.current = null;
37
+ }, [
38
+ presenter,
39
+ resolveCallbacks
40
+ ]);
41
+ const renderProps = useMemo(()=>({
42
+ browseFiles: (params)=>{
43
+ browseCallbacksRef.current = params ?? null;
44
+ inputRef.current?.click();
45
+ },
46
+ getDropZoneProps: (additionalProps = {})=>{
47
+ const { onDragOver, onDrop, ...rest } = additionalProps;
48
+ return {
49
+ ...rest,
50
+ onDragOver: (e)=>{
51
+ e.preventDefault();
52
+ "function" == typeof onDragOver && onDragOver(e);
53
+ },
54
+ onDrop: async (e)=>{
55
+ e.preventDefault();
56
+ "function" == typeof onDrop && onDrop(e);
57
+ if (e.dataTransfer?.files) await handleFiles(Array.from(e.dataTransfer.files));
58
+ }
59
+ };
60
+ },
61
+ getLabelProps: (additionalProps = {})=>({
62
+ ...additionalProps,
63
+ htmlFor: inputId
64
+ }),
65
+ validateFiles: (files)=>presenter.validateFiles(files)
66
+ }), [
67
+ inputId,
68
+ presenter,
69
+ handleFiles
70
+ ]);
71
+ return /*#__PURE__*/ react.createElement(react.Fragment, null, children(renderProps), /*#__PURE__*/ react.createElement("input", {
72
+ id: inputId,
73
+ ref: inputRef,
74
+ accept: accept.join(","),
75
+ style: {
76
+ display: "none"
77
+ },
78
+ type: "file",
79
+ multiple: multiple,
80
+ onChange: (e)=>{
81
+ const files = e.target.files;
82
+ if (files) handleFiles(Array.from(files));
83
+ }
84
+ }));
85
+ }
86
+ export { BrowserFilePicker };
87
+
88
+ //# sourceMappingURL=BrowserFilePicker.js.map