@firecms/core 3.0.0-canary.14 → 3.0.0-canary.141

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 (301) 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 +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 +16 -5
  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 +11 -12
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +5 -3
  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/internal/CollectionTableToolbar.d.ts +1 -4
  18. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  19. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
  20. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +12 -2
  21. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  22. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  23. package/dist/components/EntityPreview.d.ts +7 -6
  24. package/dist/components/ErrorView.d.ts +1 -1
  25. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  26. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  27. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  28. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  29. package/dist/components/ReferenceWidget.d.ts +3 -1
  30. package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
  31. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  32. package/dist/components/VirtualTable/VirtualTableProps.d.ts +15 -12
  33. package/dist/components/VirtualTable/types.d.ts +3 -3
  34. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
  35. package/dist/components/common/index.d.ts +1 -0
  36. package/dist/components/common/table_height.d.ts +5 -0
  37. package/dist/components/common/types.d.ts +4 -6
  38. package/dist/components/common/useColumnsIds.d.ts +2 -1
  39. package/dist/components/common/useDataSourceEntityCollectionTableController.d.ts +3 -0
  40. package/dist/components/index.d.ts +4 -2
  41. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  42. package/dist/core/DefaultDrawer.d.ts +19 -0
  43. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  44. package/dist/core/EntityEditView.d.ts +18 -4
  45. package/dist/core/FireCMS.d.ts +1 -1
  46. package/dist/core/NavigationRoutes.d.ts +3 -3
  47. package/dist/core/index.d.ts +3 -4
  48. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  49. package/dist/form/components/ErrorFocus.d.ts +1 -1
  50. package/dist/form/components/FieldHelperText.d.ts +3 -3
  51. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  52. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  53. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  54. package/dist/form/components/index.d.ts +1 -1
  55. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  56. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  57. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  60. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  61. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  62. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  63. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  64. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  65. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  66. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  67. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  68. package/dist/form/index.d.ts +3 -5
  69. package/dist/form/useClearRestoreValue.d.ts +2 -2
  70. package/dist/hooks/data/save.d.ts +1 -2
  71. package/dist/hooks/index.d.ts +1 -0
  72. package/dist/hooks/useBuildNavigationController.d.ts +1 -2
  73. package/dist/hooks/useProjectLog.d.ts +8 -2
  74. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  75. package/dist/index.d.ts +1 -0
  76. package/dist/index.es.js +16760 -13321
  77. package/dist/index.es.js.map +1 -1
  78. package/dist/index.umd.js +20120 -587
  79. package/dist/index.umd.js.map +1 -1
  80. package/dist/internal/useBuildDataSource.d.ts +1 -16
  81. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  82. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  83. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  84. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  85. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  86. package/dist/types/auth.d.ts +3 -3
  87. package/dist/types/collections.d.ts +41 -6
  88. package/dist/types/datasource.d.ts +55 -35
  89. package/dist/types/entities.d.ts +6 -1
  90. package/dist/types/entity_actions.d.ts +14 -0
  91. package/dist/types/entity_overrides.d.ts +2 -2
  92. package/dist/types/fields.d.ts +63 -41
  93. package/dist/types/firecms.d.ts +4 -0
  94. package/dist/types/index.d.ts +0 -1
  95. package/dist/types/navigation.d.ts +6 -5
  96. package/dist/types/plugins.d.ts +14 -4
  97. package/dist/types/properties.d.ts +34 -21
  98. package/dist/types/property_config.d.ts +0 -2
  99. package/dist/types/side_dialogs_controller.d.ts +10 -0
  100. package/dist/types/storage.d.ts +86 -3
  101. package/dist/util/entities.d.ts +2 -2
  102. package/dist/util/icon_list.d.ts +5 -1
  103. package/dist/util/icon_synonyms.d.ts +1 -97
  104. package/dist/util/icons.d.ts +3 -2
  105. package/dist/util/index.d.ts +1 -0
  106. package/dist/util/navigation_utils.d.ts +2 -2
  107. package/dist/util/objects.d.ts +2 -1
  108. package/dist/util/plurals.d.ts +0 -2
  109. package/dist/util/property_utils.d.ts +3 -3
  110. package/dist/util/resolutions.d.ts +30 -16
  111. package/dist/util/storage.d.ts +23 -2
  112. package/dist/util/useStorageUploadController.d.ts +3 -3
  113. package/package.json +128 -119
  114. package/src/app/AppBar.tsx +18 -0
  115. package/src/app/Drawer.tsx +24 -0
  116. package/src/app/Scaffold.tsx +243 -0
  117. package/src/app/index.ts +4 -0
  118. package/src/app/useApp.tsx +32 -0
  119. package/src/components/ArrayContainer.tsx +51 -24
  120. package/src/components/CircularProgressCenter.tsx +1 -1
  121. package/src/components/ClearFilterSortButton.tsx +41 -0
  122. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +1 -1
  123. package/src/components/DeleteEntityDialog.tsx +1 -1
  124. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +12 -19
  125. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +21 -20
  126. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +10 -6
  127. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -39
  128. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  129. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +31 -16
  130. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +14 -6
  131. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
  132. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +32 -30
  133. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +19 -7
  134. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +72 -67
  135. package/src/components/EntityCollectionView/EntityCollectionView.tsx +138 -86
  136. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  137. package/src/components/EntityCollectionView/useSelectionController.tsx +19 -7
  138. package/src/components/EntityCollectionView/utils.ts +19 -0
  139. package/src/components/EntityPreview.tsx +43 -39
  140. package/src/components/EntityView.tsx +6 -6
  141. package/src/components/ErrorView.tsx +1 -1
  142. package/src/components/HomePage/DefaultHomePage.tsx +25 -19
  143. package/src/components/HomePage/NavigationCard.tsx +3 -3
  144. package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
  145. package/src/components/HomePage/NavigationGroup.tsx +1 -1
  146. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  147. package/src/components/PropertyConfigBadge.tsx +9 -3
  148. package/src/components/PropertyIdCopyTooltip.tsx +48 -0
  149. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +8 -7
  150. package/src/components/ReferenceWidget.tsx +22 -12
  151. package/src/components/SearchIconsView.tsx +10 -7
  152. package/src/components/SelectableTable/SelectableTable.tsx +7 -7
  153. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  154. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +22 -7
  155. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +28 -6
  156. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +88 -21
  157. package/src/components/VirtualTable/VirtualTable.tsx +77 -46
  158. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  159. package/src/components/VirtualTable/VirtualTableHeader.tsx +4 -4
  160. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  161. package/src/components/VirtualTable/VirtualTableProps.tsx +18 -14
  162. package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
  163. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  164. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -1
  165. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  166. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +14 -28
  167. package/src/components/VirtualTable/types.tsx +2 -3
  168. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +8 -4
  169. package/src/components/common/index.ts +1 -0
  170. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  171. package/src/components/common/types.tsx +4 -6
  172. package/src/components/common/useColumnsIds.tsx +23 -2
  173. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +23 -12
  174. package/src/components/common/useTableSearchHelper.ts +53 -12
  175. package/src/components/index.tsx +4 -2
  176. package/src/contexts/DialogsProvider.tsx +2 -2
  177. package/src/core/DefaultAppBar.tsx +176 -0
  178. package/src/core/DefaultDrawer.tsx +183 -0
  179. package/src/core/DrawerNavigationItem.tsx +66 -0
  180. package/src/core/EntityEditView.tsx +716 -153
  181. package/src/core/EntitySidePanel.tsx +1 -2
  182. package/src/core/FireCMS.tsx +53 -52
  183. package/src/core/NavigationRoutes.tsx +7 -8
  184. package/src/core/SideDialogs.tsx +1 -0
  185. package/src/core/field_configs.tsx +7 -8
  186. package/src/core/index.tsx +3 -4
  187. package/src/form/PropertyFieldBinding.tsx +74 -35
  188. package/src/form/components/CustomIdField.tsx +4 -2
  189. package/src/form/components/FieldHelperText.tsx +4 -4
  190. package/src/form/components/LabelWithIcon.tsx +27 -19
  191. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  192. package/src/form/components/StorageItemPreview.tsx +21 -11
  193. package/src/form/components/StorageUploadProgress.tsx +3 -4
  194. package/src/form/components/index.tsx +1 -1
  195. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +29 -17
  196. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +45 -35
  197. package/src/form/field_bindings/BlockFieldBinding.tsx +51 -32
  198. package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -14
  199. package/src/form/field_bindings/KeyValueFieldBinding.tsx +54 -45
  200. package/src/form/field_bindings/MapFieldBinding.tsx +65 -48
  201. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
  202. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  203. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  204. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  205. package/src/form/field_bindings/RepeatFieldBinding.tsx +52 -34
  206. package/src/form/field_bindings/SelectFieldBinding.tsx +20 -13
  207. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +36 -46
  208. package/src/form/field_bindings/SwitchFieldBinding.tsx +9 -5
  209. package/src/form/field_bindings/TextFieldBinding.tsx +26 -23
  210. package/src/form/index.tsx +4 -9
  211. package/src/form/useClearRestoreValue.tsx +2 -2
  212. package/src/form/validation.ts +1 -17
  213. package/src/hooks/data/delete.ts +2 -1
  214. package/src/hooks/data/save.ts +9 -5
  215. package/src/hooks/data/useDataSource.tsx +11 -3
  216. package/src/hooks/index.tsx +1 -0
  217. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  218. package/src/hooks/useBuildModeController.tsx +11 -5
  219. package/src/hooks/useBuildNavigationController.tsx +91 -31
  220. package/src/hooks/useProjectLog.tsx +32 -10
  221. package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
  222. package/src/hooks/useValidateAuthenticator.tsx +21 -41
  223. package/src/index.ts +1 -0
  224. package/src/internal/useBuildDataSource.ts +72 -82
  225. package/src/internal/useBuildSideDialogsController.tsx +1 -0
  226. package/src/internal/useBuildSideEntityController.tsx +102 -22
  227. package/src/internal/useUnsavedChangesDialog.tsx +3 -1
  228. package/src/preview/PropertyPreview.tsx +11 -18
  229. package/src/preview/PropertyPreviewProps.tsx +7 -1
  230. package/src/preview/components/BooleanPreview.tsx +2 -2
  231. package/src/preview/components/EnumValuesChip.tsx +2 -2
  232. package/src/preview/components/ImagePreview.tsx +25 -35
  233. package/src/preview/components/ReferencePreview.tsx +23 -34
  234. package/src/preview/components/StorageThumbnail.tsx +5 -1
  235. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  236. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
  237. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
  238. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
  239. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
  240. package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
  241. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
  242. package/src/preview/property_previews/MapPropertyPreview.tsx +6 -6
  243. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
  244. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  245. package/src/preview/util.ts +2 -2
  246. package/src/types/auth.tsx +3 -3
  247. package/src/types/collections.ts +50 -8
  248. package/src/types/customization_controller.tsx +0 -1
  249. package/src/types/datasource.ts +65 -43
  250. package/src/types/entities.ts +11 -1
  251. package/src/types/entity_actions.tsx +16 -3
  252. package/src/types/entity_overrides.tsx +2 -2
  253. package/src/types/fields.tsx +69 -45
  254. package/src/types/firecms.tsx +5 -0
  255. package/src/types/index.ts +0 -1
  256. package/src/types/navigation.ts +7 -7
  257. package/src/types/plugins.tsx +16 -6
  258. package/src/types/properties.ts +39 -22
  259. package/src/types/property_config.tsx +0 -2
  260. package/src/types/side_dialogs_controller.tsx +13 -0
  261. package/src/types/storage.ts +94 -3
  262. package/src/util/entities.ts +6 -5
  263. package/src/util/enums.ts +1 -1
  264. package/src/util/icon_list.ts +15 -10
  265. package/src/util/icon_synonyms.ts +3 -99
  266. package/src/util/icons.tsx +8 -2
  267. package/src/util/index.ts +1 -0
  268. package/src/util/make_properties_editable.ts +13 -5
  269. package/src/util/navigation_utils.ts +6 -6
  270. package/src/util/objects.ts +45 -28
  271. package/src/util/permissions.ts +1 -0
  272. package/src/util/plurals.ts +0 -2
  273. package/src/util/property_utils.tsx +11 -4
  274. package/src/util/references.ts +3 -0
  275. package/src/util/resolutions.ts +79 -46
  276. package/src/util/storage.ts +79 -21
  277. package/src/util/strings.ts +2 -2
  278. package/src/util/useStorageUploadController.tsx +33 -7
  279. package/src/util/useTraceUpdate.tsx +1 -0
  280. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  281. package/dist/components/VirtualTable/common.d.ts +0 -2
  282. package/dist/core/Drawer.d.ts +0 -23
  283. package/dist/core/Scaffold.d.ts +0 -55
  284. package/dist/core/SideEntityView.d.ts +0 -7
  285. package/dist/form/EntityForm.d.ts +0 -77
  286. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  287. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  288. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  289. package/dist/internal/useLocaleConfig.d.ts +0 -1
  290. package/dist/types/appcheck.d.ts +0 -26
  291. package/src/components/FireCMSAppBar.tsx +0 -165
  292. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  293. package/src/core/Drawer.tsx +0 -191
  294. package/src/core/Scaffold.tsx +0 -281
  295. package/src/core/SideEntityView.tsx +0 -38
  296. package/src/form/EntityForm.tsx +0 -728
  297. package/src/form/components/FormikArrayContainer.tsx +0 -44
  298. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  299. package/src/internal/useBuildCustomizationController.tsx +0 -5
  300. package/src/internal/useLocaleConfig.tsx +0 -18
  301. 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
