@firecms/core 3.0.0-canary.21 → 3.0.0-canary.211

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 (382) 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 +23 -6
  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 +13 -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 +16 -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 +5 -4
  26. package/dist/components/ErrorView.d.ts +1 -1
  27. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  28. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  29. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  30. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  31. package/dist/components/ReferenceWidget.d.ts +3 -1
  32. package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
  33. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  34. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  35. package/dist/components/VirtualTable/VirtualTableProps.d.ts +28 -12
  36. package/dist/components/VirtualTable/types.d.ts +3 -3
  37. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
  38. package/dist/components/common/index.d.ts +2 -1
  39. package/dist/components/common/table_height.d.ts +5 -0
  40. package/dist/components/common/types.d.ts +4 -6
  41. package/dist/components/common/useColumnsIds.d.ts +3 -1
  42. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
  43. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  44. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  45. package/dist/components/index.d.ts +4 -2
  46. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  47. package/dist/core/DefaultAppBar.d.ts +29 -0
  48. package/dist/core/DefaultDrawer.d.ts +19 -0
  49. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  50. package/dist/core/EntityEditView.d.ts +35 -11
  51. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  52. package/dist/core/FireCMS.d.ts +3 -3
  53. package/dist/core/FireCMSRouter.d.ts +4 -0
  54. package/dist/core/NavigationRoutes.d.ts +2 -3
  55. package/dist/core/SideDialogs.d.ts +4 -2
  56. package/dist/core/index.d.ts +4 -4
  57. package/dist/form/EntityForm.d.ts +37 -69
  58. package/dist/form/EntityFormActions.d.ts +17 -0
  59. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  60. package/dist/form/components/ErrorFocus.d.ts +1 -1
  61. package/dist/form/components/FieldHelperText.d.ts +3 -3
  62. package/dist/form/components/FormEntry.d.ts +6 -0
  63. package/dist/form/components/FormLayout.d.ts +5 -0
  64. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  65. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  66. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  67. package/dist/form/components/index.d.ts +3 -1
  68. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  69. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  70. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  71. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  72. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  73. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  74. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  75. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  76. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  77. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  78. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  79. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  80. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  81. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  82. package/dist/form/index.d.ts +16 -18
  83. package/dist/form/useClearRestoreValue.d.ts +2 -2
  84. package/dist/hooks/data/delete.d.ts +4 -4
  85. package/dist/hooks/data/save.d.ts +4 -5
  86. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  87. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  88. package/dist/hooks/index.d.ts +1 -0
  89. package/dist/hooks/useAuthController.d.ts +1 -1
  90. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  91. package/dist/hooks/useBuildNavigationController.d.ts +7 -5
  92. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  93. package/dist/hooks/useModeController.d.ts +1 -2
  94. package/dist/hooks/useProjectLog.d.ts +8 -2
  95. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  96. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  97. package/dist/index.d.ts +1 -0
  98. package/dist/index.es.js +21921 -14330
  99. package/dist/index.es.js.map +1 -1
  100. package/dist/index.umd.js +24271 -588
  101. package/dist/index.umd.js.map +1 -1
  102. package/dist/internal/useBuildDataSource.d.ts +1 -16
  103. package/dist/internal/useBuildSideEntityController.d.ts +2 -2
  104. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  105. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  106. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  107. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  108. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  109. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  110. package/dist/preview/util.d.ts +3 -3
  111. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  112. package/dist/routes/FireCMSRoute.d.ts +1 -0
  113. package/dist/routes/HomePageRoute.d.ts +3 -0
  114. package/dist/types/auth.d.ts +8 -10
  115. package/dist/types/collections.d.ts +77 -22
  116. package/dist/types/datasource.d.ts +52 -36
  117. package/dist/types/dialogs_controller.d.ts +7 -3
  118. package/dist/types/entities.d.ts +7 -2
  119. package/dist/types/entity_actions.d.ts +28 -4
  120. package/dist/types/entity_callbacks.d.ts +16 -16
  121. package/dist/types/entity_overrides.d.ts +2 -2
  122. package/dist/types/export_import.d.ts +4 -4
  123. package/dist/types/fields.d.ts +71 -42
  124. package/dist/types/firecms.d.ts +6 -2
  125. package/dist/types/firecms_context.d.ts +1 -1
  126. package/dist/types/index.d.ts +0 -1
  127. package/dist/types/navigation.d.ts +32 -14
  128. package/dist/types/permissions.d.ts +4 -4
  129. package/dist/types/plugins.d.ts +23 -12
  130. package/dist/types/properties.d.ts +52 -24
  131. package/dist/types/property_config.d.ts +0 -2
  132. package/dist/types/side_dialogs_controller.d.ts +10 -0
  133. package/dist/types/side_entity_controller.d.ts +6 -1
  134. package/dist/types/storage.d.ts +86 -3
  135. package/dist/types/user.d.ts +1 -0
  136. package/dist/util/builders.d.ts +3 -3
  137. package/dist/util/entities.d.ts +3 -3
  138. package/dist/util/entity_actions.d.ts +2 -0
  139. package/dist/util/entity_cache.d.ts +23 -0
  140. package/dist/util/icon_list.d.ts +5 -1
  141. package/dist/util/icon_synonyms.d.ts +1 -98
  142. package/dist/util/icons.d.ts +6 -3
  143. package/dist/util/index.d.ts +2 -0
  144. package/dist/util/navigation_from_path.d.ts +6 -1
  145. package/dist/util/navigation_utils.d.ts +14 -3
  146. package/dist/util/objects.d.ts +2 -1
  147. package/dist/util/permissions.d.ts +4 -4
  148. package/dist/util/plurals.d.ts +0 -2
  149. package/dist/util/property_utils.d.ts +3 -3
  150. package/dist/util/resolutions.d.ts +36 -17
  151. package/dist/util/storage.d.ts +23 -2
  152. package/dist/util/useStorageUploadController.d.ts +3 -3
  153. package/package.json +62 -48
  154. package/src/app/AppBar.tsx +18 -0
  155. package/src/app/Drawer.tsx +24 -0
  156. package/src/app/Scaffold.tsx +253 -0
  157. package/src/app/index.ts +4 -0
  158. package/src/app/useApp.tsx +32 -0
  159. package/src/components/ArrayContainer.tsx +127 -41
  160. package/src/components/CircularProgressCenter.tsx +2 -2
  161. package/src/components/ClearFilterSortButton.tsx +41 -0
  162. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +3 -3
  163. package/src/components/DeleteEntityDialog.tsx +10 -19
  164. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +54 -37
  165. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
  166. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
  167. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -39
  168. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  169. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
  170. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  171. package/src/components/EntityCollectionTable/index.tsx +1 -1
  172. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +31 -36
  173. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
  174. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  175. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +81 -80
  176. package/src/components/EntityCollectionView/EntityCollectionView.tsx +207 -113
  177. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +4 -2
  178. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  179. package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
  180. package/src/components/EntityCollectionView/utils.ts +19 -0
  181. package/src/components/EntityJsonPreview.tsx +66 -0
  182. package/src/components/EntityPreview.tsx +62 -52
  183. package/src/components/EntityView.tsx +10 -10
  184. package/src/components/ErrorView.tsx +4 -4
  185. package/src/components/HomePage/DefaultHomePage.tsx +26 -19
  186. package/src/components/HomePage/FavouritesView.tsx +6 -11
  187. package/src/components/HomePage/NavigationCard.tsx +3 -3
  188. package/src/components/HomePage/NavigationCardBinding.tsx +5 -10
  189. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  190. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  191. package/src/components/NotFoundPage.tsx +2 -2
  192. package/src/components/PropertyConfigBadge.tsx +9 -3
  193. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  194. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +19 -13
  195. package/src/components/ReferenceWidget.tsx +21 -11
  196. package/src/components/SearchIconsView.tsx +10 -7
  197. package/src/components/SelectableTable/SelectableTable.tsx +27 -12
  198. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  199. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  200. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
  201. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
  202. package/src/components/UnsavedChangesDialog.tsx +42 -0
  203. package/src/components/VirtualTable/VirtualTable.tsx +96 -48
  204. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  205. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  206. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  207. package/src/components/VirtualTable/VirtualTableProps.tsx +33 -14
  208. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  209. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  210. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +3 -2
  211. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  212. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  213. package/src/components/VirtualTable/types.tsx +2 -3
  214. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +33 -40
  215. package/src/components/common/index.ts +2 -1
  216. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  217. package/src/components/common/types.tsx +4 -6
  218. package/src/components/common/useColumnsIds.tsx +24 -3
  219. package/src/components/common/useDataSourceTableController.tsx +420 -0
  220. package/src/components/common/useDebouncedCallback.tsx +20 -0
  221. package/src/components/common/useScrollRestoration.tsx +68 -0
  222. package/src/components/common/useTableSearchHelper.ts +53 -12
  223. package/src/components/index.tsx +4 -2
  224. package/src/contexts/BreacrumbsContext.tsx +38 -0
  225. package/src/contexts/DialogsProvider.tsx +5 -4
  226. package/src/contexts/ModeController.tsx +1 -3
  227. package/src/contexts/SnackbarProvider.tsx +2 -0
  228. package/src/core/DefaultAppBar.tsx +219 -0
  229. package/src/core/DefaultDrawer.tsx +185 -0
  230. package/src/core/DrawerNavigationItem.tsx +66 -0
  231. package/src/core/EntityEditView.tsx +345 -480
  232. package/src/core/EntityEditViewFormActions.tsx +199 -0
  233. package/src/core/EntitySidePanel.tsx +86 -17
  234. package/src/core/FireCMS.tsx +56 -49
  235. package/src/core/FireCMSRouter.tsx +17 -0
  236. package/src/core/NavigationRoutes.tsx +28 -38
  237. package/src/core/SideDialogs.tsx +22 -12
  238. package/src/core/field_configs.tsx +11 -12
  239. package/src/core/index.tsx +6 -5
  240. package/src/form/EntityForm.tsx +585 -539
  241. package/src/form/EntityFormActions.tsx +169 -0
  242. package/src/form/PropertyFieldBinding.tsx +85 -44
  243. package/src/form/components/CustomIdField.tsx +6 -2
  244. package/src/form/components/FieldHelperText.tsx +4 -4
  245. package/src/form/components/FormEntry.tsx +22 -0
  246. package/src/form/components/FormLayout.tsx +16 -0
  247. package/src/form/components/LabelWithIcon.tsx +30 -19
  248. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  249. package/src/form/components/StorageItemPreview.tsx +22 -12
  250. package/src/form/components/StorageUploadProgress.tsx +4 -5
  251. package/src/form/components/index.tsx +3 -1
  252. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +31 -19
  253. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -35
  254. package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
  255. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  256. package/src/form/field_bindings/KeyValueFieldBinding.tsx +60 -51
  257. package/src/form/field_bindings/MapFieldBinding.tsx +71 -54
  258. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +153 -0
  259. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  260. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  261. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  262. package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -35
  263. package/src/form/field_bindings/SelectFieldBinding.tsx +22 -14
  264. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +42 -50
  265. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  266. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  267. package/src/form/index.tsx +16 -37
  268. package/src/form/useClearRestoreValue.tsx +2 -2
  269. package/src/form/validation.ts +13 -23
  270. package/src/hooks/data/delete.ts +6 -5
  271. package/src/hooks/data/save.ts +13 -9
  272. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  273. package/src/hooks/data/useDataSource.tsx +11 -3
  274. package/src/hooks/data/useEntityFetch.tsx +10 -6
  275. package/src/hooks/index.tsx +1 -0
  276. package/src/hooks/useAuthController.tsx +1 -1
  277. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  278. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  279. package/src/hooks/useBuildModeController.tsx +22 -29
  280. package/src/hooks/useBuildNavigationController.tsx +159 -54
  281. package/src/hooks/useFireCMSContext.tsx +5 -5
  282. package/src/hooks/useLargeLayout.tsx +0 -35
  283. package/src/hooks/useModeController.tsx +1 -2
  284. package/src/hooks/useProjectLog.tsx +32 -10
  285. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  286. package/src/hooks/useValidateAuthenticator.tsx +17 -37
  287. package/src/index.ts +1 -0
  288. package/src/internal/useBuildDataSource.ts +72 -82
  289. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  290. package/src/internal/useBuildSideEntityController.tsx +194 -73
  291. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  292. package/src/preview/PropertyPreview.tsx +17 -24
  293. package/src/preview/PropertyPreviewProps.tsx +7 -1
  294. package/src/preview/components/BooleanPreview.tsx +2 -2
  295. package/src/preview/components/EmptyValue.tsx +1 -1
  296. package/src/preview/components/EnumValuesChip.tsx +2 -2
  297. package/src/preview/components/ImagePreview.tsx +25 -36
  298. package/src/preview/components/ReferencePreview.tsx +22 -33
  299. package/src/preview/components/StorageThumbnail.tsx +5 -1
  300. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  301. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
  302. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
  303. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
  304. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
  305. package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
  306. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
  307. package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
  308. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +12 -12
  309. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  310. package/src/preview/util.ts +10 -10
  311. package/src/routes/CustomCMSRoute.tsx +21 -0
  312. package/src/routes/FireCMSRoute.tsx +235 -0
  313. package/src/routes/HomePageRoute.tsx +17 -0
  314. package/src/types/auth.tsx +9 -13
  315. package/src/types/collections.ts +94 -27
  316. package/src/types/customization_controller.tsx +0 -1
  317. package/src/types/datasource.ts +61 -43
  318. package/src/types/dialogs_controller.tsx +7 -3
  319. package/src/types/entities.ts +12 -2
  320. package/src/types/entity_actions.tsx +32 -7
  321. package/src/types/entity_callbacks.ts +18 -18
  322. package/src/types/entity_overrides.tsx +2 -2
  323. package/src/types/export_import.ts +4 -4
  324. package/src/types/fields.tsx +81 -46
  325. package/src/types/firecms.tsx +7 -2
  326. package/src/types/firecms_context.tsx +1 -1
  327. package/src/types/index.ts +0 -1
  328. package/src/types/navigation.ts +38 -18
  329. package/src/types/permissions.ts +5 -5
  330. package/src/types/plugins.tsx +25 -14
  331. package/src/types/properties.ts +60 -25
  332. package/src/types/property_config.tsx +0 -2
  333. package/src/types/side_dialogs_controller.tsx +15 -0
  334. package/src/types/side_entity_controller.tsx +6 -1
  335. package/src/types/storage.ts +94 -3
  336. package/src/types/user.ts +2 -0
  337. package/src/util/builders.ts +10 -8
  338. package/src/util/entities.ts +9 -6
  339. package/src/util/entity_actions.ts +28 -0
  340. package/src/util/entity_cache.ts +204 -0
  341. package/src/util/enums.ts +1 -1
  342. package/src/util/icon_list.ts +16 -10
  343. package/src/util/icon_synonyms.ts +3 -100
  344. package/src/util/icons.tsx +17 -7
  345. package/src/util/index.ts +2 -0
  346. package/src/util/join_collections.ts +3 -0
  347. package/src/util/make_properties_editable.ts +13 -5
  348. package/src/util/navigation_from_path.ts +13 -6
  349. package/src/util/navigation_utils.ts +59 -7
  350. package/src/util/objects.ts +48 -28
  351. package/src/util/parent_references_from_path.ts +3 -3
  352. package/src/util/permissions.ts +9 -8
  353. package/src/util/plurals.ts +0 -2
  354. package/src/util/property_utils.tsx +11 -4
  355. package/src/util/references.ts +11 -2
  356. package/src/util/resolutions.ts +100 -46
  357. package/src/util/storage.ts +79 -21
  358. package/src/util/strings.ts +2 -2
  359. package/src/util/useStorageUploadController.tsx +71 -27
  360. package/dist/components/FireCMSAppBar.d.ts +0 -26
  361. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  362. package/dist/components/VirtualTable/common.d.ts +0 -2
  363. package/dist/core/Drawer.d.ts +0 -23
  364. package/dist/core/Scaffold.d.ts +0 -55
  365. package/dist/core/SideEntityView.d.ts +0 -7
  366. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  367. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  368. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  369. package/dist/internal/useLocaleConfig.d.ts +0 -1
  370. package/dist/types/appcheck.d.ts +0 -26
  371. package/src/components/FireCMSAppBar.tsx +0 -165
  372. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  373. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  374. package/src/core/Drawer.tsx +0 -191
  375. package/src/core/Scaffold.tsx +0 -281
  376. package/src/core/SideEntityView.tsx +0 -38
  377. package/src/form/components/FormikArrayContainer.tsx +0 -44
  378. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  379. package/src/internal/useBuildCustomizationController.tsx +0 -5
  380. package/src/internal/useLocaleConfig.tsx +0 -18
  381. package/src/types/appcheck.ts +0 -29
  382. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -1,191 +0,0 @@
