@firecms/core 3.0.0-canary.26 → 3.0.0-canary.260

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 (405) hide show
  1. package/README.md +3 -3
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +16 -0
  4. package/dist/app/Scaffold.d.ts +34 -0
  5. package/dist/app/index.d.ts +4 -0
  6. package/dist/app/useApp.d.ts +16 -0
  7. package/dist/components/ArrayContainer.d.ts +31 -12
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +14 -13
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  15. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  16. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  17. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  18. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  19. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  20. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
  21. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +20 -2
  22. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  23. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  24. package/dist/components/EntityJsonPreview.d.ts +3 -0
  25. package/dist/components/EntityPreview.d.ts +8 -5
  26. package/dist/components/ErrorView.d.ts +1 -1
  27. package/dist/components/HomePage/DefaultHomePage.d.ts +2 -15
  28. package/dist/components/HomePage/HomePageDnD.d.ts +76 -0
  29. package/dist/components/HomePage/NavigationCard.d.ts +3 -1
  30. package/dist/components/HomePage/NavigationCardBinding.d.ts +4 -3
  31. package/dist/components/HomePage/NavigationGroup.d.ts +7 -1
  32. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  33. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  34. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  35. package/dist/components/ReferenceWidget.d.ts +3 -1
  36. package/dist/components/SelectableTable/SelectableTable.d.ts +14 -4
  37. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  38. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  39. package/dist/components/VirtualTable/VirtualTableProps.d.ts +24 -12
  40. package/dist/components/VirtualTable/types.d.ts +3 -3
  41. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
  42. package/dist/components/common/index.d.ts +2 -1
  43. package/dist/components/common/table_height.d.ts +5 -0
  44. package/dist/components/common/types.d.ts +4 -6
  45. package/dist/components/common/useColumnsIds.d.ts +3 -1
  46. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
  47. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  48. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  49. package/dist/components/index.d.ts +5 -2
  50. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  51. package/dist/core/DefaultAppBar.d.ts +29 -0
  52. package/dist/core/DefaultDrawer.d.ts +19 -0
  53. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  54. package/dist/core/EntityEditView.d.ts +43 -11
  55. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  56. package/dist/core/FireCMS.d.ts +3 -3
  57. package/dist/core/FireCMSRouter.d.ts +4 -0
  58. package/dist/core/NavigationRoutes.d.ts +2 -3
  59. package/dist/core/SideDialogs.d.ts +4 -2
  60. package/dist/core/field_configs.d.ts +1 -1
  61. package/dist/core/index.d.ts +4 -4
  62. package/dist/form/EntityForm.d.ts +37 -64
  63. package/dist/form/EntityFormActions.d.ts +21 -0
  64. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  65. package/dist/form/components/ErrorFocus.d.ts +1 -1
  66. package/dist/form/components/FieldHelperText.d.ts +3 -3
  67. package/dist/form/components/FormEntry.d.ts +6 -0
  68. package/dist/form/components/FormLayout.d.ts +5 -0
  69. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  70. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  71. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  72. package/dist/form/components/index.d.ts +3 -1
  73. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  74. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  75. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  76. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  77. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  78. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  79. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  80. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  81. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  82. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  83. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  84. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  85. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +5 -13
  86. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  87. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  88. package/dist/form/index.d.ts +17 -18
  89. package/dist/form/useClearRestoreValue.d.ts +2 -2
  90. package/dist/hooks/data/delete.d.ts +4 -4
  91. package/dist/hooks/data/save.d.ts +4 -5
  92. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  93. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  94. package/dist/hooks/index.d.ts +1 -0
  95. package/dist/hooks/useAuthController.d.ts +1 -1
  96. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  97. package/dist/hooks/useBuildNavigationController.d.ts +57 -13
  98. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  99. package/dist/hooks/useModeController.d.ts +1 -2
  100. package/dist/hooks/useProjectLog.d.ts +8 -2
  101. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  102. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  103. package/dist/index.d.ts +1 -0
  104. package/dist/index.es.js +23088 -13940
  105. package/dist/index.es.js.map +1 -1
  106. package/dist/index.umd.js +25823 -588
  107. package/dist/index.umd.js.map +1 -1
  108. package/dist/internal/useBuildDataSource.d.ts +3 -17
  109. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  110. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  111. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  112. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  113. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  114. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  115. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  116. package/dist/preview/util.d.ts +3 -3
  117. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  118. package/dist/routes/FireCMSRoute.d.ts +1 -0
  119. package/dist/routes/HomePageRoute.d.ts +3 -0
  120. package/dist/types/analytics.d.ts +1 -1
  121. package/dist/types/auth.d.ts +8 -10
  122. package/dist/types/collections.d.ts +110 -25
  123. package/dist/types/customization_controller.d.ts +8 -0
  124. package/dist/types/datasource.d.ts +52 -36
  125. package/dist/types/dialogs_controller.d.ts +7 -3
  126. package/dist/types/entities.d.ts +7 -2
  127. package/dist/types/entity_actions.d.ts +72 -8
  128. package/dist/types/entity_callbacks.d.ts +16 -16
  129. package/dist/types/entity_overrides.d.ts +2 -2
  130. package/dist/types/export_import.d.ts +4 -4
  131. package/dist/types/fields.d.ts +74 -42
  132. package/dist/types/firecms.d.ts +16 -3
  133. package/dist/types/firecms_context.d.ts +1 -1
  134. package/dist/types/index.d.ts +0 -1
  135. package/dist/types/navigation.d.ts +62 -19
  136. package/dist/types/permissions.d.ts +4 -4
  137. package/dist/types/plugins.d.ts +56 -13
  138. package/dist/types/properties.d.ts +80 -24
  139. package/dist/types/property_config.d.ts +1 -3
  140. package/dist/types/roles.d.ts +3 -0
  141. package/dist/types/side_dialogs_controller.d.ts +10 -0
  142. package/dist/types/side_entity_controller.d.ts +14 -1
  143. package/dist/types/storage.d.ts +75 -0
  144. package/dist/types/user.d.ts +1 -0
  145. package/dist/util/builders.d.ts +3 -3
  146. package/dist/util/callbacks.d.ts +2 -0
  147. package/dist/util/createFormexStub.d.ts +2 -0
  148. package/dist/util/entities.d.ts +3 -3
  149. package/dist/util/entity_actions.d.ts +2 -0
  150. package/dist/util/entity_cache.d.ts +23 -0
  151. package/dist/util/icon_list.d.ts +5 -1
  152. package/dist/util/icon_synonyms.d.ts +1 -98
  153. package/dist/util/icons.d.ts +7 -4
  154. package/dist/util/index.d.ts +3 -0
  155. package/dist/util/navigation_from_path.d.ts +10 -1
  156. package/dist/util/navigation_utils.d.ts +15 -3
  157. package/dist/util/objects.d.ts +2 -1
  158. package/dist/util/permissions.d.ts +4 -4
  159. package/dist/util/plurals.d.ts +0 -2
  160. package/dist/util/property_utils.d.ts +4 -4
  161. package/dist/util/references.d.ts +2 -2
  162. package/dist/util/resolutions.d.ts +42 -17
  163. package/dist/util/storage.d.ts +23 -2
  164. package/dist/util/useStorageUploadController.d.ts +3 -3
  165. package/package.json +64 -48
  166. package/src/app/AppBar.tsx +18 -0
  167. package/src/app/Drawer.tsx +24 -0
  168. package/src/app/Scaffold.tsx +253 -0
  169. package/src/app/index.ts +4 -0
  170. package/src/app/useApp.tsx +32 -0
  171. package/src/components/ArrayContainer.tsx +447 -229
  172. package/src/components/CircularProgressCenter.tsx +2 -2
  173. package/src/components/ClearFilterSortButton.tsx +41 -0
  174. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
  175. package/src/components/DeleteEntityDialog.tsx +13 -20
  176. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +65 -40
  177. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
  178. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
  179. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +72 -42
  180. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  181. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
  182. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  183. package/src/components/EntityCollectionTable/index.tsx +1 -1
  184. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +34 -39
  185. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +49 -36
  186. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  187. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +135 -105
  188. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
  189. package/src/components/EntityCollectionView/EntityCollectionView.tsx +235 -118
  190. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
  191. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  192. package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
  193. package/src/components/EntityCollectionView/utils.ts +19 -0
  194. package/src/components/EntityJsonPreview.tsx +66 -0
  195. package/src/components/EntityPreview.tsx +80 -59
  196. package/src/components/EntityView.tsx +13 -10
  197. package/src/components/ErrorView.tsx +4 -4
  198. package/src/components/FireCMSLogo.tsx +7 -51
  199. package/src/components/HomePage/DefaultHomePage.tsx +499 -157
  200. package/src/components/HomePage/FavouritesView.tsx +9 -14
  201. package/src/components/HomePage/HomePageDnD.tsx +599 -0
  202. package/src/components/HomePage/NavigationCard.tsx +48 -39
  203. package/src/components/HomePage/NavigationCardBinding.tsx +17 -16
  204. package/src/components/HomePage/NavigationGroup.tsx +63 -29
  205. package/src/components/HomePage/RenameGroupDialog.tsx +117 -0
  206. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  207. package/src/components/NotFoundPage.tsx +2 -2
  208. package/src/components/PropertyConfigBadge.tsx +9 -3
  209. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  210. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +21 -13
  211. package/src/components/ReferenceWidget.tsx +21 -11
  212. package/src/components/SearchIconsView.tsx +10 -7
  213. package/src/components/SelectableTable/SelectableTable.tsx +157 -145
  214. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  215. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  216. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
  217. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
  218. package/src/components/UnsavedChangesDialog.tsx +46 -0
  219. package/src/components/VirtualTable/VirtualTable.tsx +105 -51
  220. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  221. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  222. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  223. package/src/components/VirtualTable/VirtualTableProps.tsx +28 -14
  224. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  225. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  226. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
  227. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  228. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  229. package/src/components/VirtualTable/types.tsx +2 -3
  230. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +64 -44
  231. package/src/components/common/index.ts +2 -1
  232. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  233. package/src/components/common/types.tsx +4 -6
  234. package/src/components/common/useColumnsIds.tsx +24 -3
  235. package/src/components/common/useDataSourceTableController.tsx +420 -0
  236. package/src/components/common/useDebouncedCallback.tsx +20 -0
  237. package/src/components/common/useScrollRestoration.tsx +68 -0
  238. package/src/components/common/useTableSearchHelper.ts +53 -12
  239. package/src/components/index.tsx +6 -2
  240. package/src/contexts/BreacrumbsContext.tsx +38 -0
  241. package/src/contexts/DialogsProvider.tsx +5 -4
  242. package/src/contexts/ModeController.tsx +1 -3
  243. package/src/contexts/SnackbarProvider.tsx +2 -0
  244. package/src/core/DefaultAppBar.tsx +219 -0
  245. package/src/core/DefaultDrawer.tsx +185 -0
  246. package/src/core/DrawerNavigationItem.tsx +66 -0
  247. package/src/core/EntityEditView.tsx +435 -470
  248. package/src/core/EntityEditViewFormActions.tsx +329 -0
  249. package/src/core/EntitySidePanel.tsx +88 -21
  250. package/src/core/FireCMS.tsx +74 -58
  251. package/src/core/FireCMSRouter.tsx +17 -0
  252. package/src/core/NavigationRoutes.tsx +28 -38
  253. package/src/core/SideDialogs.tsx +22 -12
  254. package/src/core/field_configs.tsx +26 -13
  255. package/src/core/index.tsx +6 -5
  256. package/src/form/EntityForm.tsx +620 -534
  257. package/src/form/EntityFormActions.tsx +211 -0
  258. package/src/form/PropertyFieldBinding.tsx +88 -45
  259. package/src/form/components/CustomIdField.tsx +9 -3
  260. package/src/form/components/FieldHelperText.tsx +4 -4
  261. package/src/form/components/FormEntry.tsx +22 -0
  262. package/src/form/components/FormLayout.tsx +16 -0
  263. package/src/form/components/LabelWithIcon.tsx +30 -19
  264. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  265. package/src/form/components/StorageItemPreview.tsx +23 -13
  266. package/src/form/components/StorageUploadProgress.tsx +5 -6
  267. package/src/form/components/index.tsx +3 -1
  268. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +34 -19
  269. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +50 -36
  270. package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
  271. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  272. package/src/form/field_bindings/KeyValueFieldBinding.tsx +61 -52
  273. package/src/form/field_bindings/MapFieldBinding.tsx +73 -55
  274. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
  275. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
  276. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  277. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  278. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  279. package/src/form/field_bindings/RepeatFieldBinding.tsx +62 -35
  280. package/src/form/field_bindings/SelectFieldBinding.tsx +24 -15
  281. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +257 -199
  282. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  283. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  284. package/src/form/index.tsx +17 -37
  285. package/src/form/useClearRestoreValue.tsx +2 -2
  286. package/src/form/validation.ts +13 -23
  287. package/src/hooks/data/delete.ts +6 -5
  288. package/src/hooks/data/save.ts +26 -33
  289. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  290. package/src/hooks/data/useDataSource.tsx +11 -3
  291. package/src/hooks/data/useEntityFetch.tsx +10 -6
  292. package/src/hooks/index.tsx +1 -0
  293. package/src/hooks/useAuthController.tsx +1 -1
  294. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  295. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  296. package/src/hooks/useBuildModeController.tsx +22 -29
  297. package/src/hooks/useBuildNavigationController.tsx +440 -119
  298. package/src/hooks/useFireCMSContext.tsx +3 -33
  299. package/src/hooks/useLargeLayout.tsx +0 -35
  300. package/src/hooks/useModeController.tsx +1 -2
  301. package/src/hooks/useProjectLog.tsx +32 -10
  302. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  303. package/src/hooks/useValidateAuthenticator.tsx +17 -37
  304. package/src/index.ts +1 -0
  305. package/src/internal/useBuildDataSource.ts +79 -85
  306. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  307. package/src/internal/useBuildSideEntityController.tsx +204 -77
  308. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  309. package/src/preview/PropertyPreview.tsx +34 -25
  310. package/src/preview/PropertyPreviewProps.tsx +7 -1
  311. package/src/preview/components/BooleanPreview.tsx +2 -2
  312. package/src/preview/components/EmptyValue.tsx +1 -1
  313. package/src/preview/components/EnumValuesChip.tsx +2 -2
  314. package/src/preview/components/ImagePreview.tsx +26 -37
  315. package/src/preview/components/ReferencePreview.tsx +23 -34
  316. package/src/preview/components/StorageThumbnail.tsx +5 -1
  317. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  318. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -6
  319. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +7 -5
  320. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -4
  321. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -4
  322. package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -6
  323. package/src/preview/property_previews/ArrayPropertyPreview.tsx +7 -6
  324. package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
  325. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  326. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  327. package/src/preview/util.ts +10 -10
  328. package/src/routes/CustomCMSRoute.tsx +21 -0
  329. package/src/routes/FireCMSRoute.tsx +246 -0
  330. package/src/routes/HomePageRoute.tsx +17 -0
  331. package/src/types/analytics.ts +3 -0
  332. package/src/types/auth.tsx +9 -13
  333. package/src/types/collections.ts +132 -30
  334. package/src/types/customization_controller.tsx +9 -1
  335. package/src/types/datasource.ts +61 -43
  336. package/src/types/dialogs_controller.tsx +7 -3
  337. package/src/types/entities.ts +12 -2
  338. package/src/types/entity_actions.tsx +86 -10
  339. package/src/types/entity_callbacks.ts +18 -18
  340. package/src/types/entity_overrides.tsx +2 -2
  341. package/src/types/export_import.ts +4 -4
  342. package/src/types/fields.tsx +85 -46
  343. package/src/types/firecms.tsx +18 -4
  344. package/src/types/firecms_context.tsx +1 -1
  345. package/src/types/index.ts +0 -1
  346. package/src/types/navigation.ts +77 -24
  347. package/src/types/permissions.ts +5 -5
  348. package/src/types/plugins.tsx +66 -15
  349. package/src/types/properties.ts +95 -26
  350. package/src/types/property_config.tsx +1 -2
  351. package/src/types/roles.ts +3 -0
  352. package/src/types/side_dialogs_controller.tsx +15 -0
  353. package/src/types/side_entity_controller.tsx +16 -1
  354. package/src/types/storage.ts +83 -1
  355. package/src/types/user.ts +2 -0
  356. package/src/util/builders.ts +10 -8
  357. package/src/util/callbacks.ts +119 -0
  358. package/src/util/createFormexStub.tsx +62 -0
  359. package/src/util/entities.ts +9 -6
  360. package/src/util/entity_actions.ts +28 -0
  361. package/src/util/entity_cache.ts +204 -0
  362. package/src/util/enums.ts +1 -1
  363. package/src/util/icon_list.ts +16 -10
  364. package/src/util/icon_synonyms.ts +3 -100
  365. package/src/util/icons.tsx +36 -11
  366. package/src/util/index.ts +3 -0
  367. package/src/util/join_collections.ts +9 -2
  368. package/src/util/make_properties_editable.ts +13 -5
  369. package/src/util/navigation_from_path.ts +33 -12
  370. package/src/util/navigation_utils.ts +141 -25
  371. package/src/util/objects.ts +90 -33
  372. package/src/util/parent_references_from_path.ts +3 -3
  373. package/src/util/permissions.ts +9 -8
  374. package/src/util/plurals.ts +0 -2
  375. package/src/util/property_utils.tsx +17 -6
  376. package/src/util/references.ts +19 -8
  377. package/src/util/resolutions.ts +122 -48
  378. package/src/util/storage.ts +79 -21
  379. package/src/util/strings.ts +2 -2
  380. package/src/util/useStorageUploadController.tsx +91 -28
  381. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  382. package/dist/components/FireCMSAppBar.d.ts +0 -26
  383. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  384. package/dist/components/VirtualTable/common.d.ts +0 -2
  385. package/dist/core/Drawer.d.ts +0 -23
  386. package/dist/core/Scaffold.d.ts +0 -55
  387. package/dist/core/SideEntityView.d.ts +0 -7
  388. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  389. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  390. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  391. package/dist/internal/useLocaleConfig.d.ts +0 -1
  392. package/dist/types/appcheck.d.ts +0 -26
  393. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
  394. package/src/components/FireCMSAppBar.tsx +0 -165
  395. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  396. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  397. package/src/core/Drawer.tsx +0 -191
  398. package/src/core/Scaffold.tsx +0 -281
  399. package/src/core/SideEntityView.tsx +0 -38
  400. package/src/form/components/FormikArrayContainer.tsx +0 -44
  401. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  402. package/src/internal/useBuildCustomizationController.tsx +0 -5
  403. package/src/internal/useLocaleConfig.tsx +0 -18
  404. package/src/types/appcheck.ts +0 -29
  405. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -1,6 +1,7 @@
