@firecms/core 3.0.0-canary.98 → 3.0.0-rc.1

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 (349) hide show
  1. package/README.md +2 -2
  2. package/dist/app/Drawer.d.ts +0 -1
  3. package/dist/app/Scaffold.d.ts +4 -0
  4. package/dist/components/ArrayContainer.d.ts +31 -12
  5. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  6. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +3 -1
  7. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  8. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +17 -3
  9. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +1 -1
  10. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  11. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +6 -3
  12. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +8 -0
  13. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  14. package/dist/components/EntityJsonPreview.d.ts +3 -0
  15. package/dist/components/EntityPreview.d.ts +8 -6
  16. package/dist/components/HomePage/DefaultHomePage.d.ts +2 -15
  17. package/dist/components/HomePage/HomePageDnD.d.ts +76 -0
  18. package/dist/components/HomePage/NavigationCard.d.ts +3 -1
  19. package/dist/components/HomePage/NavigationCardBinding.d.ts +3 -2
  20. package/dist/components/HomePage/NavigationGroup.d.ts +8 -1
  21. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  22. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  23. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  24. package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
  25. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +1 -1
  26. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  27. package/dist/components/VirtualTable/VirtualTableProps.d.ts +11 -2
  28. package/dist/components/common/default_entity_actions.d.ts +0 -2
  29. package/dist/components/common/index.d.ts +1 -1
  30. package/dist/components/common/useColumnsIds.d.ts +1 -0
  31. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +10 -2
  32. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  33. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  34. package/dist/components/index.d.ts +3 -1
  35. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  36. package/dist/core/DefaultAppBar.d.ts +8 -2
  37. package/dist/core/DrawerNavigationItem.d.ts +2 -1
  38. package/dist/core/EntityEditView.d.ts +40 -22
  39. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  40. package/dist/core/FireCMS.d.ts +2 -2
  41. package/dist/core/FireCMSRouter.d.ts +4 -0
  42. package/dist/core/NavigationRoutes.d.ts +0 -1
  43. package/dist/core/SideDialogs.d.ts +4 -2
  44. package/dist/core/field_configs.d.ts +1 -1
  45. package/dist/core/index.d.ts +2 -1
  46. package/dist/form/EntityForm.d.ts +50 -0
  47. package/dist/form/EntityFormActions.d.ts +21 -0
  48. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  49. package/dist/form/components/FormEntry.d.ts +6 -0
  50. package/dist/form/components/FormLayout.d.ts +5 -0
  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/index.d.ts +3 -1
  54. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  55. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  56. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  57. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  60. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  61. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  62. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  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 +4 -10
  67. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  68. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  69. package/dist/form/index.d.ts +17 -16
  70. package/dist/form/useClearRestoreValue.d.ts +2 -2
  71. package/dist/hooks/data/delete.d.ts +4 -4
  72. package/dist/hooks/data/save.d.ts +3 -3
  73. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  74. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  75. package/dist/hooks/useAuthController.d.ts +1 -1
  76. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  77. package/dist/hooks/useBuildNavigationController.d.ts +57 -12
  78. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  79. package/dist/hooks/useModeController.d.ts +1 -2
  80. package/dist/hooks/useProjectLog.d.ts +7 -1
  81. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  82. package/dist/hooks/useValidateAuthenticator.d.ts +3 -3
  83. package/dist/index.es.js +20108 -14471
  84. package/dist/index.es.js.map +1 -1
  85. package/dist/index.umd.js +20039 -14407
  86. package/dist/index.umd.js.map +1 -1
  87. package/dist/internal/useBuildDataSource.d.ts +3 -2
  88. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  89. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  90. package/dist/preview/PropertyPreviewProps.d.ts +1 -1
  91. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  92. package/dist/preview/components/ReferencePreview.d.ts +2 -2
  93. package/dist/preview/util.d.ts +3 -3
  94. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  95. package/dist/routes/FireCMSRoute.d.ts +1 -0
  96. package/dist/routes/HomePageRoute.d.ts +3 -0
  97. package/dist/types/analytics.d.ts +1 -1
  98. package/dist/types/auth.d.ts +7 -9
  99. package/dist/types/collections.d.ts +86 -25
  100. package/dist/types/customization_controller.d.ts +8 -0
  101. package/dist/types/datasource.d.ts +19 -17
  102. package/dist/types/dialogs_controller.d.ts +7 -3
  103. package/dist/types/entities.d.ts +2 -1
  104. package/dist/types/entity_actions.d.ts +58 -8
  105. package/dist/types/entity_callbacks.d.ts +16 -16
  106. package/dist/types/entity_overrides.d.ts +2 -2
  107. package/dist/types/export_import.d.ts +4 -4
  108. package/dist/types/fields.d.ts +43 -17
  109. package/dist/types/firecms.d.ts +16 -3
  110. package/dist/types/firecms_context.d.ts +1 -1
  111. package/dist/types/navigation.d.ts +60 -17
  112. package/dist/types/permissions.d.ts +4 -4
  113. package/dist/types/plugins.d.ts +42 -9
  114. package/dist/types/properties.d.ts +65 -22
  115. package/dist/types/property_config.d.ts +1 -3
  116. package/dist/types/roles.d.ts +3 -0
  117. package/dist/types/side_dialogs_controller.d.ts +10 -0
  118. package/dist/types/side_entity_controller.d.ts +14 -1
  119. package/dist/types/storage.d.ts +75 -0
  120. package/dist/types/user.d.ts +1 -0
  121. package/dist/util/builders.d.ts +3 -3
  122. package/dist/util/callbacks.d.ts +2 -0
  123. package/dist/util/createFormexStub.d.ts +2 -0
  124. package/dist/util/entities.d.ts +2 -2
  125. package/dist/util/entity_actions.d.ts +2 -0
  126. package/dist/util/entity_cache.d.ts +23 -0
  127. package/dist/util/icon_synonyms.d.ts +0 -1
  128. package/dist/util/icons.d.ts +5 -2
  129. package/dist/util/index.d.ts +3 -0
  130. package/dist/util/navigation_from_path.d.ts +10 -1
  131. package/dist/util/navigation_utils.d.ts +13 -1
  132. package/dist/util/objects.d.ts +2 -1
  133. package/dist/util/permissions.d.ts +4 -4
  134. package/dist/util/property_utils.d.ts +4 -4
  135. package/dist/util/references.d.ts +2 -2
  136. package/dist/util/resolutions.d.ts +30 -6
  137. package/dist/util/storage.d.ts +1 -1
  138. package/dist/util/useStorageUploadController.d.ts +2 -2
  139. package/package.json +133 -125
  140. package/src/app/Drawer.tsx +0 -1
  141. package/src/app/Scaffold.tsx +33 -29
  142. package/src/components/ArrayContainer.tsx +447 -229
  143. package/src/components/CircularProgressCenter.tsx +1 -1
  144. package/src/components/ClearFilterSortButton.tsx +1 -1
  145. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
  146. package/src/components/DeleteEntityDialog.tsx +13 -20
  147. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +59 -25
  148. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +23 -17
  149. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +20 -3
  150. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +35 -9
  151. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +21 -16
  152. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +6 -12
  153. package/src/components/EntityCollectionTable/index.tsx +1 -1
  154. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +6 -6
  155. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +35 -26
  156. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  157. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +132 -101
  158. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
  159. package/src/components/EntityCollectionView/EntityCollectionView.tsx +178 -85
  160. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
  161. package/src/components/EntityCollectionView/useSelectionController.tsx +5 -4
  162. package/src/components/EntityCollectionView/utils.ts +19 -0
  163. package/src/components/EntityJsonPreview.tsx +66 -0
  164. package/src/components/EntityPreview.tsx +75 -57
  165. package/src/components/EntityView.tsx +8 -5
  166. package/src/components/ErrorView.tsx +3 -3
  167. package/src/components/FireCMSLogo.tsx +7 -51
  168. package/src/components/HomePage/DefaultHomePage.tsx +522 -160
  169. package/src/components/HomePage/FavouritesView.tsx +9 -14
  170. package/src/components/HomePage/HomePageDnD.tsx +642 -0
  171. package/src/components/HomePage/NavigationCard.tsx +47 -38
  172. package/src/components/HomePage/NavigationCardBinding.tsx +16 -15
  173. package/src/components/HomePage/NavigationGroup.tsx +144 -30
  174. package/src/components/HomePage/RenameGroupDialog.tsx +117 -0
  175. package/src/components/HomePage/SmallNavigationCard.tsx +1 -2
  176. package/src/components/NotFoundPage.tsx +2 -2
  177. package/src/components/PropertyConfigBadge.tsx +9 -3
  178. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  179. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +22 -13
  180. package/src/components/SearchIconsView.tsx +2 -2
  181. package/src/components/SelectableTable/SelectableTable.tsx +154 -142
  182. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +4 -2
  183. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +10 -8
  184. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +59 -10
  185. package/src/components/UnsavedChangesDialog.tsx +46 -0
  186. package/src/components/VirtualTable/VirtualTable.tsx +65 -44
  187. package/src/components/VirtualTable/VirtualTableCell.tsx +0 -8
  188. package/src/components/VirtualTable/VirtualTableHeader.tsx +8 -8
  189. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +1 -1
  190. package/src/components/VirtualTable/VirtualTableProps.tsx +12 -2
  191. package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
  192. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  193. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
  194. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  195. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  196. package/src/components/common/default_entity_actions.tsx +62 -42
  197. package/src/components/common/index.ts +1 -1
  198. package/src/components/common/useColumnsIds.tsx +1 -1
  199. package/src/components/common/useDataSourceTableController.tsx +420 -0
  200. package/src/components/common/useDebouncedCallback.tsx +20 -0
  201. package/src/components/common/useScrollRestoration.tsx +68 -0
  202. package/src/components/common/useTableSearchHelper.ts +1 -0
  203. package/src/components/index.tsx +4 -1
  204. package/src/contexts/BreacrumbsContext.tsx +38 -0
  205. package/src/contexts/DialogsProvider.tsx +3 -2
  206. package/src/contexts/ModeController.tsx +1 -3
  207. package/src/contexts/SnackbarProvider.tsx +2 -0
  208. package/src/core/DefaultAppBar.tsx +124 -85
  209. package/src/core/DefaultDrawer.tsx +30 -22
  210. package/src/core/DrawerNavigationItem.tsx +32 -28
  211. package/src/core/EntityEditView.tsx +388 -995
  212. package/src/core/EntityEditViewFormActions.tsx +329 -0
  213. package/src/core/EntitySidePanel.tsx +88 -20
  214. package/src/core/FireCMS.tsx +46 -25
  215. package/src/core/FireCMSRouter.tsx +17 -0
  216. package/src/core/NavigationRoutes.tsx +23 -32
  217. package/src/core/SideDialogs.tsx +22 -12
  218. package/src/core/field_configs.tsx +24 -10
  219. package/src/core/index.tsx +4 -2
  220. package/src/form/EntityForm.tsx +814 -0
  221. package/src/form/EntityFormActions.tsx +211 -0
  222. package/src/form/PropertyFieldBinding.tsx +55 -41
  223. package/src/form/components/CustomIdField.tsx +9 -3
  224. package/src/form/components/FieldHelperText.tsx +1 -1
  225. package/src/form/components/FormEntry.tsx +22 -0
  226. package/src/form/components/FormLayout.tsx +16 -0
  227. package/src/form/components/LabelWithIcon.tsx +30 -19
  228. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  229. package/src/form/components/StorageItemPreview.tsx +5 -4
  230. package/src/form/components/StorageUploadProgress.tsx +2 -3
  231. package/src/form/components/index.tsx +3 -1
  232. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +30 -18
  233. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -36
  234. package/src/form/field_bindings/BlockFieldBinding.tsx +55 -33
  235. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  236. package/src/form/field_bindings/KeyValueFieldBinding.tsx +19 -15
  237. package/src/form/field_bindings/MapFieldBinding.tsx +72 -62
  238. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
  239. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
  240. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +10 -8
  241. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  242. package/src/form/field_bindings/ReferenceFieldBinding.tsx +28 -19
  243. package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -32
  244. package/src/form/field_bindings/SelectFieldBinding.tsx +22 -13
  245. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +247 -168
  246. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  247. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  248. package/src/form/index.tsx +17 -37
  249. package/src/form/useClearRestoreValue.tsx +2 -2
  250. package/src/form/validation.ts +12 -6
  251. package/src/hooks/data/delete.ts +6 -5
  252. package/src/hooks/data/save.ts +26 -35
  253. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  254. package/src/hooks/data/useDataSource.tsx +10 -2
  255. package/src/hooks/data/useEntityFetch.tsx +10 -6
  256. package/src/hooks/useAuthController.tsx +1 -1
  257. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  258. package/src/hooks/useBrowserTitleAndIcon.tsx +1 -1
  259. package/src/hooks/useBuildModeController.tsx +15 -28
  260. package/src/hooks/useBuildNavigationController.tsx +386 -124
  261. package/src/hooks/useFireCMSContext.tsx +3 -33
  262. package/src/hooks/useLargeLayout.tsx +0 -35
  263. package/src/hooks/useModeController.tsx +1 -2
  264. package/src/hooks/useProjectLog.tsx +16 -5
  265. package/src/hooks/useResolvedNavigationFrom.tsx +9 -11
  266. package/src/hooks/useValidateAuthenticator.tsx +3 -3
  267. package/src/internal/useBuildDataSource.ts +67 -80
  268. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  269. package/src/internal/useBuildSideEntityController.tsx +149 -86
  270. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  271. package/src/preview/PropertyPreview.tsx +28 -12
  272. package/src/preview/PropertyPreviewProps.tsx +1 -1
  273. package/src/preview/components/BooleanPreview.tsx +1 -1
  274. package/src/preview/components/EmptyValue.tsx +1 -1
  275. package/src/preview/components/EnumValuesChip.tsx +1 -1
  276. package/src/preview/components/ImagePreview.tsx +10 -9
  277. package/src/preview/components/ReferencePreview.tsx +6 -16
  278. package/src/preview/components/UrlComponentPreview.tsx +20 -21
  279. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -5
  280. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +5 -4
  281. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -3
  282. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -3
  283. package/src/preview/property_previews/ArrayOneOfPreview.tsx +6 -4
  284. package/src/preview/property_previews/ArrayPropertyPreview.tsx +5 -3
  285. package/src/preview/property_previews/MapPropertyPreview.tsx +7 -6
  286. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  287. package/src/preview/property_previews/StringPropertyPreview.tsx +2 -2
  288. package/src/preview/util.ts +10 -10
  289. package/src/routes/CustomCMSRoute.tsx +21 -0
  290. package/src/routes/FireCMSRoute.tsx +246 -0
  291. package/src/routes/HomePageRoute.tsx +17 -0
  292. package/src/types/analytics.ts +3 -0
  293. package/src/types/auth.tsx +8 -12
  294. package/src/types/collections.ts +101 -28
  295. package/src/types/customization_controller.tsx +9 -0
  296. package/src/types/datasource.ts +21 -20
  297. package/src/types/dialogs_controller.tsx +7 -3
  298. package/src/types/entities.ts +3 -1
  299. package/src/types/entity_actions.tsx +71 -8
  300. package/src/types/entity_callbacks.ts +18 -18
  301. package/src/types/entity_overrides.tsx +2 -2
  302. package/src/types/export_import.ts +4 -4
  303. package/src/types/fields.tsx +52 -19
  304. package/src/types/firecms.tsx +18 -4
  305. package/src/types/firecms_context.tsx +1 -1
  306. package/src/types/navigation.ts +76 -22
  307. package/src/types/permissions.ts +5 -5
  308. package/src/types/plugins.tsx +50 -9
  309. package/src/types/properties.ts +74 -22
  310. package/src/types/property_config.tsx +1 -2
  311. package/src/types/roles.ts +3 -0
  312. package/src/types/side_dialogs_controller.tsx +15 -0
  313. package/src/types/side_entity_controller.tsx +16 -1
  314. package/src/types/storage.ts +82 -0
  315. package/src/types/user.ts +2 -0
  316. package/src/util/builders.ts +10 -8
  317. package/src/util/callbacks.ts +119 -0
  318. package/src/util/createFormexStub.tsx +62 -0
  319. package/src/util/entities.ts +5 -3
  320. package/src/util/entity_actions.ts +28 -0
  321. package/src/util/entity_cache.ts +204 -0
  322. package/src/util/icon_list.ts +1 -1
  323. package/src/util/icon_synonyms.ts +0 -1
  324. package/src/util/icons.tsx +36 -11
  325. package/src/util/index.ts +3 -0
  326. package/src/util/join_collections.ts +9 -2
  327. package/src/util/make_properties_editable.ts +13 -5
  328. package/src/util/navigation_from_path.ts +33 -12
  329. package/src/util/navigation_utils.ts +135 -19
  330. package/src/util/objects.ts +74 -14
  331. package/src/util/parent_references_from_path.ts +3 -3
  332. package/src/util/permissions.ts +8 -8
  333. package/src/util/property_utils.tsx +17 -6
  334. package/src/util/references.ts +19 -8
  335. package/src/util/resolutions.ts +93 -24
  336. package/src/util/storage.ts +6 -2
  337. package/src/util/useStorageUploadController.tsx +74 -29
  338. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  339. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  340. package/dist/form/PropertiesForm.d.ts +0 -8
  341. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  342. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  343. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
  344. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -27
  345. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -236
  346. package/src/form/PropertiesForm.tsx +0 -81
  347. package/src/form/components/FormikArrayContainer.tsx +0 -44
  348. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  349. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -28,6 +28,7 @@ export function useTableSearchHelper<M extends Record<string, any>>({
28
28
  const props = {
29
29
  context,
30
30
  path: fullPath,
31
+ databaseId: collection.databaseId,
31
32
  collection,
32
33
  parentCollectionIds
33
34
  };
@@ -19,13 +19,14 @@ export * from "./EntityCollectionView/EntityCollectionViewActions";
19
19
  export * from "./EntityCollectionView/useSelectionController";
20
20
 
21
21
  export * from "./PropertyConfigBadge";
22
+ export * from "./PropertyIdCopyTooltip";
22
23
 
23
24
  export * from "./EntityCollectionTable";
24
25
  export * from "./NotFoundPage";
25
26
 
26
27
  export * from "./VirtualTable";
27
28
  export * from "./ErrorBoundary";
28
- export * from "./DeleteConfirmationDialog";
29
+ export * from "./ConfirmationDialog";
29
30
 
30
31
  export * from "./FireCMSLogo";
31
32
 
@@ -35,3 +36,5 @@ export * from "./ArrayContainer";
35
36
  export * from "./ReferenceWidget";
36
37
  export * from "./SearchIconsView";
37
38
  export * from "./FieldCaption";
39
+
40
+ export * from "./EntityPreview";
@@ -0,0 +1,38 @@
1
+ import React, { useState } from "react";
2
+ import { BreadcrumbEntry, BreadcrumbsController } from "../hooks/useBreadcrumbsController";
3
+
4
+ const DEFAULT_BREADCRUMBS_CONTROLLER = {
5
+ breadcrumbs: [],
6
+ set: (props: {
7
+ breadcrumbs: BreadcrumbEntry[];
8
+ }) => {
9
+ }
10
+ };
11
+
12
+ export const BreadcrumbContext = React.createContext<BreadcrumbsController>(DEFAULT_BREADCRUMBS_CONTROLLER);
13
+
14
+ interface BreadcrumbsProviderProps {
15
+ children: React.ReactNode;
16
+ }
17
+
18
+ export const BreadcrumbsProvider: React.FC<BreadcrumbsProviderProps> = ({ children }) => {
19
+
20
+ const [breadcrumbs, setBreadcrumbs] = useState<BreadcrumbEntry[]>([]);
21
+
22
+ const set = (props: {
23
+ breadcrumbs: BreadcrumbEntry[];
24
+ }) => {
25
+ setBreadcrumbs(props.breadcrumbs);
26
+ };
27
+
28
+ return (
29
+ <BreadcrumbContext.Provider
30
+ value={{
31
+ breadcrumbs,
32
+ set
33
+ }}
34
+ >
35
+ {children}
36
+ </BreadcrumbContext.Provider>
37
+ );
38
+ };
@@ -8,7 +8,7 @@ export const DialogsProvider: React.FC<PropsWithChildren<{}>> = ({ children }) =
8
8
  const [dialogEntries, setDialogEntries] = useState<DialogControllerEntryProps[]>([]);
9
9
  const dialogEntriesRef = useRef<DialogControllerEntryProps[]>(dialogEntries);
10
10
 
11
- const updateDialogEntries = (newPanels: DialogControllerEntryProps[]) => {
11
+ const updateDialogEntries = (newPanels: DialogControllerEntryProps<any>[]) => {
12
12
  dialogEntriesRef.current = newPanels;
13
13
  setDialogEntries(newPanels);
14
14
  };
@@ -23,7 +23,7 @@ export const DialogsProvider: React.FC<PropsWithChildren<{}>> = ({ children }) =
23
23
 
24
24
  }, [dialogEntries]);
25
25
 
26
- const open = useCallback((dialogEntry: DialogControllerEntryProps) => {
26
+ const open = useCallback(<T extends object = object>(dialogEntry: DialogControllerEntryProps<T>) => {
27
27
 
28
28
  const updatedPanels = [...dialogEntriesRef.current, dialogEntry];
29
29
  updateDialogEntries(updatedPanels);
@@ -46,6 +46,7 @@ export const DialogsProvider: React.FC<PropsWithChildren<{}>> = ({ children }) =
46
46
  key={`dialog_${i}`}
47
47
  open={true}
48
48
  closeDialog={close}
49
+ {...entry.props}
49
50
  />)}
50
51
  </DialogsControllerContext.Provider>
51
52
  );
@@ -3,10 +3,8 @@ import { ModeController } from "../hooks";
3
3
 
4
4
  const DEFAULT_MODE_STATE: ModeController = {
5
5
  mode: "light",
6
- setMode: (mode: "light" | "dark") => {
6
+ setMode: (mode: "light" | "dark" | "system") => {
7
7
  },
8
- toggleMode: () => {
9
- }
10
8
  };
11
9
  export const ModeControllerContext = React.createContext<ModeController>(DEFAULT_MODE_STATE);
12
10
 
@@ -1,3 +1,5 @@
1
+ "use client";
2
+
1
3
  import React, { PropsWithChildren } from "react";
2
4
  import { SnackbarProvider as NotistackSnackbarProvider } from "notistack";
3
5
 
@@ -1,9 +1,10 @@
1
1
  import React from "react";
2
2
 
3
- import { Link as ReactLink, useNavigate } from "react-router-dom";
3
+ import { Link, useNavigate } from "react-router-dom";
4
4
  import { ErrorBoundary, FireCMSLogo } from "../components";
5
5
  import {
6
6
  Avatar,
7
+ BrightnessMediumIcon,
7
8
  cls,
8
9
  DarkModeIcon,
9
10
  IconButton,
@@ -17,15 +18,23 @@ import {
17
18
  import { useAuthController, useLargeLayout, useModeController, useNavigationController } from "../hooks";
18
19
  import { User } from "../types";
19
20
  import { useApp } from "../app/useApp";
21
+ import { useBreadcrumbsController } from "../hooks/useBreadcrumbsController";
20
22
 
21
23
  export type DefaultAppBarProps<ADDITIONAL_PROPS = object> = {
22
24
 
25
+ /**
26
+ * The content of the app bar, usually a title or logo. This includes a link to the home page.
27
+ */
23
28
  title?: React.ReactNode;
29
+
24
30
  /**
25
- * A component that gets rendered on the upper side of the main toolbar
31
+ * A component that gets rendered on the upper side to the end of the main toolbar
26
32
  */
27
33
  endAdornment?: React.ReactNode;
28
34
 
35
+ /**
36
+ * A component that gets rendered on the upper side to the start of the main toolbar
37
+ */
29
38
  startAdornment?: React.ReactNode;
30
39
 
31
40
  dropDownActions?: React.ReactNode;
@@ -55,20 +64,26 @@ export const DefaultAppBar = function DefaultAppBar({
55
64
  includeModeToggle = true,
56
65
  className,
57
66
  style,
58
- user: userProp
67
+ user: userProp,
68
+ logo: logoProp,
59
69
  }: DefaultAppBarProps) {
60
70
 
61
71
  const {
62
72
  hasDrawer,
63
73
  drawerOpen,
64
- logo
74
+ logo: appLogo
65
75
  } = useApp();
76
+
77
+ const logo = logoProp ?? appLogo;
78
+
66
79
  const navigation = useNavigationController();
67
80
 
81
+ const breadcrumbs = useBreadcrumbsController();
82
+
68
83
  const authController = useAuthController();
69
84
  const {
70
85
  mode,
71
- toggleMode
86
+ setMode
72
87
  } = useModeController();
73
88
 
74
89
  const navigate = useNavigate();
@@ -77,104 +92,128 @@ export const DefaultAppBar = function DefaultAppBar({
77
92
 
78
93
  const user = userProp ?? authController.user;
79
94
 
80
- let avatarComponent: JSX.Element;
81
- if (user && user.photoURL) {
82
- avatarComponent = <Avatar
83
- src={user.photoURL}/>;
95
+ let avatarComponent: JSX.Element | null;
96
+
97
+ if (user) {
98
+ const initial = user?.displayName
99
+ ? user.displayName[0].toUpperCase()
100
+ : (user?.email ? user.email[0].toUpperCase() : "A");
101
+ avatarComponent = <Avatar src={user.photoURL ?? undefined}>
102
+ {initial}
103
+ </Avatar>;
84
104
  } else if (user === undefined || authController.initialLoading) {
85
105
  avatarComponent = <div className={"p-1 flex justify-center"}>
86
106
  <Skeleton className={"w-10 h-10 rounded-full"}/>
87
107
  </div>;
88
108
  } else {
89
- const initial = user?.displayName
90
- ? user.displayName[0].toUpperCase()
91
- : (user?.email ? user.email[0].toUpperCase() : "A");
92
- avatarComponent = <Avatar>{initial}</Avatar>;
109
+ avatarComponent = null;
93
110
  }
94
111
 
95
112
  return (
96
113
  <div
97
114
  style={style}
98
- className={cls("w-full h-16 transition-all ease-in duration-75 fixed",
115
+ className={cls("w-full h-16 transition-all ease-in duration-75 absolute top-0 max-w-full overflow-x-auto no-scrollbar",
116
+ "flex flex-row gap-2 px-4 items-center",
99
117
  {
100
- "pl-[17rem]": drawerOpen && largeLayout,
101
- "pl-20": hasDrawer && !(drawerOpen && largeLayout),
118
+ "pl-[19rem]": drawerOpen && largeLayout,
119
+ "pl-24": hasDrawer && !(drawerOpen && largeLayout),
102
120
  "z-10": largeLayout,
103
- // "w-full": !hasDrawer,
104
- // "w-[calc(100%-64px)]": hasDrawer && !(drawerOpen && largeLayout),
105
- // "w-[calc(100%-17rem)]": hasDrawer && (drawerOpen && largeLayout),
106
- "duration-150": drawerOpen && largeLayout,
121
+ "duration-100": drawerOpen && largeLayout,
107
122
  },
108
123
  className)}>
109
124
 
110
- <div className="flex flex-row gap-2 px-4 h-full items-center">
111
-
112
- {navigation && <div className="mr-8 hidden lg:block">
113
- <ReactLink
114
- className="visited:text-inherit visited:dark:text-inherit"
115
- to={navigation?.basePath ?? "/"}
116
- >
117
- <div className={"flex flex-row gap-4"}>
118
- {!hasDrawer && (logo
119
- ? <img src={logo}
120
- alt="Logo"
121
- className={cls("w-[32px] h-[32px] object-contain")}/>
122
- : <FireCMSLogo width={"32px"} height={"32px"}/>)}
123
-
124
- {typeof title === "string"
125
- ? <Typography variant="subtitle1"
126
- noWrap
127
- className={"ml-2 !font-medium"}>
128
- {title}
125
+
126
+ {navigation && <div className="mr-2 hidden lg:block">
127
+ <Link
128
+ className="visited:text-inherit visited:dark:text-inherit block"
129
+ to={navigation?.basePath ?? "/"}
130
+ >
131
+ <div className={"flex flex-row gap-4"}>
132
+ {!hasDrawer && (logo
133
+ ? <img src={logo}
134
+ alt="Logo"
135
+ className={cls("w-[32px] h-[32px] object-contain")}/>
136
+ : <FireCMSLogo width={"32px"} height={"32px"}/>)}
137
+
138
+ {typeof title === "string"
139
+ ? <Typography variant="subtitle1"
140
+ noWrap>
141
+ {title}
142
+ </Typography>
143
+ : title}
144
+ </div>
145
+ </Link>
146
+ </div>}
147
+
148
+ {(breadcrumbs.breadcrumbs ?? []).length > 0 && <div className="mr-8 hidden lg:block">
149
+ <div className={"flex flex-row gap-2"}>
150
+ {breadcrumbs.breadcrumbs.map((breadcrumb, index) => {
151
+ return <React.Fragment key={breadcrumb.url + "_" + index}>
152
+ <Typography variant={"caption"} color={"secondary"}>
153
+ /
154
+ </Typography>
155
+ <Link
156
+ key={index}
157
+ className="visited:text-inherit visited:dark:text-inherit block"
158
+ to={breadcrumb.url}
159
+ >
160
+ <Typography variant={"caption"} color={"secondary"}>
161
+ {breadcrumb.title}
129
162
  </Typography>
130
- : title}
131
- </div>
132
- </ReactLink>
163
+ </Link>
164
+ </React.Fragment>;
165
+ })}
166
+ </div>
167
+ </div>}
168
+
169
+ {startAdornment}
170
+
171
+ <div className={"flex-grow"}/>
172
+
173
+ {endAdornment &&
174
+ <ErrorBoundary>
175
+ {endAdornment}
176
+ </ErrorBoundary>}
177
+
178
+ {includeModeToggle &&
179
+ <Menu
180
+ trigger={<IconButton
181
+ color="inherit"
182
+ aria-label="Open drawer"
183
+ size="large">
184
+ {mode === "dark"
185
+ ? <DarkModeIcon/>
186
+ : <LightModeIcon/>}
187
+ </IconButton>}>
188
+ <MenuItem onClick={() => setMode("dark")}><DarkModeIcon size={"smallest"}/> Dark</MenuItem>
189
+ <MenuItem onClick={() => setMode("light")}><LightModeIcon size={"smallest"}/> Light </MenuItem>
190
+ <MenuItem onClick={() => setMode("system")}> <BrightnessMediumIcon
191
+ size={"smallest"}/>System</MenuItem>
192
+ </Menu>}
193
+
194
+ <Menu trigger={avatarComponent}>
195
+ {user && <div className={"px-4 py-2 mb-2"}>
196
+ {user.displayName && <Typography variant={"body1"} color={"secondary"}>
197
+ {user.displayName}
198
+ </Typography>}
199
+ {user.email && <Typography variant={"body2"} color={"secondary"}>
200
+ {user.email}
201
+ </Typography>}
133
202
  </div>}
134
203
 
135
- {startAdornment}
136
-
137
- <div className={"flex-grow"}/>
138
-
139
- {endAdornment &&
140
- <ErrorBoundary>
141
- {endAdornment}
142
- </ErrorBoundary>}
143
-
144
- {includeModeToggle && <IconButton
145
- color="inherit"
146
- aria-label="Open drawer"
147
- onClick={toggleMode}
148
- size="large">
149
- {mode === "dark"
150
- ? <DarkModeIcon/>
151
- : <LightModeIcon/>}
152
- </IconButton>}
153
-
154
- <Menu trigger={avatarComponent}>
155
- {user && <div className={"px-4 py-2 mb-2"}>
156
- {user.displayName && <Typography variant={"body1"} color={"secondary"}>
157
- {user.displayName}
158
- </Typography>}
159
- {user.email && <Typography variant={"body2"} color={"secondary"}>
160
- {user.email}
161
- </Typography>}
162
- </div>}
163
-
164
- {dropDownActions}
165
-
166
- {!dropDownActions && <MenuItem onClick={async () => {
167
- await authController.signOut();
168
- // replace current route with home
169
- navigate("/");
170
- }}>
171
- <LogoutIcon/>
172
- Log Out
173
- </MenuItem>}
174
-
175
- </Menu>
176
-
177
- </div>
204
+ {dropDownActions}
205
+
206
+ {!dropDownActions && <MenuItem onClick={async () => {
207
+ await authController.signOut();
208
+ // replace current route with home
209
+ navigate("/");
210
+ }}>
211
+ <LogoutIcon/>
212
+ Log Out
213
+ </MenuItem>}
214
+
215
+ </Menu>
216
+
178
217
  </div>
179
218
  );
180
219
  }
@@ -3,7 +3,7 @@ import React, { useCallback } from "react";
3
3
  import { useLargeLayout, useNavigationController } from "../hooks";
4
4
 
5
5
  import { Link, useNavigate } from "react-router-dom";
6
- import { CMSAnalyticsEvent, TopNavigationEntry, TopNavigationResult } from "../types";
6
+ import { CMSAnalyticsEvent, NavigationEntry, NavigationResult } from "../types";
7
7
  import { IconForView } from "../util";
8
8
  import { cls, IconButton, Menu, MenuItem, MoreVertIcon, Tooltip, Typography } from "@firecms/ui";
9
9
  import { useAnalyticsController } from "../hooks/useAnalyticsController";
@@ -30,30 +30,30 @@ export function DefaultDrawer({
30
30
  logo
31
31
  } = useApp();
32
32
 
33
+ const [adminMenuOpen, setAdminMenuOpen] = React.useState(false);
34
+
33
35
  const analyticsController = useAnalyticsController();
34
36
  const navigation = useNavigationController();
35
37
 
36
- const tooltipsOpen = drawerHovered && !drawerOpen;
38
+ const tooltipsOpen = drawerHovered && !drawerOpen && !adminMenuOpen;
37
39
  const largeLayout = useLargeLayout();
38
40
  const navigate = useNavigate();
39
41
 
40
- const [adminMenuOpen, setAdminMenuOpen] = React.useState(false);
41
-
42
42
  if (!navigation.topLevelNavigation)
43
43
  throw Error("Navigation not ready in Drawer");
44
44
 
45
45
  const {
46
46
  navigationEntries,
47
47
  groups
48
- }: TopNavigationResult = navigation.topLevelNavigation;
48
+ }: NavigationResult = navigation.topLevelNavigation;
49
49
 
50
50
  const adminViews = navigationEntries.filter(e => e.type === "admin") ?? [];
51
51
  const groupsWithoutAdmin = groups.filter(g => g !== "Admin");
52
52
 
53
53
  const buildGroupHeader = useCallback((group?: string) => {
54
- if (!drawerOpen) return <div className="h-12 w-full"/>;
54
+ if (!drawerOpen) return <div className="w-full"/>;
55
55
  return <div
56
- className="pt-8 pl-6 pr-8 pb-2 flex flex-row items-center">
56
+ className="pl-6 pr-8 py-4 flex flex-row items-center">
57
57
  <Typography variant={"caption"}
58
58
  color={"secondary"}
59
59
  className="font-medium flex-grow line-clamp-1">
@@ -63,7 +63,7 @@ export function DefaultDrawer({
63
63
  </div>;
64
64
  }, [drawerOpen]);
65
65
 
66
- const onClick = (view: TopNavigationEntry) => {
66
+ const onClick = (view: NavigationEntry) => {
67
67
  const eventName: CMSAnalyticsEvent = view.type === "collection"
68
68
  ? "drawer_navigate_to_collection"
69
69
  : (view.type === "view" ? "drawer_navigate_to_view" : "unmapped_event");
@@ -78,35 +78,42 @@ export function DefaultDrawer({
78
78
 
79
79
  <DrawerLogo logo={logo}/>
80
80
 
81
- <div className={"overflow-scroll no-scrollbar"}>
81
+ <div className={"mt-4 flex-grow overflow-scroll no-scrollbar"}
82
+ style={{
83
+ maskImage: "linear-gradient(to bottom, transparent 0, black 20px, black calc(100% - 20px), transparent 100%)",
84
+ }}>
82
85
 
83
86
  {groupsWithoutAdmin.map((group) => (
84
- <React.Fragment
87
+ <div
88
+ className={"bg-surface-50 dark:bg-surface-800 dark:bg-opacity-30 my-4 rounded-lg ml-3 mr-1"}
85
89
  key={`drawer_group_${group}`}>
86
90
  {buildGroupHeader(group)}
87
91
  {Object.values(navigationEntries)
88
92
  .filter(e => e.group === group)
89
- .map((view, index) =>
93
+ .map((view) =>
90
94
  <DrawerNavigationItem
91
- key={`navigation_${index}`}
92
- icon={<IconForView collectionOrView={view.collection ?? view.view}/>}
95
+ key={view.id}
96
+ icon={<IconForView collectionOrView={view.collection ?? view.view}
97
+ size={"small"}/>}
93
98
  tooltipsOpen={tooltipsOpen}
99
+ adminMenuOpen={adminMenuOpen}
94
100
  drawerOpen={drawerOpen}
95
101
  onClick={() => onClick(view)}
96
102
  url={view.url}
97
103
  name={view.name}/>)}
98
- </React.Fragment>
104
+ </div>
99
105
  ))}
100
106
 
101
107
  </div>
102
108
 
103
109
  {adminViews.length > 0 && <Menu
110
+ side={"right"}
104
111
  open={adminMenuOpen}
105
112
  onOpenChange={setAdminMenuOpen}
106
113
  trigger={
107
114
  <IconButton
108
115
  shape={"square"}
109
- className={"m-4 text-gray-900 dark:text-white w-fit"}>
116
+ className={"m-4 text-surface-900 dark:text-white w-fit"}>
110
117
  <Tooltip title={"Admin"}
111
118
  open={tooltipsOpen}
112
119
  side={"right"} sideOffset={28}>
@@ -121,13 +128,13 @@ export function DefaultDrawer({
121
128
  </div>}
122
129
  </IconButton>}
123
130
  >
124
- {adminViews.map((entry, index) =>
131
+ {adminViews.map((entry) =>
125
132
  <MenuItem
126
133
  onClick={(event) => {
127
134
  event.preventDefault();
128
- navigate(entry.path);
135
+ navigate(entry.url); // Consistent use of entry.url for navigation
129
136
  }}
130
- key={`navigation_${index}`}>
137
+ key={entry.id}>
131
138
  {<IconForView collectionOrView={entry.view}/>}
132
139
  {entry.name}
133
140
  </MenuItem>)}
@@ -155,20 +162,21 @@ export function DrawerLogo({ logo }: {
155
162
  return <div
156
163
  style={{
157
164
  transition: "padding 100ms cubic-bezier(0.4, 0, 0.6, 1) 0ms",
158
- padding: drawerOpen ? "32px 144px 0px 24px" : "72px 16px 0px"
165
+ padding: drawerOpen ? "32px 144px 0px 24px" : "72px 12px 0px 12px"
159
166
  }}
160
- className={cls("cursor-pointer")}>
167
+ className={cls("cursor-pointer rounded ml-3 mr-1")}>
161
168
 
162
169
  <Tooltip title={"Home"}
163
170
  sideOffset={20}
164
171
  side="right">
165
172
  <Link
173
+ className={"block"}
166
174
  to={navigation.basePath}>
167
175
  {logo
168
176
  ? <img src={logo}
169
177
  alt="Logo"
170
- className={cls("max-w-full max-h-full",
171
- drawerOpen ?? "w-[112px] h-[112px]")}/>
178
+ className={cls("max-w-full max-h-full transition-all object-contain",
179
+ drawerOpen ? "w-[96px] h-[96px]" : "w-[32px] h-[32px]")}/>
172
180
  : <FireCMSLogo/>}
173
181
 
174
182
  </Link>
@@ -7,6 +7,7 @@ export function DrawerNavigationItem({
7
7
  name,
8
8
  icon,
9
9
  drawerOpen,
10
+ adminMenuOpen,
10
11
  tooltipsOpen,
11
12
  url,
12
13
  onClick
@@ -15,46 +16,49 @@ export function DrawerNavigationItem({
15
16
  name: string,
16
17
  tooltipsOpen: boolean,
17
18
  drawerOpen: boolean,
19
+ adminMenuOpen?: boolean,
18
20
  url: string,
19
21
  onClick?: () => void,
20
22
  }) {
21
23
 
22
24
  const iconWrap = <div
23
- className={"text-gray-600 dark:text-gray-500"}>
25
+ className={"text-text-secondary dark:text-text-secondary-dark"}>
24
26
  {icon}
25
27
  </div>;
26
28
 
27
- const listItem = <NavLink
28
- onClick={onClick}
29
- style={{
30
- width: !drawerOpen ? "72px" : "280px",
31
- transition: drawerOpen ? "width 150ms ease-in" : undefined
32
- }}
33
- className={({ isActive }: any) => cls("rounded-r-lg truncate",
34
- "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",
35
- "flex flex-row items-center mr-8",
36
- // "transition-all ease-in-out delay-100 duration-300",
37
- // drawerOpen ? "w-full" : "w-18",
38
- drawerOpen ? "pl-8 h-12" : "pl-6 h-11",
39
- "font-medium text-sm",
40
- isActive ? "bg-slate-200 bg-opacity-60 dark:bg-gray-800 dark:bg-opacity-30" : ""
41
- )}
42
- to={url}
43
- >
29
+ const listItem = <div>
30
+ <NavLink
31
+ onClick={onClick}
32
+ style={{
33
+ width: "100%",
34
+ transition: drawerOpen ? "width 150ms ease-in" : undefined
35
+ }}
36
+ className={({ isActive }: any) => cls("rounded-lg truncate",
37
+ "hover:bg-surface-accent-300 hover:bg-opacity-75 dark:hover:bg-surface-accent-800 dark:hover:bg-opacity-75 text-text-primary dark:text-surface-200 hover:text-surface-900 hover:dark:text-white",
38
+ "flex flex-row items-center mr-8",
39
+ // "transition-all ease-in-out delay-100 duration-300",
40
+ // drawerOpen ? "w-full" : "w-18",
41
+ drawerOpen ? "pl-4 h-10" : "pl-4 h-9",
42
+ "font-semibold text-xs",
43
+ isActive ? "bg-surface-accent-200 bg-opacity-60 dark:bg-surface-800 dark:bg-opacity-50" : ""
44
+ )}
45
+ to={url}
46
+ >
44
47
 
45
- {iconWrap}
48
+ {iconWrap}
46
49
 
47
- <div
48
- className={cls(
49
- drawerOpen ? "opacity-100" : "opacity-0 hidden",
50
- "ml-4 font-inherit text-inherit"
51
- )}>
52
- {name.toUpperCase()}
53
- </div>
54
- </NavLink>;
50
+ <div
51
+ className={cls(
52
+ drawerOpen ? "opacity-100" : "opacity-0 hidden",
53
+ "ml-4 font-inherit text-inherit"
54
+ )}>
55
+ {name.toUpperCase()}
56
+ </div>
57
+ </NavLink>
58
+ </div>;
55
59
 
56
60
  return <Tooltip
57
- open={drawerOpen ? false : tooltipsOpen}
61
+ open={drawerOpen || adminMenuOpen ? false : tooltipsOpen}
58
62
  side="right"
59
63
  title={name}>
60
64
  {listItem}