@rebasepro/admin 0.9.0 → 0.9.1-canary.0de22e0

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 (264) hide show
  1. package/README.md +7 -7
  2. package/dist/{CollectionEditorDialog-B-7uW3iJ.js → CollectionEditorDialog-D7odTn0N.js} +150 -36
  3. package/dist/CollectionEditorDialog-D7odTn0N.js.map +1 -0
  4. package/dist/{PropertyEditView-7KMTcrqi.js → PropertyEditView-i51tFOfM.js} +6 -6
  5. package/dist/PropertyEditView-i51tFOfM.js.map +1 -0
  6. package/dist/{RouterCollectionsStudioView-epqIbZrJ.js → RouterCollectionsStudioView-B9AjTCjT.js} +5 -5
  7. package/dist/RouterCollectionsStudioView-B9AjTCjT.js.map +1 -0
  8. package/dist/collection_editor/api/generateCollectionApi.d.ts +4 -4
  9. package/dist/collection_editor/ui/collection_editor/PropertyEditView.d.ts +1 -1
  10. package/dist/collection_editor/ui/collection_editor/SwitchControl.d.ts +1 -1
  11. package/dist/collection_editor/useSafeSnackbarController.d.ts +1 -1
  12. package/dist/collection_editor_ui.js +5 -5
  13. package/dist/collection_editor_ui.js.map +1 -1
  14. package/dist/components/CollectionTableBinding/CollectionTableBindingProps.d.ts +1 -1
  15. package/dist/components/CollectionTableBinding/internal/EntityTableCell.d.ts +1 -1
  16. package/dist/components/CollectionTableBinding/internal/popup_field/PopupFormField.d.ts +1 -1
  17. package/dist/components/CollectionTableBinding/table_bindings.d.ts +1 -1
  18. package/dist/components/CollectionViewBinding/hooks/useCollectionInlineEditor.d.ts +1 -1
  19. package/dist/components/{RebaseCMS.d.ts → RebaseAdmin.d.ts} +2 -2
  20. package/dist/components/RebaseLayout.d.ts +5 -4
  21. package/dist/components/RebaseShell.d.ts +1 -0
  22. package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
  23. package/dist/components/SelectableTable/SelectableTableContext.d.ts +1 -1
  24. package/dist/components/SidePanelProvider.d.ts +1 -1
  25. package/dist/components/field_configs.d.ts +17 -0
  26. package/dist/components/index.d.ts +1 -1
  27. package/dist/contexts/BreacrumbsContext.d.ts +1 -1
  28. package/dist/editor.js +1 -1
  29. package/dist/editor.js.map +1 -1
  30. package/dist/export-BM6HPujv.js +518 -0
  31. package/dist/export-BM6HPujv.js.map +1 -0
  32. package/dist/form/components/LocalChangesMenu.d.ts +1 -1
  33. package/dist/form/components/StorageUploadProgress.d.ts +1 -1
  34. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +1 -1
  35. package/dist/{history-7X5bON_n.js → history-CtIPJxvQ.js} +6 -6
  36. package/dist/history-CtIPJxvQ.js.map +1 -0
  37. package/dist/hooks/useSelectionDialog.d.ts +1 -1
  38. package/dist/import-DzQnT03v.js +328 -0
  39. package/dist/import-DzQnT03v.js.map +1 -0
  40. package/dist/index.d.ts +1 -1
  41. package/dist/index.js +3300 -2
  42. package/dist/index.js.map +1 -0
  43. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  44. package/dist/preview/util.d.ts +1 -0
  45. package/dist/types/components/formex.d.ts +1 -1
  46. package/dist/util/view_mode.d.ts +54 -0
  47. package/dist/{src-sUZfe29F.js → util-XFwQ9FEc.js} +17554 -21391
  48. package/dist/util-XFwQ9FEc.js.map +1 -0
  49. package/package.json +12 -17
  50. package/src/collection_editor/ConfigControllerProvider.tsx +1 -1
  51. package/src/collection_editor/api/generateCollectionApi.ts +4 -4
  52. package/src/collection_editor/ui/AddKanbanColumnAction.tsx +1 -1
  53. package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +1 -1
  54. package/src/collection_editor/ui/EditorCollectionAction.tsx +1 -1
  55. package/src/collection_editor/ui/EditorCollectionActionStart.tsx +1 -1
  56. package/src/collection_editor/ui/EditorEntityAction.tsx +1 -1
  57. package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +1 -1
  58. package/src/collection_editor/ui/KanbanSetupAction.tsx +1 -1
  59. package/src/collection_editor/ui/MissingReferenceWidget.tsx +1 -1
  60. package/src/collection_editor/ui/NewCollectionButton.tsx +1 -1
  61. package/src/collection_editor/ui/NewCollectionCard.tsx +1 -1
  62. package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +1 -1
  63. package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +1 -1
  64. package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +3 -3
  65. package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +3 -3
  66. package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +2 -2
  67. package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +2 -2
  68. package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +139 -13
  69. package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +1 -1
  70. package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +1 -1
  71. package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +1 -1
  72. package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +2 -2
  73. package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +2 -2
  74. package/src/collection_editor/ui/collection_editor/EntityActionsSelectDialog.tsx +1 -1
  75. package/src/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +1 -1
  76. package/src/collection_editor/ui/collection_editor/EnumForm.tsx +2 -2
  77. package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +2 -2
  78. package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +2 -2
  79. package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +2 -2
  80. package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +2 -2
  81. package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +1 -1
  82. package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +1 -1
  83. package/src/collection_editor/ui/collection_editor/RouterCollectionStudioView.tsx +1 -1
  84. package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +2 -2
  85. package/src/collection_editor/ui/collection_editor/SwitchControl.tsx +1 -1
  86. package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +1 -1
  87. package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +2 -2
  88. package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +1 -1
  89. package/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx +1 -1
  90. package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +3 -3
  91. package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +2 -2
  92. package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +3 -3
  93. package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +2 -2
  94. package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +2 -2
  95. package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +2 -2
  96. package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +2 -2
  97. package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +1 -1
  98. package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +1 -1
  99. package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +2 -2
  100. package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +2 -2
  101. package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +1 -1
  102. package/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx +1 -1
  103. package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +1 -1
  104. package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +1 -1
  105. package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +1 -1
  106. package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +2 -2
  107. package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +2 -2
  108. package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +2 -2
  109. package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +2 -2
  110. package/src/collection_editor/useSafeSnackbarController.ts +1 -1
  111. package/src/components/AdminModeSyncer.tsx +1 -1
  112. package/src/components/ArrayContainer.tsx +1 -1
  113. package/src/components/ClearFilterSortButton.tsx +1 -1
  114. package/src/components/CollectionPanel.tsx +1 -1
  115. package/src/components/CollectionTableBinding/CollectionRowActions.tsx +3 -3
  116. package/src/components/CollectionTableBinding/CollectionTableBinding.tsx +3 -3
  117. package/src/components/CollectionTableBinding/CollectionTableBindingProps.tsx +1 -1
  118. package/src/components/CollectionTableBinding/PropertyTableCell.tsx +1 -1
  119. package/src/components/CollectionTableBinding/column_utils.tsx +1 -1
  120. package/src/components/CollectionTableBinding/fields/TableMultipleRelationField.tsx +2 -2
  121. package/src/components/CollectionTableBinding/fields/TableReferenceField.tsx +2 -2
  122. package/src/components/CollectionTableBinding/fields/TableRelationField.tsx +2 -2
  123. package/src/components/CollectionTableBinding/fields/TableStorageUpload.tsx +1 -1
  124. package/src/components/CollectionTableBinding/internal/CollectionTableToolbar.tsx +1 -1
  125. package/src/components/CollectionTableBinding/internal/EntityTableCell.tsx +2 -2
  126. package/src/components/CollectionTableBinding/internal/EntityTableCellActions.tsx +1 -1
  127. package/src/components/CollectionTableBinding/internal/popup_field/PopupFormField.tsx +4 -4
  128. package/src/components/CollectionTableBinding/table_bindings.tsx +1 -1
  129. package/src/components/CollectionViewBinding/BoardCardBinding.tsx +2 -2
  130. package/src/components/CollectionViewBinding/CollectionBoardViewBinding.tsx +4 -4
  131. package/src/components/CollectionViewBinding/CollectionCardViewBinding.tsx +1 -1
  132. package/src/components/CollectionViewBinding/CollectionListViewBinding.tsx +3 -3
  133. package/src/components/CollectionViewBinding/CollectionViewActions.tsx +3 -3
  134. package/src/components/CollectionViewBinding/CollectionViewBinding.tsx +77 -127
  135. package/src/components/CollectionViewBinding/CollectionViewStartActions.tsx +5 -9
  136. package/src/components/CollectionViewBinding/EntityCardBinding.tsx +3 -3
  137. package/src/components/CollectionViewBinding/FiltersDialog.tsx +19 -1
  138. package/src/components/CollectionViewBinding/SplitListView.tsx +114 -63
  139. package/src/components/CollectionViewBinding/ViewModeToggle.tsx +1 -1
  140. package/src/components/CollectionViewBinding/hooks/useCollectionInlineEditor.ts +2 -2
  141. package/src/components/CollectionViewBinding/hooks/useKanbanDragAndDrop.ts +2 -2
  142. package/src/components/CollectionViewBinding/useBoardDataController.tsx +9 -3
  143. package/src/components/CollectionViewBinding/usePreviewSlots.ts +1 -1
  144. package/src/components/DefaultAppBar.tsx +3 -3
  145. package/src/components/DefaultDrawer.tsx +3 -3
  146. package/src/components/DeleteEntityDialog.tsx +1 -1
  147. package/src/components/DetailViewBinding.tsx +7 -5
  148. package/src/components/DrawerNavigationGroup.tsx +2 -2
  149. package/src/components/EditFormActions.tsx +6 -6
  150. package/src/components/EditViewBinding.tsx +9 -8
  151. package/src/components/EntityPreviewBinding.tsx +5 -4
  152. package/src/components/EntityViewBinding.tsx +2 -2
  153. package/src/components/HomePage/ContentHomePage.tsx +6 -5
  154. package/src/components/HomePage/FavouritesView.tsx +2 -2
  155. package/src/components/HomePage/NavigationCardBinding.tsx +3 -3
  156. package/src/components/HomePage/NavigationGroup.tsx +1 -1
  157. package/src/components/HomePage/RenameGroupDialog.tsx +1 -1
  158. package/src/components/JsonPreviewBinding.tsx +1 -1
  159. package/src/components/{RebaseCMS.tsx → RebaseAdmin.tsx} +3 -3
  160. package/src/components/RebaseAuthGate.tsx +2 -2
  161. package/src/components/RebaseLayout.tsx +7 -13
  162. package/src/components/RebaseNavigation.tsx +18 -3
  163. package/src/components/RebaseRouteDefs.tsx +3 -3
  164. package/src/components/RebaseShell.tsx +2 -1
  165. package/src/components/ReferenceTable/SelectionTableBinding.tsx +7 -6
  166. package/src/components/ReferenceWidget.tsx +1 -1
  167. package/src/components/RelationSelector.tsx +1 -1
  168. package/src/components/SearchIconsView.tsx +2 -2
  169. package/src/components/SelectableTable/SelectableTable.tsx +2 -2
  170. package/src/components/SelectableTable/SelectableTableContext.tsx +1 -1
  171. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +1 -1
  172. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +1 -1
  173. package/src/components/SelectableTable/filters/FilterFieldBinding.tsx +1 -1
  174. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +2 -2
  175. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +1 -1
  176. package/src/components/SideDialogs.tsx +1 -1
  177. package/src/components/SidePanelBinding.tsx +47 -9
  178. package/src/components/SidePanelProvider.tsx +15 -12
  179. package/src/components/UserSelector.tsx +1 -1
  180. package/src/components/admin/CreationResultDialog.tsx +6 -3
  181. package/src/components/app/Scaffold.tsx +6 -2
  182. package/src/components/common/default_entity_actions.tsx +123 -25
  183. package/src/components/field_configs.tsx +42 -25
  184. package/src/components/history/EntityHistoryEntry.tsx +1 -1
  185. package/src/components/history/EntityHistoryView.tsx +5 -5
  186. package/src/components/history/LastEditedByIndicator.tsx +2 -2
  187. package/src/components/index.ts +1 -1
  188. package/src/contexts/BreacrumbsContext.tsx +1 -1
  189. package/src/data_export/export/BasicExportAction.tsx +1 -1
  190. package/src/data_export/export/ExportCollectionAction.tsx +1 -1
  191. package/src/data_import/components/DataNewPropertiesMapping.tsx +1 -1
  192. package/src/data_import/components/ImportFileUpload.tsx +1 -1
  193. package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +3 -5
  194. package/src/data_import/components/ImportSaveInProgress.tsx +1 -1
  195. package/src/data_import/import/ImportCollectionAction.tsx +8 -8
  196. package/src/data_import/utils/data.ts +2 -2
  197. package/src/data_import/utils/get_properties_mapping.ts +1 -1
  198. package/src/editor/components/image-bubble.tsx +1 -1
  199. package/src/editor/components/table-bubble.tsx +1 -1
  200. package/src/editor/editor.tsx +1 -1
  201. package/src/editor/selectors/color-selector.tsx +1 -1
  202. package/src/editor/selectors/link-selector.tsx +1 -1
  203. package/src/editor/selectors/node-selector.tsx +2 -2
  204. package/src/editor/selectors/text-buttons.tsx +1 -1
  205. package/src/form/EntityForm.tsx +8 -5
  206. package/src/form/EntityFormActions.tsx +1 -1
  207. package/src/form/EntityFormBinding.tsx +7 -5
  208. package/src/form/PropertyFieldBinding.tsx +3 -3
  209. package/src/form/components/ErrorFocus.tsx +1 -1
  210. package/src/form/components/LocalChangesMenu.tsx +3 -3
  211. package/src/form/components/StorageItemPreview.tsx +1 -1
  212. package/src/form/components/StorageUploadProgress.tsx +3 -3
  213. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +3 -2
  214. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +4 -3
  215. package/src/form/field_bindings/BlockFieldBinding.tsx +4 -3
  216. package/src/form/field_bindings/DateTimeFieldBinding.tsx +3 -2
  217. package/src/form/field_bindings/KeyValueFieldBinding.tsx +4 -3
  218. package/src/form/field_bindings/MapFieldBinding.tsx +3 -2
  219. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +4 -3
  220. package/src/form/field_bindings/MultiSelectFieldBinding.tsx +2 -1
  221. package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +3 -2
  222. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +2 -1
  223. package/src/form/field_bindings/ReferenceFieldBinding.tsx +5 -4
  224. package/src/form/field_bindings/RelationFieldBinding.tsx +3 -2
  225. package/src/form/field_bindings/RepeatFieldBinding.tsx +3 -2
  226. package/src/form/field_bindings/SelectFieldBinding.tsx +2 -1
  227. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +5 -4
  228. package/src/form/field_bindings/SwitchFieldBinding.tsx +2 -1
  229. package/src/form/field_bindings/TextFieldBinding.tsx +2 -1
  230. package/src/form/field_bindings/UserSelectFieldBinding.tsx +2 -1
  231. package/src/form/field_bindings/VectorFieldBinding.tsx +2 -1
  232. package/src/form/form_utils.ts +1 -1
  233. package/src/hooks/navigation/useNavigationResolution.ts +19 -4
  234. package/src/hooks/useBuildSidePanel.tsx +10 -2
  235. package/src/hooks/useCMSContext.tsx +1 -1
  236. package/src/hooks/useHistory.ts +1 -1
  237. package/src/hooks/useResolvedNavigationFrom.tsx +4 -2
  238. package/src/hooks/useSelectionDialog.tsx +3 -3
  239. package/src/index.ts +3 -3
  240. package/src/preview/PropertyPreview.tsx +2 -2
  241. package/src/preview/components/DatePreview.tsx +1 -1
  242. package/src/preview/components/EnumValuesChip.tsx +1 -1
  243. package/src/preview/components/ImagePreview.tsx +2 -2
  244. package/src/preview/components/ReferencePreview.tsx +3 -3
  245. package/src/preview/components/RelationPreview.tsx +3 -3
  246. package/src/preview/components/StorageThumbnail.tsx +1 -1
  247. package/src/preview/components/UrlComponentPreview.tsx +2 -9
  248. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +1 -1
  249. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -1
  250. package/src/preview/property_previews/ArrayOneOfPreview.tsx +1 -1
  251. package/src/preview/property_previews/ArrayPropertyPreview.tsx +1 -1
  252. package/src/preview/property_previews/NumberPropertyPreview.tsx +1 -1
  253. package/src/preview/util.ts +9 -0
  254. package/src/routes/CustomViewRoute.tsx +2 -1
  255. package/src/routes/RebaseRoute.tsx +21 -26
  256. package/src/types/components/formex.tsx +1 -1
  257. package/src/util/navigation_utils.ts +2 -5
  258. package/src/util/previews.ts +4 -2
  259. package/src/util/view_mode.ts +102 -0
  260. package/dist/CollectionEditorDialog-B-7uW3iJ.js.map +0 -1
  261. package/dist/PropertyEditView-7KMTcrqi.js.map +0 -1
  262. package/dist/RouterCollectionsStudioView-epqIbZrJ.js.map +0 -1
  263. package/dist/history-7X5bON_n.js.map +0 -1
  264. package/dist/src-sUZfe29F.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import { ArrayProperty, DateProperty, Entity, EntityReference, EntityRelation, NumberProperty, Property, ReferenceProperty, RelationProperty, StringProperty } from "@rebasepro/types";