1
- import { EntityValues } from "./entities";
2
- import { CMSType, PropertyOrBuilder } from "./properties";
1
+ import { CMSType, Property, PropertyOrBuilder } from "./properties";
3
2
  import { ResolvedEntityCollection, ResolvedProperty } from "./resolved_entities";
3
+ import { FormexController } from "@firecms/formex";
4
+ import { Entity } from "./entities";
4
5
 
5
6
  /**
6
7
  * When building a custom field you need to create a React component that takes
@@ -21,11 +22,6 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
21
22
  */
22
23
  value: T;
23
24
 
24
- /**
25
- * Initial value of this field
26
- */
27
- // initialValue: T | undefined;
28
-
29
25
  /**
30
26
  * Set value of field directly
31
27
  */
@@ -42,7 +38,7 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
42
38
  /**
43
39
  * Is the form currently submitting
44
40
  */
45
- isSubmitting: boolean;
41
+ isSubmitting?: boolean;
46
42
 
47
43
  /**
48
44
  * Should this field show the error indicator.
@@ -50,55 +46,51 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
50
46
  * filled) but we don't want to show the error until the user has tried
51
47
  * saving.
52
48
  */
53
- showError: boolean;
49
+ showError?: boolean;
54
50
 
55
51
  /**
56
52
  * Is there an error in this field. The error field has the same shape as
57
53
  * the field, replacing values with a string containing the error.
58
54
  * It takes the value `null` if there is no error
59
55
  */