1
- import React, { useCallback } from "react";
2
-
3
- import { useLargeLayout, useNavigationController } from "../hooks";
4
-
5
- import { NavLink, useNavigate } from "react-router-dom";
6
- import { CMSAnalyticsEvent, TopNavigationEntry, TopNavigationResult } from "../types";
7
- import { IconForView } from "../util";
8
- import { cn, IconButton, Menu, MenuItem, MoreVertIcon, Tooltip, Typography } from "@firecms/ui";
9
- import { useAnalyticsController } from "../hooks/useAnalyticsController";
10
-
11
- /**
12
- * Props used in case you need to override the default drawer
13
- * @group Core
14
- */
15
- export type DrawerProps<T = {}> = T & {
16
- hovered: boolean,
17
- drawerOpen: boolean,
18
- closeDrawer: () => any,
19
- }
20
-
21
- /**
22
- * Default drawer used in the CMS
23
- * @group Core
24
- */
25
- export function Drawer({
26
- hovered,
27
- drawerOpen,
28
- closeDrawer
29
- }: DrawerProps) {
30
-
31
- const analyticsController = useAnalyticsController();
32
- const navigation = useNavigationController();
33
-
34
- const tooltipsOpen = hovered && !drawerOpen;
35
- const largeLayout = useLargeLayout();
36
- const navigate = useNavigate();
37
-
38
- const [adminMenuOpen, setAdminMenuOpen] = React.useState(false);
39
-
40
- if (!navigation.topLevelNavigation)
41
- throw Error("Navigation not ready in Drawer");
42
-
43
- const {
44
- navigationEntries,
45
- groups
46
- }: TopNavigationResult = navigation.topLevelNavigation;
47
-
48
- const adminViews = navigationEntries.filter(e => e.type === "admin") ?? [];
49
- const groupsWithoutAdmin = groups.filter(g => g !== "Admin");
50
-
51
- const buildGroupHeader = useCallback((group?: string) => {
52
- if (!drawerOpen) return <div className="h-12 w-full"/>;
53
- return <div
54
- className="pt-8 pl-6 pr-8 pb-2 flex flex-row items-center">
55
- <Typography variant={"caption"}
56
- color={"secondary"}
57
- className="font-medium flex-grow line-clamp-1">
58
- {group ? group.toUpperCase() : "Views".toUpperCase()}
59
- </Typography>
60
-
61
- </div>;
62
- }, [drawerOpen]);
63
-
64
- const onClick = (view: TopNavigationEntry) => {
65
- const eventName: CMSAnalyticsEvent = view.type === "collection"
66
- ? "drawer_navigate_to_collection"
67
- : (view.type === "view" ? "drawer_navigate_to_view" : "unmapped_event");
68
- analyticsController.onAnalyticsEvent?.(eventName, { url: view.url });
69
- if (!largeLayout)
70
- closeDrawer();
71
- };
72
-
73
- return (
74
- <>
75
-
76
- <div className={"flex-grow overflow-scroll no-scrollbar"}>
77
-
78
- {groupsWithoutAdmin.map((group) => (
79
- <React.Fragment
80
- key={`drawer_group_${group}`}>
81
- {buildGroupHeader(group)}
82
- {Object.values(navigationEntries)
83
- .filter(e => e.group === group)
84
- .map((view, index) =>
85
- <DrawerNavigationItem
86
- key={`navigation_${index}`}
87
- icon={<IconForView collectionOrView={view.collection ?? view.view}/>}
88
- tooltipsOpen={tooltipsOpen}
89
- drawerOpen={drawerOpen}
90
- onClick={() => onClick(view)}
91
- url={view.url}
92
- name={view.name}/>)}
93
- </React.Fragment>
94
- ))}
95
-
96
- </div>
97
-
98
- {adminViews.length > 0 && <Menu
99
- open={adminMenuOpen}
100
- onOpenChange={setAdminMenuOpen}
101
- trigger={
102
- <IconButton
103
- shape={"square"}
104
- className={"m-4 text-gray-900 dark:text-white w-fit"}>
105
- <Tooltip title={"Admin"}
106
- open={tooltipsOpen}
107
- side={"right"} sideOffset={28}>
108
- <MoreVertIcon/>
109
- </Tooltip>
110
- {drawerOpen && <div
111
- className={cn(
112
- drawerOpen ? "opacity-100" : "opacity-0 hidden",
113
- "mx-4 font-inherit text-inherit"
114
- )}>
115
- ADMIN
116
- </div>}
117
- </IconButton>}
118
- >
119
- {adminViews.map((entry, index) =>
120
- <MenuItem
121
- onClick={(event) => {
122
- event.preventDefault();
123
- navigate(entry.path);
124
- }}
125
- key={`navigation_${index}`}>
126
- {<IconForView collectionOrView={entry.view}/>}
127
- {entry.name}
128
- </MenuItem>)}
129
-
130
- </Menu>}
131
- </>
132
- );
133
- }
134
-
135
- export function DrawerNavigationItem({
136
- name,
137
- icon,
138
- drawerOpen,
139
- tooltipsOpen,
140
- url,
141
- onClick
142
- }: {
143
- icon: React.ReactElement,
144
- name: string,
145
- tooltipsOpen: boolean,
146
- drawerOpen: boolean,
147
- url: string,
148
- onClick?: () => void,
149
- }) {
150
-
151
- const iconWrap = <div
152
- className={"text-gray-600 dark:text-gray-500"}>
153
- {icon}
154
- </div>;
155
-
156
- const listItem = <NavLink
157
- onClick={onClick}
158
- style={{
159
- width: !drawerOpen ? "72px" : "280px",
160
- transition: drawerOpen ? "width 150ms ease-in" : undefined
161
- }}
162
- className={({ isActive }: any) => cn("rounded-r-xl truncate",
163
- "hover:bg-slate-300 hover:bg-opacity-75 dark:hover:bg-gray-700 dark:hover:bg-opacity-75 text-gray-800 dark:text-gray-200 hover:text-gray-900 hover:dark:text-white",
164
- "flex flex-row items-center mr-8",
165
- // "transition-all ease-in-out delay-100 duration-300",
166
- // drawerOpen ? "w-full" : "w-18",
167
- drawerOpen ? "pl-8 h-12" : "pl-6 h-11",
168
- "font-medium text-sm",
169
- isActive ? "bg-slate-200 bg-opacity-75 dark:bg-gray-800" : ""
170
- )}
171
- to={url}
172
- >
173
-
174
- {iconWrap}
175
-
176
- <div
177
- className={cn(
178
- drawerOpen ? "opacity-100" : "opacity-0 hidden",
179
- "ml-4 font-inherit text-inherit"
180
- )}>
181
- {name.toUpperCase()}
182
- </div>
183
- </NavLink>;
184
-
185
- return <Tooltip
186
- open={drawerOpen ? false : tooltipsOpen}
187
- side="right"
188
- title={name}>
189
- {listItem}
190
- </Tooltip>;
191
- }
@@ -1,281 +0,0 @@
1
- import React, { PropsWithChildren, useCallback } from "react";
2
- import equal from "react-fast-compare"
3
- import { Link } from "react-router-dom";
4
-
5
- import { Drawer as DefaultDrawer, DrawerProps } from "./Drawer";
6
- import { useLargeLayout, useNavigationController } from "../hooks";
7
- import { ErrorBoundary, FireCMSAppBar as DefaultFireCMSAppBar, FireCMSAppBarProps, FireCMSLogo } from "../components";
8
- import { ChevronLeftIcon, cn, defaultBorderMixin, IconButton, MenuIcon, Sheet, Tooltip } from "@firecms/ui";
9
-
10
- export const DRAWER_WIDTH = 280;
11
-
12
- /**
13
- * @group Core
14
- */
15
- export interface ScaffoldProps<ExtraDrawerProps = object, ExtraAppbarProps = object> {
16
-
17
- /**
18
- * Name of the app, displayed as the main title and in the tab title
19
- */
20
- name: string;
21
-
22
- /**
23
- * Logo to be displayed in the drawer of the CMS
24
- */
25
- logo?: string;
26
-
27
- /**
28
- * Whether to include the drawer in the scaffold
29
- */
30
- includeDrawer?: boolean;
31
-
32
- /**
33
- * In case you need to override the view that gets rendered as a drawer
34
- * @see DefaultDrawer
35
- */
36
- Drawer?: React.ComponentType<DrawerProps<ExtraDrawerProps>>;
37
-
38
- /**
39
- * Additional props passed to the custom Drawer
40
- */
41
- drawerProps?: Partial<DrawerProps> & ExtraDrawerProps;
42
-
43
- /**
44
- * Open the drawer on hover
45
- */
46
- autoOpenDrawer?: boolean;
47
-
48
- /**
49
- * A component that gets rendered on the upper side of the main toolbar.
50
- * `toolbarExtraWidget` has no effect if this is set.
51
- */
52
- FireCMSAppBar?: React.ComponentType<FireCMSAppBarProps<ExtraAppbarProps>>;
53
-
54
- /**
55
- * Additional props passed to the custom AppBar
56
- */
57
- fireCMSAppBarProps?: Partial<FireCMSAppBarProps> & ExtraAppbarProps;
58
-
59
- }
60
-
61
- /**
62
- * This view acts as a scaffold for FireCMS.
63
- *
64
- * It is in charge of displaying the navigation drawer, top bar and main
65
- * collection views.
66
- * This component needs a parent {@link FireCMS}
67
- *
68
- * @param props
69
- * @constructor
70
- * @group Core
71
- */
72
- export const Scaffold = React.memo<PropsWithChildren<ScaffoldProps>>(
73
- function Scaffold(props: PropsWithChildren<ScaffoldProps>) {
74
-
75
- const {
76
- children,
77
- name,
78
- logo,
79
- includeDrawer = true,
80
- autoOpenDrawer,
81
- Drawer = DefaultDrawer,
82
- drawerProps,
83
- FireCMSAppBar = DefaultFireCMSAppBar,
84
- fireCMSAppBarProps,
85
- } = props;
86
-
87
- const largeLayout = useLargeLayout();
88
-
89
- const [drawerOpen, setDrawerOpen] = React.useState(false);
90
- const [onHover, setOnHover] = React.useState(false);
91
-
92
- const setOnHoverTrue = useCallback(() => setOnHover(true), []);
93
- const setOnHoverFalse = useCallback(() => setOnHover(false), []);
94
-
95
- const handleDrawerClose = useCallback(() => {
96
- setDrawerOpen(false);
97
- }, []);
98
-
99
- const computedDrawerOpen: boolean = drawerOpen || Boolean(largeLayout && autoOpenDrawer && onHover);
100
- return (
101
- <div
102
- className="flex h-screen w-screen bg-gray-50 dark:bg-gray-900 text-gray-900 dark:text-white overflow-hidden"
103
- style={{
104
- paddingTop: "env(safe-area-inset-top)",
105
- paddingLeft: "env(safe-area-inset-left)",
106
- paddingRight: "env(safe-area-inset-right)",
107
- paddingBottom: "env(safe-area-inset-bottom)",
108
- height: "100dvh"
109
- // "@supports (height: 100dvh)": {
110
- // height: "100dvh"
111
- // }
112
- }}>
113
-
114
- <FireCMSAppBar title={name}
115
- includeDrawer={includeDrawer}
116
- drawerOpen={computedDrawerOpen}
117
- {...fireCMSAppBarProps}/>
118
-
119
- <StyledDrawer
120
- displayed={includeDrawer}
121
- onMouseEnter={setOnHoverTrue}
122
- onMouseMove={setOnHoverTrue}
123
- onMouseLeave={setOnHoverFalse}
124
- open={computedDrawerOpen}
125
- logo={logo}
126
- hovered={onHover}
127
- setDrawerOpen={setDrawerOpen}>
128
- {includeDrawer && (
129
- <Drawer
130
- hovered={onHover}
131
- drawerOpen={computedDrawerOpen}
132
- closeDrawer={handleDrawerClose}
133
- {...drawerProps}/>)}
134
- </StyledDrawer>
135
-
136
- <main
137
- className="flex flex-col flex-grow overflow-auto">
138
- <DrawerHeader/>
139
- <div
140
- className={cn(defaultBorderMixin, "flex-grow overflow-auto lg:m-0 lg:mx-4 lg:mb-4 lg:rounded-lg lg:border lg:border-solid m-0 mt-1")}>
141
-
142
- <ErrorBoundary>
143
- {children}
144
- </ErrorBoundary>
145
-
146
- </div>
147
- </main>
148
- </div>
149
- );
150
- },
151
- equal
152
- )
153
-
154
- const DrawerHeader = () => {
155
- return (
156
- <div className="flex flex-col min-h-[68px]"></div>
157
- );
158
- };
159
-
160
- function StyledDrawer(props: {
161
- children: React.ReactNode,
162
- displayed: boolean,
163
- open: boolean,
164
- logo?: string,
165
- hovered: boolean,
166
- setDrawerOpen: (open: boolean) => void,
167
- onMouseEnter: () => void,
168
- onMouseMove: () => void,
169
- onMouseLeave: () => void
170
- }) {
171
-
172
- const navigation = useNavigationController();
173
-
174
- const width = !props.displayed ? 0 : (props.open ? DRAWER_WIDTH : 72);
175
- const innerDrawer = <div
176
- className={"relative h-full no-scrollbar overflow-y-auto overflow-x-hidden"}
177
- style={{
178
- width,
179
- transition: "left 100ms cubic-bezier(0.4, 0, 0.6, 1) 0ms, opacity 100ms cubic-bezier(0.4, 0, 0.6, 1) 0ms, width 100ms cubic-bezier(0.4, 0, 0.6, 1) 0ms"
180
- }}
181
- >
182
-
183
- {!props.open && props.displayed && (
184
- <Tooltip title="Open menu"
185
- side="right"
186
- sideOffset={12}
187
- className="fixed top-2 left-3 !bg-gray-50 dark:!bg-gray-900 rounded-full w-fit"
188
- >
189
- <IconButton
190
- color="inherit"
191
- aria-label="Open menu"
192
- className="sticky top-2 left-3 "
193
- onClick={() => props.setDrawerOpen(true)}
194
- size="large"
195
- >
196
- <MenuIcon/>
197
- </IconButton>
198
- </Tooltip>
199
- )}
200
-
201
- <div className={"flex flex-col h-full"}>
202
- <div
203
- style={{
204
- transition: "padding 100ms cubic-bezier(0.4, 0, 0.6, 1) 0ms",
205
- padding: props.open ? "32px 144px 0px 24px" : "72px 16px 0px"
206
- }}
207
- className={cn("cursor-pointer")}>
208
-
209
- <Tooltip title={"Home"}
210
- sideOffset={20}
211
- side="right">
212
- <Link
213
- to={navigation.basePath}>
214
- {props.logo
215
- ? <img src={props.logo}
216
- alt="Logo"
217
- className={cn("max-w-full max-h-full",
218
- props.open ?? "w-[112px] h-[112px]")}/>
219
- : <FireCMSLogo/>}
220
-
221
- </Link>
222
- </Tooltip>
223
- </div>
224
-
225
- {props.children}
226
- </div>
227
-
228
- </div>;
229
-
230
- const largeLayout = useLargeLayout();
231
- if (!largeLayout) {
232
- if (!props.displayed)
233
- return null;
234
- return <>
235
- <IconButton
236
- color="inherit"
237
- aria-label="Open drawer"
238
- onClick={() => props.setDrawerOpen(true)}
239
- size="large"
240
- className="absolute top-2 left-6"
241
- >
242
- <MenuIcon/>
243
- </IconButton>
244
- <Sheet side={"left"}
245
- transparent={true}
246
- open={props.open}
247
- onOpenChange={props.setDrawerOpen}
248
- >
249
- {innerDrawer}
250
- </Sheet>
251
- </>;
252
- }
253
-
254
- return (
255
- <div
256
- className="relative"
257
- onMouseEnter={props.onMouseEnter}
258
- onMouseMove={props.onMouseMove}
259
- onMouseLeave={props.onMouseLeave}
260
- style={{
261
- width,
262
- transition: "left 100ms cubic-bezier(0.4, 0, 0.6, 1) 0ms, opacity 100ms cubic-bezier(0.4, 0, 0.6, 1) 0ms, width 100ms cubic-bezier(0.4, 0, 0.6, 1) 0ms"
263
- }}>
264
-
265
- {innerDrawer}
266
-
267
- <div
268
- className={`absolute right-0 top-4 ${
269
- props.open ? "opacity-100" : "opacity-0 invisible"
270
- } transition-opacity duration-1000 ease-in-out`}>
271
- <IconButton
272
- aria-label="Close drawer"
273
- onClick={() => props.setDrawerOpen(false)}
274
- >
275
- <ChevronLeftIcon/>
276
- </IconButton>
277
- </div>
278
-
279
- </div>
280
- );
281
- }
@@ -1,38 +0,0 @@
1
- import { User } from "../types";
2
- import { useSideDialogContext } from "./SideDialogs";
3
- import { useSideEntityController } from "../hooks";
4
- import { FORM_CONTAINER_WIDTH } from "../internal/common";
5
- import { EntityEditViewProps } from "./EntityEditView";
6
-
7
- export type SideEntityViewProps<M extends Record<string, any>> = EntityEditViewProps<M> & {
8
- formWidth?: number | string;
9
- onClose?: () => void;
10
- }
11
-
12
- export function SideEntityView<M extends Record<string, any>, UserType extends User>({
13
- path,
14
- entityId,
15
- selectedSubPath,
16
- copy,
17
- collection,
18
- parentCollectionIds,
19
- onValuesAreModified,
20
- formWidth,
21
- onUpdate,
22
- onClose
23
- }: SideEntityViewProps<M>) {
24
-
25
- const sideDialogContext = useSideDialogContext();
26
- const sideEntityController = useSideEntityController();
27
- const resolvedFormWidth: string = typeof formWidth === "number" ? `${formWidth}px` : formWidth ?? FORM_CONTAINER_WIDTH;
28
-
29
- const onCloseHandler = () => {
30
- if (onClose) {
31
- onClose();
32
- } else {
33
- sideDialogContext.close();
34
- }
35
- }
36
-
37
- return <></>;
38
- }
@@ -1,44 +0,0 @@
1
- import { ArrayContainer } from "../../components";
2
- import React from "react";
3
-
4
- interface ArrayContainerProps<T> {
5
- value: T[];
6
- name: string;
7
- addLabel: string;
8
- buildEntry: (index: number, internalId: number) => React.ReactNode;
9
- disabled?: boolean;
10
- small?: boolean;
11
- onInternalIdAdded?: (id: number) => void;
12
- includeAddButton?: boolean;
13
- newDefaultEntry?: T | null;
14
- setFieldValue: (field: string, value: any, shouldValidate?: boolean | undefined) => void;
15
- }
16
-
17
- /**
18
- * @group Form custom fields
19
- */
20
- export function FormikArrayContainer<T>({
21
- name,
22
- addLabel,
23
- value,
24
- disabled = false,
25
- buildEntry,
26
- small,
27
- onInternalIdAdded,
28
- includeAddButton,
29
- newDefaultEntry = null,
30
- setFieldValue
31
- }: ArrayContainerProps<T>) {
32
-
33
- return <ArrayContainer droppableId={name}
34
- addLabel={addLabel}
35
- value={value}
36
- disabled={disabled}
37
- buildEntry={buildEntry}
38
- size={small ? "small" : "medium"}
39
- onInternalIdAdded={onInternalIdAdded}
40
- includeAddButton={includeAddButton}
41
- newDefaultEntry={newDefaultEntry}
42
- onValueChange={(value) => setFieldValue(name, value)}
43
- />;
44
- }