3
- import { TableSize, useCustomizationController } from "@rebasepro/core";
3
+ import { TableSize, useCustomizationController } from "@rebasepro/app";
4
4
  import {
5
5
  VirtualTableInput,
6
6
  VirtualTableNumberInput,
@@ -3,8 +3,8 @@ import React, { memo, useCallback, useMemo } from "react";
3
3
  import { Entity } from "@rebasepro/types";
4
4
  import { Checkbox, Chip, cls, defaultBorderMixin, Markdown } from "@rebasepro/ui";
5
5
  import { PropertyPreview } from "../../preview";
6
- import { useAuthController, useCustomizationController } from "@rebasepro/core";
7
- import { IconForView } from "@rebasepro/core";
6
+ import { useAuthController, useCustomizationController } from "@rebasepro/app";
7
+ import { IconForView } from "@rebasepro/app";
8
8
  import { BoardItemViewProps } from "@rebasepro/ui";
9
9
  import { useCollectionSlotKeys, resolveEntitySlots } from "./usePreviewSlots";
10
10
 
@@ -33,12 +33,12 @@ import {
33
33
  useRebaseContext,
34
34
  useTranslation,
35
35
  useSlot
36
- } from "@rebasepro/core";
37
- import { useAnalyticsController } from "@rebasepro/core";
38
- import { setIn } from "@rebasepro/formex";
36
+ } from "@rebasepro/app";
37
+ import { useAnalyticsController } from "@rebasepro/app";
38
+ import { setIn } from "@rebasepro/forms";
39
39
  import { useBoardDataController } from "./useBoardDataController";