60
- error: any | null;
56
+ error?: any | null;
61
57
 
62
58
  /**
63
59
  * Has this field been touched
64
60
  */
65
- touched: boolean;
61
+ touched?: boolean;
66
62
 
67
63
  /**
68
64
  * Property related to this field
69
65
  */
70
- property: ResolvedProperty<T>;
66
+ property: Property<T> | ResolvedProperty<T>;
71
67
 
72
68
  /**
73
69
  * Should this field include a description
74
70
  */
75
- includeDescription: boolean;
71
+ includeDescription?: boolean;
76
72
 
77
73
  /**
78
74
  * Flag to indicate that the underlying value has been updated in the
79
75
  * datasource
80
76
  */
81
- underlyingValueHasChanged: boolean;
77
+ underlyingValueHasChanged?: boolean;
82
78
 
83
79
  /**
84
80
  * Is this field part of an array
85
81
  */
86
- partOfArray: boolean;
87
-
88
- /**
89
- * Is this field part of a block (oneOf array)
90
- */
91
- partOfBlock: boolean;
82
+ partOfArray?: boolean;
92
83
 
93
84
  /**
94
- * Is this field being rendered in the entity table popup
85
+ * Display the child properties directly, without being wrapped in an
86
+ * extendable panel. Note that this will also hide the title of this property.
95
87
  */
