@firecms/core 3.0.0-canary.27 → 3.0.0-canary.271

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 (408) 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 +10 -7
  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 +8 -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 +2 -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/useCollapsedGroups.d.ts +9 -0
  99. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  100. package/dist/hooks/useModeController.d.ts +1 -2
  101. package/dist/hooks/useProjectLog.d.ts +8 -2
  102. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  103. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  104. package/dist/index.d.ts +1 -0
  105. package/dist/index.es.js +23154 -13912
  106. package/dist/index.es.js.map +1 -1
  107. package/dist/index.umd.js +25917 -588
  108. package/dist/index.umd.js.map +1 -1
  109. package/dist/internal/useBuildDataSource.d.ts +3 -17
  110. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  111. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  112. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  113. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  114. package/dist/preview/components/ReferencePreview.d.ts +4 -3
  115. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  116. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  117. package/dist/preview/util.d.ts +3 -3
  118. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  119. package/dist/routes/FireCMSRoute.d.ts +1 -0
  120. package/dist/routes/HomePageRoute.d.ts +3 -0
  121. package/dist/types/analytics.d.ts +1 -1
  122. package/dist/types/auth.d.ts +8 -10
  123. package/dist/types/collections.d.ts +112 -25
  124. package/dist/types/customization_controller.d.ts +8 -0
  125. package/dist/types/datasource.d.ts +52 -36
  126. package/dist/types/dialogs_controller.d.ts +7 -3
  127. package/dist/types/entities.d.ts +7 -2
  128. package/dist/types/entity_actions.d.ts +72 -8
  129. package/dist/types/entity_callbacks.d.ts +16 -16
  130. package/dist/types/entity_overrides.d.ts +2 -2
  131. package/dist/types/export_import.d.ts +4 -4
  132. package/dist/types/fields.d.ts +74 -42
  133. package/dist/types/firecms.d.ts +16 -3
  134. package/dist/types/firecms_context.d.ts +1 -1
  135. package/dist/types/index.d.ts +0 -1
  136. package/dist/types/navigation.d.ts +62 -19
  137. package/dist/types/permissions.d.ts +4 -4
  138. package/dist/types/plugins.d.ts +56 -13
  139. package/dist/types/properties.d.ts +81 -25
  140. package/dist/types/property_config.d.ts +1 -3
  141. package/dist/types/roles.d.ts +3 -0
  142. package/dist/types/side_dialogs_controller.d.ts +10 -0
  143. package/dist/types/side_entity_controller.d.ts +14 -1
  144. package/dist/types/storage.d.ts +75 -0
  145. package/dist/types/user.d.ts +1 -0
  146. package/dist/util/builders.d.ts +3 -3
  147. package/dist/util/callbacks.d.ts +2 -0
  148. package/dist/util/createFormexStub.d.ts +2 -0
  149. package/dist/util/entities.d.ts +3 -3
  150. package/dist/util/entity_actions.d.ts +2 -0
  151. package/dist/util/entity_cache.d.ts +23 -0
  152. package/dist/util/icon_list.d.ts +5 -1
  153. package/dist/util/icon_synonyms.d.ts +1 -98
  154. package/dist/util/icons.d.ts +7 -4
  155. package/dist/util/index.d.ts +3 -0
  156. package/dist/util/navigation_from_path.d.ts +10 -1
  157. package/dist/util/navigation_utils.d.ts +15 -3
  158. package/dist/util/objects.d.ts +2 -1
  159. package/dist/util/permissions.d.ts +4 -4
  160. package/dist/util/plurals.d.ts +0 -2
  161. package/dist/util/property_utils.d.ts +4 -4
  162. package/dist/util/references.d.ts +2 -2
  163. package/dist/util/resolutions.d.ts +42 -17
  164. package/dist/util/storage.d.ts +23 -2
  165. package/dist/util/useStorageUploadController.d.ts +3 -3
  166. package/package.json +69 -52
  167. package/src/app/AppBar.tsx +18 -0
  168. package/src/app/Drawer.tsx +24 -0
  169. package/src/app/Scaffold.tsx +253 -0
  170. package/src/app/index.ts +4 -0
  171. package/src/app/useApp.tsx +32 -0
  172. package/src/components/ArrayContainer.tsx +447 -229
  173. package/src/components/CircularProgressCenter.tsx +2 -2
  174. package/src/components/ClearFilterSortButton.tsx +41 -0
  175. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
  176. package/src/components/DeleteEntityDialog.tsx +13 -20
  177. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +65 -40
  178. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
  179. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
  180. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +72 -42
  181. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  182. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
  183. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  184. package/src/components/EntityCollectionTable/index.tsx +1 -1
  185. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +34 -39
  186. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +49 -36
  187. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  188. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +135 -105
  189. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
  190. package/src/components/EntityCollectionView/EntityCollectionView.tsx +235 -118
  191. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
  192. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  193. package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
  194. package/src/components/EntityCollectionView/utils.ts +19 -0
  195. package/src/components/EntityJsonPreview.tsx +66 -0
  196. package/src/components/EntityPreview.tsx +83 -62
  197. package/src/components/EntityView.tsx +13 -10
  198. package/src/components/ErrorView.tsx +4 -4
  199. package/src/components/FireCMSLogo.tsx +7 -51
  200. package/src/components/HomePage/DefaultHomePage.tsx +512 -157
  201. package/src/components/HomePage/FavouritesView.tsx +9 -14
  202. package/src/components/HomePage/HomePageDnD.tsx +599 -0
  203. package/src/components/HomePage/NavigationCard.tsx +48 -39
  204. package/src/components/HomePage/NavigationCardBinding.tsx +17 -16
  205. package/src/components/HomePage/NavigationGroup.tsx +144 -30
  206. package/src/components/HomePage/RenameGroupDialog.tsx +117 -0
  207. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  208. package/src/components/NotFoundPage.tsx +2 -2
  209. package/src/components/PropertyConfigBadge.tsx +9 -3
  210. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  211. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +23 -13
  212. package/src/components/ReferenceWidget.tsx +21 -11
  213. package/src/components/SearchIconsView.tsx +10 -7
  214. package/src/components/SelectableTable/SelectableTable.tsx +157 -145
  215. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  216. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  217. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
  218. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +93 -24
  219. package/src/components/UnsavedChangesDialog.tsx +46 -0
  220. package/src/components/VirtualTable/VirtualTable.tsx +105 -51
  221. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  222. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  223. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  224. package/src/components/VirtualTable/VirtualTableProps.tsx +28 -14
  225. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  226. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  227. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
  228. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  229. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  230. package/src/components/VirtualTable/types.tsx +2 -3
  231. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +64 -44
  232. package/src/components/common/index.ts +2 -1
  233. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  234. package/src/components/common/types.tsx +4 -6
  235. package/src/components/common/useColumnsIds.tsx +24 -3
  236. package/src/components/common/useDataSourceTableController.tsx +420 -0
  237. package/src/components/common/useDebouncedCallback.tsx +20 -0
  238. package/src/components/common/useScrollRestoration.tsx +68 -0
  239. package/src/components/common/useTableSearchHelper.ts +53 -12
  240. package/src/components/index.tsx +6 -2
  241. package/src/contexts/BreacrumbsContext.tsx +38 -0
  242. package/src/contexts/DialogsProvider.tsx +5 -4
  243. package/src/contexts/ModeController.tsx +1 -3
  244. package/src/contexts/SnackbarProvider.tsx +2 -0
  245. package/src/core/DefaultAppBar.tsx +219 -0
  246. package/src/core/DefaultDrawer.tsx +185 -0
  247. package/src/core/DrawerNavigationItem.tsx +66 -0
  248. package/src/core/EntityEditView.tsx +435 -470
  249. package/src/core/EntityEditViewFormActions.tsx +329 -0
  250. package/src/core/EntitySidePanel.tsx +88 -21
  251. package/src/core/FireCMS.tsx +74 -58
  252. package/src/core/FireCMSRouter.tsx +17 -0
  253. package/src/core/NavigationRoutes.tsx +28 -38
  254. package/src/core/SideDialogs.tsx +22 -12
  255. package/src/core/field_configs.tsx +26 -13
  256. package/src/core/index.tsx +6 -5
  257. package/src/form/EntityForm.tsx +620 -534
  258. package/src/form/EntityFormActions.tsx +211 -0
  259. package/src/form/PropertyFieldBinding.tsx +88 -45
  260. package/src/form/components/CustomIdField.tsx +9 -3
  261. package/src/form/components/FieldHelperText.tsx +4 -4
  262. package/src/form/components/FormEntry.tsx +22 -0
  263. package/src/form/components/FormLayout.tsx +16 -0
  264. package/src/form/components/LabelWithIcon.tsx +30 -19
  265. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  266. package/src/form/components/StorageItemPreview.tsx +23 -13
  267. package/src/form/components/StorageUploadProgress.tsx +5 -6
  268. package/src/form/components/index.tsx +3 -1
  269. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +34 -19
  270. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +50 -36
  271. package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
  272. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  273. package/src/form/field_bindings/KeyValueFieldBinding.tsx +61 -52
  274. package/src/form/field_bindings/MapFieldBinding.tsx +73 -55
  275. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
  276. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
  277. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  278. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  279. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  280. package/src/form/field_bindings/RepeatFieldBinding.tsx +62 -35
  281. package/src/form/field_bindings/SelectFieldBinding.tsx +24 -15
  282. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +257 -199
  283. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  284. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  285. package/src/form/index.tsx +17 -37
  286. package/src/form/useClearRestoreValue.tsx +2 -2
  287. package/src/form/validation.ts +13 -23
  288. package/src/hooks/data/delete.ts +6 -5
  289. package/src/hooks/data/save.ts +26 -33
  290. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  291. package/src/hooks/data/useDataSource.tsx +11 -3
  292. package/src/hooks/data/useEntityFetch.tsx +10 -6
  293. package/src/hooks/index.tsx +2 -0
  294. package/src/hooks/useAuthController.tsx +1 -1
  295. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  296. package/src/hooks/useBrowserTitleAndIcon.tsx +1 -1
  297. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  298. package/src/hooks/useBuildModeController.tsx +22 -29
  299. package/src/hooks/useBuildNavigationController.tsx +440 -119
  300. package/src/hooks/useCollapsedGroups.ts +64 -0
  301. package/src/hooks/useFireCMSContext.tsx +3 -33
  302. package/src/hooks/useLargeLayout.tsx +0 -35
  303. package/src/hooks/useModeController.tsx +1 -2
  304. package/src/hooks/useProjectLog.tsx +32 -10
  305. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  306. package/src/hooks/useValidateAuthenticator.tsx +17 -37
  307. package/src/index.ts +1 -0
  308. package/src/internal/useBuildDataSource.ts +79 -85
  309. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  310. package/src/internal/useBuildSideEntityController.tsx +204 -77
  311. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  312. package/src/preview/PropertyPreview.tsx +34 -25
  313. package/src/preview/PropertyPreviewProps.tsx +7 -1
  314. package/src/preview/components/BooleanPreview.tsx +2 -2
  315. package/src/preview/components/EmptyValue.tsx +1 -1
  316. package/src/preview/components/EnumValuesChip.tsx +2 -2
  317. package/src/preview/components/ImagePreview.tsx +26 -37
  318. package/src/preview/components/ReferencePreview.tsx +26 -36
  319. package/src/preview/components/StorageThumbnail.tsx +5 -1
  320. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  321. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -6
  322. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +7 -5
  323. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -4
  324. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -4
  325. package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -6
  326. package/src/preview/property_previews/ArrayPropertyPreview.tsx +7 -6
  327. package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
  328. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  329. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  330. package/src/preview/util.ts +10 -10
  331. package/src/routes/CustomCMSRoute.tsx +21 -0
  332. package/src/routes/FireCMSRoute.tsx +246 -0
  333. package/src/routes/HomePageRoute.tsx +17 -0
  334. package/src/types/analytics.ts +3 -0
  335. package/src/types/auth.tsx +9 -13
  336. package/src/types/collections.ts +134 -30
  337. package/src/types/customization_controller.tsx +9 -1
  338. package/src/types/datasource.ts +61 -43
  339. package/src/types/dialogs_controller.tsx +7 -3
  340. package/src/types/entities.ts +12 -2
  341. package/src/types/entity_actions.tsx +86 -10
  342. package/src/types/entity_callbacks.ts +18 -18
  343. package/src/types/entity_overrides.tsx +2 -2
  344. package/src/types/export_import.ts +4 -4
  345. package/src/types/fields.tsx +85 -46
  346. package/src/types/firecms.tsx +18 -4
  347. package/src/types/firecms_context.tsx +1 -1
  348. package/src/types/index.ts +0 -1
  349. package/src/types/navigation.ts +77 -24
  350. package/src/types/permissions.ts +5 -5
  351. package/src/types/plugins.tsx +66 -15
  352. package/src/types/properties.ts +96 -27
  353. package/src/types/property_config.tsx +1 -2
  354. package/src/types/roles.ts +3 -0
  355. package/src/types/side_dialogs_controller.tsx +15 -0
  356. package/src/types/side_entity_controller.tsx +16 -1
  357. package/src/types/storage.ts +83 -1
  358. package/src/types/user.ts +2 -0
  359. package/src/util/builders.ts +10 -8
  360. package/src/util/callbacks.ts +119 -0
  361. package/src/util/createFormexStub.tsx +62 -0
  362. package/src/util/entities.ts +10 -7
  363. package/src/util/entity_actions.ts +28 -0
  364. package/src/util/entity_cache.ts +204 -0
  365. package/src/util/enums.ts +1 -1
  366. package/src/util/icon_list.ts +16 -10
  367. package/src/util/icon_synonyms.ts +3 -100
  368. package/src/util/icons.tsx +36 -11
  369. package/src/util/index.ts +3 -0
  370. package/src/util/join_collections.ts +9 -2
  371. package/src/util/make_properties_editable.ts +13 -5
  372. package/src/util/navigation_from_path.ts +33 -12
  373. package/src/util/navigation_utils.ts +141 -25
  374. package/src/util/objects.ts +90 -33
  375. package/src/util/parent_references_from_path.ts +3 -3
  376. package/src/util/permissions.ts +9 -8
  377. package/src/util/plurals.ts +0 -2
  378. package/src/util/property_utils.tsx +17 -6
  379. package/src/util/references.ts +19 -8
  380. package/src/util/resolutions.ts +122 -48
  381. package/src/util/storage.ts +79 -21
  382. package/src/util/strings.ts +2 -2
  383. package/src/util/useStorageUploadController.tsx +91 -28
  384. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  385. package/dist/components/FireCMSAppBar.d.ts +0 -26
  386. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  387. package/dist/components/VirtualTable/common.d.ts +0 -2
  388. package/dist/core/Drawer.d.ts +0 -23
  389. package/dist/core/Scaffold.d.ts +0 -55
  390. package/dist/core/SideEntityView.d.ts +0 -7
  391. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  392. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  393. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  394. package/dist/internal/useLocaleConfig.d.ts +0 -1
  395. package/dist/types/appcheck.d.ts +0 -26
  396. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
  397. package/src/components/FireCMSAppBar.tsx +0 -165
  398. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  399. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  400. package/src/core/Drawer.tsx +0 -191
  401. package/src/core/Scaffold.tsx +0 -281
  402. package/src/core/SideEntityView.tsx +0 -38
  403. package/src/form/components/FormikArrayContainer.tsx +0 -44
  404. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  405. package/src/internal/useBuildCustomizationController.tsx +0 -5
  406. package/src/internal/useLocaleConfig.tsx +0 -18
  407. package/src/types/appcheck.ts +0 -29
  408. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -0,0 +1,64 @@