40
40
  import { useKanbanDragAndDrop } from "./hooks/useKanbanDragAndDrop";
41
- import { useSidePanel } from "../../index";
41
+ import { useSidePanel } from "../../hooks/useSidePanel";
42
42
  import { generateNKeysBetween } from "fractional-indexing";
43
43
 
44
44
  export type CollectionBoardViewBindingProps<M extends Record<string, unknown> = Record<string, unknown>> = {
@@ -8,7 +8,7 @@ import {
8
8
  Typography,
9
9
  CardView
10
10
  } from "@rebasepro/ui";
11
- import { useComponentOverride } from "@rebasepro/core";
11
+ import { useComponentOverride } from "@rebasepro/app";
12
12
 
13
13
  export type CollectionCardViewBindingProps<M extends Record<string, unknown> = Record<string, unknown>> = {
14
14
  collection: CollectionConfig<M>;
@@ -17,10 +17,10 @@ import { PropertyPreview } from "../../preview";
17
17
  import {
18
18
  useAuthController,
19
19
  useCustomizationController
20
- } from "@rebasepro/core";
21
- import { useAnalyticsController } from "@rebasepro/core";
20
+ } from "@rebasepro/app";
21
+ import { useAnalyticsController } from "@rebasepro/app";
22
22
  import { getEntityPreviewKeys } from "../../util/previews";
23
- import { IconForView } from "@rebasepro/core";
23
+ import { IconForView } from "@rebasepro/app";
24
24
  import { getValueInPath } from "@rebasepro/utils";
25
25
  import { useCollectionSlotKeys, resolveEntitySlots, type CollectionSlotKeys } from "./usePreviewSlots";
26
26
  import { useCMSContext } from "../../hooks/useCMSContext";
@@ -2,18 +2,18 @@
2
2
  import type { CollectionConfig } from "@rebasepro/types";
3
3
  import React, { lazy, Suspense } from "react";
4
4
 
5
- import { useLargeLayout, useTranslation, useSlot, resolveComponentRef } from "@rebasepro/core";
5
+ import { useLargeLayout, useTranslation, useSlot, resolveComponentRef } from "@rebasepro/app";
6
6
  import { CollectionActionsProps, EntityTableController, SelectionController } from "@rebasepro/types";
7
7
  import { Button, IconButton, Tooltip, Popover, iconSize } from "@rebasepro/ui";
8
8
  import { ErrorBoundary, MoreVerticalIcon, PlusIcon, Trash2Icon } from "@rebasepro/ui";
9
- import { usePermissions } from "@rebasepro/core";
9
+ import { usePermissions } from "@rebasepro/app";
10
10
  import { toArray } from "@rebasepro/utils";
11
11
  // Lazy-load import/export — pulls in exceljs only on demand
12
12
  const ImportCollectionAction = lazy(() => import("../../data_import/import").then(m => ({ default: m.ImportCollectionAction })));
13
13
  const ExportCollectionAction = lazy(() => import("../../data_export/export").then(m => ({ default: m.ExportCollectionAction })));
14
14
  import { EditorCollectionAction } from "../../collection_editor/ui/EditorCollectionAction";
15
15
  import { useCollectionEditorController } from "../../collection_editor/useCollectionEditorController";
16
- import { useCMSContext } from "../../index";
16
+ import { useCMSContext } from "../../hooks/useCMSContext";
17
17
 
18
18
  export type CollectionViewActionsProps<M extends Record<string, unknown>> = {
19
19
  collection: CollectionConfig<M>;
@@ -38,7 +38,7 @@ import {
38
38
  useSlot,
39
39
  useTranslation,
40
40
  useUserConfigurationPersistence
41
- } from "@rebasepro/core";
41
+ } from "@rebasepro/app";
42
42
  import { CollectionViewActions } from "./CollectionViewActions";
43
43
  import { CollectionCardViewBinding } from "./CollectionCardViewBinding";
44
44
  import { CollectionListViewBinding } from "./CollectionListViewBinding";
@@ -69,28 +69,15 @@ import { DeleteEntityDialog } from "../DeleteEntityDialog";
69
69
  import { useSelectionController } from "./useSelectionController";
70
70
  import { CollectionViewStartActions } from "./CollectionViewStartActions";
71
71
  import { addRecentId, getRecentIds } from "./utils";
72
+ import { isViewMode, OpenEntityMode, resolveOpenEntityMode, VIEW_MODE_PARAM } from "../../util/view_mode";
72
73
  import { mergeDeep } from "@rebasepro/utils";
73
- import {
74
- useBreadcrumbsController,
75
- useCMSContext,
76
- useCollectionRegistryController,
77
- useSidePanel,
78
- useUrlController
79
- } from "../../index";
74
+ import { useBreadcrumbsController } from "../../hooks/useBreadcrumbsController";
75
+ import { useCMSContext } from "../../hooks/useCMSContext";
76
+ import { useCollectionRegistryController } from "../../hooks/navigation/contexts/CollectionRegistryContext";
77
+ import { useSidePanel } from "../../hooks/useSidePanel";
78
+ import { useUrlController } from "../../hooks/navigation/contexts/UrlContext";
80
79
 
81
80
  const EMPTY_ARRAY: never[] = [];
82
- const DEFAULT_ENTITY_OPEN_MODE = "split";
83
-
84
- function getOpenEntityMode(
85
- viewMode: ViewMode,
86
- configuredMode?: "side_panel" | "full_screen" | "split" | "dialog"
87
- ): "side_panel" | "full_screen" | "split" | "dialog" {
88
- if (configuredMode) return configuredMode;
89
- if (viewMode === "kanban") return "side_panel";
90
- if (viewMode === "table" || viewMode === "cards") return "full_screen";
91
- // "list" view defaults to split
92
- return "split";
93
- }
94
81
 
95
82
  /**
96
83
  * @group Components
@@ -249,11 +236,8 @@ const CollectionViewBindingInner = React.memo(
249
236
 
250
237
  // Read view from React Router's searchParams (reactive on back/forward)
251
238
  const urlView = useMemo((): ViewMode | null => {
252
- const v = searchParams.get("__view");
253
- if (v && ["list", "table", "kanban", "cards"].includes(v)) {
254
- return v as ViewMode;
255
- }
256
- return null;
239
+ const v = searchParams.get(VIEW_MODE_PARAM);
240
+ return isViewMode(v) ? v : null;
257
241
  }, [searchParams]);
258
242
 
259
243
  // Get saved view from local persistence
@@ -270,7 +254,10 @@ const CollectionViewBindingInner = React.memo(
270
254
  return defaultViewMode;
271
255
  });
272
256
 
273
- const openEntityMode = getOpenEntityMode(viewMode, collection?.openEntityMode);
257
+ const openEntityMode = resolveOpenEntityMode({
258
+ collection,
259
+ viewMode
260
+ });
274
261
 
275
262
  // Sync URL with current view on init (if view came from saved config)
276
263
  useEffect(() => {
@@ -278,7 +265,7 @@ const CollectionViewBindingInner = React.memo(
278
265
  // View came from saved config but URL doesn't have it - update URL without push
279
266
  setSearchParams((prev) => {
280
267
  const next = new URLSearchParams(prev);
281
- next.set("__view", viewMode);
268
+ next.set(VIEW_MODE_PARAM, viewMode);
282
269
  return next;
283
270
  }, { replace: true });
284
271
  }
@@ -292,9 +279,9 @@ const CollectionViewBindingInner = React.memo(
292
279
  setSearchParams((prev) => {
293
280
  const next = new URLSearchParams(prev);
294
281
  if (newMode === defaultViewMode) {
295
- next.delete("__view");
282
+ next.delete(VIEW_MODE_PARAM);
296
283
  } else {
297
- next.set("__view", newMode);
284
+ next.set(VIEW_MODE_PARAM, newMode);
298
285
  }
299
286
  return next;
300
287
  });
@@ -974,6 +961,7 @@ parentEntityIds,
974
961
  highlightedEntities={highlightedEntity ? [highlightedEntity] : []}
975
962
  size={listSize}
976
963
  emptyComponent={emptyComponent}
964
+ selectedEntityId={selectedEntityIdProp}
977
965
  getActionsForEntity={getActionsForEntity}
978
966
  path={path}
979
967
  openEntityMode={openEntityMode}
@@ -1008,12 +996,58 @@ parentEntityIds,
1008
996
  additionalIDHeaderWidget={<EntityIdHeaderWidget
1009
997
  path={path}
1010
998
  idPath={path}
1011
- collection={collection}/>}
999
+ collection={collection}
1000
+ openEntityMode={openEntityMode}/>}
1012
1001
  openEntityMode={openEntityMode}
1013
1002
  onColumnsOrderChange={onColumnsOrderChange}
1014
1003
  />
1015
1004
  );
1016
1005
 
1006
+ const detailOpen = selectedEntityIdProp !== undefined;
1007
+
1008
+ // List view gets a centered, titled reading surface. Opening a detail
1009
+ // panel collapses the title and drops the centering so the list can
1010
+ // shrink into the master column.
1011
+ const collectionSurface = viewMode === "list"
1012
+ ? (
1013
+ <div
1014
+ className={cls(
1015
+ "flex flex-col w-full",
1016
+ detailOpen ? "" : "max-w-6xl mx-auto px-3 md:px-4 lg:px-6 py-4"
1017
+ )}
1018
+ >
1019
+ {/* Collapsible title — grid-rows for smooth height, transform for GPU */}
1020
+ <div
1021
+ className={cls(
1022
+ "grid transition-[grid-template-rows,transform,margin] duration-150 ease-out",
1023
+ detailOpen
1024
+ ? "grid-rows-[0fr] -translate-y-2 mt-0 mb-0"
1025
+ : "grid-rows-[1fr] translate-y-0 mt-12 mb-6"
1026
+ )}
1027
+ >
1028
+ <div className="overflow-hidden flex items-center gap-4">
1029
+ <Typography gutterBottom variant="h4" className="grow mb-0" component="h4">
1030
+ {collection.name}
1031
+ </Typography>
1032
+ </div>
1033
+ </div>
1034
+ {pluginInsights.length > 0 && (
1035
+ <div
1036
+ className={cls(
1037
+ "grid transition-[grid-template-rows] duration-150 ease-out",
1038
+ detailOpen ? "grid-rows-[0fr]" : "grid-rows-[1fr]"
1039
+ )}
1040
+ >
1041
+ <div className="overflow-hidden flex-shrink-0">
1042
+ {pluginInsights}
1043
+ </div>
1044
+ </div>
1045
+ )}
1046
+ {innerView}
1047
+ </div>
1048
+ )
1049
+ : innerView;
1050
+
1017
1051
  const mainContent = (
1018
1052
  <div className={cls("overflow-hidden h-full w-full rounded-md flex flex-col dark:bg-surface-800", className)}
1019
1053
  ref={containerRef}>
@@ -1054,66 +1088,10 @@ parentEntityIds,
1054
1088
  selectedTab={selectedTabProp}
1055
1089
  toolbar={toolbarNode}
1056
1090
  >
1057
- {/* When detail panel is open, left panel is always the list
1058
- view regardless of which view mode triggered the entity
1059
- click. When no detail, show the active view mode. */}
1060
- {(selectedEntityIdProp !== undefined || viewMode === "list") ? (
1061
- <div
1062
- className={cls(
1063
- "flex flex-col w-full",
1064
- selectedEntityIdProp === undefined
1065
- ? "max-w-6xl mx-auto px-3 md:px-4 lg:px-6 py-4"
1066
- : ""
1067
- )}
1068
- >
1069
- {/* Collapsible title — grid-rows for smooth height, transform for GPU */}
1070
- <div
1071
- className={cls(
1072
- "grid transition-[grid-template-rows,transform,margin] duration-150 ease-out",
1073
- selectedEntityIdProp === undefined
1074
- ? "grid-rows-[1fr] translate-y-0 mt-12 mb-6"
1075
- : "grid-rows-[0fr] -translate-y-2 mt-0 mb-0"
1076
- )}
1077
- >
1078
- <div className="overflow-hidden flex items-center gap-4">
1079
- <Typography gutterBottom variant="h4" className="grow mb-0" component="h4">
1080
- {collection.name}
1081
- </Typography>
1082
- </div>
1083
- </div>
1084
- {pluginInsights.length > 0 && (
1085
- <div
1086
- className={cls(
1087
- "grid transition-[grid-template-rows] duration-150 ease-out",
1088
- selectedEntityIdProp === undefined
1089
- ? "grid-rows-[1fr]"
1090
- : "grid-rows-[0fr]"
1091
- )}
1092
- >
1093
- <div className="overflow-hidden flex-shrink-0">
1094
- {pluginInsights}
1095
- </div>
1096
- </div>
1097
- )}
1098
- <CollectionListViewBinding
1099
- key={`list-view-${path}`}
1100
- collection={collection}
1101
- tableController={tableController}
1102
- onEntityClick={onEntityClick}
1103
- selectionController={usedSelectionController}
1104
- selectionEnabled={selectionEnabled}
1105
- highlightedEntities={highlightedEntity ? [highlightedEntity] : []}
1106
- size={listSize}
1107
- emptyComponent={emptyComponent}
1108
- selectedEntityId={selectedEntityIdProp}
1109
- getActionsForEntity={getActionsForEntity}
1110
- path={path}
1111
- openEntityMode={openEntityMode}
1112
- />
1113
- </div>
1114
- ) : (
1115
- innerView
1116
- )}
1091
+ {/* The left panel keeps rendering whichever view mode is
1092
+ active. Swapping it to a list on selection would make
1093
+ a board or card grid vanish on every click. */}
1094
+ {collectionSurface}
1117
1095
  </SplitListView>
1118
1096
  ) : (
1119
1097
  <div className="flex flex-col w-full h-full">
@@ -1122,39 +1100,7 @@ parentEntityIds,
1122
1100
  "flex-1 flex flex-col",
1123
1101
  (viewMode === "list" || viewMode === "cards") && "overflow-y-auto"
1124
1102
  )}>