96
- tableMode: boolean;
88
+ minimalistView?: boolean;
97
89
 
98
90
  /**
99
91
  * Should this field autofocus on mount
100
92
  */
101
- autoFocus: boolean;
93
+ autoFocus?: boolean;
102
94
 
103
95
  /**
104
96
  * Additional properties set by the developer
@@ -113,7 +105,21 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
113
105
  /**
114
106
  * Flag to indicate if this field should be disabled
115
107
  */
116
- disabled: boolean;
108
+ disabled?: boolean;
109
+
110
+ /**
111
+ * Size of the field
112
+ */
113
+ size?: "small" | "medium" | "large";
114
+
115
+ /**
116
+ * Some properties might change internal state (like expanding a panel).
117
+ * This function should be called when the internal state changes.
118
+ * This is used to preserve state in array containers.
119
+ *
120
+ * @param property
121
+ */
122
+ onPropertyChange?: (property: Partial<Property<any>>) => void;
117
123
 
118
124
  }
119
125
 
@@ -124,37 +130,54 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
124
130
  export interface FormContext<M extends Record<string, any> = any> {
125
131
 
126
132
  /**
127
- * Collection of the entity being modified
133
+ * Current values of the entity
128
134
  */
129
- collection: ResolvedEntityCollection<M>;
135
+ values: M;
130
136
 
131
137
  /**
132
- * Current values of the entity
138
+ * Update the value of a field
139
+ * @param key
140
+ * @param value
141
+ * @param shouldValidate
133
142
  */
134
- values: EntityValues<M>;
143
+ setFieldValue: (key: string, value: any, shouldValidate?: boolean) => void;
135
144
 
136
145
  /**
137
- * Entity id, it can be null if it's a new entity
146
+ * Save the entity.
138
147
  */
139
- entityId?: string;
148
+ save: (values: M) => void;
140
149
 
141
150
  /**
142
- * Path this entity is located at
151
+ * Collection of the entity being modified
143
152
  */
144
- path: string;
153
+ collection?: ResolvedEntityCollection<M>;
145
154
 
146
155
  /**
147
- * Update the value of a field
148
- * @param key
149
- * @param value
150
- * @param shouldValidate
156
+ * Entity id, it can be null if it's a new entity
151
157
  */
152
- setFieldValue: (key: string, value: any, shouldValidate?: boolean) => void;
158
+ entityId: string;
159
+
160
+ /**
161
+ * Path this entity is located at
162
+ */
163
+ path?: string;
164
+
165
+ status: "new" | "existing" | "copy";
166
+
167
+ entity?: Entity<M>;
168
+
169
+ savingError?: Error;
170
+
171
+ openEntityMode: "side_panel" | "full_screen";
153
172
 
154
173
  /**
155
- * Save the entity
174
+ * This is the underlying formex controller that powers the form.
175
+ * If you are in a red only mode, the formex controller is there, but you can't
176
+ * operate with it
156
177
  */
157
- save: (values: EntityValues<M>) => void;
178
+ formex: FormexController<M>;
179
+
180
+ disabled: boolean;
158
181
  }