1
+ import { useCallback, useEffect, useState } from "react";
2
+
3
+ /**
4
+ * Custom hook for managing collapsed/expanded state of navigation groups
5
+ * with localStorage persistence. Automatically cleans up stale group entries
6
+ * when groups are removed from the navigation.
7
+ */
8
+ export function useCollapsedGroups(groupNames: string[]) {
9
+ // Load collapsed groups from localStorage on mount
10
+ const [collapsedGroups, setCollapsedGroups] = useState<Record<string, boolean>>(() => {
11
+ try {
12
+ const stored = localStorage.getItem('firecms-collapsed-groups');
13
+ return stored ? JSON.parse(stored) : {};
14
+ } catch {
15
+ return {};
16
+ }
17
+ });
18
+
19
+ // Save to localStorage whenever collapsedGroups changes
20
+ useEffect(() => {
21
+ try {
22
+ localStorage.setItem('firecms-collapsed-groups', JSON.stringify(collapsedGroups));
23
+ } catch {
24
+ // Silently fail if localStorage is not available
25
+ }
26
+ }, [collapsedGroups]);
27
+
28
+ // Clean up collapsed groups state when groups change - remove entries for groups that no longer exist
29
+ useEffect(() => {
30
+ // Only clean up if we have actual groups loaded (avoid cleaning up during initial load)
31
+ if (groupNames.length === 0) return;
32
+
33
+ const currentGroupNames = new Set(groupNames);
34
+
35
+ setCollapsedGroups(prev => {
36
+ const cleaned = Object.fromEntries(
37
+ Object.entries(prev).filter(([groupName]) => currentGroupNames.has(groupName))
38
+ );
39
+
40
+ // Only update if something actually changed
41
+ const prevKeys = Object.keys(prev);
42
+ const cleanedKeys = Object.keys(cleaned);
43
+
44
+ if (prevKeys.length === cleanedKeys.length && prevKeys.every(key => cleanedKeys.includes(key))) {
45
+ return prev;
46
+ }
47
+
48
+ return cleaned;
49
+ });
50
+ }, [groupNames]);
51
+
52
+ const isGroupCollapsed = useCallback((name: string) => {
53
+ return !!collapsedGroups[name];
54
+ }, [collapsedGroups]);
55
+
56
+ const toggleGroupCollapsed = useCallback((name: string) => {
57
+ setCollapsedGroups(prev => ({ ...prev, [name]: !prev[name] }));
58
+ }, []);
59
+
60
+ return {
61
+ isGroupCollapsed,
62
+ toggleGroupCollapsed
63
+ };
64
+ }
@@ -21,9 +21,9 @@ import React, { useEffect } from "react";
21
21
  * @see FireCMSContext
