@firecms/core 3.0.0-canary.12 → 3.0.0-canary.121

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 (286) hide show
  1. package/README.md +1 -1
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +17 -0
  4. package/dist/app/Scaffold.d.ts +30 -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 +2 -1
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +11 -12
  11. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  12. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +5 -3
  13. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  14. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  15. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  16. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  17. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  18. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +2 -2
  19. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +12 -2
  20. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  21. package/dist/components/EntityPreview.d.ts +6 -5
  22. package/dist/components/ErrorView.d.ts +1 -1
  23. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  24. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  25. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  26. package/dist/components/ReferenceWidget.d.ts +3 -1
  27. package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
  28. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  29. package/dist/components/VirtualTable/VirtualTableProps.d.ts +15 -12
  30. package/dist/components/VirtualTable/types.d.ts +3 -3
  31. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
  32. package/dist/components/common/index.d.ts +1 -0
  33. package/dist/components/common/table_height.d.ts +5 -0
  34. package/dist/components/common/types.d.ts +4 -6
  35. package/dist/components/common/useColumnsIds.d.ts +2 -1
  36. package/dist/components/common/useDataSourceEntityCollectionTableController.d.ts +3 -0
  37. package/dist/components/index.d.ts +3 -1
  38. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  39. package/dist/core/DefaultDrawer.d.ts +19 -0
  40. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  41. package/dist/core/EntityEditView.d.ts +18 -4
  42. package/dist/core/FireCMS.d.ts +1 -1
  43. package/dist/core/NavigationRoutes.d.ts +3 -3
  44. package/dist/core/index.d.ts +3 -4
  45. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  46. package/dist/form/components/ErrorFocus.d.ts +1 -1
  47. package/dist/form/components/FieldHelperText.d.ts +3 -3
  48. package/dist/form/components/FormikArrayContainer.d.ts +2 -1
  49. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  50. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  51. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  52. package/dist/form/components/index.d.ts +1 -0
  53. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  54. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  55. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  56. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  57. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  59. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  60. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  61. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  62. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  63. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  64. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  65. package/dist/form/index.d.ts +3 -5
  66. package/dist/form/useClearRestoreValue.d.ts +2 -2
  67. package/dist/hooks/data/save.d.ts +1 -2
  68. package/dist/hooks/index.d.ts +1 -0
  69. package/dist/hooks/useBuildNavigationController.d.ts +1 -2
  70. package/dist/hooks/useProjectLog.d.ts +2 -2
  71. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  72. package/dist/index.d.ts +1 -0
  73. package/dist/index.es.js +15748 -12448
  74. package/dist/index.es.js.map +1 -1
  75. package/dist/index.umd.js +19981 -587
  76. package/dist/index.umd.js.map +1 -1
  77. package/dist/internal/useBuildDataSource.d.ts +1 -16
  78. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  79. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  80. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  81. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  82. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  83. package/dist/types/auth.d.ts +3 -3
  84. package/dist/types/collections.d.ts +39 -5
  85. package/dist/types/datasource.d.ts +55 -35
  86. package/dist/types/entities.d.ts +6 -1
  87. package/dist/types/entity_actions.d.ts +14 -0
  88. package/dist/types/entity_overrides.d.ts +2 -2
  89. package/dist/types/fields.d.ts +47 -41
  90. package/dist/types/index.d.ts +0 -1
  91. package/dist/types/navigation.d.ts +6 -5
  92. package/dist/types/plugins.d.ts +14 -4
  93. package/dist/types/properties.d.ts +34 -21
  94. package/dist/types/side_dialogs_controller.d.ts +10 -0
  95. package/dist/types/storage.d.ts +86 -3
  96. package/dist/util/entities.d.ts +2 -2
  97. package/dist/util/icon_list.d.ts +5 -1
  98. package/dist/util/icon_synonyms.d.ts +1 -97
  99. package/dist/util/icons.d.ts +3 -2
  100. package/dist/util/index.d.ts +1 -0
  101. package/dist/util/navigation_utils.d.ts +2 -2
  102. package/dist/util/objects.d.ts +1 -1
  103. package/dist/util/plurals.d.ts +0 -2
  104. package/dist/util/property_utils.d.ts +1 -1
  105. package/dist/util/resolutions.d.ts +27 -13
  106. package/dist/util/storage.d.ts +23 -2
  107. package/dist/util/useStorageUploadController.d.ts +3 -3
  108. package/package.json +128 -119
  109. package/src/app/AppBar.tsx +18 -0
  110. package/src/app/Drawer.tsx +25 -0
  111. package/src/app/Scaffold.tsx +245 -0
  112. package/src/app/index.ts +4 -0
  113. package/src/app/useApp.tsx +32 -0
  114. package/src/components/ArrayContainer.tsx +15 -10
  115. package/src/components/CircularProgressCenter.tsx +1 -1
  116. package/src/components/ClearFilterSortButton.tsx +41 -0
  117. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +12 -19
  118. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +21 -20
  119. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +10 -6
  120. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +41 -35
  121. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  122. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +32 -17
  123. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +14 -6
  124. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
  125. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +32 -30
  126. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +19 -7
  127. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +7 -10
  128. package/src/components/EntityCollectionView/EntityCollectionView.tsx +75 -51
  129. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  130. package/src/components/EntityCollectionView/useSelectionController.tsx +19 -7
  131. package/src/components/EntityPreview.tsx +38 -34
  132. package/src/components/EntityView.tsx +5 -5
  133. package/src/components/ErrorView.tsx +1 -1
  134. package/src/components/HomePage/DefaultHomePage.tsx +26 -19
  135. package/src/components/HomePage/NavigationCard.tsx +3 -3
  136. package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
  137. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  138. package/src/components/PropertyIdCopyTooltip.tsx +48 -0
  139. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +8 -6
  140. package/src/components/ReferenceWidget.tsx +22 -12
  141. package/src/components/SearchIconsView.tsx +11 -7
  142. package/src/components/SelectableTable/SelectableTable.tsx +7 -7
  143. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  144. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +22 -7
  145. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +28 -6
  146. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +89 -21
  147. package/src/components/VirtualTable/VirtualTable.tsx +70 -37
  148. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  149. package/src/components/VirtualTable/VirtualTableHeader.tsx +4 -4
  150. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  151. package/src/components/VirtualTable/VirtualTableProps.tsx +18 -14
  152. package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
  153. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  154. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -1
  155. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  156. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +14 -28
  157. package/src/components/VirtualTable/types.tsx +2 -3
  158. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +2 -2
  159. package/src/components/common/index.ts +1 -0
  160. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  161. package/src/components/common/types.tsx +4 -6
  162. package/src/components/common/useColumnsIds.tsx +23 -2
  163. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +11 -0
  164. package/src/components/common/useTableSearchHelper.ts +53 -12
  165. package/src/components/index.tsx +3 -1
  166. package/src/contexts/DialogsProvider.tsx +2 -2
  167. package/src/{components/FireCMSAppBar.tsx → core/DefaultAppBar.tsx} +52 -37
  168. package/src/core/DefaultDrawer.tsx +179 -0
  169. package/src/core/DrawerNavigationItem.tsx +66 -0
  170. package/src/core/EntityEditView.tsx +716 -149
  171. package/src/core/EntitySidePanel.tsx +1 -2
  172. package/src/core/FireCMS.tsx +39 -44
  173. package/src/core/NavigationRoutes.tsx +7 -8
  174. package/src/core/SideDialogs.tsx +2 -0
  175. package/src/core/field_configs.tsx +7 -8
  176. package/src/core/index.tsx +3 -4
  177. package/src/form/PropertyFieldBinding.tsx +53 -21
  178. package/src/form/components/CustomIdField.tsx +4 -2
  179. package/src/form/components/FieldHelperText.tsx +4 -4
  180. package/src/form/components/FormikArrayContainer.tsx +4 -1
  181. package/src/form/components/LabelWithIcon.tsx +27 -19
  182. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  183. package/src/form/components/StorageItemPreview.tsx +21 -11
  184. package/src/form/components/StorageUploadProgress.tsx +3 -4
  185. package/src/form/components/index.tsx +1 -0
  186. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +26 -15
  187. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +29 -24
  188. package/src/form/field_bindings/BlockFieldBinding.tsx +14 -12
  189. package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -14
  190. package/src/form/field_bindings/KeyValueFieldBinding.tsx +52 -46
  191. package/src/form/field_bindings/MapFieldBinding.tsx +17 -17
  192. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
  193. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  194. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  195. package/src/form/field_bindings/ReferenceFieldBinding.tsx +41 -30
  196. package/src/form/field_bindings/RepeatFieldBinding.tsx +32 -19
  197. package/src/form/field_bindings/SelectFieldBinding.tsx +20 -13
  198. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +36 -46
  199. package/src/form/field_bindings/SwitchFieldBinding.tsx +9 -5
  200. package/src/form/field_bindings/TextFieldBinding.tsx +26 -23
  201. package/src/form/index.tsx +4 -9
  202. package/src/form/useClearRestoreValue.tsx +2 -2
  203. package/src/form/validation.ts +1 -17
  204. package/src/hooks/data/delete.ts +2 -1
  205. package/src/hooks/data/save.ts +6 -1
  206. package/src/hooks/data/useDataSource.tsx +11 -3
  207. package/src/hooks/index.tsx +1 -0
  208. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  209. package/src/hooks/useBuildModeController.tsx +11 -5
  210. package/src/hooks/useBuildNavigationController.tsx +91 -31
  211. package/src/hooks/useProjectLog.tsx +19 -8
  212. package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
  213. package/src/hooks/useValidateAuthenticator.tsx +21 -41
  214. package/src/index.ts +1 -0
  215. package/src/internal/useBuildDataSource.ts +71 -81
  216. package/src/internal/useBuildSideDialogsController.tsx +1 -0
  217. package/src/internal/useBuildSideEntityController.tsx +102 -22
  218. package/src/internal/useUnsavedChangesDialog.tsx +3 -1
  219. package/src/preview/PropertyPreview.tsx +10 -17
  220. package/src/preview/PropertyPreviewProps.tsx +7 -1
  221. package/src/preview/components/BooleanPreview.tsx +2 -2
  222. package/src/preview/components/EnumValuesChip.tsx +2 -2
  223. package/src/preview/components/ImagePreview.tsx +24 -34
  224. package/src/preview/components/ReferencePreview.tsx +23 -34
  225. package/src/preview/components/StorageThumbnail.tsx +5 -1
  226. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  227. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +1 -2
  228. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +3 -2
  229. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +1 -2
  230. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -1
  231. package/src/preview/property_previews/ArrayOneOfPreview.tsx +3 -4
  232. package/src/preview/property_previews/ArrayPropertyPreview.tsx +3 -4
  233. package/src/preview/property_previews/MapPropertyPreview.tsx +6 -6
  234. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
  235. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  236. package/src/preview/util.ts +2 -2
  237. package/src/types/auth.tsx +3 -3
  238. package/src/types/collections.ts +48 -7
  239. package/src/types/customization_controller.tsx +0 -1
  240. package/src/types/datasource.ts +65 -43
  241. package/src/types/entities.ts +11 -1
  242. package/src/types/entity_actions.tsx +16 -3
  243. package/src/types/entity_overrides.tsx +2 -2
  244. package/src/types/fields.tsx +51 -45
  245. package/src/types/index.ts +0 -1
  246. package/src/types/navigation.ts +7 -7
  247. package/src/types/plugins.tsx +16 -6
  248. package/src/types/properties.ts +39 -22
  249. package/src/types/side_dialogs_controller.tsx +13 -0
  250. package/src/types/storage.ts +94 -3
  251. package/src/util/entities.ts +6 -5
  252. package/src/util/enums.ts +1 -1
  253. package/src/util/icon_list.ts +15 -10
  254. package/src/util/icon_synonyms.ts +3 -99
  255. package/src/util/icons.tsx +8 -2
  256. package/src/util/index.ts +1 -0
  257. package/src/util/navigation_utils.ts +6 -6
  258. package/src/util/objects.ts +25 -28
  259. package/src/util/permissions.ts +1 -0
  260. package/src/util/plurals.ts +0 -2
  261. package/src/util/property_utils.tsx +1 -1
  262. package/src/util/references.ts +3 -0
  263. package/src/util/resolutions.ts +74 -41
  264. package/src/util/storage.ts +79 -21
  265. package/src/util/strings.ts +2 -2
  266. package/src/util/useStorageUploadController.tsx +33 -7
  267. package/src/util/useTraceUpdate.tsx +1 -0
  268. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  269. package/dist/components/VirtualTable/common.d.ts +0 -2
  270. package/dist/core/Drawer.d.ts +0 -23
  271. package/dist/core/Scaffold.d.ts +0 -55
  272. package/dist/core/SideEntityView.d.ts +0 -7
  273. package/dist/form/EntityForm.d.ts +0 -77
  274. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  275. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  276. package/dist/internal/useLocaleConfig.d.ts +0 -1
  277. package/dist/types/appcheck.d.ts +0 -26
  278. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  279. package/src/core/Drawer.tsx +0 -191
  280. package/src/core/Scaffold.tsx +0 -281
  281. package/src/core/SideEntityView.tsx +0 -38
  282. package/src/form/EntityForm.tsx +0 -728
  283. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  284. package/src/internal/useBuildCustomizationController.tsx +0 -5
  285. package/src/internal/useLocaleConfig.tsx +0 -18
  286. package/src/types/appcheck.ts +0 -29