159
182
 
160
183
  /**
@@ -192,20 +215,16 @@ export interface PropertyFieldBindingProps<T extends CMSType, M extends Record<s
192
215
  */
193
216
  underlyingValueHasChanged?: boolean;
194
217
 
195
- /**
196
- * Is this field being rendered in a table
197
- */
198
- tableMode?: boolean;
199
-
200
218
  /**
201
219
  * Is this field part of an array
202
220
  */
203
221
  partOfArray?: boolean;
204
222
 
205
223
  /**
206
- * Is this field part of a block (oneOf array)
224
+ * Display the child properties directly, without being wrapped in an
225
+ * extendable panel. Note that this will also hide the title of this property.
207
226
  */
208
- partOfBlock?: boolean;
227
+ minimalistView?: boolean;
209
228
 
210
229
  /**
211
230
  * Should the field take focus when rendered. When opening the popup view
@@ -217,4 +236,24 @@ export interface PropertyFieldBindingProps<T extends CMSType, M extends Record<s
217
236
  * Should this field be disabled
218
237
  */
219
238
  disabled?: boolean;
239
+
240
+ /**
241
+ * Index of the field in the array.
242
+ * Only used when the field is part of an array.
243
+ */
244
+ index?: number;
245
+
246
+ /**
247
+ * The size of the field
248
+ */
249
+ size?: "small" | "medium" | "large",
250
+
251
+ /**
252
+ * Some properties might change internal state (like expanding a panel).
253
+ * This function should be called when the internal state changes.
254
+ * This is used to preserve state in array containers.
255
+ *
256
+ * @param property
257
+ */
258
+ onPropertyChange?: (property: Partial<Property<any>>) => void;
220
259
  }
