@rebasepro/core 0.0.1-canary.0

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 (570) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +174 -0
  3. package/dist/app/AppBar.d.ts +12 -0
  4. package/dist/app/Drawer.d.ts +19 -0
  5. package/dist/app/Scaffold.d.ts +34 -0
  6. package/dist/app/index.d.ts +4 -0
  7. package/dist/app/useApp.d.ts +17 -0
  8. package/dist/components/AIIcon.d.ts +16 -0
  9. package/dist/components/AdminModeSyncer.d.ts +17 -0
  10. package/dist/components/ArrayContainer.d.ts +59 -0
  11. package/dist/components/CircularProgressCenter.d.ts +11 -0
  12. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  13. package/dist/components/ConfirmationDialog.d.ts +9 -0
  14. package/dist/components/Debug/UIReferenceView.d.ts +1 -0
  15. package/dist/components/Debug/UIStyleGuide.d.ts +1 -0
  16. package/dist/components/DeleteEntityDialog.d.ts +12 -0
  17. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +37 -0
  18. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +27 -0
  19. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +128 -0
  20. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +25 -0
  21. package/dist/components/EntityCollectionTable/column_utils.d.ts +15 -0
  22. package/dist/components/EntityCollectionTable/fields/TableMultipleRelationField.d.ts +20 -0
  23. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +21 -0
  24. package/dist/components/EntityCollectionTable/fields/TableRelationField.d.ts +21 -0
  25. package/dist/components/EntityCollectionTable/fields/TableRelationSelectorField.d.ts +20 -0
  26. package/dist/components/EntityCollectionTable/fields/TableStorageUpload.d.ts +32 -0
  27. package/dist/components/EntityCollectionTable/index.d.ts +6 -0
  28. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +16 -0
  29. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +32 -0
  30. package/dist/components/EntityCollectionTable/internal/EntityTableCellActions.d.ts +9 -0
  31. package/dist/components/EntityCollectionTable/internal/common.d.ts +4 -0
  32. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +26 -0
  33. package/dist/components/EntityCollectionTable/internal/popup_field/useDraggable.d.ts +13 -0
  34. package/dist/components/EntityCollectionTable/internal/popup_field/useWindowSize.d.ts +6 -0
  35. package/dist/components/EntityCollectionView/Board.d.ts +2 -0
  36. package/dist/components/EntityCollectionView/BoardColumn.d.ts +42 -0
  37. package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +9 -0
  38. package/dist/components/EntityCollectionView/BoardSortableList.d.ts +14 -0
  39. package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +26 -0
  40. package/dist/components/EntityCollectionView/EntityCard.d.ts +19 -0
  41. package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +20 -0
  42. package/dist/components/EntityCollectionView/EntityCollectionCardView.d.ts +31 -0
  43. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +54 -0
  44. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +14 -0
  45. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +15 -0
  46. package/dist/components/EntityCollectionView/FiltersDialog.d.ts +14 -0
  47. package/dist/components/EntityCollectionView/ViewModeToggle.d.ts +44 -0
  48. package/dist/components/EntityCollectionView/board_types.d.ts +105 -0
  49. package/dist/components/EntityCollectionView/useBoardDataController.d.ts +60 -0
  50. package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
  51. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  52. package/dist/components/EntityJsonPreview.d.ts +3 -0
  53. package/dist/components/EntityPreview.d.ts +54 -0
  54. package/dist/components/EntityView.d.ts +11 -0
  55. package/dist/components/ErrorBoundary.d.ts +11 -0
  56. package/dist/components/ErrorTooltip.d.ts +2 -0
  57. package/dist/components/ErrorView.d.ts +21 -0
  58. package/dist/components/FieldCaption.d.ts +5 -0
  59. package/dist/components/HomePage/ContentHomePage.d.ts +11 -0
  60. package/dist/components/HomePage/FavouritesView.d.ts +3 -0
  61. package/dist/components/HomePage/HomePageDnD.d.ts +77 -0
  62. package/dist/components/HomePage/NavigationCard.d.ts +10 -0
  63. package/dist/components/HomePage/NavigationCardBinding.d.ts +18 -0
  64. package/dist/components/HomePage/NavigationGroup.d.ts +11 -0
  65. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  66. package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
  67. package/dist/components/HomePage/StudioHomePage.d.ts +9 -0
  68. package/dist/components/HomePage/index.d.ts +5 -0
  69. package/dist/components/NotFoundPage.d.ts +1 -0
  70. package/dist/components/PropertyCollectionView.d.ts +22 -0
  71. package/dist/components/PropertyConfigBadge.d.ts +6 -0
  72. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  73. package/dist/components/RebaseLogo.d.ts +7 -0
  74. package/dist/components/ReferenceTable/EntitySelectionTable.d.ts +58 -0
  75. package/dist/components/ReferenceWidget.d.ts +29 -0
  76. package/dist/components/RelationSelector.d.ts +32 -0
  77. package/dist/components/SearchIconsView.d.ts +5 -0
  78. package/dist/components/SelectableTable/SelectableTable.d.ts +89 -0
  79. package/dist/components/SelectableTable/SelectableTableContext.d.ts +4 -0
  80. package/dist/components/SelectableTable/filters/BooleanFilterField.d.ts +9 -0
  81. package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +12 -0
  82. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +15 -0
  83. package/dist/components/SelectableTable/filters/RelationFilterField.d.ts +12 -0
  84. package/dist/components/SelectableTable/filters/StringNumberFilterField.d.ts +13 -0
  85. package/dist/components/UnsavedChangesDialog.d.ts +9 -0
  86. package/dist/components/UserDisplay.d.ts +7 -0
  87. package/dist/components/UserSettingsView.d.ts +1 -0
  88. package/dist/components/VirtualTable/VirtualTable.d.ts +11 -0
  89. package/dist/components/VirtualTable/VirtualTableCell.d.ts +20 -0
  90. package/dist/components/VirtualTable/VirtualTableHeader.d.ts +29 -0
  91. package/dist/components/VirtualTable/VirtualTableHeaderRow.d.ts +2 -0
  92. package/dist/components/VirtualTable/VirtualTableProps.d.ts +239 -0
  93. package/dist/components/VirtualTable/VirtualTableRow.d.ts +3 -0
  94. package/dist/components/VirtualTable/fields/VirtualTableDateField.d.ts +12 -0
  95. package/dist/components/VirtualTable/fields/VirtualTableInput.d.ts +9 -0
  96. package/dist/components/VirtualTable/fields/VirtualTableNumberInput.d.ts +8 -0
  97. package/dist/components/VirtualTable/fields/VirtualTableSelect.d.ts +15 -0
  98. package/dist/components/VirtualTable/fields/VirtualTableSwitch.d.ts +7 -0
  99. package/dist/components/VirtualTable/fields/VirtualTableUserSelect.d.ts +12 -0
  100. package/dist/components/VirtualTable/index.d.ts +3 -0
  101. package/dist/components/VirtualTable/types.d.ts +37 -0
  102. package/dist/components/admin/RoleChip.d.ts +4 -0
  103. package/dist/components/admin/RolesView.d.ts +4 -0
  104. package/dist/components/admin/UsersView.d.ts +4 -0
  105. package/dist/components/admin/index.d.ts +3 -0
  106. package/dist/components/common/default_entity_actions.d.ts +4 -0
  107. package/dist/components/common/index.d.ts +6 -0
  108. package/dist/components/common/table_height.d.ts +5 -0
  109. package/dist/components/common/types.d.ts +58 -0
  110. package/dist/components/common/useColumnsIds.d.ts +6 -0
  111. package/dist/components/common/useDataSourceTableController.d.ts +44 -0
  112. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  113. package/dist/components/common/useDebouncedData.d.ts +9 -0
  114. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  115. package/dist/components/common/useTableSearchHelper.d.ts +11 -0
  116. package/dist/components/index.d.ts +35 -0
  117. package/dist/contexts/AdminModeController.d.ts +4 -0
  118. package/dist/contexts/AnalyticsContext.d.ts +3 -0
  119. package/dist/contexts/AuthControllerContext.d.ts +3 -0
  120. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  121. package/dist/contexts/CustomizationControllerContext.d.ts +3 -0
  122. package/dist/contexts/DataSourceContext.d.ts +3 -0
  123. package/dist/contexts/DialogsProvider.d.ts +4 -0
  124. package/dist/contexts/EffectiveRoleController.d.ts +4 -0
  125. package/dist/contexts/InternalUserManagementContext.d.ts +3 -0
  126. package/dist/contexts/ModeController.d.ts +4 -0
  127. package/dist/contexts/NavigationContext.d.ts +3 -0
  128. package/dist/contexts/SideDialogsControllerContext.d.ts +3 -0
  129. package/dist/contexts/SideEntityControllerContext.d.ts +3 -0
  130. package/dist/contexts/SnackbarProvider.d.ts +2 -0
  131. package/dist/contexts/StorageSourceContext.d.ts +3 -0
  132. package/dist/contexts/UserConfigurationPersistenceContext.d.ts +3 -0
  133. package/dist/contexts/index.d.ts +15 -0
  134. package/dist/core/DefaultAppBar.d.ts +29 -0
  135. package/dist/core/DefaultDrawer.d.ts +29 -0
  136. package/dist/core/DrawerNavigationGroup.d.ts +45 -0
  137. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  138. package/dist/core/EntityEditView.d.ts +47 -0
  139. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  140. package/dist/core/EntitySidePanel.d.ts +10 -0
  141. package/dist/core/Rebase.d.ts +13 -0
  142. package/dist/core/RebaseRouter.d.ts +4 -0
  143. package/dist/core/RebaseRoutes.d.ts +17 -0
  144. package/dist/core/SideDialogs.d.ts +25 -0
  145. package/dist/core/field_configs.d.ts +6 -0
  146. package/dist/core/index.d.ts +9 -0
  147. package/dist/form/EntityForm.d.ts +7 -0
  148. package/dist/form/EntityFormActions.d.ts +2 -0
  149. package/dist/form/PropertyFieldBinding.d.ts +30 -0
  150. package/dist/form/components/ErrorFocus.d.ts +4 -0
  151. package/dist/form/components/FieldHelperText.d.ts +12 -0
  152. package/dist/form/components/FormEntry.d.ts +6 -0
  153. package/dist/form/components/FormLayout.d.ts +5 -0
  154. package/dist/form/components/LabelWithIcon.d.ts +14 -0
  155. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  156. package/dist/form/components/LocalChangesMenu.d.ts +11 -0
  157. package/dist/form/components/StorageItemPreview.d.ts +13 -0
  158. package/dist/form/components/StorageUploadProgress.d.ts +10 -0
  159. package/dist/form/components/index.d.ts +5 -0
  160. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +9 -0
  161. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +11 -0
  162. package/dist/form/field_bindings/BlockFieldBinding.d.ts +10 -0
  163. package/dist/form/field_bindings/DateTimeFieldBinding.d.ts +11 -0
  164. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +7 -0
  165. package/dist/form/field_bindings/MapFieldBinding.d.ts +9 -0
  166. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  167. package/dist/form/field_bindings/MultiSelectFieldBinding.d.ts +9 -0
  168. package/dist/form/field_bindings/MultipleRelationFieldBinding.d.ts +9 -0
  169. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +10 -0
  170. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  171. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +9 -0
  172. package/dist/form/field_bindings/RelationFieldBinding.d.ts +2 -0
  173. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +10 -0
  174. package/dist/form/field_bindings/SelectFieldBinding.d.ts +10 -0
  175. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +19 -0
  176. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +9 -0
  177. package/dist/form/field_bindings/TextFieldBinding.d.ts +8 -0
  178. package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +12 -0
  179. package/dist/form/index.d.ts +20 -0
  180. package/dist/form/useClearRestoreValue.d.ts +13 -0
  181. package/dist/form/validation.d.ts +26 -0
  182. package/dist/hooks/ApiConfigContext.d.ts +24 -0
  183. package/dist/hooks/data/delete.d.ts +33 -0
  184. package/dist/hooks/data/save.d.ts +37 -0
  185. package/dist/hooks/data/useCollectionFetch.d.ts +50 -0
  186. package/dist/hooks/data/useDataOrder.d.ts +12 -0
  187. package/dist/hooks/data/useDataSource.d.ts +6 -0
  188. package/dist/hooks/data/useEntityFetch.d.ts +29 -0
  189. package/dist/hooks/data/useRelationSelector.d.ts +45 -0
  190. package/dist/hooks/index.d.ts +41 -0
  191. package/dist/hooks/navigation/contexts/CMSUrlContext.d.ts +4 -0
  192. package/dist/hooks/navigation/contexts/CollectionRegistryContext.d.ts +4 -0
  193. package/dist/hooks/navigation/contexts/NavigationStateContext.d.ts +4 -0
  194. package/dist/hooks/navigation/contexts/index.d.ts +3 -0
  195. package/dist/hooks/navigation/useBuildCMSUrlController.d.ts +6 -0
  196. package/dist/hooks/navigation/useBuildCollectionRegistryController.d.ts +7 -0
  197. package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +32 -0
  198. package/dist/hooks/navigation/useNavigationRegistry.d.ts +10 -0
  199. package/dist/hooks/navigation/useNavigationResolution.d.ts +5 -0
  200. package/dist/hooks/navigation/useNavigationURLs.d.ts +11 -0
  201. package/dist/hooks/navigation/useResolvedCollections.d.ts +26 -0
  202. package/dist/hooks/navigation/useResolvedViews.d.ts +28 -0
  203. package/dist/hooks/navigation/useTopLevelNavigation.d.ts +26 -0
  204. package/dist/hooks/navigation/utils.d.ts +12 -0
  205. package/dist/hooks/useAdminModeController.d.ts +19 -0
  206. package/dist/hooks/useAnalyticsController.d.ts +5 -0
  207. package/dist/hooks/useAuthController.d.ts +11 -0
  208. package/dist/hooks/useBackendStorageSource.d.ts +30 -0
  209. package/dist/hooks/useBreadcrumbsController.d.ts +42 -0
  210. package/dist/hooks/useBrowserTitleAndIcon.d.ts +6 -0
  211. package/dist/hooks/useBuildAdminModeController.d.ts +6 -0
  212. package/dist/hooks/useBuildEffectiveRoleController.d.ts +8 -0
  213. package/dist/hooks/useBuildLocalConfigurationPersistence.d.ts +2 -0
  214. package/dist/hooks/useBuildModeController.d.ts +6 -0
  215. package/dist/hooks/useBuildNavigationController.d.ts +16 -0
  216. package/dist/hooks/useClipboard.d.ts +57 -0
  217. package/dist/hooks/useCollapsedGroups.d.ts +12 -0
  218. package/dist/hooks/useCustomizationController.d.ts +11 -0
  219. package/dist/hooks/useDialogsController.d.ts +11 -0
  220. package/dist/hooks/useEffectiveRoleController.d.ts +7 -0
  221. package/dist/hooks/useEntitySelectionDialog.d.ts +18 -0
  222. package/dist/hooks/useInternalUserManagementController.d.ts +12 -0
  223. package/dist/hooks/useLargeLayout.d.ts +1 -0
  224. package/dist/hooks/useModeController.d.ts +19 -0
  225. package/dist/hooks/usePermissions.d.ts +11 -0
  226. package/dist/hooks/useRebaseContext.d.ts +11 -0
  227. package/dist/hooks/useResolvedNavigationFrom.d.ts +72 -0
  228. package/dist/hooks/useSideDialogsController.d.ts +18 -0
  229. package/dist/hooks/useSideEntityController.d.ts +12 -0
  230. package/dist/hooks/useSnackbarController.d.ts +20 -0
  231. package/dist/hooks/useStorageSource.d.ts +6 -0
  232. package/dist/hooks/useUnsavedChangesDialog.d.ts +12 -0
  233. package/dist/hooks/useUserConfigurationPersistence.d.ts +8 -0
  234. package/dist/hooks/useValidateAuthenticator.d.ts +21 -0
  235. package/dist/index.d.ts +15 -0
  236. package/dist/index.es.js +34745 -0
  237. package/dist/index.es.js.map +1 -0
  238. package/dist/index.umd.js +34751 -0
  239. package/dist/index.umd.js.map +1 -0
  240. package/dist/internal/common.d.ts +3 -0
  241. package/dist/internal/useBuildDataSource.d.ts +12 -0
  242. package/dist/internal/useBuildSideDialogsController.d.ts +2 -0
  243. package/dist/internal/useBuildSideEntityController.d.ts +4 -0
  244. package/dist/internal/useRestoreScroll.d.ts +6 -0
  245. package/dist/preview/PropertyPreview.d.ts +6 -0
  246. package/dist/preview/components/ArrayEnumPreview.d.ts +10 -0
  247. package/dist/preview/components/AsyncPreviewComponent.d.ts +11 -0
  248. package/dist/preview/components/BooleanPreview.d.ts +10 -0
  249. package/dist/preview/components/DatePreview.d.ts +17 -0
  250. package/dist/preview/components/EmptyValue.d.ts +6 -0
  251. package/dist/preview/components/EnumValuesChip.d.ts +13 -0
  252. package/dist/preview/components/ImagePreview.d.ts +16 -0
  253. package/dist/preview/components/ReferencePreview.d.ts +16 -0
  254. package/dist/preview/components/RelationPreview.d.ts +16 -0
  255. package/dist/preview/components/StorageThumbnail.d.ts +15 -0
  256. package/dist/preview/components/UrlComponentPreview.d.ts +13 -0
  257. package/dist/preview/components/UserPreview.d.ts +8 -0
  258. package/dist/preview/index.d.ts +24 -0
  259. package/dist/preview/property_previews/ArrayOfMapsPreview.d.ts +5 -0
  260. package/dist/preview/property_previews/ArrayOfReferencesPreview.d.ts +5 -0
  261. package/dist/preview/property_previews/ArrayOfRelationsPreview.d.ts +5 -0
  262. package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +5 -0
  263. package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +5 -0
  264. package/dist/preview/property_previews/ArrayOneOfPreview.d.ts +5 -0
  265. package/dist/preview/property_previews/ArrayPropertyEnumPreview.d.ts +5 -0
  266. package/dist/preview/property_previews/ArrayPropertyPreview.d.ts +5 -0
  267. package/dist/preview/property_previews/MapPropertyPreview.d.ts +8 -0
  268. package/dist/preview/property_previews/NumberPropertyPreview.d.ts +6 -0
  269. package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +13 -0
  270. package/dist/preview/property_previews/StringPropertyPreview.d.ts +6 -0
  271. package/dist/preview/util.d.ts +6 -0
  272. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  273. package/dist/routes/RebaseRoute.d.ts +1 -0
  274. package/dist/routes/index.d.ts +2 -0
  275. package/dist/util/createFormexStub.d.ts +2 -0
  276. package/dist/util/entity_cache.d.ts +27 -0
  277. package/dist/util/enums.d.ts +5 -0
  278. package/dist/util/icon_list.d.ts +5 -0
  279. package/dist/util/icon_synonyms.d.ts +1853 -0
  280. package/dist/util/icons.d.ts +16 -0
  281. package/dist/util/index.d.ts +11 -0
  282. package/dist/util/previews.d.ts +3 -0
  283. package/dist/util/property_utils.d.ts +23 -0
  284. package/dist/util/useDebouncedCallback.d.ts +1 -0
  285. package/dist/util/useStorageUploadController.d.ts +36 -0
  286. package/dist/util/useTraceUpdate.d.ts +2 -0
  287. package/dist/vitePlugin.d.ts +16 -0
  288. package/package.json +165 -0
  289. package/src/app/AppBar.tsx +18 -0
  290. package/src/app/Drawer.tsx +30 -0
  291. package/src/app/Scaffold.tsx +238 -0
  292. package/src/app/index.ts +4 -0
  293. package/src/app/useApp.tsx +36 -0
  294. package/src/components/AIIcon.tsx +39 -0
  295. package/src/components/AdminModeSyncer.tsx +47 -0
  296. package/src/components/ArrayContainer.tsx +549 -0
  297. package/src/components/CircularProgressCenter.tsx +26 -0
  298. package/src/components/ClearFilterSortButton.tsx +44 -0
  299. package/src/components/ConfirmationDialog.tsx +46 -0
  300. package/src/components/Debug/UIReferenceView.tsx +710 -0
  301. package/src/components/Debug/UIStyleGuide.tsx +164 -0
  302. package/src/components/DeleteEntityDialog.tsx +181 -0
  303. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +225 -0
  304. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +383 -0
  305. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +180 -0
  306. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +561 -0
  307. package/src/components/EntityCollectionTable/column_utils.tsx +74 -0
  308. package/src/components/EntityCollectionTable/fields/TableMultipleRelationField.tsx +122 -0
  309. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +169 -0
  310. package/src/components/EntityCollectionTable/fields/TableRelationField.tsx +177 -0
  311. package/src/components/EntityCollectionTable/fields/TableRelationSelectorField.tsx +42 -0
  312. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +315 -0
  313. package/src/components/EntityCollectionTable/index.tsx +12 -0
  314. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +90 -0
  315. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +311 -0
  316. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +82 -0
  317. package/src/components/EntityCollectionTable/internal/common.tsx +72 -0
  318. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +425 -0
  319. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +96 -0
  320. package/src/components/EntityCollectionTable/internal/popup_field/useWindowSize.tsx +20 -0
  321. package/src/components/EntityCollectionView/Board.tsx +324 -0
  322. package/src/components/EntityCollectionView/BoardColumn.tsx +158 -0
  323. package/src/components/EntityCollectionView/BoardColumnTitle.tsx +45 -0
  324. package/src/components/EntityCollectionView/BoardSortableList.tsx +172 -0
  325. package/src/components/EntityCollectionView/EntityBoardCard.tsx +200 -0
  326. package/src/components/EntityCollectionView/EntityCard.tsx +225 -0
  327. package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +746 -0
  328. package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +254 -0
  329. package/src/components/EntityCollectionView/EntityCollectionView.tsx +1220 -0
  330. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +142 -0
  331. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +131 -0
  332. package/src/components/EntityCollectionView/FiltersDialog.tsx +249 -0
  333. package/src/components/EntityCollectionView/ViewModeToggle.tsx +194 -0
  334. package/src/components/EntityCollectionView/board_types.ts +113 -0
  335. package/src/components/EntityCollectionView/useBoardDataController.tsx +490 -0
  336. package/src/components/EntityCollectionView/useSelectionController.tsx +43 -0
  337. package/src/components/EntityCollectionView/utils.ts +19 -0
  338. package/src/components/EntityJsonPreview.tsx +66 -0
  339. package/src/components/EntityPreview.tsx +367 -0
  340. package/src/components/EntityView.tsx +66 -0
  341. package/src/components/ErrorBoundary.tsx +40 -0
  342. package/src/components/ErrorTooltip.tsx +12 -0
  343. package/src/components/ErrorView.tsx +69 -0
  344. package/src/components/FieldCaption.tsx +14 -0
  345. package/src/components/HomePage/ContentHomePage.tsx +634 -0
  346. package/src/components/HomePage/FavouritesView.tsx +59 -0
  347. package/src/components/HomePage/HomePageDnD.tsx +702 -0
  348. package/src/components/HomePage/NavigationCard.tsx +80 -0
  349. package/src/components/HomePage/NavigationCardBinding.tsx +111 -0
  350. package/src/components/HomePage/NavigationGroup.tsx +154 -0
  351. package/src/components/HomePage/RenameGroupDialog.tsx +121 -0
  352. package/src/components/HomePage/SmallNavigationCard.tsx +45 -0
  353. package/src/components/HomePage/StudioHomePage.tsx +231 -0
  354. package/src/components/HomePage/index.tsx +6 -0
  355. package/src/components/NotFoundPage.tsx +25 -0
  356. package/src/components/PropertyCollectionView.tsx +333 -0
  357. package/src/components/PropertyConfigBadge.tsx +27 -0
  358. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  359. package/src/components/RebaseLogo.tsx +29 -0
  360. package/src/components/ReferenceTable/EntitySelectionTable.tsx +371 -0
  361. package/src/components/ReferenceWidget.tsx +152 -0
  362. package/src/components/RelationSelector.tsx +518 -0
  363. package/src/components/SearchIconsView.tsx +78 -0
  364. package/src/components/SelectableTable/SelectableTable.tsx +344 -0
  365. package/src/components/SelectableTable/SelectableTableContext.tsx +6 -0
  366. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +49 -0
  367. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +126 -0
  368. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +203 -0
  369. package/src/components/SelectableTable/filters/RelationFilterField.tsx +138 -0
  370. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +217 -0
  371. package/src/components/UnsavedChangesDialog.tsx +45 -0
  372. package/src/components/UserDisplay.tsx +55 -0
  373. package/src/components/UserSettingsView.tsx +220 -0
  374. package/src/components/VirtualTable/VirtualTable.performance.test.tsx +386 -0
  375. package/src/components/VirtualTable/VirtualTable.tsx +625 -0
  376. package/src/components/VirtualTable/VirtualTableCell.tsx +58 -0
  377. package/src/components/VirtualTable/VirtualTableHeader.tsx +275 -0
  378. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +249 -0
  379. package/src/components/VirtualTable/VirtualTableProps.tsx +298 -0
  380. package/src/components/VirtualTable/VirtualTableRow.tsx +52 -0
  381. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +39 -0
  382. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +93 -0
  383. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +83 -0
  384. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +133 -0
  385. package/src/components/VirtualTable/fields/VirtualTableSwitch.tsx +32 -0
  386. package/src/components/VirtualTable/fields/VirtualTableUserSelect.tsx +111 -0
  387. package/src/components/VirtualTable/index.tsx +3 -0
  388. package/src/components/VirtualTable/types.tsx +46 -0
  389. package/src/components/admin/RoleChip.tsx +23 -0
  390. package/src/components/admin/RolesView.tsx +408 -0
  391. package/src/components/admin/UsersView.tsx +353 -0
  392. package/src/components/admin/index.ts +3 -0
  393. package/src/components/common/default_entity_actions.tsx +144 -0
  394. package/src/components/common/index.ts +6 -0
  395. package/src/components/common/table_height.tsx +21 -0
  396. package/src/components/common/types.tsx +61 -0
  397. package/src/components/common/useColumnsIds.tsx +210 -0
  398. package/src/components/common/useDataSourceTableController.tsx +480 -0
  399. package/src/components/common/useDebouncedCallback.tsx +20 -0
  400. package/src/components/common/useDebouncedData.ts +49 -0
  401. package/src/components/common/useScrollRestoration.tsx +68 -0
  402. package/src/components/common/useTableSearchHelper.ts +75 -0
  403. package/src/components/index.tsx +49 -0
  404. package/src/contexts/AdminModeController.tsx +11 -0
  405. package/src/contexts/AnalyticsContext.tsx +4 -0
  406. package/src/contexts/AuthControllerContext.tsx +4 -0
  407. package/src/contexts/BreacrumbsContext.tsx +45 -0
  408. package/src/contexts/CustomizationControllerContext.tsx +4 -0
  409. package/src/contexts/DataSourceContext.tsx +4 -0
  410. package/src/contexts/DialogsProvider.tsx +53 -0
  411. package/src/contexts/EffectiveRoleController.tsx +11 -0
  412. package/src/contexts/InternalUserManagementContext.tsx +4 -0
  413. package/src/contexts/ModeController.tsx +11 -0
  414. package/src/contexts/NavigationContext.tsx +4 -0
  415. package/src/contexts/SideDialogsControllerContext.tsx +4 -0
  416. package/src/contexts/SideEntityControllerContext.tsx +4 -0
  417. package/src/contexts/SnackbarProvider.tsx +14 -0
  418. package/src/contexts/StorageSourceContext.tsx +4 -0
  419. package/src/contexts/UserConfigurationPersistenceContext.tsx +4 -0
  420. package/src/contexts/index.ts +15 -0
  421. package/src/core/DefaultAppBar.tsx +274 -0
  422. package/src/core/DefaultDrawer.tsx +267 -0
  423. package/src/core/DrawerNavigationGroup.tsx +117 -0
  424. package/src/core/DrawerNavigationItem.tsx +65 -0
  425. package/src/core/EntityEditView.tsx +590 -0
  426. package/src/core/EntityEditViewFormActions.tsx +343 -0
  427. package/src/core/EntitySidePanel.tsx +173 -0
  428. package/src/core/Rebase.tsx +229 -0
  429. package/src/core/RebaseRouter.tsx +17 -0
  430. package/src/core/RebaseRoutes.tsx +47 -0
  431. package/src/core/SideDialogs.tsx +200 -0
  432. package/src/core/field_configs.tsx +443 -0
  433. package/src/core/index.tsx +14 -0
  434. package/src/form/EntityForm.tsx +820 -0
  435. package/src/form/EntityFormActions.tsx +201 -0
  436. package/src/form/PropertyFieldBinding.tsx +348 -0
  437. package/src/form/components/ErrorFocus.tsx +44 -0
  438. package/src/form/components/FieldHelperText.tsx +45 -0
  439. package/src/form/components/FormEntry.tsx +22 -0
  440. package/src/form/components/FormLayout.tsx +16 -0
  441. package/src/form/components/LabelWithIcon.tsx +43 -0
  442. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  443. package/src/form/components/LocalChangesMenu.tsx +144 -0
  444. package/src/form/components/StorageItemPreview.tsx +79 -0
  445. package/src/form/components/StorageUploadProgress.tsx +105 -0
  446. package/src/form/components/index.tsx +5 -0
  447. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +105 -0
  448. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +163 -0
  449. package/src/form/field_bindings/BlockFieldBinding.tsx +268 -0
  450. package/src/form/field_bindings/DateTimeFieldBinding.tsx +70 -0
  451. package/src/form/field_bindings/KeyValueFieldBinding.tsx +567 -0
  452. package/src/form/field_bindings/MapFieldBinding.tsx +156 -0
  453. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +146 -0
  454. package/src/form/field_bindings/MultiSelectFieldBinding.tsx +120 -0
  455. package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +151 -0
  456. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +64 -0
  457. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  458. package/src/form/field_bindings/ReferenceFieldBinding.tsx +134 -0
  459. package/src/form/field_bindings/RelationFieldBinding.tsx +176 -0
  460. package/src/form/field_bindings/RepeatFieldBinding.tsx +136 -0
  461. package/src/form/field_bindings/SelectFieldBinding.tsx +107 -0
  462. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +490 -0
  463. package/src/form/field_bindings/SwitchFieldBinding.tsx +64 -0
  464. package/src/form/field_bindings/TextFieldBinding.tsx +153 -0
  465. package/src/form/field_bindings/UserSelectFieldBinding.tsx +96 -0
  466. package/src/form/index.tsx +27 -0
  467. package/src/form/useClearRestoreValue.tsx +35 -0
  468. package/src/form/validation.ts +532 -0
  469. package/src/hooks/ApiConfigContext.tsx +40 -0
  470. package/src/hooks/data/delete.ts +77 -0
  471. package/src/hooks/data/save.ts +75 -0
  472. package/src/hooks/data/useCollectionFetch.tsx +148 -0
  473. package/src/hooks/data/useDataOrder.ts +26 -0
  474. package/src/hooks/data/useDataSource.tsx +22 -0
  475. package/src/hooks/data/useEntityFetch.tsx +121 -0
  476. package/src/hooks/data/useRelationSelector.tsx +205 -0
  477. package/src/hooks/index.tsx +51 -0
  478. package/src/hooks/navigation/contexts/CMSUrlContext.tsx +24 -0
  479. package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +19 -0
  480. package/src/hooks/navigation/contexts/NavigationStateContext.tsx +15 -0
  481. package/src/hooks/navigation/contexts/index.ts +14 -0
  482. package/src/hooks/navigation/useBuildCMSUrlController.tsx +68 -0
  483. package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +150 -0
  484. package/src/hooks/navigation/useBuildNavigationStateController.tsx +135 -0
  485. package/src/hooks/navigation/useNavigationRegistry.ts +142 -0
  486. package/src/hooks/navigation/useNavigationResolution.ts +98 -0
  487. package/src/hooks/navigation/useNavigationURLs.ts +56 -0
  488. package/src/hooks/navigation/useResolvedCollections.ts +139 -0
  489. package/src/hooks/navigation/useResolvedViews.tsx +204 -0
  490. package/src/hooks/navigation/useTopLevelNavigation.ts +265 -0
  491. package/src/hooks/navigation/utils.ts +177 -0
  492. package/src/hooks/useAdminModeController.tsx +23 -0
  493. package/src/hooks/useAnalyticsController.tsx +8 -0
  494. package/src/hooks/useAuthController.tsx +14 -0
  495. package/src/hooks/useBackendStorageSource.ts +276 -0
  496. package/src/hooks/useBreadcrumbsController.tsx +49 -0
  497. package/src/hooks/useBrowserTitleAndIcon.tsx +25 -0
  498. package/src/hooks/useBuildAdminModeController.tsx +24 -0
  499. package/src/hooks/useBuildEffectiveRoleController.tsx +30 -0
  500. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +65 -0
  501. package/src/hooks/useBuildModeController.tsx +71 -0
  502. package/src/hooks/useBuildNavigationController.tsx +341 -0
  503. package/src/hooks/useClipboard.tsx +158 -0
  504. package/src/hooks/useCollapsedGroups.ts +72 -0
  505. package/src/hooks/useCustomizationController.tsx +14 -0
  506. package/src/hooks/useDialogsController.tsx +14 -0
  507. package/src/hooks/useEffectiveRoleController.tsx +10 -0
  508. package/src/hooks/useEntitySelectionDialog.tsx +56 -0
  509. package/src/hooks/useInternalUserManagementController.tsx +17 -0
  510. package/src/hooks/useLargeLayout.tsx +65 -0
  511. package/src/hooks/useModeController.tsx +23 -0
  512. package/src/hooks/usePermissions.ts +43 -0
  513. package/src/hooks/useRebaseContext.tsx +86 -0
  514. package/src/hooks/useResolvedNavigationFrom.tsx +158 -0
  515. package/src/hooks/useSideDialogsController.tsx +21 -0
  516. package/src/hooks/useSideEntityController.tsx +15 -0
  517. package/src/hooks/useSnackbarController.tsx +52 -0
  518. package/src/hooks/useStorageSource.tsx +14 -0
  519. package/src/hooks/useUnsavedChangesDialog.tsx +62 -0
  520. package/src/hooks/useUserConfigurationPersistence.tsx +11 -0
  521. package/src/hooks/useValidateAuthenticator.tsx +115 -0
  522. package/src/index.ts +17 -0
  523. package/src/internal/common.tsx +5 -0
  524. package/src/internal/useBuildDataSource.ts +380 -0
  525. package/src/internal/useBuildSideDialogsController.tsx +135 -0
  526. package/src/internal/useBuildSideEntityController.tsx +309 -0
  527. package/src/internal/useRestoreScroll.tsx +60 -0
  528. package/src/preview/PropertyPreview.tsx +308 -0
  529. package/src/preview/components/ArrayEnumPreview.tsx +38 -0
  530. package/src/preview/components/AsyncPreviewComponent.tsx +47 -0
  531. package/src/preview/components/BooleanPreview.tsx +25 -0
  532. package/src/preview/components/DatePreview.tsx +94 -0
  533. package/src/preview/components/EmptyValue.tsx +10 -0
  534. package/src/preview/components/EnumValuesChip.tsx +39 -0
  535. package/src/preview/components/ImagePreview.tsx +111 -0
  536. package/src/preview/components/ReferencePreview.tsx +162 -0
  537. package/src/preview/components/RelationPreview.tsx +153 -0
  538. package/src/preview/components/StorageThumbnail.tsx +91 -0
  539. package/src/preview/components/UrlComponentPreview.tsx +113 -0
  540. package/src/preview/components/UserPreview.tsx +27 -0
  541. package/src/preview/index.ts +26 -0
  542. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +72 -0
  543. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +43 -0
  544. package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +52 -0
  545. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +49 -0
  546. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +44 -0
  547. package/src/preview/property_previews/ArrayOneOfPreview.tsx +67 -0
  548. package/src/preview/property_previews/ArrayPropertyEnumPreview.tsx +34 -0
  549. package/src/preview/property_previews/ArrayPropertyPreview.tsx +69 -0
  550. package/src/preview/property_previews/MapPropertyPreview.tsx +145 -0
  551. package/src/preview/property_previews/NumberPropertyPreview.tsx +28 -0
  552. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +275 -0
  553. package/src/preview/property_previews/StringPropertyPreview.tsx +57 -0
  554. package/src/preview/util.ts +30 -0
  555. package/src/routes/CustomCMSRoute.tsx +21 -0
  556. package/src/routes/RebaseRoute.tsx +255 -0
  557. package/src/routes/index.ts +2 -0
  558. package/src/util/createFormexStub.tsx +66 -0
  559. package/src/util/entity_cache.ts +267 -0
  560. package/src/util/enums.ts +32 -0
  561. package/src/util/icon_list.ts +23 -0
  562. package/src/util/icon_synonyms.ts +1853 -0
  563. package/src/util/icons.tsx +87 -0
  564. package/src/util/index.ts +11 -0
  565. package/src/util/previews.ts +50 -0
  566. package/src/util/property_utils.tsx +152 -0
  567. package/src/util/useDebouncedCallback.ts +25 -0
  568. package/src/util/useStorageUploadController.tsx +342 -0
  569. package/src/util/useTraceUpdate.tsx +24 -0
  570. package/src/vitePlugin.ts +47 -0