1125
- {viewMode === "list" ? (
1126
- <div
1127
- className={cls(
1128
- "flex flex-col w-full",
1129
- selectedEntityIdProp === undefined
1130
- ? "max-w-6xl mx-auto px-3 md:px-4 lg:px-6 py-4"
1131
- : ""
1132
- )}
1133
- >
1134
- <div
1135
- className={cls(
1136
- "grid transition-[grid-template-rows,transform,margin] duration-150 ease-out",
1137
- selectedEntityIdProp === undefined
1138
- ? "grid-rows-[1fr] translate-y-0 mt-12 mb-6"
1139
- : "grid-rows-[0fr] -translate-y-2 mt-0 mb-0"
1140
- )}
1141
- >
1142
- <div className="overflow-hidden flex items-center gap-4">
1143
- <Typography gutterBottom variant="h4" className="grow mb-0" component="h4">
1144
- {collection.name}
1145
- </Typography>
1146
- </div>
1147
- </div>
1148
- {pluginInsights.length > 0 && (
1149
- <div className="flex-shrink-0">
1150
- {pluginInsights}
1151
- </div>
1152
- )}
1153
- {innerView}
1154
- </div>
1155
- ) : (
1156
- innerView
1157
- )}
1103
+ {collectionSurface}
1158
1104
  </div>