@@ -12,6 +12,7 @@ import { EntityLinkBuilder } from "./entity_link_builder";
12
12
  import { UserConfigurationPersistence } from "./local_config_persistence";
13
13
  import { FireCMSPlugin } from "./plugins";
14
14
  import { CMSAnalyticsEvent } from "./analytics";
15
+ import { EntityAction } from "./entity_actions";
15
16
 
16
17
  /**
17
18
  * Use this callback to build entity collections dynamically.
@@ -47,7 +48,7 @@ export type CMSViewsBuilder = (params: {
47
48
  /**
48
49
  * @group Models
49
50
  */
50
- export type FireCMSProps<UserType extends User, EC extends EntityCollection> = {
51
+ export type FireCMSProps<USER extends User> = {
51
52
 
52
53
  /**
53
54
  * Use this function to return the components you want to render under
@@ -67,6 +68,11 @@ export type FireCMSProps<UserType extends User, EC extends EntityCollection> = {
67
68
  loading: boolean;
68
69
  }) => React.ReactNode;
69
70
 
71
+ /**
72
+ * If you have a custom API key, you can use it here.
73
+ */
74
+ apiKey?: string;
75
+
70
76
  /**
71
77
  * Record of custom form fields to be used in the CMS.
72
78
  * You can use the key to reference the custom field in
@@ -87,9 +93,16 @@ export type FireCMSProps<UserType extends User, EC extends EntityCollection> = {
87
93
  *
88
94
  * You can also define an entity view from the UI.
89
95
  */
90
-
91
96
  entityViews?: EntityCustomView[];
92
97
 
98
+ /**
99
+ * List of actions that can be performed on entities.
100
+ * These actions are displayed in the entity view and in the collection view.
101
+ * You can later reuse these actions in the `entityActions` prop of a collection,
102
+ * by specifying the `key` of the action.
103
+ */
104
+ entityActions?: EntityAction[];
105
+
93
106
  /**
94
107
  * Format of the dates in the CMS.
95
108
  * Defaults to 'MMMM dd, yyyy, HH:mm:ss'
@@ -114,7 +127,7 @@ export type FireCMSProps<UserType extends User, EC extends EntityCollection> = {
114
127
  /**
115
128
  * Delegate for implementing your auth operations.
116
129
  */
117
- authController: AuthController<UserType>;
130
+ authController: AuthController<USER>;
118
131
 
119
132
  /**
120
133
  * Use this controller to access the configuration that is stored locally,
@@ -124,7 +137,8 @@ export type FireCMSProps<UserType extends User, EC extends EntityCollection> = {
124
137
 
125
138
  /**
126
139
  * Use plugins to modify the behaviour of the CMS.
127
- * Currently, in ALPHA, and likely subject to change.
140
+ * DEPRECATED: use the `plugins` prop in the `useBuildNavigationController` instead.
141
+ * This prop will work as a fallback for the `plugins` prop in the `useBuildNavigationController`.
128
142
  */
129
143
  plugins?: FireCMSPlugin<any, any, any>[];
130
144
 
@@ -18,7 +18,7 @@ import { AnalyticsController } from "./analytics_controller";
18
18
  * @group Hooks and utilities
19
19
  * @see useFireCMSContext
20
20
  */
21
- export type FireCMSContext<UserType extends User = User, AuthControllerType extends AuthController<UserType> = AuthController<UserType>> = {
21
+ export type FireCMSContext<USER extends User = User, AuthControllerType extends AuthController<USER> = AuthController<USER>> = {
22
22
 
23
23
  /**
24
24
  * Connector to your database, e.g. your Firestore database
@@ -23,7 +23,6 @@ export * from "./plugins";
23
23
  export * from "./analytics";
24
24
  export * from "./firecms";
25
25
  export * from "./roles";
26
- export * from "./appcheck";
27
26
  export * from "./export_import";
28
27
  export * from "./modify_collections";
29
28
  export * from "./analytics_controller";
@@ -1,10 +1,12 @@
1
1
  import React from "react";
2
2
  import { EntityCollection } from "./collections";
3
3
  import { EntityReference } from "./entities";
4
+ import { FireCMSPlugin } from "./plugins";
4
5
 
5
6
  /**
6
7
  * Controller that includes the resolved navigation and utility methods and
7
8
  * attributes.
9
+ * This controller holds the state of the navigation including the collections.
8
10
  * @group Models
9
11
  */
10
12
  export type NavigationController<EC extends EntityCollection = EntityCollection<any>> = {
@@ -34,7 +36,7 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
34
36
  * level of the navigation (e.g. in the home page or the navigation
35
37
  * drawer)
36
38
  */
37
- topLevelNavigation?: TopNavigationResult;
39
+ topLevelNavigation?: NavigationResult;
38
40
 
39
41
  /**
40
42
  * Is the navigation loading (the configuration persistence has not
@@ -56,11 +58,15 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
56
58
  * Get the collection configuration for a given path.
57
59
  * The collection is resolved from the given path or alias.
58
60
  */
59
- getCollection: (pathOrAlias: string,
60
- entityId?: string,
61
- includeUserOverride?: boolean) => EC | undefined;
61
+ getCollection: (pathOrId: string, includeUserOverride?: boolean) => EC | undefined;
62
+
62
63
  /**
63
- * Get the collection configuration from its parent path segments.
64
+ * Get the top level collection configuration for a given id
65
+ */
66
+ getCollectionById: (id: string) => EC | undefined;
67
+
68
+ /**
69
+ * Get the collection configuration from its parent ids.
64
70
  */
65
71
  getCollectionFromIds: (ids: string[]) => EC | undefined;
66
72
 
@@ -70,12 +76,14 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
70
76
  getCollectionFromPaths: (pathSegments: string[]) => EC | undefined;
71
77
 
72
78
  /**
73
- * Default path under the navigation routes of the CMS will be created
79
+ * Default path under the navigation routes of the CMS will be created.
80
+ * Defaults to '/'. You may want to change this `basepath` to 'admin' for example.
74
81
  */
75
82
  basePath: string;
76
83
 
77
84
  /**
78
- * Default path under the collection routes of the CMS will be created
85
+ * Default path under the collection routes of the CMS will be created.
86
+ * It defaults to '/c'
79
87
  */
80
88
  baseCollectionPath: string;
81
89
 
@@ -88,16 +96,6 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
88
96
  */
89
97
  urlPathToDataPath: (cmsPath: string) => string;
90
98
 
91
- /**
92
- * Convert a collection or entity path to a URL path
93
- * @param path
94
- */
95
- buildCMSUrlPath: (path: string) => string;
96
-
97
- buildUrlEditCollectionPath: (props: {
98
- path: string
99
- }) => string;
100
-
101
99
  /**
102
100
  * Base url path for the home screen
103
101
  */
@@ -118,10 +116,11 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
118
116
  buildUrlCollectionPath: (path: string) => string;
119
117
 
120
118
  /**
121
- * Turn a path with aliases into a resolved path
119
+ * Turn a path with collection ids into a resolved path.
120
+ * The ids (typically used in urls) will be replaced with relative paths (typically used in database paths)
122
121
  * @param pathWithAliases
123
122
  */
124
- resolveAliasesFrom: (pathWithAliases: string) => string;
123
+ resolveIdsFrom: (pathWithAliases: string) => string;
125
124
 
126
125
  /**
127
126
  * Call this method to recalculate the navigation
@@ -145,8 +144,39 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
145
144
  * @param ids
146
145
  */
147
146
  convertIdsToPaths: (ids: string[]) => string[];
147
+
148
+ /**
149
+ * A function to navigate to a specified route or URL.
150
+ *
151
+ * @param {string} to - The target route or URL to navigate to.
152
+ * @param {NavigateOptions} [options] - Optional configuration settings for navigation, such as replace behavior or state data.
153
+ */
154
+ navigate: (to: string, options?: NavigateOptions) => void;
155
+
156
+ /**
157
+ * Plugin system allowing to extend the CMS functionality.
158
+ */
159
+ plugins?: FireCMSPlugin<any, any, any>[];
160
+
148
161
  }
149
162
 
163
+ export interface NavigateOptions {
164
+ replace?: boolean;
165
+ state?: any;
166
+ preventScrollReset?: boolean;
167
+ relative?: "route" | "path";
168
+ flushSync?: boolean;
169
+ viewTransition?: boolean;
170
+ }
171
+
172
+ // currently not used, in favor of a single blocker in `FireCMSRoute`
173
+ export type NavigationBlocker = {
174
+ updateBlockListener: (path: string, block: boolean, basePath?: string) => () => void;
175
+ isBlocked: (path: string) => boolean;
176
+ proceed?: () => void;
177
+ reset?: () => void;
178
+ };
179
+
150
180
  /**
151
181
  * Custom additional views created by the developer, added to the main
152
182
  * navigation.
@@ -174,8 +204,9 @@ export interface CMSView {
174
204
  * You can use any of the icons in the Material specs:
175
205
  * https://fonts.google.com/icons
176
206
  * e.g. 'account_tree' or 'person'
207
+ * Find all the icons in https://firecms.co/docs/icons
177
208
  */
178
- icon?: string;
209
+ icon?: string | React.ReactNode;
179
210
 
180
211
  /**
181
212
  * Should this view be hidden from the main navigation panel.
@@ -198,7 +229,22 @@ export interface CMSView {
198
229
 
199
230
  }
200
231
 
201
- export interface TopNavigationEntry {
232
+ /**
233
+ * Used to group navigation entries in the main navigation.
234
+ */
235
+ export interface NavigationGroupMapping {
236
+ /**
237
+ * Name of the group, used to display the group header in the UI
238
+ */
239
+ name: string;
240
+ /**
241
+ * List of collection ids or view paths that belong to this group.
242
+ */
243
+ entries: string[];
244
+ }
245
+
246
+ export interface NavigationEntry {
247
+ id: string;
202
248
  url: string;
203
249
  name: string;
204
250
  path: string;
@@ -209,7 +255,14 @@ export interface TopNavigationEntry {
209
255
  group: string;
210
256
  }
211
257
 
212
- export type TopNavigationResult = {
213
- navigationEntries: TopNavigationEntry[],
214
- groups: string[]
258
+ export type NavigationResult = {
259
+
260
+ allowDragAndDrop: boolean;
261
+
262
+ navigationEntries: NavigationEntry[],
263
+
264
+ groups: string[],
265
+
266
+ onNavigationEntriesUpdate: (entries: NavigationGroupMapping[]) => void;
215
267
  };
268
+
@@ -32,7 +32,7 @@ export interface Permissions {
32
32
  * Props passed to a {@link PermissionsBuilder}
33
33
  * @group Models
34
34
  */
35
- export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCollection, UserType extends User = User, M extends object = InferCollectionType<EC>> {
35
+ export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCollection, USER extends User = User, M extends object = InferCollectionType<EC>> {
36
36
  /**
37
37
  * Entity being edited, might be null in some cases, when the operation
38
38
  * refers to the collection.
@@ -54,7 +54,7 @@ export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCol
54
54
  /**
55
55
  * Logged in user
56
56
  */
57
- user: UserType | null;
57
+ user: USER | null;
58
58
 
59
59
  /**
60
60
  * Collection these permissions apply to
@@ -64,7 +64,7 @@ export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCol
64
64
  /**
65
65
  * Auth controller
66
66
  */
67
- authController: AuthController<UserType>;
67
+ authController: AuthController<USER>;
68
68
  }
69
69
 
70
70
  /**
@@ -72,10 +72,10 @@ export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCol
72
72
  * based on the logged user or collection.
73
73
  * @group Models
74
74
  */
75
- export type PermissionsBuilder<EC extends EntityCollection = EntityCollection, UserType extends User = User, M extends object = InferCollectionType<EC>> =
75
+ export type PermissionsBuilder<EC extends EntityCollection = EntityCollection, USER extends User = User, M extends object = InferCollectionType<EC>> =
76
76
  (({
77
77
  pathSegments,
78
78
  user,
79
79
  collection,
80
80
  authController
81
- }: PermissionsBuilderProps<EC, UserType, M>) => Permissions | undefined);
81
+ }: PermissionsBuilderProps<EC, USER, M>) => Permissions | undefined);