@@ -33,7 +33,7 @@ export function EntitySidePanel(props: EntitySidePanelProps) {
33
33
  if (!props) return undefined;
34
34
  let usedCollection = props.collection;
35
35
 
36
- const registryCollection = navigationController.getCollection(props.path, props.entityId);
36
+ const registryCollection = navigationController.getCollection(props.path);
37
37
  if (registryCollection) {
38
38
  usedCollection = registryCollection;
39
39
  }
@@ -79,7 +79,6 @@ export function EntitySidePanel(props: EntitySidePanelProps) {
79
79
  <ErrorBoundary>
80
80
  <EntityEditView
81
81
  {...props}
82
- formWidth={props.width}
83
82
  collection={collection}
84
83
  parentCollectionIds={parentCollectionIds}
85
84
  onValuesAreModified={onValuesAreModified}
@@ -1,9 +1,9 @@
1
1
  import React, { useMemo } from "react";
2
2
 
3
- import { EntityCollection, FireCMSContext, FireCMSPlugin, FireCMSProps, User } from "../types";
4
- import { AuthControllerContext, ModeControllerContext } from "../contexts";
3
+ import { CustomizationController, EntityCollection, FireCMSContext, FireCMSPlugin, FireCMSProps, User } from "../types";
4
+ import { AuthControllerContext } from "../contexts";
5
5
  import { useBuildSideEntityController } from "../internal/useBuildSideEntityController";
6
- import { useCustomizationController, useFireCMSContext, useModeController } from "../hooks";
6
+ import { useCustomizationController, useFireCMSContext } from "../hooks";
7
7
  import { useBuildSideDialogsController } from "../internal/useBuildSideDialogsController";
8
8
  import { ErrorView } from "../components";
9
9
  import { StorageSourceContext } from "../contexts/StorageSourceContext";
@@ -12,11 +12,9 @@ import { DataSourceContext } from "../contexts/DataSourceContext";
12
12
  import { SideEntityControllerContext } from "../contexts/SideEntityControllerContext";
13
13
  import { NavigationContext } from "../contexts/NavigationContext";
14
14
  import { SideDialogsControllerContext } from "../contexts/SideDialogsControllerContext";
15
- import { useLocaleConfig } from "../internal/useLocaleConfig";
16
- import { CenteredView, Typography } from "@firecms/ui";
15
+ import { CenteredView, Typography, useLocaleConfig } from "@firecms/ui";
17
16
  import { DialogsProvider } from "../contexts/DialogsProvider";
18
17
  import { useBuildDataSource } from "../internal/useBuildDataSource";
19
- import { useBuildCustomizationController } from "../internal/useBuildCustomizationController";
20
18
  import { CustomizationControllerContext } from "../contexts/CustomizationControllerContext";
21
19
  import { AnalyticsContext } from "../contexts/AnalyticsContext";
22
20
  import { useProjectLog } from "../hooks/useProjectLog";
@@ -30,12 +28,11 @@ import { useProjectLog } from "../hooks/useProjectLog";
30
28
  *
31
29
  * You only need to use this component if you are building a custom app.
32
30
  *
33
- * @constructor
31
+
34
32
  * @group Core
35
33
  */
36
34
  export function FireCMS<UserType extends User, EC extends EntityCollection>(props: FireCMSProps<UserType, EC>) {
37
35
 
38
- const modeController = useModeController();
39
36
  const {
40
37
  children,
41
38
  entityLinkBuilder,
@@ -71,7 +68,7 @@ export function FireCMS<UserType extends User, EC extends EntityCollection>(prop
71
68
 
72
69
  const loading = authController.initialLoading || navigationController.loading || pluginsLoading;
73
70
 
74
- const customizationController = useBuildCustomizationController({
71
+ const customizationController: CustomizationController = {
75
72
  dateTimeFormat,
76
73
  locale,
77
74
  entityLinkBuilder,
@@ -79,13 +76,13 @@ export function FireCMS<UserType extends User, EC extends EntityCollection>(prop
79
76
  entityViews: entityViews ?? [],
80
77
  propertyConfigs: propertyConfigs ?? {},
81
78
  components
82
- });
79
+ };
83
80
 
84
81
  const analyticsController = useMemo(() => ({
85
82
  onAnalyticsEvent
86
83
  }), []);
87
84
 
88
- const accessResponse = useProjectLog(authController, plugins);
85
+ const accessResponse = useProjectLog(authController, dataSourceDelegate, plugins);
89
86
 
90
87
  if (navigationController.navigationLoadingError) {
91
88
  return (
@@ -124,39 +121,37 @@ export function FireCMS<UserType extends User, EC extends EntityCollection>(prop
124
121
  }
125
122
 
126
123
  return (
127
- <ModeControllerContext.Provider value={modeController}>
128
- <AnalyticsContext.Provider value={analyticsController}>
129
- <CustomizationControllerContext.Provider value={customizationController}>
130
- <UserConfigurationPersistenceContext.Provider
131
- value={userConfigPersistence}>
132
- <StorageSourceContext.Provider
133
- value={storageSource}>
134
- <DataSourceContext.Provider
135
- value={dataSource}>
136
- <AuthControllerContext.Provider
137
- value={authController}>
138
- <SideDialogsControllerContext.Provider
139
- value={sideDialogsController}>
140
- <SideEntityControllerContext.Provider
141
- value={sideEntityController}>
142
- <NavigationContext.Provider
143
- value={navigationController}>
144
- <DialogsProvider>
145
- <FireCMSInternal
146
- loading={loading}>
147
- {children}
148
- </FireCMSInternal>
149
- </DialogsProvider>
150
- </NavigationContext.Provider>
151
- </SideEntityControllerContext.Provider>
152
- </SideDialogsControllerContext.Provider>
153
- </AuthControllerContext.Provider>
154
- </DataSourceContext.Provider>
155
- </StorageSourceContext.Provider>
156
- </UserConfigurationPersistenceContext.Provider>
157
- </CustomizationControllerContext.Provider>
158
- </AnalyticsContext.Provider>
159
- </ModeControllerContext.Provider>
124
+ <AnalyticsContext.Provider value={analyticsController}>
125
+ <CustomizationControllerContext.Provider value={customizationController}>
126
+ <UserConfigurationPersistenceContext.Provider
127
+ value={userConfigPersistence}>
128
+ <StorageSourceContext.Provider
129
+ value={storageSource}>
130
+ <DataSourceContext.Provider
131
+ value={dataSource}>
132
+ <AuthControllerContext.Provider
133
+ value={authController}>
134
+ <SideDialogsControllerContext.Provider
135
+ value={sideDialogsController}>
136
+ <SideEntityControllerContext.Provider
137
+ value={sideEntityController}>
138
+ <NavigationContext.Provider
139
+ value={navigationController}>
140
+ <DialogsProvider>
141
+ <FireCMSInternal
142
+ loading={loading}>
143
+ {children}
144
+ </FireCMSInternal>
145
+ </DialogsProvider>
146
+ </NavigationContext.Provider>
147
+ </SideEntityControllerContext.Provider>
148
+ </SideDialogsControllerContext.Provider>
149
+ </AuthControllerContext.Provider>
150
+ </DataSourceContext.Provider>
151
+ </StorageSourceContext.Provider>
152
+ </UserConfigurationPersistenceContext.Provider>
153
+ </CustomizationControllerContext.Provider>
154
+ </AnalyticsContext.Provider>
160
155
  );
161
156
 
162
157
  }
@@ -13,9 +13,9 @@ export type NavigationRoutesProps = {
13
13
  /**
14
14
  * In case you need to override the home page
15
15
  */
16
- HomePage?: React.ComponentType;
16
+ homePage?: React.ReactNode;
17
17
 
18
- customRoutes?: React.ReactNode[]
18
+ children?: React.ReactNode | React.ReactNode[]
19
19
 
20
20
  };
21
21
 
@@ -25,14 +25,13 @@ export type NavigationRoutesProps = {
25
25
  * or the home route) related to a {@link NavigationController}.
26
26
  * This component needs a parent {@link FireCMS}
27
27
  *
28
- * @constructor
28
+
29
29
  * @group Components
30
30
  */
31
-
32
31
  export const NavigationRoutes = React.memo<NavigationRoutesProps>(
33
32
  function NavigationRoutes({
34
- HomePage = DefaultHomePage,
35
- customRoutes
33
+ homePage = <DefaultHomePage/>,
34
+ children
36
35
  }: NavigationRoutesProps) {
37
36
 
38
37
  const location = useLocation();
@@ -93,7 +92,7 @@ export const NavigationRoutes = React.memo<NavigationRoutesProps>(
93
92
 
94
93
  const homeRoute = (
95
94
  <Route path={"/"}
96
- element={<HomePage/>}/>
95
+ element={homePage}/>
97
96
  );
98
97
 
99
98
  const notFoundRoute = <Route path={"*"}
@@ -112,7 +111,7 @@ export const NavigationRoutes = React.memo<NavigationRoutesProps>(
112
111
 
113
112
  {notFoundRoute}
114
113
 
115
- {customRoutes}
114
+ {children}
116
115
 
117
116
  </Routes>
118
117
  );
@@ -94,6 +94,7 @@ function SideDialogView({
94
94
  const handleDrawerCloseOk = () => {
95
95
  setBlocked(false);
96
96
  setDrawerCloseRequested(false);
97
+ console.log("handleDrawerCloseOk");
97
98
  sideDialogsController.close();
98
99
  panel?.onClose?.();
99
100
  };
@@ -126,6 +127,7 @@ function SideDialogView({
126
127
  <Sheet
127
128
  open={Boolean(panel)}
128
129
  onOpenChange={(open) => !open && onCloseRequest()}
130
+ title={"Side dialog " + panel?.key}
129
131
  >
130
132
  {panel &&
131
133
  <div
@@ -8,8 +8,8 @@ import {
8
8
  DateTimeFieldBinding,
9
9
  KeyValueFieldBinding,
10
10
  MapFieldBinding,
11
- MarkdownFieldBinding,
12
- MultiSelectBinding,
11
+ MarkdownEditorFieldBinding,
12
+ MultiSelectFieldBinding,
13
13
  ReferenceFieldBinding,
14
14
  RepeatFieldBinding,
15
15
  SelectFieldBinding,
@@ -77,7 +77,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<string, PropertyConfig<any>> = {
77
77
  property: {
78
78
  dataType: "string",
79
79
  markdown: true,
80
- Field: MarkdownFieldBinding
80
+ Field: MarkdownEditorFieldBinding
81
81
  }
82
82
  },
83
83
  url: {
@@ -139,7 +139,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<string, PropertyConfig<any>> = {
139
139
  dataType: "string",
140
140
  enumValues: [],
141
141
  },
142
- Field: MultiSelectBinding
142
+ Field: MultiSelectFieldBinding
143
143
  }
144
144
  },
145
145
  number_input: {
@@ -177,7 +177,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<string, PropertyConfig<any>> = {
177
177
  dataType: "number",
178
178
  enumValues: [],
179
179
  },
180
- Field: MultiSelectBinding
180
+ Field: MultiSelectFieldBinding
181
181
  }
182
182
  },
183
183
  file_upload: {
@@ -331,7 +331,7 @@ export function getFieldConfig(property: Property | ResolvedProperty, propertyCo
331
331
  }
332
332
  const defaultFieldConfig = DEFAULT_FIELD_CONFIGS[defaultFieldId];
333
333
  const customField = fieldId ? propertyConfigs[fieldId] : undefined;
334
- return mergeDeep(defaultFieldConfig ?? {}, customField ?? {});
334
+ return mergeDeep(defaultFieldConfig ?? {}, customField ?? {} as PropertyConfig);
335
335
  }
336
336
 
337
337
  export function getDefaultFieldId(property: Property | ResolvedProperty) {
@@ -359,8 +359,7 @@ export function getDefaultFieldId(property: Property | ResolvedProperty) {
359
359
  } else if (property.dataType === "map") {
360
360
  if (property.keyValue)
361
361
  return "key_value";
362
- if (property.properties)
363
- return "group";
362
+ return "group";
364
363
  } else if (property.dataType === "array") {
365
364
  const of = (property as ArrayProperty).of;
366
365
  const oneOf = (property as ArrayProperty).oneOf;
@@ -1,10 +1,9 @@
1
1
  export * from "./FireCMS";
2
2
 
3
- export type { ScaffoldProps } from "./Scaffold";
4
- export { Scaffold } from "./Scaffold";
3
+ export * from "../app/Scaffold";
5
4
 
6
- export type { DrawerProps } from "./Drawer";
7
- export { Drawer, DrawerNavigationItem } from "./Drawer";
5
+ export * from "./DefaultDrawer";
6
+ export * from "./DrawerNavigationItem";
8
7
 
9
8
  export * from "./field_configs";
10
9
 
@@ -51,6 +51,13 @@ export const PropertyFieldBinding = React.memo(PropertyFieldBindingInternal, (a:
51
51
  if (a.propertyKey !== b.propertyKey) {
52
52
  return false;
53
53
  }
54
+ if (a.index !== b.index) {
55
+ return false;
56
+ }
57
+
58
+ if (a.size !== b.size) {
59
+ return false;
60
+ }
54
61
  const aIsBuilder = isPropertyBuilder(a.property) || a.property.fromBuilder;
55
62
  const bIsBuilder = isPropertyBuilder(b.property) || b.property.fromBuilder;
56
63
 
@@ -75,16 +82,18 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
75
82
  includeDescription,
76
83
  underlyingValueHasChanged,
77
84
  disabled,
78
- tableMode,
79
85
  partOfArray,
80
- partOfBlock,
86
+ minimalistView,
81
87
  autoFocus,
88
+ index,
89
+ size
82
90
  }: PropertyFieldBindingProps<T, M>): ReactElement<PropertyFieldBindingProps<T, M>> {
83
91
 
84
92
  const customizationController = useCustomizationController();
85
93
 
86
94
  return (
87
95
  <Field
96
+ key={propertyKey}
88
97
  name={propertyKey}
89
98
  >
90
99
  {(fieldProps) => {
@@ -92,12 +101,12 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
92
101
  let Component: ComponentType<FieldProps<T>> | undefined;
93
102
  const resolvedProperty: ResolvedProperty<T> | null = resolveProperty({
94
103
  propertyKey,
95
- propertyValue: fieldProps.field.value,
96
104
  propertyOrBuilder: property,
97
105
  values: fieldProps.form.values,
98
106
  path: context.path,
99
107
  entityId: context.entityId,
100
- fields: customizationController.propertyConfigs
108
+ fields: customizationController.propertyConfigs,
109
+ index
101
110
  });
102
111
 
103
112
  if (resolvedProperty === null || isHidden(resolvedProperty)) {
@@ -111,16 +120,22 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
111
120
  } else {
112
121
  const propertyConfig = getFieldConfig(resolvedProperty, customizationController.propertyConfigs);
113
122
  if (!propertyConfig) {
114
- console.log("INTERNAL: Could not find field config for property", { propertyKey, resolvedProperty, fields: customizationController.propertyConfigs, propertyConfig });
123
+ console.log("INTERNAL: Could not find field config for property", {
124
+ propertyKey,
125
+ resolvedProperty,
126
+ fields: customizationController.propertyConfigs,
127
+ propertyConfig
128
+ });
115
129
  throw new Error(`INTERNAL: Could not find field config for property ${propertyKey}`);
116
130
  }
117
131
  const configProperty = resolveProperty({
132
+ propertyKey,
118
133
  propertyOrBuilder: propertyConfig.property,
119
- propertyValue: fieldProps.field.value,
120
134
  values: fieldProps.form.values,
121
135
  path: context.path,
122
136
  entityId: context.entityId,
123
- fields: customizationController.propertyConfigs
137
+ fields: customizationController.propertyConfigs,
138
+ index
124
139
  });
125
140
  Component = configProperty.Field as ComponentType<FieldProps<T>>;
126
141
  }
@@ -139,10 +154,10 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
139
154
  underlyingValueHasChanged,
140
155
  context,
141
156
  disabled,
142
- tableMode,
143
157
  partOfArray,
144
- partOfBlock,
145
- autoFocus
158
+ minimalistView,
159
+ autoFocus,
160
+ size
146
161
  };
147
162
 
148
163
  return <FieldInternal
@@ -169,12 +184,12 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
169
184
  property,
170
185
  includeDescription,
171
186
  underlyingValueHasChanged,
172
- tableMode,
173
187
  partOfArray,
174
- partOfBlock,
188
+ minimalistView,
175
189
  autoFocus,
176
190
  context,
177
- disabled
191
+ disabled,
192
+ size
178
193
  },
179
194
  fieldProps
180
195
  }:
@@ -196,7 +211,14 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
196
211
  (fieldProps.form.submitCount > 0 || property.validation?.unique) &&
197
212
  (!Array.isArray(error) || !!error.filter((e: any) => !!e).length);
198
213
 
199
- const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent(context.path, context.collection, propertyKey, property, Component, plugins);
214
+ const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent({
215
+ path: context.path,
216
+ collection: context.collection,
217
+ propertyKey: propertyKey,
218
+ property: property,
219
+ Component: Component,
220
+ plugins: plugins
221
+ });
200
222
  const UsedComponent: ComponentType<FieldProps<T>> = WrappedComponent ?? Component;
201
223
 
202
224
  const isSubmitting = fieldProps.form.isSubmitting;
@@ -214,7 +236,6 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
214
236
  const cmsFieldProps: FieldProps<T, CustomProps, M> = {
215
237
  propertyKey,
216
238
  value: value as T,
217
- // initialValue,
218
239
  setValue,
219
240
  setFieldValue,
220
241
  error,
@@ -225,12 +246,12 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
225
246
  property: property as ResolvedProperty<T>,
226
247
  disabled: disabled ?? false,
227
248
  underlyingValueHasChanged: underlyingValueHasChanged ?? false,
228
- tableMode: tableMode ?? false,
229
249
  partOfArray: partOfArray ?? false,
230
- partOfBlock: partOfBlock ?? false,
250
+ minimalistView: minimalistView ?? false,
231
251
  autoFocus: autoFocus ?? false,
232
252
  customProps: customFieldProps,
233
- context
253
+ context,
254
+ size
234
255
  };
235
256
 
236
257
  return (
@@ -266,13 +287,24 @@ const shouldPropertyReRender = (property: PropertyOrBuilder | ResolvedProperty,
266
287
  }
267
288
  }
268
289
 
269
- function useWrappedComponent<T extends CMSType = CMSType, M extends Record<string, any> = any>(
270
- path: string,
271
- collection: EntityCollection<M>,
290
+ interface UseWrappedComponentParams<T extends CMSType = CMSType, M extends Record<string, any> = any> {
291
+ path?: string,
292
+ collection?: EntityCollection<M>,
272
293
  propertyKey: string,
273
294
  property: ResolvedProperty<T>,
274
295
  Component: ComponentType<FieldProps<T, any, M>>,
275
296
  plugins?: FireCMSPlugin[]
297
+ }
298
+
299
+ function useWrappedComponent<T extends CMSType = CMSType, M extends Record<string, any> = any>(
300
+ {
301
+ path,
302
+ collection,
303
+ propertyKey,
304
+ property,
305
+ Component,
306
+ plugins
307
+ }: UseWrappedComponentParams<T, M>
276
308
  ): ComponentType<FieldProps<T, any, M>> | null {
277
309
 
278
310
  const wrapperRef = useRef<ComponentType<FieldProps<T, any, M>> | null>((() => {
@@ -68,7 +68,8 @@ export function CustomIdField<M extends Record<string, any>>({
68
68
  ? (
69
69
  <>
70
70
 
71
- <Tooltip title={"Copy"}>
71
+ <Tooltip title={"Copy"}
72
+ asChild={true}>
72
73
  <IconButton onClick={(e) => copy(entity.id)}
73
74
  aria-label="copy-id">
74
75
  <ContentCopyIcon size={"small"}/>
@@ -76,7 +77,8 @@ export function CustomIdField<M extends Record<string, any>>({
76
77
  </Tooltip>
77
78
 
78
79
  {customizationController?.entityLinkBuilder &&
79
- <Tooltip title={"Open in the console"}>
80
+ <Tooltip title={"Open in the console"}
81
+ asChild={true}>
80
82
  <IconButton component={"a"}
81
83
  href={customizationController.entityLinkBuilder({ entity })}
82
84
  rel="noopener noreferrer"
@@ -1,4 +1,4 @@
1
- import { ResolvedProperty } from "../../types";
1
+ import { Property, ResolvedProperty } from "../../types";
2
2
  import { IconButton, InfoIcon, Tooltip, Typography } from "@firecms/ui";
3
3
 
4
4
  /**
@@ -13,8 +13,8 @@ export function FieldHelperText({
13
13
  disabled
14
14
  }: {
15
15
  error?: string,
16
- showError: boolean,
17
- property: ResolvedProperty,
16
+ showError?: boolean,
17
+ property: ResolvedProperty | Property,
18
18
  includeDescription?: boolean,
19
19
  disabled?: boolean,
20
20
  }
@@ -44,7 +44,7 @@ export function FieldHelperText({
44
44
  {property.longDescription &&
45
45
  <Tooltip title={property.longDescription}
46
46
  side="bottom"
47
- >
47
+ asChild={true}>
48
48
  <IconButton
49
49
  size={"small"}
50
50
  className="self-start">
@@ -12,6 +12,7 @@ interface ArrayContainerProps<T> {
12
12
  includeAddButton?: boolean;
13
13
  newDefaultEntry?: T | null;
14
14
  setFieldValue: (field: string, value: any, shouldValidate?: boolean | undefined) => void;
15
+ className?: string;
15
16
  }
16
17
 
17
18
  /**
@@ -27,7 +28,8 @@ export function FormikArrayContainer<T>({
27
28
  onInternalIdAdded,
28
29
  includeAddButton,
29
30
  newDefaultEntry = null,
30
- setFieldValue
31
+ setFieldValue,
32
+ className
31
33
  }: ArrayContainerProps<T>) {
32
34
 
33
35
  return <ArrayContainer droppableId={name}
@@ -39,6 +41,7 @@ export function FormikArrayContainer<T>({
39
41
  onInternalIdAdded={onInternalIdAdded}
40
42
  includeAddButton={includeAddButton}
41
43
  newDefaultEntry={newDefaultEntry}
44
+ className={className}
42
45
  onValueChange={(value) => setFieldValue(name, value)}
43
46
  />;
44
47
  }
@@ -1,4 +1,4 @@
1
- import React from "react";
1
+ import React, { forwardRef } from "react";
2
2
 
3
3
  interface LabelWithIconProps {
4
4
  icon: React.ReactNode;
@@ -12,22 +12,30 @@ interface LabelWithIconProps {
12
12
  * Render the label of with an icon and the title of a property
13
13
  * @group Form custom fields
14
14
  */
15
- export function LabelWithIcon({
16
- icon,
17
- title,
18
- small,
19
- className,
20
- required
21
- }: LabelWithIconProps) {
22
- return (
23
- <span
24
- className={`inline-flex items-center my-0.5 ${small ? "gap-1" : "gap-2"} ${className ?? ""}`}>
25
-
26
- {icon}
27
-
28
- <span
29
- className={`text-start font-medium text-${small ? "base" : "sm"} origin-top-left transform ${small ? "translate-x-2 scale-75" : ""}`}>{(title ?? "") + (required ? " *" : "")}</span>
30
-
15
+ export const LabelWithIcon = forwardRef<HTMLDivElement, LabelWithIconProps>(
16
+ ({
17
+ icon,
18
+ title,
19
+ small,
20
+ className,
21
+ required
22
+ }, ref) => {
23
+ return (
24
+ <div
25
+ ref={ref}
26
+ className={`inline-flex items-center my-0.5 ${small ? "gap-1" : "gap-2"} ${className ?? ""}`}
27
+ >
28
+ {icon}
29
+ <span
30
+ className={`text-start font-medium text-${small ? "base" : "sm"} origin-top-left transform ${
31
+ small ? "translate-x-2 scale-75" : ""
32
+ }`}
33
+ >
34
+ {(title ?? "") + (required ? " *" : "")}
31
35
  </span>
32
- );
33
- }
36
+ </div>
37
+ );
38
+ }
39
+ );
40
+
41
+ LabelWithIcon.displayName = "LabelWithIcon";
@@ -0,0 +1,28 @@
1
+ import React from "react";
2
+ import { LabelWithIcon } from "./LabelWithIcon";
3
+ import { PropertyIdCopyTooltip } from "../../components/PropertyIdCopyTooltip";
4
+
5
+ interface LabelWithIconAndTooltip {
6
+ icon: React.ReactNode;
7
+ title?: string;
8
+ small?: boolean;
9
+ className?: string;
10
+ required?: boolean;
11
+ propertyKey: string
12
+ }
13
+
14
+ /**
15
+ * Render the label of with an icon and the title of a property
16
+ * @group Form custom fields
17
+ */
18
+ export function LabelWithIconAndTooltip({
19
+ propertyKey,
20
+ className,
21
+ ...props
22
+ }: LabelWithIconAndTooltip) {
23
+ return (
24
+ <PropertyIdCopyTooltip propertyKey={propertyKey} className={className}>
25
+ <LabelWithIcon {...props}/>
26
+ </PropertyIdCopyTooltip>
27
+ );
28
+ }