1159
1105
  </div>
1160
1106
  )}
@@ -1358,11 +1304,17 @@ function buildPropertyWidthOverwrite(key: string, width: number): PartialCollect
1358
1304
  function EntityIdHeaderWidget({
1359
1305
  collection,
1360
1306
  path,
1361
- idPath
1307
+ idPath,
1308
+ openEntityMode
1362
1309
  }: {
1363
1310
  collection: CollectionConfig,
1364
1311
  path: string,
1365
- idPath: string
1312
+ idPath: string,
1313
+ /**
1314
+ * Resolved by the parent so that finding an entity by id lands it in the
1315
+ * same surface a row click would — not a different one.
1316
+ */
1317
+ openEntityMode: OpenEntityMode
1366
1318
  }) {
1367
1319
 
1368
1320
  const { t } = useTranslation();
@@ -1372,8 +1324,6 @@ function EntityIdHeaderWidget({
1372
1324
  const [recentIds, setRecentIds] = React.useState<string[]>(getRecentIds(collection.slug).map(String));
1373
1325
  const sidePanelController = useSidePanel();
1374
1326
 
1375
- const openEntityMode = collection?.openEntityMode ?? DEFAULT_ENTITY_OPEN_MODE;
1376
-
1377
1327
  return (
1378
1328
  <Tooltip title={!openPopup ? t("find_by_id") : undefined} asChild={false}>
1379
1329
  <Popover
@@ -1,7 +1,7 @@
1
1
  import type { Properties } from "@rebasepro/types";
2
2
  import type { CollectionConfig } from "@rebasepro/types";
3
3
  import React, { useState, useCallback } from "react";
4
- import { useAuthController, useLargeLayout, useTranslation, useSlot } from "@rebasepro/core";
4
+ import { useAuthController, useLargeLayout, useTranslation, useSlot } from "@rebasepro/app";
5
5
  import { CollectionActionsProps, EntityTableController, SelectionController } from "@rebasepro/types";
6
6
  import { ErrorBoundary, iconSize } from "@rebasepro/ui";
7
7
  import { ArrowLeftIcon, Badge, Button, cls, FilterIcon, IconButton, Tooltip } from "@rebasepro/ui";
@@ -10,7 +10,9 @@ import { FiltersDialog } from "./FiltersDialog";
10
10
  import { FilterPresetsButton } from "./FilterPresetsButton";
11
11
  import { toArray } from "@rebasepro/utils";
12
12
  import { useNavigate } from "react-router-dom";
13
- import { useUrlController, useCMSContext } from "../../index";
13
+ import { useUrlController } from "../../hooks/navigation/contexts/UrlContext";
14
+ import { useCMSContext } from "../../hooks/useCMSContext";
15
+ import { withViewMode } from "../../util/view_mode";
14
16
 
15
17
  export type CollectionViewStartActionsProps<M extends Record<string, unknown>> = {
16
18
  collection: CollectionConfig<M>;
@@ -72,13 +74,7 @@ parentEntityIds,
72
74
  };
73
75
 
74
76
  const handleBackClick = useCallback(() => {
75
- let collectionUrl = urlController.buildUrlCollectionPath(path);
76
- // Preserve the __view query param so the view mode is retained
77
- const currentViewParam = new URLSearchParams(window.location.search).get("__view");
78
- if (currentViewParam) {
79
- collectionUrl += `${collectionUrl.includes("?") ? "&" : "?"}__view=${currentViewParam}`;
80
- }
81
- navigate(collectionUrl);
77
+ navigate(withViewMode(urlController.buildUrlCollectionPath(path)));
82
78
  }, [navigate, urlController, path]);
83
79
 
84
80
  const backButton = compact && (
@@ -12,9 +12,9 @@ import { PropertyPreview } from "../../preview";
12
12
  import {
13
13
  useAuthController,
14
14
  useCustomizationController
15
- } from "@rebasepro/core";
16
- import { useAnalyticsController } from "@rebasepro/core";
17
- import { IconForView } from "@rebasepro/core";
15
+ } from "@rebasepro/app";
16
+ import { useAnalyticsController } from "@rebasepro/app";
17
+ import { IconForView } from "@rebasepro/app";
18
18
  import { useCollectionSlotKeys, resolveEntitySlots } from "./usePreviewSlots";
19
19
 
20
20
  export type EntityCardBindingProps<M extends Record<string, unknown> = Record<string, unknown>> = {
@@ -5,9 +5,27 @@ import { FilterValues, WhereFilterOp } from "@rebasepro/types";
5
5
  import { Button, cls, defaultBorderMixin, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from "@rebasepro/ui";
6
6
  import { FilterIcon, VirtualTableWhereFilterOp } from "@rebasepro/ui";
7
7
  import { resolveFilterOperators } from "@rebasepro/common";
8
- import { useCollectionScope, useTranslation } from "@rebasepro/core";
8
+ import { useCollectionScope, useTranslation } from "@rebasepro/app";
9
9
  import { FilterFieldBinding } from "../SelectableTable/filters/FilterFieldBinding";
10
10
 
11
+ /**
12
+ * `WhereFilterOp` is declared twice: once in `@rebasepro/types` as the canonical
13
+ * operator set every driver translates, and once in `@rebasepro/ui` for the
14
+ * table's own props. That is deliberate — `ui` is a standalone design system and
15
+ * depends on no Rebase package, so it cannot import the canonical one (and a
16
+ * type-only import would not help: `ui` emits declarations with `tsc`, which
17
+ * references external types rather than inlining them, so its published `.d.ts`
18
+ * would demand `@rebasepro/types` from every consumer).
19
+ *
20
+ * This file is where the two meet and get cast into each other, so it is where
21
+ * their agreement is checked. Adding an operator to one and not the other stops
22
+ * this line compiling instead of silently producing a filter the table can build
23
+ * and no driver can run — or one a driver supports and the table cannot offer.
24
+ */
25
+ type MutuallyAssignable<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;
26
+ const _whereFilterOpDefinitionsAgree: MutuallyAssignable<WhereFilterOp, VirtualTableWhereFilterOp> = true;
27
+ void _whereFilterOpDefinitionsAgree;
28
+
11
29
  export interface FiltersDialogProps {
12
30
  open: boolean;
13
31
  onOpenChange: (open: boolean) => void;