@@ -0,0 +1,341 @@
1
+ import { useCallback, useEffect, useRef, useState } from "react";
2
+ import { useNavigate } from "react-router-dom";
3
+ import { deepEqual as equal } from "fast-equals";
4
+
5
+ import {
6
+ EntityCollection,
7
+ CMSView,
8
+ User,
9
+ NavigationController,
10
+ NavigationEntry,
11
+ NavigationGroupMapping,
12
+ NavigationResult,
13
+ RebasePlugin,
14
+ AuthController,
15
+ EntityCollectionsBuilder,
16
+ CMSViewsBuilder,
17
+ UserConfigurationPersistence,
18
+ DataSource
19
+ } from "@rebasepro/types";
20
+
21
+ import { useNavigationURLs } from "./navigation/useNavigationURLs";
22
+ import { useNavigationRegistry } from "./navigation/useNavigationRegistry";
23
+ import { resolveCollections, resolveCMSViews } from "./navigation/useNavigationResolution";
24
+
25
+ import { computeNavigationGroups, getGroup, NAVIGATION_ADMIN_GROUP_NAME, NAVIGATION_DEFAULT_GROUP_NAME } from "./navigation/utils";
26
+
27
+ export type BuildNavigationContextProps<EC extends EntityCollection, USER extends User> = {
28
+ basePath?: string;
29
+ baseCollectionPath?: string;
30
+ authController: AuthController<USER>;
31
+ collections?: EC[] | EntityCollectionsBuilder<EC>;
32
+ views?: CMSView[] | CMSViewsBuilder;
33
+ adminViews?: CMSView[] | CMSViewsBuilder;
34
+ userConfigPersistence?: UserConfigurationPersistence;
35
+ dataSource: DataSource;
36
+ plugins?: RebasePlugin[];
37
+ navigationGroupMappings?: NavigationGroupMapping[];
38
+ disabled?: boolean;
39
+ viewsOrder?: string[];
40
+ };
41
+
42
+ const DEFAULT_BASE_PATH = "/";
43
+ const DEFAULT_COLLECTION_PATH = "/c";
44
+
45
+ export function useBuildNavigationController<EC extends EntityCollection, USER extends User>(props: BuildNavigationContextProps<EC, USER>): NavigationController {
46
+
47
+ const {
48
+ basePath = DEFAULT_BASE_PATH,
49
+ baseCollectionPath = DEFAULT_COLLECTION_PATH,
50
+ authController,
51
+ collections: collectionsProp,
52
+ views: viewsProp,
53
+ adminViews: adminViewsProp,
54
+ viewsOrder,
55
+ plugins,
56
+ userConfigPersistence,
57
+ dataSource,
58
+ disabled,
59
+ navigationGroupMappings
60
+ } = props;
61
+
62
+ const navigate = useNavigate();
63
+
64
+ const registryHook = useNavigationRegistry(userConfigPersistence);
65
+ const { collectionRegistryRef } = registryHook;
66
+
67
+ const urlsHook = useNavigationURLs(basePath, baseCollectionPath, collectionRegistryRef);
68
+
69
+ const viewsRef = useRef<CMSView[] | undefined>(undefined);
70
+ const adminViewsRef = useRef<CMSView[] | undefined>(undefined);
71
+ const navigationEntriesOrderRef = useRef<string[] | undefined>(undefined);
72
+
73
+ const [initialised, setInitialised] = useState<boolean>(false);
74
+
75
+ const [topLevelNavigation, setTopLevelNavigation] = useState<NavigationResult | undefined>(undefined);
76
+ const [navigationLoading, setNavigationLoading] = useState<boolean>(true);
77
+ const [navigationLoadingError, setNavigationLoadingError] = useState<Error | undefined>(undefined);
78
+
79
+ const allPluginGroups = plugins?.flatMap(plugin => plugin.homePage?.navigationEntries ? plugin.homePage.navigationEntries.map(e => e.name) : []) ?? [];
80
+ const pluginGroups = [...new Set(allPluginGroups)];
81
+
82
+ const computeTopNavigation = useCallback((collections: EntityCollection[], views: CMSView[], adminViews: CMSView[], viewsOrder?: string[], navigationGroupMappingsOverride?: NavigationGroupMapping[], onNavigationEntriesUpdateCallback?: (entries: NavigationGroupMapping[]) => void): NavigationResult => {
83
+
84
+ const finalNavigationGroupMappings: NavigationGroupMapping[] = computeNavigationGroups({
85
+ navigationGroupMappings: navigationGroupMappingsOverride ?? navigationGroupMappings,
86
+ collections,
87
+ views,
88
+ plugins: plugins
89
+ });
90
+
91
+ const allPluginNavigationEntries = finalNavigationGroupMappings.map((g) => g.entries).flat() ?? [];
92
+ const navigationEntriesOrder = ([...new Set(allPluginNavigationEntries)]);
93
+
94
+ let navigationEntries: NavigationEntry[] = [
95
+ ...(collections ?? []).reduce((acc, collection) => {
96
+ if (collection.hideFromNavigation) return acc;
97
+
98
+ const pathKey = collection.slug;
99
+ let groupName = getGroup(collection);
100
+
101
+ if (finalNavigationGroupMappings) {
102
+ for (const pluginGroupDef of finalNavigationGroupMappings) {
103
+ if (pluginGroupDef.entries.includes(pathKey)) {
104
+ groupName = pluginGroupDef.name;
105
+ break;
106
+ }
107
+ }
108
+ }
109
+
110
+ acc.push({
111
+ id: `collection:${pathKey}`,
112
+ url: urlsHook.buildUrlCollectionPath(pathKey),
113
+ type: "collection",
114
+ name: collection.name.trim(),
115
+ slug: pathKey,
116
+ collection,
117
+ description: collection.description?.trim(),
118
+ group: groupName ?? NAVIGATION_DEFAULT_GROUP_NAME
119
+ });
120
+ return acc;
121
+ }, [] as NavigationEntry[]),
122
+
123
+ ...(views ?? []).reduce((acc, view) => {
124
+ if (view.hideFromNavigation) return acc;
125
+
126
+ const pathKey = view.slug;
127
+ let groupName = getGroup(view);
128
+
129
+ if (finalNavigationGroupMappings) {
130
+ for (const pluginGroupDef of finalNavigationGroupMappings) {
131
+ if (pluginGroupDef.entries.includes(pathKey)) {
132
+ groupName = pluginGroupDef.name;
133
+ break;
134
+ }
135
+ }
136
+ }
137
+
138
+ acc.push({
139
+ id: `view:${pathKey}`,
140
+ url: urlsHook.buildCMSUrlPath(pathKey),
141
+ name: view.name.trim(),
142
+ type: "view",
143
+ slug: view.slug,
144
+ view,
145
+ description: view.description?.trim(),
146
+ group: groupName ?? NAVIGATION_DEFAULT_GROUP_NAME
147
+ });
148
+ return acc;
149
+ }, [] as NavigationEntry[]),
150
+
151
+ ...(adminViews ?? []).reduce((acc, view) => {
152
+ if (view.hideFromNavigation) return acc;
153
+
154
+ const pathKey = view.slug;
155
+ const groupName = NAVIGATION_ADMIN_GROUP_NAME;
156
+
157
+ acc.push({
158
+ id: `admin:${pathKey}`,
159
+ url: urlsHook.buildCMSUrlPath(pathKey),
160
+ name: view.name.trim(),
161
+ type: "admin",
162
+ slug: view.slug,
163
+ view,
164
+ description: view.description?.trim(),
165
+ group: groupName
166
+ });
167
+ return acc;
168
+ }, [] as NavigationEntry[])
169
+ ];
170
+
171
+ const groupOrderValue = (groupName?: string): number => {
172
+ if (groupName === NAVIGATION_ADMIN_GROUP_NAME) return 1;
173
+ return 0; // Other groups
174
+ };
175
+
176
+ navigationEntries = navigationEntries.sort((a, b) => {
177
+ return groupOrderValue(a.group) - groupOrderValue(b.group);
178
+ });
179
+
180
+ const usedViewsOrder = viewsOrder ?? navigationEntriesOrder;
181
+ if (usedViewsOrder) {
182
+ navigationEntries = navigationEntries.sort((a, b) => {
183
+ const getSortPath = (navEntry: NavigationEntry) => typeof navEntry.slug === "string" ? navEntry.slug : navEntry.slug[0];
184
+ const aIndex = usedViewsOrder.indexOf(getSortPath(a));
185
+ const bIndex = usedViewsOrder.indexOf(getSortPath(b));
186
+ if (aIndex === -1 && bIndex === -1) return 0;
187
+ if (aIndex === -1) return 1;
188
+ if (bIndex === -1) return -1;
189
+ return aIndex - bIndex;
190
+ });
191
+ }
192
+
193
+ const collectedGroupsFromEntries = navigationEntries
194
+ .map(e => e.group)
195
+ .filter(Boolean) as string[];
196
+
197
+ // Preserve order from finalNavigationGroupMappings (persisted order)
198
+ const groupsFromMappings = finalNavigationGroupMappings.map(g => g.name);
199
+
200
+ // Add any additional groups not in mappings
201
+ const additionalGroups = collectedGroupsFromEntries.filter(g => !groupsFromMappings.includes(g));
202
+
203
+ const allDefinedGroups = [
204
+ ...(pluginGroups ?? []),
205
+ ...groupsFromMappings,
206
+ ...additionalGroups
207
+ ];
208
+
209
+ // Remove duplicates while preserving order, then separate admin to the end
210
+ const uniqueGroupsArray = [...new Set(allDefinedGroups)];
211
+ const adminGroups = uniqueGroupsArray.filter(g => g === NAVIGATION_ADMIN_GROUP_NAME);
212
+ const nonAdminGroups = uniqueGroupsArray.filter(g => g !== NAVIGATION_ADMIN_GROUP_NAME);
213
+ const uniqueGroups = [...nonAdminGroups, ...adminGroups] as string[];
214
+
215
+ return {
216
+ allowDragAndDrop: plugins?.some((plugin: RebasePlugin) => plugin.homePage?.allowDragAndDrop) ?? false,
217
+ navigationEntries,
218
+ groups: uniqueGroups,
219
+ onNavigationEntriesUpdate: onNavigationEntriesUpdateCallback!,
220
+ };
221
+ }, [navigationGroupMappings, urlsHook.buildCMSUrlPath, urlsHook.buildUrlCollectionPath, pluginGroups]);
222
+
223
+ const onNavigationEntriesOrderUpdate = useCallback((entries: NavigationGroupMapping[]) => {
224
+ if (!plugins) {
225
+ return;
226
+ }
227
+ // remove all groups that have no entries
228
+ const filteredEntries = entries.filter(entry => entry.entries.length > 0);
229
+
230
+ // Immediately update the local topLevelNavigation with new mappings
231
+ if (collectionRegistryRef.current && viewsRef.current) {
232
+ const updatedNav = computeTopNavigation(
233
+ collectionRegistryRef.current.getCollections(),
234
+ viewsRef.current,
235
+ adminViewsRef.current ?? [],
236
+ viewsOrder,
237
+ filteredEntries,
238
+ onNavigationEntriesOrderUpdate
239
+ );
240
+ setTopLevelNavigation(updatedNav);
241
+ }
242
+
243
+ // Then persist to backend
244
+ if (plugins.some((plugin: RebasePlugin) => plugin.homePage?.onNavigationEntriesUpdate)) {
245
+ plugins.forEach((plugin: RebasePlugin) => {
246
+ if (plugin.homePage?.onNavigationEntriesUpdate) {
247
+ plugin.homePage.onNavigationEntriesUpdate(filteredEntries);
248
+ }
249
+ });
250
+ }
251
+
252
+ }, [plugins, computeTopNavigation, viewsOrder]);
253
+
254
+ const refreshNavigation = useCallback(async () => {
255
+
256
+ if (disabled || authController.initialLoading)
257
+ return;
258
+
259
+ console.debug("Refreshing navigation");
260
+
261
+ try {
262
+
263
+ const [resolvedCollections = [], resolvedViews, resolvedAdminViews = []] = await Promise.all(
264
+ [
265
+ resolveCollections(collectionsProp, authController, dataSource, plugins),
266
+ resolveCMSViews(viewsProp, authController, dataSource, plugins),
267
+ resolveCMSViews(adminViewsProp, authController, dataSource)
268
+ ]
269
+ );
270
+
271
+ const computedTopLevelNav = computeTopNavigation(resolvedCollections, resolvedViews, resolvedAdminViews, viewsOrder, undefined, onNavigationEntriesOrderUpdate);
272
+
273
+ let shouldUpdateTopLevelNav = false;
274
+ let collectionsChanged = collectionRegistryRef.current.registerMultiple(resolvedCollections);
275
+ ;
276
+
277
+ if (collectionsChanged) {
278
+ console.debug("Collections have changed", resolvedCollections);
279
+ shouldUpdateTopLevelNav = true;
280
+ }
281
+
282
+ if (!equal(viewsRef.current, resolvedViews)) {
283
+ viewsRef.current = resolvedViews;
284
+ shouldUpdateTopLevelNav = true;
285
+ }
286
+ if (!equal(adminViewsRef.current, resolvedAdminViews)) {
287
+ adminViewsRef.current = resolvedAdminViews;
288
+ shouldUpdateTopLevelNav = true;
289
+ }
290
+
291
+ const navigationEntriesOrder = computedTopLevelNav.navigationEntries.map(e => e.id);
292
+ if (!equal(navigationEntriesOrderRef.current, navigationEntriesOrder)) {
293
+ navigationEntriesOrderRef.current = navigationEntriesOrder;
294
+ shouldUpdateTopLevelNav = true;
295
+ }
296
+
297
+ if (shouldUpdateTopLevelNav && !equal(topLevelNavigation, computedTopLevelNav)) {
298
+ setTopLevelNavigation(computedTopLevelNav);
299
+ }
300
+ } catch (e) {
301
+ console.error(e);
302
+ setNavigationLoadingError(e as any);
303
+ }
304
+
305
+ if (navigationLoading)
306
+ setNavigationLoading(false);
307
+ if (!initialised)
308
+ setInitialised(true);
309
+
310
+ }, [
311
+ collectionsProp,
312
+ authController.user,
313
+ authController.initialLoading,
314
+ disabled,
315
+ viewsProp,
316
+ adminViewsProp,
317
+ computeTopNavigation,
318
+ ]);
319
+
320
+ useEffect(() => {
321
+ refreshNavigation();
322
+ }, [refreshNavigation]);
323
+
324
+ // Omit getCollection and registry methods from returned shape to just use registryHook's getters directly
325
+ return {
326
+ ...registryHook,
327
+ ...urlsHook,
328
+ collections: collectionRegistryRef.current.getCollections(),
329
+ views: viewsRef.current,
330
+ adminViews: adminViewsRef.current,
331
+ loading: !initialised || navigationLoading,
332
+ navigationLoadingError,
333
+ basePath,
334
+ baseCollectionPath,
335
+ initialised,
336
+ topLevelNavigation,
337
+ refreshNavigation,
338
+ navigate,
339
+ plugins
340
+ };
341
+ }
@@ -0,0 +1,158 @@
1
+ // FORKED FROM https://github.com/fayeed/use-clipboard
2
+
3
+ import { MutableRefObject, useCallback, useEffect, useRef, useState } from "react";
4
+
5
+ export interface UseClipboardProps {
6
+ /**
7
+ * It's callback function that is called after the `copy` command
8
+ * is executed.
9
+ *
10
+ * @param text: The selected clipboard text.
11
+ */
12
+ onSuccess?: (text: string) => void;
13
+
14
+ /**
15
+ * Triggers when the hook encounters an error.
16
+ * If passed hook won't throw an error.
17
+ *
18
+ * @param error: cause of the error
19
+ */
20
+ onError?: (error: string) => void;
21
+
22
+ /**
23
+ * Disables the new clipboard API `navigator.clipboard` even if
24
+ * it is supported.
25
+ */
26
+ disableClipboardAPI?: boolean;
27
+
28
+ /**
29
+ * revert back the isCopied flag to false again if a value is set.
30
+ */
31
+ copiedDuration?: number;
32
+ }
33
+
34
+ export interface useClipboardReturnType {
35
+ /**
36
+ * Use ref to pull the text content from.
37
+ */
38
+ ref: MutableRefObject<any>;
39
+
40
+ /**
41
+ * Use it to perform the copy operation
42
+ */
43
+ copy: (text?: string) => void;
44
+
45
+ /**
46
+ * Use it to perform the cut operation
47
+ */
48
+ cut: () => void;
49
+
50
+ /**
51
+ * Indicates wheater the content was successfully copied or not.
52
+ */
53
+ isCoppied: boolean;
54
+
55
+ /**
56
+ * Current selected clipboard content.
57
+ */
58
+ clipboard: string;
59
+
60
+ /**
61
+ * Clears the user clipboard.
62
+ */
63
+ clearClipboard: () => void;
64
+
65
+ /**
66
+ * Check to see if the browser supports the new `navigator.clipboard` API.
67
+ */
68
+ isSupported: () => boolean;
69
+ }
70
+
71
+ export const useClipboard = (
72
+ options?: UseClipboardProps
73
+ ): useClipboardReturnType => {
74
+ const { onSuccess, onError, disableClipboardAPI = false, copiedDuration } =
75
+ options || {};
76
+ const ref = useRef<any>(null);
77
+ const [isCoppied, setIsCoppied] = useState(false);
78
+ const [clipboard, setClipbaord] = useState("");
79
+
80
+ useEffect(() => {
81
+ if (copiedDuration) setTimeout(() => setIsCoppied(false), copiedDuration);
82
+ }, [isCoppied]);
83
+
84
+ const isSupported = () => navigator.clipboard !== undefined;
85
+
86
+ const handleError = useCallback((error: string) => {
87
+ if (onError) onError(error);
88
+ else throw new Error(error);
89
+ }, [onError]);
90
+
91
+ const handleSuccess = useCallback((text: string) => {
92
+ if (onSuccess) onSuccess(text);
93
+ setIsCoppied(true);
94
+ setClipbaord(text);
95
+ }, [onSuccess]);
96
+
97
+ const copyToClipboard = useCallback((text: string) => {
98
+ navigator.clipboard
99
+ .writeText(text)
100
+ .then(() => handleSuccess(text))
101
+ .catch((err) => {
102
+ handleError(err);
103
+ setIsCoppied(false);
104
+ });
105
+ }, [handleError, handleSuccess]);
106
+
107
+ const clearClipboard = () => {
108
+ if (isSupported()) {
109
+ navigator.clipboard.writeText("");
110
+ }
111
+ };
112
+
113
+ const copy = (text?: string) =>
114
+ action("copy", typeof text === "object" ? undefined : text);
115
+
116
+ const cut = () => action("cut");
117
+
118
+ const action = useCallback(
119
+ (operation = "copy", text?: string) => {
120
+ const element = ref.current as HTMLElement;
121
+
122
+ const isInput =
123
+ element &&
124
+ (element.tagName === "INPUT" || element.tagName === "TEXTAREA");
125
+
126
+ const input = ref.current as HTMLInputElement;
127
+
128
+ if (isSupported() && !disableClipboardAPI) {
129
+ if (text) {
130
+ copyToClipboard(text);
131
+ } else if (element) {
132
+ if (isInput) {
133
+ copyToClipboard(input.value);
134
+
135
+ if (operation === "cut") {
136
+ input.value = "";
137
+ }
138
+ } else {
139
+ copyToClipboard(element.innerText);
140
+ }
141
+ } else {
142
+ handleError("Both the ref & text were undefined");
143
+ }
144
+ }
145
+ },
146
+ [disableClipboardAPI, copyToClipboard, handleError]
147
+ );
148
+
149
+ return {
150
+ ref,
151
+ isCoppied,
152
+ clipboard,
153
+ clearClipboard,
154
+ isSupported,
155
+ copy,
156
+ cut
157
+ };
158
+ };
@@ -0,0 +1,72 @@
1
+ import { useCallback, useEffect, useState } from "react";
2
+
3
+ const STORAGE_KEY_PREFIX = "rebase-collapsed-groups";
4
+
5
+ /**
6
+ * Custom hook for managing collapsed/expanded state of navigation groups
7
+ * with localStorage persistence. Automatically cleans up stale group entries
8
+ * when groups are removed from the navigation.
9
+ *
10
+ * @param groupNames - Array of group names to track
11
+ * @param namespace - Namespace for localStorage key (e.g., "home", "drawer") to allow independent state
12
+ */
13
+ export function useCollapsedGroups(groupNames: string[], namespace: string = "default") {
14
+ const storageKey = `${STORAGE_KEY_PREFIX}-${namespace}`;
15
+
16
+ // Load collapsed groups from localStorage on mount
17
+ const [collapsedGroups, setCollapsedGroups] = useState<Record<string, boolean>>(() => {
18
+ try {
19
+ const stored = localStorage.getItem(storageKey);
20
+ return stored ? JSON.parse(stored) : {};
21
+ } catch {
22
+ return {};
23
+ }
24
+ });
25
+
26
+ // Save to localStorage whenever collapsedGroups changes
27
+ useEffect(() => {
28
+ try {
29
+ localStorage.setItem(storageKey, JSON.stringify(collapsedGroups));
30
+ } catch {
31
+ // Silently fail if localStorage is not available
32
+ }
33
+ }, [collapsedGroups, storageKey]);
34
+
35
+ // Clean up collapsed groups state when groups change - remove entries for groups that no longer exist
36
+ useEffect(() => {
37
+ // Only clean up if we have actual groups loaded (avoid cleaning up during initial load)
38
+ if (groupNames.length === 0) return;
39
+
40
+ const currentGroupNames = new Set(groupNames);
41
+
42
+ setCollapsedGroups(prev => {
43
+ const cleaned = Object.fromEntries(
44
+ Object.entries(prev).filter(([groupName]) => currentGroupNames.has(groupName))
45
+ );
46
+
47
+ // Only update if something actually changed
48
+ const prevKeys = Object.keys(prev);
49
+ const cleanedKeys = Object.keys(cleaned);
50
+
51
+ if (prevKeys.length === cleanedKeys.length && prevKeys.every(key => cleanedKeys.includes(key))) {
52
+ return prev;
53
+ }
54
+
55
+ return cleaned;
56
+ });
57
+ }, [groupNames]);
58
+
59
+ const isGroupCollapsed = useCallback((name: string) => {
60
+ return !!collapsedGroups[name];
61
+ }, [collapsedGroups]);
62
+
63
+ const toggleGroupCollapsed = useCallback((name: string) => {
64
+ setCollapsedGroups(prev => ({ ...prev, [name]: !prev[name] }));
65
+ }, []);
66
+
67
+ return {
68
+ isGroupCollapsed,
69
+ toggleGroupCollapsed
70
+ };
71
+ }
72
+
@@ -0,0 +1,14 @@
1
+ import { useContext } from "react";
2
+ import { CustomizationController } from "@rebasepro/types";
3
+ import { CustomizationControllerContext } from "../contexts/CustomizationControllerContext";
4
+
5
+ /**
6
+ * Use this hook to retrieve the customization controller.
7
+ * This hook includes all the customization options that can be used
8
+ * to customize the CMS.
9
+ *
10
+ * You will likely not need to use this hook directly.
11
+ *
12
+ * @group Hooks and utilities
13
+ */
14
+ export const useCustomizationController = (): CustomizationController => useContext(CustomizationControllerContext);
@@ -0,0 +1,14 @@
1
+ import { useContext } from "react";
2
+ import { DialogsControllerContext } from "../contexts/DialogsProvider";
3
+ import { DialogsController } from "@rebasepro/types";
4
+
5
+ /**
6
+ * Use this hook to open a dialog imperatively.
7
+ * Alternatively, you can use dialogs declaratively using the `Dialog` component.
8
+ *
9
+ * Consider that in order to use this hook you need to have a parent
10
+ * `Rebase`
11
+ *
12
+ * @group Hooks and utilities
13
+ */
14
+ export const useDialogsController = (): DialogsController => useContext(DialogsControllerContext);
@@ -0,0 +1,10 @@
1
+ import { useContext } from "react";
2
+ import { EffectiveRoleControllerContext } from "../contexts/EffectiveRoleController";
3
+
4
+ /**
5
+ * Hook to retrieve the {@link EffectiveRoleController}
6
+ *
7
+ * @see EffectiveRoleController
8
+ * @category Hooks and utilities
9
+ */
10
+ export const useEffectiveRoleController = () => useContext(EffectiveRoleControllerContext);
@@ -0,0 +1,56 @@
1
+ import { useSideDialogsController } from "./useSideDialogsController";
2
+ import { EntitySelectionProps, EntitySelectionTable } from "../components";
3
+ import { useCallback } from "react";
4
+ import { useCollectionRegistryController } from "./navigation/contexts";
5
+
6
+ /**
7
+ * This hook is used to open a side dialog that allows the selection
8
+ * of entities under a given path.
9
+ * You can use it in custom views for selecting entities.
10
+ * You need to specify the path of the target collection at least.
11
+ * If your collection is not defined in your top collection configuration
12
+ * (in your `Rebase` component), you need to specify explicitly.
13
+ * This is the same hook used internally when a reference property is defined.
14
+ * @group Hooks and utilities
15
+ */
16
+ export function useEntitySelectionDialog<M extends Record<string, any>>(referenceDialogProps: Omit<EntitySelectionProps<M>, "path"> & {
17
+ path?: string | false;
18
+ onClose?: () => void;
19
+ }): { open: () => void; close: () => void } {
20
+
21
+ const navigation = useCollectionRegistryController();
22
+ const sideDialogsController = useSideDialogsController();
23
+
24
+ const open = useCallback(() => {
25
+ if (referenceDialogProps.path) {
26
+ let usedCollection = referenceDialogProps.collection;
27
+ if (!usedCollection)
28
+ usedCollection = navigation.getCollection(referenceDialogProps.path);
29
+ if (!usedCollection)
30
+ throw Error("Not able to resolve the collection in useEntitySelectionDialog. Make sure a collection is registered in path " + referenceDialogProps.path);
31
+ sideDialogsController.open({
32
+ key: `reference_${referenceDialogProps.path}`,
33
+ component:
34
+ <EntitySelectionTable
35
+ collection={usedCollection}
36
+ {...referenceDialogProps as EntitySelectionProps<M>} />,
37
+ width: "90vw",
38
+ onClose: () => {
39
+ referenceDialogProps.onClose?.();
40
+ }
41
+ });
42
+ } else {
43
+ throw Error("useReferenceDialog: You are trying to open a reference dialog, but have not declared the `path`")
44
+ }
45
+ }, [navigation, referenceDialogProps, sideDialogsController]);
46
+
47
+ const close = useCallback(() => {
48
+ sideDialogsController.close();
49
+ }, [sideDialogsController]);
50
+
51
+ return {
52
+ open,
53
+ close
54
+ }
55
+
56
+ }
@@ -0,0 +1,17 @@
1
+ import { useContext } from "react";
2
+ import { InternalUserManagementContext } from "../contexts/InternalUserManagementContext";
3
+ import { User, UserManagementDelegate } from "@rebasepro/types";
4
+
5
+ /**
6
+ * Use this hook to get the internal user management of the app.
7
+ * Note that this is different from the user management plugin controller.
8
+ * This controller will be eventually replaced by the one provided
9
+ * by the user management plugin.
10
+ *
11
+ * Use at your own risk!
12
+ *
13
+ * @group Hooks and utilities
14
+ */
15
+ export function useInternalUserManagementController<USER extends User>(): UserManagementDelegate<USER> | undefined {
16
+ return useContext(InternalUserManagementContext);
17
+ }