@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,255 @@
1
+ import { Blocker, useBlocker, useLocation } from "react-router";
2
+ import { EntityEditView } from "../core/EntityEditView";
3
+ import { useCollectionRegistryController, useCMSUrlController } from "../hooks";
4
+ import { useEffect, useRef, useState } from "react";
5
+ import { useNavigate } from "react-router-dom";
6
+
7
+ import { useBreadcrumbsController } from "../hooks/useBreadcrumbsController";
8
+ import { EntityCollectionView, NotFoundPage } from "../components";
9
+ import { UnsavedChangesDialog } from "../components/UnsavedChangesDialog";
10
+ import { EntityCollection } from "@rebasepro/types";
11
+ import {
12
+ getNavigationEntriesFromPath,
13
+ NavigationViewCollectionInternal, NavigationViewEntityCustomInternal,
14
+ NavigationViewInternal,
15
+ toArray
16
+ } from "@rebasepro/common";
17
+
18
+ export function RebaseRoute() {
19
+
20
+ const location = useLocation();
21
+ const collectionRegistry = useCollectionRegistryController();
22
+ const cmsUrlController = useCMSUrlController();
23
+ const breadcrumbs = useBreadcrumbsController();
24
+
25
+ const hash = location.hash;
26
+ const isSidePanel = hash.includes("#side");
27
+ const isNew = hash.includes("#new") || hash.includes("#new_side");
28
+ const isCopy = hash.includes("#copy");
29
+
30
+ const pathname = location.pathname;
31
+ const navigationPath = cmsUrlController.urlPathToDataPath(pathname);
32
+
33
+ const navigationEntries = getNavigationEntriesFromPath({
34
+ path: navigationPath,
35
+ collections: collectionRegistry.collections ?? []
36
+ });
37
+
38
+ useEffect(() => {
39
+ const lastEntry = navigationEntries[navigationEntries.length - 1];
40
+ const isViewingCollection = lastEntry?.type === "collection";
41
+
42
+ breadcrumbs.set({
43
+ breadcrumbs: navigationEntries.map((entry, index) => {
44
+ const isLastEntry = index === navigationEntries.length - 1;
45
+
46
+ if (entry.type === "entity") {
47
+ return ({
48
+ title: String(entry.entityId),
49
+ url: cmsUrlController.buildUrlCollectionPath(entry.path)
50
+ // count: undefined (not applicable for entities)
51
+ });
52
+ } else if (entry.type === "custom_view") {
53
+ return ({
54
+ title: entry.view.name,
55
+ url: cmsUrlController.buildUrlCollectionPath(entry.path)
56
+ // count: undefined (not applicable for custom views)
57
+ });
58
+ } else if (entry.type === "collection") {
59
+ // Only show count badge (loading state) when viewing this collection directly
60
+ // Don't show count for parent collections when viewing an entity
61
+ const showCount = isLastEntry && isViewingCollection;
62
+ return ({
63
+ title: entry.collection.name,
64
+ url: cmsUrlController.buildUrlCollectionPath(entry.path),
65
+ id: entry.path,
66
+ ...(showCount ? { count: null } : {}) // null = loading, undefined = no badge
67
+ });
68
+ } else {
69
+ throw new Error("Unexpected navigation entry type");
70
+ }
71
+ })
72
+ });
73
+ }, [navigationEntries.map(entry => entry.path).join(",")]);
74
+
75
+ if (isNew) {
76
+ return <EntityFullScreenRoute
77
+ pathname={pathname}
78
+ navigationEntries={navigationEntries}
79
+ isNew={true}
80
+ isCopy={false}
81
+ />;
82
+ }
83
+
84
+ if (navigationEntries.length === 1 && navigationEntries[0].type === "collection") {
85
+ let collection: EntityCollection<any> | undefined;
86
+ collection = collectionRegistry.getCollection(navigationEntries[0].id);
87
+ if (!collection)
88
+ collection = collectionRegistry.getCollection(navigationEntries[0].slug);
89
+ if (!collection)
90
+ return null;
91
+ return <EntityCollectionView
92
+ key={`collection_view_${collection.slug}`}
93
+ parentCollectionIds={[]}
94
+ path={collection.slug}
95
+ updateUrl={true}
96
+ {...collection}
97
+ Actions={toArray(collection.Actions)} />
98
+ }
99
+
100
+ if (isSidePanel) {
101
+ const lastCollectionEntry = [...navigationEntries].reverse().find((entry: any) => entry.type === "collection");
102
+ if (lastCollectionEntry) {
103
+ let collection: EntityCollection<any> | undefined;
104
+ const firstEntry = navigationEntries[0] as NavigationViewCollectionInternal<any>;
105
+ collection = collectionRegistry.getCollection(firstEntry.id);
106
+ if (!collection)
107
+ collection = collectionRegistry.getCollection(firstEntry.slug);
108
+ if (!collection)
109
+ return null;
110
+ return <EntityCollectionView
111
+ key={`collection_view_${collection.slug}`}
112
+ parentCollectionIds={[]}
113
+ path={collection.slug}
114
+ updateUrl={true}
115
+ {...collection}
116
+ Actions={toArray(collection.Actions)} />;
117
+ }
118
+ }
119
+
120
+ return <EntityFullScreenRoute
121
+ pathname={pathname}
122
+ navigationEntries={navigationEntries}
123
+ isNew={isNew}
124
+ isCopy={isCopy}
125
+ />;
126
+
127
+ }
128
+
129
+ function getSelectedTabFromUrl(isNew: boolean, lastCustomView: NavigationViewCollectionInternal<any> | NavigationViewEntityCustomInternal<any> | undefined) {
130
+ if (isNew) {
131
+ return undefined;
132
+ } else if (lastCustomView) {
133
+ if (lastCustomView.type === "custom_view") {
134
+ return lastCustomView.view.key;
135
+ } else if (lastCustomView.type === "collection") {
136
+ return lastCustomView.id ?? lastCustomView.slug;
137
+ }
138
+ }
139
+ return undefined;
140
+ }
141
+
142
+ function EntityFullScreenRoute({
143
+ pathname,
144
+ navigationEntries,
145
+ isNew,
146
+ isCopy
147
+ }: {
148
+ pathname: string;
149
+ navigationEntries: NavigationViewInternal[],
150
+ isNew: boolean,
151
+ isCopy: boolean
152
+ }) {
153
+
154
+ const collectionRegistry = useCollectionRegistryController();
155
+ const cmsUrlController = useCMSUrlController();
156
+ const navigate = useNavigate();
157
+
158
+ const navigationPath = cmsUrlController.urlPathToDataPath(pathname);
159
+
160
+ // is navigating away blocked
161
+ const blocked = useRef(false);
162
+
163
+ const lastEntityEntry = [...navigationEntries].reverse().find((entry: any) => entry.type === "entity");
164
+ const navigationEntriesAfterEntity = lastEntityEntry ? navigationEntries.slice(navigationEntries.indexOf(lastEntityEntry) + 1) : [];
165
+
166
+ const lastCustomView = [...navigationEntriesAfterEntity].reverse().find(
167
+ (entry: any) => entry.type === "custom_view" || entry.type === "collection"
168
+ ) as NavigationViewCollectionInternal<any> | NavigationViewEntityCustomInternal<any> | undefined;
169
+
170
+ const entityId = (lastEntityEntry as any)?.entityId;
171
+
172
+ const urlTab = getSelectedTabFromUrl(isNew, lastCustomView);
173
+ const [selectedTab, setSelectedTab] = useState<string | undefined>(urlTab);
174
+
175
+ const parentCollectionIds = collectionRegistry.getParentCollectionIds(navigationPath);
176
+ useEffect(() => {
177
+ if (urlTab !== selectedTab) {
178
+ setSelectedTab(urlTab);
179
+ }
180
+ }, [urlTab]);
181
+
182
+ const basePath = !entityId || isNew
183
+ ? pathname
184
+ : pathname.substring(0, pathname.lastIndexOf(`/${entityId}`));
185
+
186
+ const entityPath = basePath + `/${entityId}`;
187
+
188
+ let blocker: Blocker | undefined = undefined;
189
+ try {
190
+ blocker = useBlocker(({
191
+ nextLocation
192
+ }) => {
193
+ if (nextLocation.pathname.startsWith(entityPath))
194
+ return false;
195
+ return blocked.current;
196
+ });
197
+ } catch (e) {
198
+ // console.warn("Blocker not available, navigation will not be blocked");
199
+ }
200
+
201
+ const lastCollectionEntry = [...navigationEntries].reverse().find((entry: any) => entry.type === "collection");
202
+
203
+ if (isNew && !lastCollectionEntry) {
204
+ throw new Error("INTERNAL: No collection found in the navigation");
205
+ }
206
+
207
+ if (!isNew && !lastEntityEntry) {
208
+ return <NotFoundPage />;
209
+ }
210
+
211
+ const collection = isNew ? (lastCollectionEntry as any)!.collection : (lastEntityEntry as any)!.parentCollection;
212
+ const fullIdPath = isNew ? lastCollectionEntry!.slug : lastEntityEntry!.slug;
213
+ const collectionPath = cmsUrlController.resolveDatabasePathsFrom(fullIdPath);
214
+ return <>
215
+ <EntityEditView
216
+ key={collection.slug + "_" + (isNew ? "new" : (isCopy ? entityId + "_copy" : entityId))}
217
+ entityId={isNew ? undefined : entityId}
218
+ collection={collection}
219
+ layout={"full_screen"}
220
+ path={collectionPath}
221
+ copy={isCopy}
222
+ selectedTab={selectedTab ?? undefined}
223
+ onValuesModified={(modified) => blocked.current = modified}
224
+ onSaved={(params) => {
225
+ const newSelectedTab = params.selectedTab;
226
+ const newEntityId = params.entityId;
227
+ if (newSelectedTab) {
228
+ navigate(`${basePath}/${newEntityId}/${newSelectedTab}`, { replace: true });
229
+ } else {
230
+ navigate(`${basePath}/${newEntityId}`, { replace: true });
231
+ }
232
+ }}
233
+ onTabChange={(params) => {
234
+ setSelectedTab(params.selectedTab);
235
+ if (isNew) {
236
+ return;
237
+ }
238
+ const newSelectedTab = params.selectedTab;
239
+ if (newSelectedTab) {
240
+ navigate(`${basePath}/${entityId}/${newSelectedTab}`, { replace: true });
241
+ } else {
242
+ navigate(`${basePath}/${entityId}`, { replace: true });
243
+ }
244
+ }}
245
+ parentCollectionIds={parentCollectionIds}
246
+ />
247
+
248
+ <UnsavedChangesDialog
249
+ open={blocker?.state === "blocked"}
250
+ handleOk={() => blocker?.proceed?.()}
251
+ handleCancel={() => blocker?.reset?.()}
252
+ body={"You have unsaved changes in this entity."} />
253
+
254
+ </>;
255
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./CustomCMSRoute";
2
+ export * from "./RebaseRoute";
@@ -0,0 +1,66 @@
1
+ import { FormexController } from "@rebasepro/formex";
2
+
3
+ export function createFormexStub<T extends object>(values: T): FormexController<T> {
4
+ const errorMessage = "You are in a read-only context. You cannot modify the formex controller.";
5
+
6
+ return {
7
+ debugId: "",
8
+ values,
9
+ initialValues: values,
10
+ touched: {} as Record<string, boolean>,
11
+ dirty: false,
12
+ errors: {} as Record<string, string>,
13
+ submitCount: 0,
14
+ isSubmitting: false,
15
+ isValidating: false,
16
+ version: 0,
17
+ canUndo: false,
18
+ canRedo: false,
19
+
20
+ setValues: () => {
21
+ throw new Error(errorMessage);
22
+ },
23
+ setTouched(touched: Record<string, boolean>): void {
24
+ throw new Error(errorMessage);
25
+ },
26
+ setFieldValue: () => {
27
+ throw new Error(errorMessage);
28
+ },
29
+ setFieldTouched: () => {
30
+ throw new Error(errorMessage);
31
+ },
32
+ setDirty: () => {
33
+ throw new Error(errorMessage);
34
+ },
35
+ setSubmitCount: () => {
36
+ throw new Error(errorMessage);
37
+ },
38
+ setFieldError: () => {
39
+ throw new Error(errorMessage);
40
+ },
41
+ handleChange: () => {
42
+ throw new Error(errorMessage);
43
+ },
44
+ handleBlur: () => {
45
+ throw new Error(errorMessage);
46
+ },
47
+ handleSubmit: () => {
48
+ throw new Error(errorMessage);
49
+ },
50
+ validate: () => {
51
+ throw new Error(errorMessage);
52
+ },
53
+ resetForm: () => {
54
+ throw new Error(errorMessage);
55
+ },
56
+ setSubmitting: () => {
57
+ throw new Error(errorMessage);
58
+ },
59
+ undo: () => {
60
+ throw new Error(errorMessage);
61
+ },
62
+ redo: () => {
63
+ throw new Error(errorMessage);
64
+ }
65
+ };
66
+ }
@@ -0,0 +1,267 @@
1
+ import { isObject, isPlainObject } from "@rebasepro/common";
2
+ import { EntityReference, EntityRelation, GeoPoint, Vector } from "@rebasepro/types";
3
+
4
+ // Define a unique prefix for entity keys in sessionStorage to avoid key collisions
5
+ const LOCAL_STORAGE_PREFIX = "entity_cache::";
6
+
7
+ // In-memory cache to store entities for quick access
8
+ const entityCache: Map<string, object> = new Map();
9
+
10
+ // Check `sessionStorage` availability once during initialization
11
+ const isSessionStorageAvailable = typeof sessionStorage !== "undefined";
12
+
13
+ // Define custom replacer for JSON.stringify
14
+ function customReplacer(key: string): any {
15
+
16
+ // @ts-ignore
17
+ const value = this[key];
18
+
19
+ // Handle Date objects
20
+ // @ts-ignore
21
+ if (value instanceof Date) {
22
+ return {
23
+ __type: "Date",
24
+ value: value.toISOString()
25
+ };
26
+ }
27
+
28
+ // Handle EntityReference
29
+ // @ts-ignore
30
+ if (value instanceof EntityReference) {
31
+ return {
32
+ __type: "EntityReference",
33
+ id: value.id,
34
+ path: value.path,
35
+ datasource: value.datasource,
36
+ databaseId: value.databaseId
37
+ };
38
+ }
39
+
40
+ if (value instanceof EntityRelation) {
41
+ return {
42
+ __type: "EntityRelation",
43
+ id: value.id,
44
+ path: value.path
45
+ };
46
+ }
47
+
48
+ // Handle GeoPoint
49
+ // @ts-ignore
50
+ if (value instanceof GeoPoint) {
51
+ return {
52
+ __type: "GeoPoint",
53
+ latitude: value.latitude,
54
+ longitude: value.longitude
55
+ };
56
+ }
57
+
58
+ // Handle Vector
59
+ // @ts-ignore
60
+ if (value instanceof Vector) {
61
+ return {
62
+ __type: "Vector",
63
+ value: value.value
64
+ };
65
+ }
66
+
67
+ return value;
68
+ }
69
+
70
+ // Define custom reviver for JSON.parse
71
+ function customReviver(key: string, value: any): any {
72
+ if (value && typeof value === "object" && "__type" in value) {
73
+ switch (value.__type) {
74
+ case "Date":
75
+ return new Date(value.value);
76
+ case "EntityReference":
77
+ return new EntityReference({
78
+ id: value.id,
79
+ path: value.path,
80
+ datasource: value.datasource,
81
+ databaseId: value.databaseId
82
+ });
83
+ case "EntityRelation":
84
+ return new EntityRelation(value.id, value.path);
85
+ case "GeoPoint":
86
+ return new GeoPoint(value.latitude, value.longitude);
87
+ case "Vector":
88
+ return new Vector(value.value);
89
+ default:
90
+ return value;
91
+ }
92
+ }
93
+ return value;
94
+ }
95
+
96
+ // Initialize the in-memory cache by loading entities from `sessionStorage`
97
+ if (isSessionStorageAvailable) {
98
+ try {
99
+ // Iterate over all keys in sessionStorage to find those with the specified prefix
100
+ for (let i = 0; i < sessionStorage.length; i++) {
101
+ const fullKey = sessionStorage.key(i);
102
+ if (fullKey && fullKey.startsWith(LOCAL_STORAGE_PREFIX)) {
103
+ const path = fullKey.substring(LOCAL_STORAGE_PREFIX.length);
104
+ const entityString = sessionStorage.getItem(fullKey);
105
+ if (entityString) {
106
+ try {
107
+ const entity: object = JSON.parse(entityString, customReviver);
108
+ entityCache.set(path, entity);
109
+ } catch (parseError) {
110
+ console.error(
111
+ `Failed to parse entity for path "${path}" from sessionStorage:`,
112
+ parseError
113
+ );
114
+ }
115
+ }
116
+ }
117
+ }
118
+ } catch (error) {
119
+ console.error("Error accessing sessionStorage during initialization:", error);
120
+ }
121
+ }
122
+
123
+ /**
124
+ * Saves data to the in-memory cache and persists it individually in `sessionStorage`.
125
+ * @param path - The unique path/key for the data.
126
+ * @param data - The data to cache and persist.
127
+ */
128
+ export function saveEntityToCache(path: string, data: object): void {
129
+ // Persist the data individually in sessionStorage
130
+ if (isSessionStorageAvailable) {
131
+ try {
132
+ const key = LOCAL_STORAGE_PREFIX + path;
133
+
134
+ const entityString = JSON.stringify(data, customReplacer);
135
+ sessionStorage.setItem(key, entityString);
136
+ } catch (error) {
137
+ console.error(
138
+ `Failed to save entity for path "${path}" to sessionStorage:`,
139
+ error
140
+ );
141
+ }
142
+ }
143
+ }
144
+
145
+ export function removeEntityFromMemoryCache(path: string): void {
146
+ entityCache.delete(path);
147
+ }
148
+
149
+ export function saveEntityToMemoryCache(path: string, data: object): void {
150
+ entityCache.set(path, data);
151
+ }
152
+
153
+ export function getEntityFromMemoryCache(path: string): object | undefined {
154
+ return entityCache.get(path);
155
+ }
156
+
157
+ export function hasEntityInCache(path: string): boolean {
158
+ return entityCache.has(path);
159
+ }
160
+
161
+ /**
162
+ * Retrieves an entity from the in-memory cache or `sessionStorage`.
163
+ * If the entity is not in the cache but exists in `sessionStorage`, it loads it into the cache.
164
+ * @param path - The unique path/key for the entity.
165
+ * @returns The cached entity or `undefined` if not found.
166
+ */
167
+ export function getEntityFromCache(path: string): object | undefined {
168
+
169
+ // If not in the cache, attempt to load it from sessionStorage
170
+ if (isSessionStorageAvailable) {
171
+ try {
172
+ const key = LOCAL_STORAGE_PREFIX + path;
173
+ const entityString = sessionStorage.getItem(key);
174
+ if (entityString) {
175
+ const entity: object = JSON.parse(entityString, customReviver);
176
+ return entity;
177
+ }
178
+ } catch (error) {
179
+ console.error(
180
+ `Failed to load entity for path "${path}" from sessionStorage:`,
181
+ error
182
+ );
183
+ }
184
+ }
185
+
186
+ // Entity not found
187
+ return undefined;
188
+ }
189
+
190
+ /**
191
+ * Removes an entity from both the in-memory cache and `sessionStorage`.
192
+ * @param path - The unique path/key for the entity to remove.
193
+ */
194
+ export function removeEntityFromCache(path: string): void {
195
+
196
+ console.debug("Removing entity from cache", path);
197
+
198
+ // Remove from the in-memory cache
199
+ entityCache.delete(path);
200
+
201
+ // Remove from sessionStorage
202
+ if (isSessionStorageAvailable) {
203
+ try {
204
+ const key = LOCAL_STORAGE_PREFIX + path;
205
+ sessionStorage.removeItem(key);
206
+ } catch (error) {
207
+ console.error(
208
+ `Failed to remove entity for path "${path}" from sessionStorage:`,
209
+ error
210
+ );
211
+ }
212
+ }
213
+ }
214
+
215
+ /**
216
+ * Clears the entire in-memory cache and removes all related entities from `sessionStorage`.
217
+ */
218
+ export function clearEntityCache(): void {
219
+ // Clear the in-memory cache
220
+ entityCache.clear();
221
+
222
+ // Remove all entities with the specified prefix from sessionStorage
223
+ if (isSessionStorageAvailable) {
224
+ try {
225
+ const keysToRemove: string[] = [];
226
+ for (let i = 0; i < sessionStorage.length; i++) {
227
+ const fullKey = sessionStorage.key(i);
228
+ if (fullKey && fullKey.startsWith(LOCAL_STORAGE_PREFIX)) {
229
+ keysToRemove.push(fullKey);
230
+ }
231
+ }
232
+
233
+ // Remove the keys after collecting them to avoid issues while iterating
234
+ keysToRemove.forEach((key) => sessionStorage.removeItem(key));
235
+ } catch (error) {
236
+ console.error("Failed to clear entity cache from sessionStorage:", error);
237
+ }
238
+ }
239
+ }
240
+
241
+ export function flattenKeys(obj: Record<string, unknown> | unknown[], prefix = "", result: string[] = []): string[] {
242
+
243
+ if (isObject(obj) || Array.isArray(obj)) {
244
+ const plainObject = isPlainObject(obj);
245
+ if (!plainObject && prefix) {
246
+ result.push(prefix);
247
+ } else {
248
+ const record = obj as Record<string, unknown>;
249
+ for (const key in record) {
250
+ if (Object.prototype.hasOwnProperty.call(record, key)) {
251
+ const newKey = prefix
252
+ ? Array.isArray(obj)
253
+ ? `${prefix}[${key}]`
254
+ : `${prefix}.${key}`
255
+ : key;
256
+ const val = record[key];
257
+ if (isObject(val) || Array.isArray(val)) {
258
+ flattenKeys(val as Record<string, unknown> | unknown[], newKey, result);
259
+ } else {
260
+ result.push(newKey);
261
+ }
262
+ }
263
+ }
264
+ }
265
+ }
266
+ return result;
267
+ }
@@ -0,0 +1,32 @@
1
+ import { EnumValueConfig } from "@rebasepro/types";
2
+ import { CHIP_COLORS, ChipColorScheme, getColorSchemeForSeed } from "@rebasepro/ui";
3
+ import { getLabelOrConfigFrom } from "@rebasepro/common";
4
+
5
+ export function getColorScheme(enumValues: EnumValueConfig[], key: string | number): ChipColorScheme | undefined {
6
+ const labelOrConfig = getLabelOrConfigFrom(enumValues, key);
7
+ if (!labelOrConfig?.color)
8
+ return getColorSchemeForSeed(key.toString());
9
+ if (typeof labelOrConfig === "object" && "color" in labelOrConfig) {
10
+ if (typeof labelOrConfig.color === "string")
11
+ return CHIP_COLORS[labelOrConfig.color];
12
+ if (typeof labelOrConfig.color === "object")
13
+ return labelOrConfig.color;
14
+ }
15
+ return undefined;
16
+ }
17
+
18
+ export function isEnumValueDisabled(labelOrConfig?: string | EnumValueConfig) {
19
+ return typeof labelOrConfig === "object" && (labelOrConfig as EnumValueConfig).disabled;
20
+ }
21
+
22
+ export function buildEnumLabel(
23
+ labelOrConfig?: string | EnumValueConfig
24
+ ): string | undefined {
25
+ if (labelOrConfig === undefined)
26
+ return undefined;
27
+ if (typeof labelOrConfig === "object") {
28
+ return labelOrConfig.label;
29
+ } else {
30
+ return labelOrConfig;
31
+ }
32
+ }
@@ -0,0 +1,23 @@
1
+ import { iconSynonyms } from "./icon_synonyms";
2
+ import { iconKeys } from "@rebasepro/ui";
3
+ import Fuse from "fuse.js";
4
+
5
+
6
+ const map = iconKeys
7
+ .map((importName) => {
8
+ // @ts-ignore
9
+ const iconSynonym = importName in iconSynonyms ? iconSynonyms[importName] : "";
10
+ return {
11
+ key: importName,
12
+ synonyms: iconSynonym,
13
+ }
14
+ });
15
+ export const iconsSearch = new Fuse(map, {
16
+ isCaseSensitive: false,
17
+ shouldSort: true,
18
+ ignoreLocation: true,
19
+ distance: 0,
20
+ keys: ["key", "synonyms"]
21
+ })
22
+
23
+