-
3
- import { EntityCollection, FireCMSContext, FireCMSPlugin, FireCMSProps, User } from "../types";
4
- import { AuthControllerContext, ModeControllerContext } from "../contexts";
2
+ import { CenteredView, Typography } from "@firecms/ui";
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,8 @@ 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";
17
15
  import { DialogsProvider } from "../contexts/DialogsProvider";
18
16
  import { useBuildDataSource } from "../internal/useBuildDataSource";
19
- import { useBuildCustomizationController } from "../internal/useBuildCustomizationController";
20
17
  import { CustomizationControllerContext } from "../contexts/CustomizationControllerContext";
21
18
  import { AnalyticsContext } from "../contexts/AnalyticsContext";
22
19
  import { useProjectLog } from "../hooks/useProjectLog";
@@ -30,12 +27,11 @@ import { useProjectLog } from "../hooks/useProjectLog";
30
27
  *
31
28
  * You only need to use this component if you are building a custom app.
32
29
  *
33
- * @constructor
30
+
34
31
  * @group Core
35
32
  */
36
33
  export function FireCMS<UserType extends User, EC extends EntityCollection>(props: FireCMSProps<UserType, EC>) {
37
34
 
38
- const modeController = useModeController();
39
35
  const {
40
36
  children,
41
37
  entityLinkBuilder,
@@ -51,10 +47,9 @@ export function FireCMS<UserType extends User, EC extends EntityCollection>(prop
51
47
  entityViews,
52
48
  components,
53
49
  navigationController,
50
+ apiKey
54
51
  } = props;
55
52
 
56
- useLocaleConfig(locale);
57
-
58
53
  /**
59
54
  * Controller in charge of fetching and persisting data
60
55
  */
@@ -71,7 +66,7 @@ export function FireCMS<UserType extends User, EC extends EntityCollection>(prop
71
66
 
72
67
  const loading = authController.initialLoading || navigationController.loading || pluginsLoading;
73
68
 
74
- const customizationController = useBuildCustomizationController({
69
+ const customizationController: CustomizationController = {
75
70
  dateTimeFormat,
76
71
  locale,
77
72
  entityLinkBuilder,
@@ -79,13 +74,21 @@ export function FireCMS<UserType extends User, EC extends EntityCollection>(prop
79
74
  entityViews: entityViews ?? [],
80
75
  propertyConfigs: propertyConfigs ?? {},
81
76
  components
82
- });
77
+ };
83
78
 
84
79
  const analyticsController = useMemo(() => ({
85
80
  onAnalyticsEvent
86
81
  }), []);
87
82
 
88
- const accessResponse = useProjectLog(authController, plugins);
83
+ const accessResponse = useProjectLog({
84
+ apiKey,
85
+ authController,
86
+ dataSourceDelegate,
87
+ plugins
88
+ });
89
+ if (accessResponse?.message) {
90
+ console.warn(accessResponse.message);
91
+ }
89
92
 
90
93
  if (navigationController.navigationLoadingError) {
91
94
  return (
@@ -109,54 +112,52 @@ export function FireCMS<UserType extends User, EC extends EntityCollection>(prop
109
112
 
110
113
  if (accessResponse?.blocked) {
111
114
  return (
112
- <CenteredView maxWidth={"md"} fullScreen={true}>
113
- <Typography variant={"h4"}>
114
- Access blocked
115
+ <CenteredView maxWidth={"md"} fullScreen={true} className={"flex flex-col gap-2"}>
116
+ <Typography variant={"h4"} gutterBottom>
117
+ License needed
115
118
  </Typography>
116
119
  <Typography>
117
- This app has been blocked. Please reach out at <a
120
+ You need a valid license to use FireCMS PRO. Please reach out at <a
118
121
  href={"mailto:hello@firecms.co"}>hello@firecms.co</a> for more information.
119
122
  </Typography>
120
123
  {accessResponse?.message &&
121
- <Typography>Response from the server: {accessResponse?.message}</Typography>}
124
+ <Typography>{accessResponse?.message}</Typography>}
122
125
  </CenteredView>
123
126
  );
124
127
  }
125
128
 
126
129
  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>
130
+ <AnalyticsContext.Provider value={analyticsController}>
131
+ <CustomizationControllerContext.Provider value={customizationController}>
132
+ <UserConfigurationPersistenceContext.Provider
133
+ value={userConfigPersistence}>
134
+ <StorageSourceContext.Provider
135
+ value={storageSource}>
136
+ <DataSourceContext.Provider
137
+ value={dataSource}>
138
+ <AuthControllerContext.Provider
139
+ value={authController}>
140
+ <SideDialogsControllerContext.Provider
141
+ value={sideDialogsController}>
142
+ <SideEntityControllerContext.Provider
143
+ value={sideEntityController}>
144
+ <NavigationContext.Provider
145
+ value={navigationController}>
146
+ <DialogsProvider>
147
+ <FireCMSInternal
148
+ loading={loading}>
149
+ {children}
150
+ </FireCMSInternal>
151
+ </DialogsProvider>
152
+ </NavigationContext.Provider>
153
+ </SideEntityControllerContext.Provider>
154
+ </SideDialogsControllerContext.Provider>
155
+ </AuthControllerContext.Provider>
156
+ </DataSourceContext.Provider>
157
+ </StorageSourceContext.Provider>
158
+ </UserConfigurationPersistenceContext.Provider>
159
+ </CustomizationControllerContext.Provider>
160
+ </AnalyticsContext.Provider>
160
161
  );
161
162
 
162
163
  }
@@ -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
  );
@@ -126,6 +126,7 @@ function SideDialogView({
126
126
  <Sheet
127
127
  open={Boolean(panel)}
128
128
  onOpenChange={(open) => !open && onCloseRequest()}
129
+ title={"Side dialog " + panel?.key}
129
130
  >
130
131
  {panel &&
131
132
  <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
 
@@ -74,17 +81,20 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
74
81
  context,
75
82
  includeDescription,
76
83
  underlyingValueHasChanged,
77
- disabled,
78
- tableMode,
84
+ disabled: disabledProp,
79
85
  partOfArray,
80
- partOfBlock,
86
+ minimalistView,
81
87
  autoFocus,
88
+ index,
89
+ size,
90
+ onPropertyChange
82
91
  }: PropertyFieldBindingProps<T, M>): ReactElement<PropertyFieldBindingProps<T, M>> {
83
92
 
84
93
  const customizationController = useCustomizationController();
85
94
 
86
95
  return (
87
96
  <Field
97
+ key={propertyKey}
88
98
  name={propertyKey}
89
99
  >
90
100
  {(fieldProps) => {
@@ -92,14 +102,16 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
92
102
  let Component: ComponentType<FieldProps<T>> | undefined;
93
103
  const resolvedProperty: ResolvedProperty<T> | null = resolveProperty({
94
104
  propertyKey,
95
- propertyValue: fieldProps.field.value,
96
105
  propertyOrBuilder: property,
97
106
  values: fieldProps.form.values,
98
107
  path: context.path,
99
108
  entityId: context.entityId,
100
- fields: customizationController.propertyConfigs
109
+ propertyConfigs: customizationController.propertyConfigs,
110
+ index
101
111
  });
102
112
 
113
+ const disabled = disabledProp || isReadOnly(resolvedProperty) || Boolean(resolvedProperty?.disabled);
114
+
103
115
  if (resolvedProperty === null || isHidden(resolvedProperty)) {
104
116
  return <></>;
105
117
  } else if (isReadOnly(resolvedProperty)) {
@@ -111,16 +123,23 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
111
123
  } else {
112
124
  const propertyConfig = getFieldConfig(resolvedProperty, customizationController.propertyConfigs);
113
125
  if (!propertyConfig) {
114
- console.log("INTERNAL: Could not find field config for property", { propertyKey, resolvedProperty, fields: customizationController.propertyConfigs, propertyConfig });
126
+ console.log("INTERNAL: Could not find field config for property", {
127
+ propertyKey,
128
+ property,
129
+ resolvedProperty,
130
+ fields: customizationController.propertyConfigs,
131
+ propertyConfig
132
+ });
115
133
  throw new Error(`INTERNAL: Could not find field config for property ${propertyKey}`);
116
134
  }
117
135
  const configProperty = resolveProperty({
136
+ propertyKey,
118
137
  propertyOrBuilder: propertyConfig.property,
119
- propertyValue: fieldProps.field.value,
120
138
  values: fieldProps.form.values,
121
139
  path: context.path,
122
140
  entityId: context.entityId,
123
- fields: customizationController.propertyConfigs
141
+ propertyConfigs: customizationController.propertyConfigs,
142
+ index
124
143
  });
125
144
  Component = configProperty.Field as ComponentType<FieldProps<T>>;
126
145
  }
@@ -139,16 +158,17 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
139
158
  underlyingValueHasChanged,
140
159
  context,
141
160
  disabled,
142
- tableMode,
143
161
  partOfArray,
144
- partOfBlock,
145
- autoFocus
162
+ minimalistView,
163
+ autoFocus,
164
+ size,
165
+ onPropertyChange
146
166
  };
147
167
 
148
168
  return <FieldInternal
149
169
  Component={Component as ComponentType<FieldProps>}
150
170
  componentProps={componentProps}
151
- fieldProps={fieldProps}/>;
171
+ formexFieldProps={fieldProps}/>;
152
172
  }}
153
173
  </Field>
154
174
  );
@@ -169,52 +189,59 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
169
189
  property,
170
190
  includeDescription,
171
191
  underlyingValueHasChanged,
172
- tableMode,
173
192
  partOfArray,
174
- partOfBlock,
193
+ minimalistView,
175
194
  autoFocus,
176
195
  context,
177
- disabled
196
+ disabled,
197
+ size,
198
+ onPropertyChange
178
199
  },
179
- fieldProps
200
+ formexFieldProps
180
201
  }:
181
202
  {
182
203
  Component: ComponentType<FieldProps<T, any, M>>,
183
204
  componentProps: ResolvedPropertyFieldBindingProps<T, M>,
184
- fieldProps: FormexFieldProps<T, any>
205
+ formexFieldProps: FormexFieldProps<T, any>
185
206
  }) {
186
207
 
187
208
  const { plugins } = useCustomizationController();
188
209
 
189
210
  const customFieldProps: any = property.customProps;
190
- const value = fieldProps.field.value;
191
- // const initialValue = fieldProps.meta.initialValue;
192
- const error = getIn(fieldProps.form.errors, propertyKey);
193
- const touched = getIn(fieldProps.form.touched, propertyKey);
211
+ const value = formexFieldProps.field.value;
212
+ // const initialValue = formexFieldProps.meta.initialValue;
213
+ const error = getIn(formexFieldProps.form.errors, propertyKey);
214
+ const touched = getIn(formexFieldProps.form.touched, propertyKey);
194
215
 
195
216
  const showError: boolean = error &&
196
- (fieldProps.form.submitCount > 0 || property.validation?.unique) &&
217
+ (formexFieldProps.form.submitCount > 0 || property.validation?.unique) &&
197
218
  (!Array.isArray(error) || !!error.filter((e: any) => !!e).length);
198
219
 
199
- const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent(context.path, context.collection, propertyKey, property, Component, plugins);
220
+ const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent({
221
+ path: context.path,
222
+ collection: context.collection,
223
+ propertyKey: propertyKey,
224
+ property: property,
225
+ Component: Component,
226
+ plugins: plugins
227
+ });
200
228
  const UsedComponent: ComponentType<FieldProps<T>> = WrappedComponent ?? Component;
201
229
 
202
- const isSubmitting = fieldProps.form.isSubmitting;
230
+ const isSubmitting = formexFieldProps.form.isSubmitting;
203
231
 
204
232
  const setValue = useCallback((value: T | null, shouldValidate?: boolean) => {
205
- fieldProps.form.setFieldTouched(propertyKey, true, false);
206
- fieldProps.form.setFieldValue(propertyKey, value, shouldValidate);
233
+ formexFieldProps.form.setFieldTouched(propertyKey, true, false);
234
+ formexFieldProps.form.setFieldValue(propertyKey, value, shouldValidate);
207
235
  }, []);
208
236
 
209
237
  const setFieldValue = useCallback((otherPropertyKey: string, value: CMSType | null, shouldValidate?: boolean) => {
210
- fieldProps.form.setFieldTouched(propertyKey, true, false);
211
- fieldProps.form.setFieldValue(otherPropertyKey, value, shouldValidate);
238
+ formexFieldProps.form.setFieldTouched(propertyKey, true, false);
239
+ formexFieldProps.form.setFieldValue(otherPropertyKey, value, shouldValidate);
212
240
  }, []);
213
241
 
214
242
  const cmsFieldProps: FieldProps<T, CustomProps, M> = {
215
243
  propertyKey,
216
244
  value: value as T,
217
- // initialValue,
218
245
  setValue,
219
246
  setFieldValue,
220
247
  error,
@@ -225,12 +252,13 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
225
252
  property: property as ResolvedProperty<T>,
226
253
  disabled: disabled ?? false,
227
254
  underlyingValueHasChanged: underlyingValueHasChanged ?? false,
228
- tableMode: tableMode ?? false,
229
255
  partOfArray: partOfArray ?? false,
230
- partOfBlock: partOfBlock ?? false,
256
+ minimalistView: minimalistView ?? false,
231
257
  autoFocus: autoFocus ?? false,
232
258
  customProps: customFieldProps,
233
- context
259
+ context,
260
+ size,
261
+ onPropertyChange
234
262
  };
235
263
 
236
264
  return (
@@ -266,13 +294,24 @@ const shouldPropertyReRender = (property: PropertyOrBuilder | ResolvedProperty,
266
294
  }
267
295
  }
268
296
 
269
- function useWrappedComponent<T extends CMSType = CMSType, M extends Record<string, any> = any>(
270
- path: string,
271
- collection: EntityCollection<M>,
297
+ interface UseWrappedComponentParams<T extends CMSType = CMSType, M extends Record<string, any> = any> {
298
+ path?: string,
299
+ collection?: EntityCollection<M>,
272
300
  propertyKey: string,
273
301
  property: ResolvedProperty<T>,
274
302
  Component: ComponentType<FieldProps<T, any, M>>,
275
303
  plugins?: FireCMSPlugin[]
304
+ }
305
+
306
+ function useWrappedComponent<T extends CMSType = CMSType, M extends Record<string, any> = any>(
307
+ {
308
+ path,
309
+ collection,
310
+ propertyKey,
311
+ property,
312
+ Component,
313
+ plugins
314
+ }: UseWrappedComponentParams<T, M>
276
315
  ): ComponentType<FieldProps<T, any, M>> | null {
277
316
 
278
317
  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">
@@ -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";