22
22
  * @group Hooks and utilities
23
23
  */
24
- export const useFireCMSContext = <UserType extends User = User, AuthControllerType extends AuthController<UserType> = AuthController<UserType>>(): FireCMSContext<UserType, AuthControllerType> => {
24
+ export const useFireCMSContext = <USER extends User = User, AuthControllerType extends AuthController<USER> = AuthController<USER>>(): FireCMSContext<USER, AuthControllerType> => {
25
25
 
26
- const authController = useAuthController<UserType, AuthControllerType>();
26
+ const authController = useAuthController<USER, AuthControllerType>();
27
27
  const sideDialogsController = useSideDialogsController();
28
28
  const sideEntityController = useSideEntityController();
29
29
  const navigation = useNavigationController();
@@ -35,7 +35,7 @@ export const useFireCMSContext = <UserType extends User = User, AuthControllerTy
35
35
  const customizationController = useCustomizationController();
36
36
  const analyticsController = useAnalyticsController();
37
37
 
38
- const fireCMSContextRef = React.useRef<FireCMSContext<UserType, AuthControllerType>>({
38
+ const fireCMSContextRef = React.useRef<FireCMSContext<USER, AuthControllerType>>({
39
39
  authController,
40
40
  sideDialogsController,
41
41
  sideEntityController,
@@ -67,33 +67,3 @@ export const useFireCMSContext = <UserType extends User = User, AuthControllerTy
67
67
 
68
68
  return fireCMSContextRef.current;
69
69
  }
70
-
71
- // export const useFireCMSContext = <UserType extends User = User, AuthControllerType extends AuthController<UserType> = AuthController<UserType>>(): FireCMSContext<UserType, AuthControllerType> => {
72
- //
73
- // const authController = useAuthController<UserType, AuthControllerType>();
74
- // const sideDialogsController = useSideDialogsController();
75
- // const sideEntityController = useSideEntityController();
76
- // const navigation = useNavigationController();
77
- // const dataSource = useDataSource();
78
- // const storageSource = useStorageSource();
79
- // const snackbarController = useSnackbarController();
80
- // const userConfigPersistence = useUserConfigurationPersistence();
81
- // const dialogsController = useDialogsController();
82
- // const customizationController = useCustomizationController();
83
- // const analyticsController = useAnalyticsController();
84
- //
85
- // return {
86
- // authController,
87
- // sideDialogsController,
88
- // sideEntityController,
89
- // navigation,
90
- // dataSource,
91
- // storageSource,
92
- // snackbarController,
93
- // userConfigPersistence,
94
- // dialogsController,
95
- // customizationController,
96
- // analyticsController
97
- // };
98
- //
99
- // };
@@ -63,38 +63,3 @@ function checkLargeLayout(breakpoint: "xs" | "sm" | "md" | "lg" | "xl" | "2xl" |
63
63
  return false;
64
64
  return window.matchMedia(`(min-width: ${breakpoints[breakpoint] + 1}px)`).matches;
65
65
  }
66
-
67
- // import { useEffect, useState } from "react";
68
- //
69
- // const breakpoints = {
70
- // xs: 0,
71
- // sm: 640,
72
- // md: 768,
73
- // lg: 1024,
74
- // xl: 1280,
75
- // "2xl": 1536,
76
- // "3xl": 1920
77
- // }
78
- // export const useLargeLayout = (breakpoint: "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" = "lg"): boolean => {
79
- // const [isLargeLayout, setIsLargeLayout] = useState<boolean>(false);
80
- //
81
- // useEffect(() => {
82
- // const handleResize = () => {
83
- // const matched = window.matchMedia(`(min-width: ${breakpoints[breakpoint] + 1}px)`).matches;
84
- // setIsLargeLayout(matched);
85
- // };
86
- //
87
- // // Set initial state
88
- // handleResize();
89
- //
90
- // // Set up event listener for resize events
91
- // window.addEventListener("resize", handleResize);
92
- //
93
- // // Clean up event listener when component unmounts
94
- // return () => {
95
- // window.removeEventListener("resize", handleResize);
96
- // };
97
- // }, []);
98
- //
99
- // return isLargeLayout;
100
- // };
@@ -7,8 +7,7 @@ import { useContext } from "react";
7
7
  */
8
8
  export interface ModeController {
9
9
  mode: "light" | "dark";
10
- setMode: (mode: "light" | "dark") => void;
11
- toggleMode: () => void;
10
+ setMode: (mode: "light" | "dark" | "system") => void;
12
11
  }
13
12
 
14
13
  /**
@@ -1,5 +1,5 @@
1
1
  import { useEffect, useRef, useState } from "react";
2
- import { AuthController, FireCMSPlugin } from "../types";
2
+ import { AuthController, DataSourceDelegate, FireCMSPlugin } from "../types";
3
3
 
4
4
  export const DEFAULT_SERVER_DEV = "https://api-kdoe6pj3qq-ey.a.run.app";
5
5
  export const DEFAULT_SERVER = "https://api-drplyi3b6q-ey.a.run.app";
@@ -9,33 +9,55 @@ export type AccessResponse = {
9
9
  message?: string;
10
10
  }
11
11
 
12
- async function makeRequest(authController: AuthController, pluginKeys: string | undefined) {
13
- const firebaseToken = await authController.getAuthToken();
12
+ async function makeRequest(authController: AuthController, dataSourceKey: string, pluginKeys: string[] | undefined, apiKey?: string): Promise<AccessResponse> {
13
+ let idToken: string | null;
14
+ try {
15
+ idToken = await authController.getAuthToken();
16
+ } catch (e) {
17
+ idToken = null;
18
+ }
14
19
  return fetch(DEFAULT_SERVER + "/access_log",
15
20
  {
16
21
  // mode: "no-cors",
17
22
  method: "POST",
18
23
  headers: {
19
24
  "Content-Type": "application/json",
20
- Authorization: `Basic ${firebaseToken}`,
25
+ Authorization: `Basic ${idToken}`
21
26
  },
22
- body: JSON.stringify({ plugins: pluginKeys })
27
+ body: JSON.stringify({
28
+ apiKey,
29
+ email: authController.user?.email ?? null,
30
+ datasource: dataSourceKey,
31
+ plugins: pluginKeys
32
+ })
23
33
  })
24
34
  .then(async (res) => {
25
35
  return res.json();
26
36
  });
27
37
  }
28
38
 
29
- export function useProjectLog(authController: AuthController,
30
- plugins?: FireCMSPlugin<any, any, any>[]): AccessResponse | null {
39
+ export interface UseProjectLogParams {
40
+ apiKey?: string;
41
+ authController: AuthController;
42
+ dataSourceDelegate: DataSourceDelegate;
43
+ plugins?: FireCMSPlugin<any, any, any>[];
44
+ }
45
+
46
+ export function useProjectLog({
47
+ authController,
48
+ dataSourceDelegate,
49
+ plugins,
50
+ apiKey
51
+ }: UseProjectLogParams): AccessResponse | null {
31
52
  const [accessResponse, setAccessResponse] = useState<AccessResponse | null>(null);
32
53
  const accessedUserRef = useRef<string | null>(null);
33
- const pluginKeys = plugins?.map(plugin => plugin.key).join(",");
54
+ const dataSourceKey = dataSourceDelegate.key;
55
+ const pluginKeys = plugins?.map(plugin => plugin.key);
34
56
  useEffect(() => {
35
57
  if (authController.user && authController.user.uid !== accessedUserRef.current && !authController.initialLoading) {
36
- makeRequest(authController, pluginKeys).then(setAccessResponse);
58
+ makeRequest(authController, dataSourceKey, pluginKeys, apiKey).then(setAccessResponse);
37
59
  accessedUserRef.current = authController.user.uid;
38
60
  }
39
- }, [authController]);
61
+ }, [authController, dataSourceKey, pluginKeys]);
40
62
  return accessResponse;
41
63
  }
@@ -1,6 +1,6 @@
1
1
  import { Entity, EntityCollection, EntityCustomView, FireCMSContext, User } from "../types";
2
2
  import { useEffect, useState } from "react";
3
- import { getNavigationEntriesFromPathInternal } from "../util/navigation_from_path";
3
+ import { getNavigationEntriesFromPath } from "../util/navigation_from_path";
4
4
  import { useFireCMSContext } from "./useFireCMSContext";
5
5
 
6
6
  /**
@@ -55,22 +55,22 @@ interface ResolvedNavigationEntityCustom<M extends Record<string, any>> {
55
55
  * @param context
56
56
  * @group Hooks and utilities
57
57
  */
58
- export function resolveNavigationFrom<M extends Record<string, any>, UserType extends User>({
58
+ export function resolveNavigationFrom<M extends Record<string, any>, USER extends User>({
59
59
  path,
60
60
  context
61
61
  }: {
62
62
  path: string,
63
- context: FireCMSContext<UserType>
63
+ context: FireCMSContext<USER>
64
64
  }): Promise<ResolvedNavigationEntry<M>[]> {
65
65
 
66
66
  const dataSource = context.dataSource;
67
67
  const navigation = context.navigation;
68
68
 
69
69
  if (!navigation) {
70
- throw Error("Calling getNavigationFrom, but main navigation has not yet been initialised");
70
+ throw Error("Calling resolveNavigationFrom, but main navigation has not yet been initialised");
71
71
  }
72
72
 
73
- const navigationEntries = getNavigationEntriesFromPathInternal({
73
+ const navigationEntries = getNavigationEntriesFromPath({
74
74
  path,
75
75
  collections: navigation.collections ?? []
76
76
  });
@@ -80,7 +80,7 @@ export function resolveNavigationFrom<M extends Record<string, any>, UserType ex
80
80
  if (entry.type === "collection") {
81
81
  return Promise.resolve(entry);
82
82
  } else if (entry.type === "entity") {
83
- const collection = navigation.getCollection(entry.path, entry.entityId);
83
+ const collection = navigation.getCollection(entry.path);
84
84
  if (!collection) {
85
85
  throw Error(`No collection defined in the navigation for the entity with path ${entry.path}`);
86
86
  }
@@ -126,12 +126,12 @@ export interface NavigationFrom<M extends Record<string, any>> {
126
126
  * in any React component that lives under `FireCMS`
127
127
  * @group Hooks and utilities
128
128
  */
129
- export function useResolvedNavigationFrom<M extends Record<string, any>, UserType extends User>(
129
+ export function useResolvedNavigationFrom<M extends Record<string, any>, USER extends User>(
130
130
  {
131
131
  path
132
132
  }: NavigationFromProps): NavigationFrom<M> {
133
133
 
134
- const context: FireCMSContext<UserType> = useFireCMSContext();
134
+ const context: FireCMSContext<USER> = useFireCMSContext();
135
135
 
136
136
  const [data, setData] = useState<ResolvedNavigationEntry<M>[] | undefined>();
137
137
  const [dataLoading, setDataLoading] = useState<boolean>(false);
@@ -142,10 +142,8 @@ export function useResolvedNavigationFrom<M extends Record<string, any>, UserTyp
142
142
  if (navigation) {
143
143
  setDataLoading(true);
144
144
  setDataLoadingError(undefined);
145
- resolveNavigationFrom<M, UserType>({ path, context })
146
- .then((res) => {
147
- setData(res);
148
- })
145
+ resolveNavigationFrom<M, USER>({ path, context })
146
+ .then(setData)
149
147
  .catch((e) => setDataLoadingError(e))
150
148
  .finally(() => setDataLoading(false));
151
149
  }
@@ -1,36 +1,31 @@
1
1
  import { useCallback, useEffect, useRef, useState } from "react";
2
2
  import equal from "react-fast-compare";
3
3
 
4
- import { AppCheckTokenResult, AuthController, Authenticator, DataSourceDelegate, StorageSource, User } from "../index";
4
+ import { AuthController, Authenticator, DataSourceDelegate, StorageSource, User } from "../index";
5
5
 
6
6
  /**
7
7
  * This hook is used internally for validating an authenticator.
8
8
  *
9
9
  * @param authController
10
10
  * @param authentication
11
- * @param getAppCheckToken
12
- * @param appCheckForceRefresh
13
11
  * @param storageSource
14
12
  * @param dataSourceDelegate
15
13
  */
16
- export function useValidateAuthenticator<UserType extends User = User, Controller extends AuthController<UserType> = AuthController<UserType>>({
17
- disabled,
18
- authController,
19
- authenticator,
20
- getAppCheckToken,
21
- appCheckForceRefresh = false,
22
- storageSource,
23
- dataSourceDelegate
24
- }:
25
- {
26
- disabled?: boolean,
27
- authController: Controller,
28
- authenticator?: boolean | Authenticator<UserType, Controller>,
29
- getAppCheckToken?: (forceRefresh: boolean) => Promise<AppCheckTokenResult> | undefined,
30
- appCheckForceRefresh?: boolean,
31
- dataSourceDelegate: DataSourceDelegate;
32
- storageSource: StorageSource;
33
- }): {
14
+ export function useValidateAuthenticator<USER extends User = any>
15
+ ({
16
+ disabled,
17
+ authController,
18
+ authenticator,
19
+ storageSource,
20
+ dataSourceDelegate
21
+ }:
22
+ {
23
+ disabled?: boolean,
24
+ authController: AuthController<USER>,
25
+ authenticator?: boolean | Authenticator<USER>,
26
+ dataSourceDelegate: DataSourceDelegate;
27
+ storageSource: StorageSource;
28
+ }): {
34
29
  canAccessMainView: boolean,
35
30
  authLoading: boolean,
36
31
  notAllowedError: any,
@@ -76,21 +71,6 @@ export function useValidateAuthenticator<UserType extends User = User, Controlle
76
71
  }
77
72
 
78
73
  const delegateUser = authController.user;
79
- console.debug("Checking authentication for user", delegateUser);
80
-
81
- if (getAppCheckToken) {
82
- try {
83
- if (!await getAppCheckToken(appCheckForceRefresh)) {
84
- setNotAllowedError("App Check failed.");
85
- authController.signOut();
86
- } else {
87
- console.debug("App Check success.");
88
- }
89
- } catch (e: any) {
90
- setNotAllowedError(e.message);
91
- authController.signOut();
92
- }
93
- }
94
74
 
95
75
  if (authenticator instanceof Function && delegateUser && !equal(checkedUserRef.current?.uid, delegateUser.uid)) {
96
76
  setAuthLoading(true);
@@ -120,7 +100,7 @@ export function useValidateAuthenticator<UserType extends User = User, Controlle
120
100
  setAuthVerified(true);
121
101
  }
122
102
 
123
- }, [disabled, authController, authenticator, getAppCheckToken, appCheckForceRefresh, dataSourceDelegate, storageSource]);
103
+ }, [disabled, authController, authenticator, dataSourceDelegate, storageSource]);
124
104
 
125
105
  useEffect(() => {
126
106
  checkAuthentication();
package/src/index.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./core";
2
+ export * from "./app";
2
3
  export * from "./types";
3
4
  export * from "./form";
4
5
  export * from "./preview";