@rebasepro/admin 0.8.0 → 0.9.1-canary.09aaf62

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 (408) hide show
  1. package/README.md +26 -26
  2. package/dist/{CollectionEditorDialog-BO_aQ-Z4.js → CollectionEditorDialog-DbPpDDwb.js} +40 -18
  3. package/dist/CollectionEditorDialog-DbPpDDwb.js.map +1 -0
  4. package/dist/{PropertyEditView-DKzOpMjR.js → PropertyEditView-DfJbZ67t.js} +81 -73
  5. package/dist/PropertyEditView-DfJbZ67t.js.map +1 -0
  6. package/dist/{RouterCollectionsStudioView-BQTIExjA.js → RouterCollectionsStudioView-C6XQ7Il5.js} +5 -5
  7. package/dist/RouterCollectionsStudioView-C6XQ7Il5.js.map +1 -0
  8. package/dist/collection_editor/_cms_internals.d.ts +3 -3
  9. package/dist/collection_editor/api/generateCollectionApi.d.ts +8 -8
  10. package/dist/collection_editor/extensibility_types.d.ts +3 -3
  11. package/dist/collection_editor/index.d.ts +2 -2
  12. package/dist/collection_editor/pgColumnToProperty.d.ts +3 -3
  13. package/dist/collection_editor/serializable_types.d.ts +7 -7
  14. package/dist/collection_editor/serializable_utils.d.ts +8 -8
  15. package/dist/collection_editor/types/collection_editor_controller.d.ts +5 -5
  16. package/dist/collection_editor/types/collection_inference.d.ts +2 -2
  17. package/dist/collection_editor/types/config_controller.d.ts +7 -7
  18. package/dist/collection_editor/ui/AddKanbanColumnAction.d.ts +2 -2
  19. package/dist/collection_editor/ui/CollectionViewHeaderAction.d.ts +2 -2
  20. package/dist/collection_editor/ui/KanbanSetupAction.d.ts +2 -2
  21. package/dist/collection_editor/ui/PropertyAddColumnComponent.d.ts +2 -2
  22. package/dist/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.d.ts +3 -3
  23. package/dist/collection_editor/ui/collection_editor/CollectionDetailsForm.d.ts +2 -2
  24. package/dist/collection_editor/ui/collection_editor/CollectionEditorDialog.d.ts +4 -4
  25. package/dist/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.d.ts +2 -2
  26. package/dist/collection_editor/ui/collection_editor/CollectionJsonImportDialog.d.ts +2 -2
  27. package/dist/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +4 -4
  28. package/dist/collection_editor/ui/collection_editor/CollectionStudioView.d.ts +2 -2
  29. package/dist/collection_editor/ui/collection_editor/CollectionsStudioView.d.ts +2 -2
  30. package/dist/collection_editor/ui/collection_editor/EntityActionsEditTab.d.ts +2 -2
  31. package/dist/collection_editor/ui/collection_editor/GeneralSettingsForm.d.ts +2 -2
  32. package/dist/collection_editor/ui/collection_editor/GetCodeDialog.d.ts +2 -2
  33. package/dist/collection_editor/ui/collection_editor/PropertyEditView.d.ts +5 -5
  34. package/dist/collection_editor/ui/collection_editor/SubcollectionsEditTab.d.ts +3 -3
  35. package/dist/collection_editor/ui/collection_editor/SwitchControl.d.ts +1 -1
  36. package/dist/collection_editor/ui/collection_editor/templates/blog_template.d.ts +2 -2
  37. package/dist/collection_editor/ui/collection_editor/templates/pages_template.d.ts +2 -2
  38. package/dist/collection_editor/ui/collection_editor/templates/products_template.d.ts +2 -2
  39. package/dist/collection_editor/ui/collection_editor/templates/users_template.d.ts +2 -2
  40. package/dist/collection_editor/useLocalCollectionsConfigController.d.ts +2 -2
  41. package/dist/collection_editor/useSafeSnackbarController.d.ts +1 -1
  42. package/dist/collection_editor/validateCollectionJson.d.ts +2 -2
  43. package/dist/collection_editor_ui.js +5 -5
  44. package/dist/collection_editor_ui.js.map +1 -1
  45. package/dist/components/CollectionPanel.d.ts +4 -4
  46. package/dist/components/{EntityCollectionTable/EntityCollectionRowActions.d.ts → CollectionTableBinding/CollectionRowActions.d.ts} +3 -3
  47. package/dist/components/CollectionTableBinding/CollectionTableBinding.d.ts +28 -0
  48. package/dist/components/{EntityCollectionTable/EntityCollectionTableProps.d.ts → CollectionTableBinding/CollectionTableBindingProps.d.ts} +2 -2
  49. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableMultipleRelationField.d.ts +2 -2
  50. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableReferenceField.d.ts +2 -2
  51. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationField.d.ts +2 -2
  52. package/dist/components/CollectionTableBinding/index.d.ts +6 -0
  53. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCell.d.ts +1 -1
  54. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/common.d.ts +2 -2
  55. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/PopupFormField.d.ts +3 -3
  56. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/table_bindings.d.ts +1 -1
  57. package/dist/components/{EntityCollectionView/EntityBoardCard.d.ts → CollectionViewBinding/BoardCardBinding.d.ts} +8 -8
  58. package/dist/components/{EntityCollectionView/EntityCollectionBoardView.d.ts → CollectionViewBinding/CollectionBoardViewBinding.d.ts} +4 -4
  59. package/dist/components/{EntityCollectionView/EntityCollectionCardView.d.ts → CollectionViewBinding/CollectionCardViewBinding.d.ts} +5 -5
  60. package/dist/components/{EntityCollectionView/EntityCollectionListView.d.ts → CollectionViewBinding/CollectionListViewBinding.d.ts} +4 -4
  61. package/dist/components/{EntityCollectionView/EntityCollectionViewActions.d.ts → CollectionViewBinding/CollectionViewActions.d.ts} +4 -4
  62. package/dist/components/{EntityCollectionView/EntityCollectionView.d.ts → CollectionViewBinding/CollectionViewBinding.d.ts} +4 -4
  63. package/dist/components/{EntityCollectionView/EntityCollectionViewStartActions.d.ts → CollectionViewBinding/CollectionViewStartActions.d.ts} +4 -4
  64. package/dist/components/CollectionViewBinding/EntityCardBinding.d.ts +21 -0
  65. package/dist/components/{EntityCollectionView → CollectionViewBinding}/SplitListView.d.ts +3 -3
  66. package/dist/components/{EntityCollectionView → CollectionViewBinding}/hooks/useCollectionInlineEditor.d.ts +3 -3
  67. package/dist/components/{EntityCollectionView → CollectionViewBinding}/hooks/useKanbanDragAndDrop.d.ts +2 -2
  68. package/dist/components/{EntityCollectionView → CollectionViewBinding}/useBoardDataController.d.ts +2 -2
  69. package/dist/components/{EntityCollectionView/useEntityPreviewSlots.d.ts → CollectionViewBinding/usePreviewSlots.d.ts} +5 -5
  70. package/dist/components/DeleteEntityDialog.d.ts +4 -4
  71. package/dist/components/{EntityDetailView.d.ts → DetailViewBinding.d.ts} +5 -5
  72. package/dist/components/EditFormActions.d.ts +3 -0
  73. package/dist/components/{EntityEditView.d.ts → EditViewBinding.d.ts} +9 -9
  74. package/dist/components/{EntityPreview.d.ts → EntityPreviewBinding.d.ts} +13 -13
  75. package/dist/components/EntityViewBinding.d.ts +13 -0
  76. package/dist/components/{EntityJsonPreview.d.ts → JsonPreviewBinding.d.ts} +1 -1
  77. package/dist/components/{RebaseCMS.d.ts → RebaseAdmin.d.ts} +2 -2
  78. package/dist/components/RebaseLayout.d.ts +5 -4
  79. package/dist/components/RebaseNavigation.d.ts +1 -1
  80. package/dist/components/RebaseShell.d.ts +1 -0
  81. package/dist/components/ReferenceTable/{EntitySelectionTable.d.ts → SelectionTableBinding.d.ts} +5 -5
  82. package/dist/components/SelectableTable/SelectableTable.d.ts +6 -6
  83. package/dist/components/SelectableTable/SelectableTableContext.d.ts +3 -3
  84. package/dist/components/SelectableTable/SelectionStore.d.ts +2 -2
  85. package/dist/components/SelectableTable/filters/BooleanFilterField.d.ts +6 -1
  86. package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +7 -1
  87. package/dist/components/SelectableTable/filters/FilterFieldBinding.d.ts +40 -0
  88. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +7 -1
  89. package/dist/components/SelectableTable/filters/RelationFilterField.d.ts +7 -1
  90. package/dist/components/SelectableTable/filters/StringNumberFilterField.d.ts +7 -1
  91. package/dist/components/SideDialogs.d.ts +1 -1
  92. package/dist/components/SidePanelBinding.d.ts +11 -0
  93. package/dist/components/{SideEntityProvider.d.ts → SidePanelProvider.d.ts} +7 -7
  94. package/dist/components/history/EntityHistoryEntry.d.ts +2 -2
  95. package/dist/components/history/LastEditedByIndicator.d.ts +2 -2
  96. package/dist/components/index.d.ts +15 -14
  97. package/dist/contexts/SidePanelControllerContext.d.ts +3 -0
  98. package/dist/data_export/export/ExportCollectionAction.d.ts +3 -3
  99. package/dist/data_import/components/ImportSaveInProgress.d.ts +2 -2
  100. package/dist/editor.js +1 -1
  101. package/dist/editor.js.map +1 -1
  102. package/dist/form/EntityForm.d.ts +1 -1
  103. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  104. package/dist/form/components/LocalChangesMenu.d.ts +1 -1
  105. package/dist/form/components/StorageUploadProgress.d.ts +1 -1
  106. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +1 -1
  107. package/dist/form/form_utils.d.ts +2 -2
  108. package/dist/{history-B3cqBzEV.js → history-GSa4BgDt.js} +7 -7
  109. package/dist/history-GSa4BgDt.js.map +1 -0
  110. package/dist/hooks/index.d.ts +4 -4
  111. package/dist/hooks/navigation/contexts/CollectionRegistryContext.d.ts +2 -2
  112. package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +5 -5
  113. package/dist/hooks/navigation/useNavigationResolution.d.ts +4 -4
  114. package/dist/hooks/navigation/useResolvedCollections.d.ts +7 -7
  115. package/dist/hooks/navigation/useTopLevelNavigation.d.ts +2 -2
  116. package/dist/hooks/navigation/utils.d.ts +5 -5
  117. package/dist/hooks/useBuildSidePanel.d.ts +6 -0
  118. package/dist/hooks/useCMSContext.d.ts +2 -2
  119. package/dist/hooks/{useEntityHistory.d.ts → useHistory.d.ts} +1 -1
  120. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  121. package/dist/hooks/{useEntitySelectionDialog.d.ts → useSelectionDialog.d.ts} +2 -2
  122. package/dist/hooks/useSideDialogsController.d.ts +1 -1
  123. package/dist/hooks/useSidePanel.d.ts +11 -0
  124. package/dist/index.d.ts +2 -2
  125. package/dist/index.js +2 -2
  126. package/dist/{src-cxV1ODRG.js → src-B8WuGSPZ.js} +886 -692
  127. package/dist/src-B8WuGSPZ.js.map +1 -0
  128. package/dist/types/components/EntityFormActionsProps.d.ts +2 -2
  129. package/dist/types/components/EntityFormProps.d.ts +3 -3
  130. package/dist/types/components/formex.d.ts +1 -1
  131. package/dist/types/fields.d.ts +2 -2
  132. package/dist/util/dataControllerAdapter.d.ts +2 -5
  133. package/dist/util/navigation_utils.d.ts +6 -6
  134. package/dist/util/previews.d.ts +3 -3
  135. package/dist/util/property_utils.d.ts +2 -2
  136. package/dist/util/{entity_view_constants.d.ts → view_constants.d.ts} +1 -1
  137. package/package.json +12 -17
  138. package/src/collection_editor/ConfigControllerProvider.tsx +11 -11
  139. package/src/collection_editor/_cms_internals.ts +3 -3
  140. package/src/collection_editor/api/generateCollectionApi.ts +8 -8
  141. package/src/collection_editor/extensibility_types.ts +3 -3
  142. package/src/collection_editor/index.ts +3 -3
  143. package/src/collection_editor/pgColumnToProperty.ts +3 -3
  144. package/src/collection_editor/serializable_types.ts +8 -8
  145. package/src/collection_editor/serializable_utils.ts +17 -17
  146. package/src/collection_editor/types/collection_editor_controller.tsx +5 -5
  147. package/src/collection_editor/types/collection_inference.ts +2 -2
  148. package/src/collection_editor/types/config_controller.tsx +7 -7
  149. package/src/collection_editor/ui/AddKanbanColumnAction.tsx +3 -3
  150. package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +3 -3
  151. package/src/collection_editor/ui/EditorCollectionAction.tsx +3 -3
  152. package/src/collection_editor/ui/EditorCollectionActionStart.tsx +3 -3
  153. package/src/collection_editor/ui/EditorEntityAction.tsx +3 -3
  154. package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +1 -1
  155. package/src/collection_editor/ui/KanbanSetupAction.tsx +3 -3
  156. package/src/collection_editor/ui/MissingReferenceWidget.tsx +1 -1
  157. package/src/collection_editor/ui/NewCollectionButton.tsx +1 -1
  158. package/src/collection_editor/ui/NewCollectionCard.tsx +1 -1
  159. package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +3 -3
  160. package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +6 -6
  161. package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +6 -6
  162. package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +29 -29
  163. package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +5 -5
  164. package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +2 -2
  165. package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +10 -10
  166. package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +38 -7
  167. package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +3 -3
  168. package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +3 -3
  169. package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +3 -3
  170. package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +4 -4
  171. package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +5 -5
  172. package/src/collection_editor/ui/collection_editor/EntityActionsSelectDialog.tsx +1 -1
  173. package/src/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +1 -1
  174. package/src/collection_editor/ui/collection_editor/EnumForm.tsx +2 -2
  175. package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +7 -7
  176. package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +5 -5
  177. package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +4 -4
  178. package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +9 -9
  179. package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +46 -37
  180. package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +2 -2
  181. package/src/collection_editor/ui/collection_editor/RouterCollectionStudioView.tsx +1 -1
  182. package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +7 -7
  183. package/src/collection_editor/ui/collection_editor/SwitchControl.tsx +1 -1
  184. package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +4 -4
  185. package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +4 -4
  186. package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +1 -1
  187. package/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx +1 -1
  188. package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +2 -2
  189. package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +2 -2
  190. package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +2 -2
  191. package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +2 -2
  192. package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +2 -2
  193. package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +2 -2
  194. package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +2 -2
  195. package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +3 -3
  196. package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +1 -1
  197. package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +2 -2
  198. package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +2 -2
  199. package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +1 -1
  200. package/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx +1 -1
  201. package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +1 -1
  202. package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +1 -1
  203. package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +1 -1
  204. package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +2 -2
  205. package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +2 -2
  206. package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +2 -2
  207. package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +2 -2
  208. package/src/collection_editor/ui/collection_editor/templates/blog_template.ts +2 -2
  209. package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +2 -2
  210. package/src/collection_editor/ui/collection_editor/templates/products_template.ts +2 -2
  211. package/src/collection_editor/ui/collection_editor/templates/users_template.ts +2 -2
  212. package/src/collection_editor/useJsonCollectionsConfigController.tsx +13 -13
  213. package/src/collection_editor/useLocalCollectionsConfigController.tsx +4 -4
  214. package/src/collection_editor/useSafeSnackbarController.ts +1 -1
  215. package/src/collection_editor/validateCollectionJson.ts +3 -3
  216. package/src/components/AdminModeSyncer.tsx +1 -1
  217. package/src/components/ArrayContainer.tsx +1 -1
  218. package/src/components/ClearFilterSortButton.tsx +1 -1
  219. package/src/components/CollectionPanel.tsx +14 -17
  220. package/src/components/{EntityCollectionTable/EntityCollectionRowActions.tsx → CollectionTableBinding/CollectionRowActions.tsx} +8 -8
  221. package/src/components/{EntityCollectionTable/EntityCollectionTable.tsx → CollectionTableBinding/CollectionTableBinding.tsx} +13 -13
  222. package/src/components/{EntityCollectionTable/EntityCollectionTableProps.tsx → CollectionTableBinding/CollectionTableBindingProps.tsx} +2 -2
  223. package/src/components/{EntityCollectionTable → CollectionTableBinding}/PropertyTableCell.tsx +1 -1
  224. package/src/components/{EntityCollectionTable → CollectionTableBinding}/column_utils.tsx +1 -1
  225. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableMultipleRelationField.tsx +7 -7
  226. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableReferenceField.tsx +10 -10
  227. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationField.tsx +7 -7
  228. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableStorageUpload.tsx +1 -1
  229. package/src/components/CollectionTableBinding/index.tsx +14 -0
  230. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/CollectionTableToolbar.tsx +1 -1
  231. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCell.tsx +2 -2
  232. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCellActions.tsx +1 -1
  233. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/common.tsx +2 -2
  234. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/PopupFormField.tsx +6 -6
  235. package/src/components/{EntityCollectionTable → CollectionTableBinding}/table_bindings.tsx +1 -1
  236. package/src/components/{EntityCollectionView/EntityBoardCard.tsx → CollectionViewBinding/BoardCardBinding.tsx} +17 -17
  237. package/src/components/{EntityCollectionView/EntityCollectionBoardView.tsx → CollectionViewBinding/CollectionBoardViewBinding.tsx} +17 -16
  238. package/src/components/{EntityCollectionView/EntityCollectionCardView.tsx → CollectionViewBinding/CollectionCardViewBinding.tsx} +9 -9
  239. package/src/components/{EntityCollectionView/EntityCollectionListView.tsx → CollectionViewBinding/CollectionListViewBinding.tsx} +15 -15
  240. package/src/components/{EntityCollectionView/EntityCollectionViewActions.tsx → CollectionViewBinding/CollectionViewActions.tsx} +7 -7
  241. package/src/components/{EntityCollectionView/EntityCollectionView.tsx → CollectionViewBinding/CollectionViewBinding.tsx} +107 -92
  242. package/src/components/{EntityCollectionView/EntityCollectionViewStartActions.tsx → CollectionViewBinding/CollectionViewStartActions.tsx} +6 -6
  243. package/src/components/{EntityCollectionView/EntityCard.tsx → CollectionViewBinding/EntityCardBinding.tsx} +12 -12
  244. package/src/components/{EntityCollectionView → CollectionViewBinding}/FiltersDialog.tsx +49 -72
  245. package/src/components/{EntityCollectionView → CollectionViewBinding}/SplitListView.tsx +10 -10
  246. package/src/components/{EntityCollectionView → CollectionViewBinding}/ViewModeToggle.tsx +1 -1
  247. package/src/components/{EntityCollectionView → CollectionViewBinding}/hooks/useCollectionInlineEditor.ts +6 -6
  248. package/src/components/{EntityCollectionView → CollectionViewBinding}/hooks/useKanbanDragAndDrop.ts +5 -5
  249. package/src/components/{EntityCollectionView → CollectionViewBinding}/useBoardDataController.tsx +25 -13
  250. package/src/components/{EntityCollectionView/useEntityPreviewSlots.ts → CollectionViewBinding/usePreviewSlots.ts} +9 -9
  251. package/src/components/DefaultAppBar.tsx +3 -3
  252. package/src/components/DefaultDrawer.tsx +3 -3
  253. package/src/components/DeleteEntityDialog.tsx +7 -7
  254. package/src/components/{EntityDetailView.tsx → DetailViewBinding.tsx} +28 -31
  255. package/src/components/DrawerNavigationGroup.tsx +2 -2
  256. package/src/components/{EntityEditViewFormActions.tsx → EditFormActions.tsx} +16 -16
  257. package/src/components/{EntityEditView.tsx → EditViewBinding.tsx} +34 -37
  258. package/src/components/{EntityPreview.tsx → EntityPreviewBinding.tsx} +30 -30
  259. package/src/components/{EntityView.tsx → EntityViewBinding.tsx} +7 -7
  260. package/src/components/HomePage/ContentHomePage.tsx +4 -4
  261. package/src/components/HomePage/FavouritesView.tsx +1 -1
  262. package/src/components/HomePage/NavigationCardBinding.tsx +4 -4
  263. package/src/components/HomePage/NavigationGroup.tsx +1 -1
  264. package/src/components/HomePage/RenameGroupDialog.tsx +1 -1
  265. package/src/components/{EntityJsonPreview.tsx → JsonPreviewBinding.tsx} +2 -2
  266. package/src/components/{RebaseCMS.tsx → RebaseAdmin.tsx} +6 -5
  267. package/src/components/RebaseAuthGate.tsx +2 -2
  268. package/src/components/RebaseLayout.tsx +7 -13
  269. package/src/components/RebaseNavigation.tsx +35 -11
  270. package/src/components/RebaseRouteDefs.tsx +2 -2
  271. package/src/components/RebaseShell.tsx +2 -1
  272. package/src/components/ReferenceTable/{EntitySelectionTable.tsx → SelectionTableBinding.tsx} +27 -24
  273. package/src/components/ReferenceWidget.tsx +4 -4
  274. package/src/components/RelationSelector.tsx +15 -13
  275. package/src/components/SearchIconsView.tsx +2 -2
  276. package/src/components/SelectableTable/SelectableTable.tsx +35 -88
  277. package/src/components/SelectableTable/SelectableTableContext.tsx +3 -3
  278. package/src/components/SelectableTable/SelectionStore.ts +4 -4
  279. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +10 -2
  280. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +34 -13
  281. package/src/components/SelectableTable/filters/FilterFieldBinding.tsx +187 -0
  282. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +22 -8
  283. package/src/components/SelectableTable/filters/RelationFilterField.tsx +17 -3
  284. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +67 -13
  285. package/src/components/SideDialogs.tsx +4 -4
  286. package/src/components/{EntitySidePanel.tsx → SidePanelBinding.tsx} +20 -20
  287. package/src/components/{SideEntityProvider.tsx → SidePanelProvider.tsx} +17 -17
  288. package/src/components/UserSelector.tsx +1 -1
  289. package/src/components/admin/CreationResultDialog.tsx +6 -3
  290. package/src/components/app/Scaffold.tsx +6 -2
  291. package/src/components/common/default_entity_actions.tsx +132 -34
  292. package/src/components/field_configs.tsx +1 -1
  293. package/src/components/history/EntityHistoryEntry.tsx +3 -3
  294. package/src/components/history/EntityHistoryView.tsx +7 -7
  295. package/src/components/history/LastEditedByIndicator.tsx +4 -4
  296. package/src/components/index.ts +16 -15
  297. package/src/contexts/SidePanelControllerContext.tsx +5 -0
  298. package/src/data_export/export/BasicExportAction.tsx +1 -1
  299. package/src/data_export/export/ExportCollectionAction.tsx +5 -5
  300. package/src/data_import/components/DataNewPropertiesMapping.tsx +1 -1
  301. package/src/data_import/components/ImportFileUpload.tsx +1 -1
  302. package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +1 -1
  303. package/src/data_import/components/ImportSaveInProgress.tsx +4 -4
  304. package/src/data_import/import/ImportCollectionAction.tsx +6 -6
  305. package/src/data_import/utils/data.ts +4 -4
  306. package/src/data_import/utils/get_properties_mapping.ts +1 -1
  307. package/src/editor/components/image-bubble.tsx +1 -1
  308. package/src/editor/components/table-bubble.tsx +1 -1
  309. package/src/editor/editor.tsx +1 -1
  310. package/src/editor/selectors/link-selector.tsx +1 -1
  311. package/src/editor/selectors/node-selector.tsx +1 -1
  312. package/src/form/EntityForm.tsx +6 -6
  313. package/src/form/EntityFormActions.tsx +4 -4
  314. package/src/form/EntityFormBinding.tsx +10 -10
  315. package/src/form/PropertyFieldBinding.tsx +7 -7
  316. package/src/form/components/ErrorFocus.tsx +1 -1
  317. package/src/form/components/LocalChangesMenu.tsx +3 -3
  318. package/src/form/components/StorageItemPreview.tsx +1 -1
  319. package/src/form/components/StorageUploadProgress.tsx +3 -3
  320. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +1 -1
  321. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +5 -5
  322. package/src/form/field_bindings/BlockFieldBinding.tsx +2 -2
  323. package/src/form/field_bindings/DateTimeFieldBinding.tsx +1 -1
  324. package/src/form/field_bindings/KeyValueFieldBinding.tsx +21 -21
  325. package/src/form/field_bindings/MapFieldBinding.tsx +1 -1
  326. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +2 -2
  327. package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +3 -3
  328. package/src/form/field_bindings/ReferenceFieldBinding.tsx +7 -7
  329. package/src/form/field_bindings/RelationFieldBinding.tsx +4 -4
  330. package/src/form/field_bindings/RepeatFieldBinding.tsx +1 -1
  331. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +3 -3
  332. package/src/form/form_utils.ts +3 -3
  333. package/src/hooks/index.ts +4 -4
  334. package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +2 -2
  335. package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +11 -11
  336. package/src/hooks/navigation/useBuildNavigationStateController.tsx +5 -5
  337. package/src/hooks/navigation/useNavigationResolution.ts +28 -13
  338. package/src/hooks/navigation/useResolvedCollections.ts +8 -8
  339. package/src/hooks/navigation/useTopLevelNavigation.ts +2 -2
  340. package/src/hooks/navigation/utils.ts +5 -5
  341. package/src/hooks/{useBuildSideEntityController.tsx → useBuildSidePanel.tsx} +29 -29
  342. package/src/hooks/useCMSContext.tsx +7 -7
  343. package/src/hooks/{useEntityHistory.ts → useHistory.ts} +2 -2
  344. package/src/hooks/useResolvedNavigationFrom.tsx +10 -5
  345. package/src/hooks/{useEntitySelectionDialog.tsx → useSelectionDialog.tsx} +7 -7
  346. package/src/hooks/useSideDialogsController.tsx +1 -1
  347. package/src/hooks/useSidePanel.tsx +13 -0
  348. package/src/index.ts +15 -15
  349. package/src/preview/PropertyPreview.tsx +2 -2
  350. package/src/preview/components/DatePreview.tsx +1 -1
  351. package/src/preview/components/EnumValuesChip.tsx +1 -1
  352. package/src/preview/components/ImagePreview.tsx +1 -1
  353. package/src/preview/components/ReferencePreview.tsx +11 -11
  354. package/src/preview/components/RelationPreview.tsx +13 -12
  355. package/src/preview/components/StorageThumbnail.tsx +1 -1
  356. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +1 -1
  357. package/src/preview/property_previews/ArrayOneOfPreview.tsx +1 -1
  358. package/src/preview/property_previews/ArrayPropertyPreview.tsx +1 -1
  359. package/src/routes/RebaseRoute.tsx +12 -12
  360. package/src/types/components/EntityFormActionsProps.tsx +2 -2
  361. package/src/types/components/EntityFormProps.tsx +3 -3
  362. package/src/types/components/formex.tsx +1 -1
  363. package/src/types/fields.tsx +2 -2
  364. package/src/util/dataControllerAdapter.ts +9 -15
  365. package/src/util/navigation_utils.ts +7 -7
  366. package/src/util/previews.ts +7 -5
  367. package/src/util/property_utils.tsx +2 -2
  368. package/src/util/{entity_view_constants.ts → view_constants.ts} +1 -1
  369. package/dist/CollectionEditorDialog-BO_aQ-Z4.js.map +0 -1
  370. package/dist/PropertyEditView-DKzOpMjR.js.map +0 -1
  371. package/dist/RouterCollectionsStudioView-BQTIExjA.js.map +0 -1
  372. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +0 -28
  373. package/dist/components/EntityCollectionTable/index.d.ts +0 -6
  374. package/dist/components/EntityCollectionView/EntityCard.d.ts +0 -21
  375. package/dist/components/EntityEditViewFormActions.d.ts +0 -3
  376. package/dist/components/EntitySidePanel.d.ts +0 -11
  377. package/dist/components/EntityView.d.ts +0 -13
  378. package/dist/contexts/SideEntityControllerContext.d.ts +0 -3
  379. package/dist/history-B3cqBzEV.js.map +0 -1
  380. package/dist/hooks/useBuildSideEntityController.d.ts +0 -6
  381. package/dist/hooks/useSideEntityController.d.ts +0 -11
  382. package/dist/src-cxV1ODRG.js.map +0 -1
  383. package/src/components/EntityCollectionTable/index.tsx +0 -14
  384. package/src/contexts/SideEntityControllerContext.tsx +0 -5
  385. package/src/hooks/useSideEntityController.tsx +0 -13
  386. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/PropertyTableCell.d.ts +0 -0
  387. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/column_utils.d.ts +0 -0
  388. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationSelectorField.d.ts +0 -0
  389. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableStorageUpload.d.ts +0 -0
  390. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableSelect.d.ts +0 -0
  391. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableUserSelect.d.ts +0 -0
  392. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/CollectionTableToolbar.d.ts +0 -0
  393. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCellActions.d.ts +0 -0
  394. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useDraggable.d.ts +0 -0
  395. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useWindowSize.d.ts +0 -0
  396. /package/dist/components/{EntityCollectionView → CollectionViewBinding}/FilterPresetsButton.d.ts +0 -0
  397. /package/dist/components/{EntityCollectionView → CollectionViewBinding}/FiltersDialog.d.ts +0 -0
  398. /package/dist/components/{EntityCollectionView → CollectionViewBinding}/ViewModeToggle.d.ts +0 -0
  399. /package/dist/components/{EntityCollectionView → CollectionViewBinding}/useSelectionController.d.ts +0 -0
  400. /package/dist/components/{EntityCollectionView → CollectionViewBinding}/utils.d.ts +0 -0
  401. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationSelectorField.tsx +0 -0
  402. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableSelect.tsx +0 -0
  403. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableUserSelect.tsx +0 -0
  404. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useDraggable.tsx +0 -0
  405. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useWindowSize.tsx +0 -0
  406. /package/src/components/{EntityCollectionView → CollectionViewBinding}/FilterPresetsButton.tsx +0 -0
  407. /package/src/components/{EntityCollectionView → CollectionViewBinding}/useSelectionController.tsx +0 -0
  408. /package/src/components/{EntityCollectionView → CollectionViewBinding}/utils.ts +0 -0
@@ -4,12 +4,27 @@ import React, { useCallback, useMemo, useState } from "react";
4
4
  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
- import { StringNumberFilterField } from "../SelectableTable/filters/StringNumberFilterField";
8
- import { BooleanFilterField } from "../SelectableTable/filters/BooleanFilterField";
9
- import { DateTimeFilterField } from "../SelectableTable/filters/DateTimeFilterField";
10
- import { ReferenceFilterField } from "../SelectableTable/filters/ReferenceFilterField";
11
- import { enumToObjectEntries } from "@rebasepro/common";
12
- import { useTranslation } from "@rebasepro/core";
7
+ import { resolveFilterOperators } from "@rebasepro/common";
8
+ import { useCollectionScope, useTranslation } from "@rebasepro/app";
9
+ import { FilterFieldBinding } from "../SelectableTable/filters/FilterFieldBinding";
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;
13
28
 
14
29
  export interface FiltersDialogProps {
15
30
  open: boolean;
@@ -33,6 +48,9 @@ export function FiltersDialog({
33
48
  fixedFilter
34
49
  }: FiltersDialogProps) {
35
50
  const { t } = useTranslation();
51
+ // Engine of the collection this dialog filters — read from the
52
+ // surrounding CollectionScopeProvider mounted by the collection view.
53
+ const engine = useCollectionScope()?.engine;
36
54
  // Local state for filters being edited
37
55
  const [localFilters, setLocalFilters] = useState<FilterValues<any>>(filterValues ?? {});
38
56
 
@@ -52,12 +70,17 @@ export function FiltersDialog({
52
70
  if (!property) return false;
53
71
  // Force filter properties should not be editable
54
72
  if (fixedFilter && key in fixedFilter) return false;
55
- // Check if property type is filterable
56
- const baseProperty = property.type === "array" ? property.of : property;
57
- if (!baseProperty || Array.isArray(baseProperty)) return false;
58
- return ["string", "number", "boolean", "date", "reference"].includes(baseProperty.type);
73
+ const isArray = property.type === "array";
74
+ const ofProp = isArray && "of" in property ? property.of : undefined;
75
+ const baseProperty = isArray ? (Array.isArray(ofProp) ? ofProp[0] : ofProp) as Property | undefined : property;
76
+ if (!baseProperty) return false;
77
+ // A property is filterable when it has a custom filter field, or
78
+ // when at least one operator survives the engine ∩ type ∩
79
+ // property-narrowing resolution.
80
+ if (baseProperty.ui?.Filter) return true;
81
+ return resolveFilterOperators({ property: baseProperty, isArray, engine }).length > 0;
59
82
  });
60
- }, [properties, fixedFilter]);
83
+ }, [properties, fixedFilter, engine]);
61
84
 
62
85
  const handleFilterChange = useCallback((propertyKey: string, value?: [VirtualTableWhereFilterOp, any]) => {
63
86
  setLocalFilters(prev => {
@@ -94,67 +117,21 @@ export function FiltersDialog({
94
117
  const activeFilterCount = Object.keys(localFilters).length;
95
118
 
96
119
  const renderFilterField = useCallback((propertyKey: string, property: Property) => {
97
- const isArray = property.type === "array";
98
- const ofProp = isArray && "of" in property ? property.of : undefined;
99
- const baseProperty: Property | undefined = isArray ? (Array.isArray(ofProp) ? ofProp[0] : ofProp) as Property | undefined : property;
100
-
101
- if (!baseProperty) return null;
102
-
103
- const filterValue = localFilters[propertyKey] as [VirtualTableWhereFilterOp, any] | undefined;
104
- const setValue = (value?: [VirtualTableWhereFilterOp, any]) => handleFilterChange(propertyKey, value);
105
-
106
- if (baseProperty.type === "reference") {
107
- return (
108
- <ReferenceFilterField
109
- value={filterValue}
110
- setValue={setValue}
111
- name={propertyKey}
112
- isArray={isArray}
113
- path={baseProperty.path}
114
- title={property.name}
115
- includeId={baseProperty.includeId}
116
- previewProperties={baseProperty.ui?.previewProperties}
117
- hidden={hiddenFields[propertyKey] ?? false}
118
- setHidden={(hidden) => setHiddenForField(propertyKey, hidden)}
119
- />
120
- );
121
- } else if (baseProperty.type === "number" || baseProperty.type === "string") {
122
- const enumValues = baseProperty.enum ? enumToObjectEntries(baseProperty.enum) : undefined;
123
- return (
124
- <StringNumberFilterField
125
- value={filterValue}
126
- setValue={setValue}
127
- name={propertyKey}
128
- type={baseProperty.type}
129
- isArray={isArray}
130
- enumValues={enumValues}
131
- title={property.name}
132
- />
133
- );
134
- } else if (baseProperty.type === "boolean") {
135
- return (
136
- <BooleanFilterField
137
- value={filterValue}
138
- setValue={setValue}
139
- name={propertyKey}
140
- title={property.name}
141
- />
142
- );
143
- } else if (baseProperty.type === "date") {
144
- return (
145
- <DateTimeFilterField
146
- value={filterValue}
147
- setValue={setValue}
148
- name={propertyKey}
149
- mode={baseProperty.mode}
150
- isArray={isArray}
151
- title={property.name}
152
- />
153
- );
154
- }
155
-
156
- return null;
157
- }, [localFilters, handleFilterChange, hiddenFields, setHiddenForField]);
120
+ const filterValue = localFilters[propertyKey] as [WhereFilterOp, any] | undefined;
121
+ const setValue = (value?: [WhereFilterOp, any]) => handleFilterChange(propertyKey, value as [VirtualTableWhereFilterOp, any] | undefined);
122
+
123
+ return (
124
+ <FilterFieldBinding
125
+ propertyKey={propertyKey}
126
+ property={property}
127
+ engine={engine}
128
+ value={filterValue}
129
+ setValue={setValue}
130
+ hidden={hiddenFields[propertyKey] ?? false}
131
+ setHidden={(hidden) => setHiddenForField(propertyKey, hidden)}
132
+ />
133
+ );
134
+ }, [localFilters, handleFilterChange, hiddenFields, setHiddenForField, engine]);
158
135
 
159
136
  return (
160
137
  <Dialog
@@ -1,21 +1,21 @@
1
- import type { EntityCollection } from "@rebasepro/types";
1
+ import type { CollectionConfig } from "@rebasepro/types";
2
2
  import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
3
  import { CollectionSize, Entity, EntityTableController, SelectionController } from "@rebasepro/types";
4
- import { EntityEditView } from "../EntityEditView";
5
- import { EntityDetailView } from "../EntityDetailView";
4
+ import { EditViewBinding } from "../EditViewBinding";
5
+ import { DetailViewBinding } from "../DetailViewBinding";
6
6
  import {
7
7
  cls,
8
8
  defaultBorderMixin,
9
9
  ResizablePanels
10
10
  } from "@rebasepro/ui";
11
- import { useLargeLayout } from "@rebasepro/core";
11
+ import { useLargeLayout } from "@rebasepro/app";
12
12
  import { useCollectionRegistryController } from "../../index";
13
13
  import { useNavigate, useLocation } from "react-router-dom";
14
14
  import { useUrlController } from "../../index";
15
15
  import { ErrorBoundary } from "@rebasepro/ui";
16
16
 
17
17
  export type SplitListViewProps<M extends Record<string, unknown> = Record<string, unknown>> = {
18
- collection: EntityCollection<M>;
18
+ collection: CollectionConfig<M>;
19
19
  tableController: EntityTableController<M>;
20
20
  onEntityClick?: (entity: Entity<M>) => void;
21
21
  onNewClick?: () => void;
@@ -84,7 +84,7 @@ function savePanelSize(path: string, size: number) {
84
84
  * State management:
85
85
  * - The selected entity is driven by the URL path (e.g. /c/authors/14).
86
86
  * `selectedEntityId` comes from props via RebaseRoute, NOT from internal state.
87
- * - Clicking an entity navigates to /c/authors/{id} via the standard onEntityClick handler.
87
+ * - Clicking a entity navigates to /c/authors/{id} via the standard onEntityClick handler.
88
88
  * - Closing the detail navigates back to /c/authors.
89
89
  */
90
90
  export function SplitListView<M extends Record<string, unknown> = Record<string, unknown>>({
@@ -292,10 +292,10 @@ export function SplitListView<M extends Record<string, unknown> = Record<string,
292
292
  >
293
293
  <ErrorBoundary>
294
294
  {collection.defaultEntityAction === "view" && !isEditMode
295
- ? <EntityDetailView
295
+ ? <DetailViewBinding
296
296
  key={String(renderedEntityId)}
297
297
  path={path}
298
- collection={collection as EntityCollection<Record<string, unknown>>}
298
+ collection={collection as CollectionConfig<Record<string, unknown>>}
299
299
  entityId={renderedEntityId}
300
300
  parentCollectionSlugs={usedParentCollectionIds}
301
301
  parentEntityIds={usedParentEntityIds}
@@ -323,10 +323,10 @@ export function SplitListView<M extends Record<string, unknown> = Record<string,
323
323
  navigate(entityUrl);
324
324
  }}
325
325
  />
326
- : <EntityEditView
326
+ : <EditViewBinding
327
327
  key={String(renderedEntityId)}
328
328
  path={path}
329
- collection={collection as EntityCollection<Record<string, unknown>>}
329
+ collection={collection as CollectionConfig<Record<string, unknown>>}
330
330
  entityId={renderedEntityId}
331
331
  parentCollectionSlugs={usedParentCollectionIds}
332
332
  parentEntityIds={usedParentEntityIds}
@@ -15,7 +15,7 @@ import {
15
15
  ToggleButtonGroup,
16
16
  ToggleButtonOption
17
17
  } from "@rebasepro/ui";
18
- import { useTranslation } from "@rebasepro/core";
18
+ import { useTranslation } from "@rebasepro/app";
19
19
 
20
20
  export type KanbanPropertyOption = {
21
21
  key: string;
@@ -1,11 +1,11 @@
1
1
  import { useCallback, useMemo } from "react";
2
- import { setIn } from "@rebasepro/formex";
3
- import { EntityCollection, SaveEntityProps, RebaseData, RebaseContext } from "@rebasepro/types";
4
- import { OnCellValueChange, saveEntityWithCallbacks, UniqueFieldValidator } from "@rebasepro/core";
2
+ import { setIn } from "@rebasepro/forms";
3
+ import { CollectionConfig, RebaseData, RebaseContext } from "@rebasepro/types";
4
+ import { OnCellValueChange, saveEntityWithCallbacks, SaveEntityWithCallbacksProps, UniqueFieldValidator } from "@rebasepro/app";
5
5
 
6
6
  export interface UseCollectionInlineEditorParams<M extends Record<string, unknown>> {
7
7
  path: string;
8
- collection: EntityCollection<M>;
8
+ collection: CollectionConfig<M>;
9
9
  dataClient: RebaseData;
10
10
  context: RebaseContext;
11
11
  }
@@ -17,7 +17,7 @@ export function useCollectionInlineEditor<M extends Record<string, unknown>>({
17
17
  context
18
18
  }: UseCollectionInlineEditorParams<M>) {
19
19
 
20
- // Unique field validator (ported from EntityCollectionView)
20
+ // Unique field validator (ported from CollectionViewBinding)
21
21
  const uniqueFieldValidator: UniqueFieldValidator = useCallback(
22
22
  async ({ name, value, property, entityId }: Parameters<UniqueFieldValidator>[0]) => {
23
23
  const accessor = dataClient.collection(path);
@@ -46,7 +46,7 @@ export function useCollectionInlineEditor<M extends Record<string, unknown>>({
46
46
 
47
47
  const updatedValues = setIn({}, propertyKey, value) as Partial<Record<string, unknown>>;
48
48
 
49
- const saveProps: SaveEntityProps = {
49
+ const saveProps: SaveEntityWithCallbacksProps<Record<string, unknown>> = {
50
50
  path: entity.path ?? path,
51
51
  entityId: entity.id,
52
52
  values: updatedValues,
@@ -1,13 +1,13 @@
1
1
  import { useCallback, useMemo } from "react";
2
- import { setIn } from "@rebasepro/formex";
3
- import { EntityCollection, SaveEntityProps, RebaseData, RebaseContext, AnalyticsController, Entity } from "@rebasepro/types";
4
- import { saveEntityWithCallbacks } from "@rebasepro/core";
2
+ import { setIn } from "@rebasepro/forms";
3
+ import { CollectionConfig, RebaseData, RebaseContext, AnalyticsController, Entity } from "@rebasepro/types";
4
+ import { saveEntityWithCallbacks, SaveEntityWithCallbacksProps } from "@rebasepro/app";
5
5
  import { BoardItem } from "@rebasepro/ui";
6
6
  import { BoardDataController } from "../useBoardDataController";
7
7
  import { generateKeyBetween } from "fractional-indexing";
8
8
 
9
9
  export interface UseKanbanDragAndDropParams<M extends Record<string, unknown>> {
10
- collection: EntityCollection<M>;
10
+ collection: CollectionConfig<M>;
11
11
  fullPath: string;
12
12
  columnProperty: string;
13
13
  orderProperty?: string;
@@ -106,7 +106,7 @@ export function useKanbanDragAndDrop<M extends Record<string, unknown>>({
106
106
  );
107
107
  }
108
108
 
109
- const saveProps: SaveEntityProps = {
109
+ const saveProps: SaveEntityWithCallbacksProps<Record<string, unknown>> = {
110
110
  path: entity.path,
111
111
  entityId: entity.id,
112
112
  values: updatedValues as M,
@@ -1,7 +1,7 @@
1
- import type { EntityCollection } from "@rebasepro/types";
2
- import { useCallback, useEffect, useMemo, useRef, useState } from "react";
1
+ import type { CollectionConfig } from "@rebasepro/types";
3
2
  import { Entity, FilterValues } from "@rebasepro/types";
4
- import { useData, useRebaseContext } from "@rebasepro/core";
3
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
+ import { getRelationIncludeParams, useData, useRebaseContext } from "@rebasepro/app";
5
5
 
6
6
  const DEFAULT_PAGE_SIZE = 20;
7
7
 
@@ -67,7 +67,7 @@ export interface UseBoardDataControllerProps<M extends Record<string, unknown> =
67
67
  /** Full path to the collection */
68
68
  fullPath: string;
69
69
  /** The entity collection configuration */
70
- collection: EntityCollection<M>;
70
+ collection: CollectionConfig<M>;
71
71
  /** Property key used for column assignment */
72
72
  columnProperty: string;
73
73
  /** Array of column values (enum values from columnProperty) */
@@ -244,7 +244,7 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
244
244
  [currentColumnProperty]: ["==", column]
245
245
  };
246
246
 
247
- const orderByParam = currentOrderProperty ? `${currentOrderProperty}:asc` : undefined;
247
+ const orderByParam: [string, "asc" | "desc"] | undefined = currentOrderProperty ? [currentOrderProperty, "asc"] : undefined;
248
248
 
249
249
  // Mark column as loading
250
250
  setColumnData(prev => ({
@@ -326,18 +326,24 @@ values: { ...e.values,
326
326
  });
327
327
  }
328
328
 
329
- // Apply afterRead callbacks if any
329
+ // Apply afterRead callbacks if any.
330
+ // afterRead operates on flat rows; unwrap the Entity view-model
331
+ // before invoking and re-wrap the processed row after.
330
332
  if (currentCollection.callbacks?.afterRead) {
331
333
  try {
332
334
  processed = await Promise.all(
333
- processed.map(entity =>
334
- currentCollection.callbacks!.afterRead!({
335
+ processed.map(async (entity) => {
336
+ const processedRow = await currentCollection.callbacks!.afterRead!({
335
337
  collection: currentCollection,
336
338
  path: currentResolvedPath,
337
- entity,
339
+ row: { id: entity.id, ...entity.values },
338
340
  context: currentContext
339
- })
340
- )
341
+ });
342
+ return {
343
+ ...entity,
344
+ values: processedRow as M
345
+ };
346
+ })
341
347
  );
342
348
  } catch (e) {
343
349
  console.error("Error in afterRead callback:", e);
@@ -404,18 +410,24 @@ values: { ...e.values,
404
410
 
405
411
  // Set up listener or fetch
406
412
  const accessor = currentDataClient.collection(currentResolvedPath);
413
+
414
+ // Eagerly include relations to avoid N+1 fetches.
415
+ const includeParams = getRelationIncludeParams(currentCollection);
416
+
407
417
  if (accessor.listen) {
408
418
  const unsubscribe = accessor.listen({
409
419
  where: whereFilter,
410
420
  limit: itemCount,
411
- orderBy: orderByParam
421
+ orderBy: orderByParam,
422
+ include: includeParams
412
423
  }, res => onUpdate(res.data as Entity<M>[]), onError);
413
424
  unsubscribersRef.current[column] = unsubscribe;
414
425
  } else {
415
426
  accessor.find({
416
427
  where: whereFilter,
417
428
  limit: itemCount,
418
- orderBy: orderByParam
429
+ orderBy: orderByParam,
430
+ include: includeParams
419
431
  })
420
432
  .then(res => onUpdate(res.data as Entity<M>[]))
421
433
  .catch(onError);
@@ -1,8 +1,8 @@
1
1
  import { useMemo } from "react";
2
- import type { EntityCollection, Property, RelationProperty } from "@rebasepro/types";
2
+ import type { CollectionConfig, Property, RelationProperty } from "@rebasepro/types";
3
3
  import type { Entity, PropertyConfig, EntityRelation } from "@rebasepro/types";
4
4
  import { getEntityImagePreviewPropertyKey } from "@rebasepro/common";
5
- import { getEntityFromCache } from "@rebasepro/core";
5
+ import { getEntityFromCache } from "@rebasepro/app";
6
6
  import { getEntityTitlePropertyKey, getEntityPreviewKeys } from "../../util/previews";
7
7
  import { getValueInPath } from "@rebasepro/utils";
8
8
  import type { AuthController } from "@rebasepro/types";
@@ -13,7 +13,7 @@ import { ChipColorScheme, CHIP_COLORS } from "@rebasepro/ui";
13
13
 
14
14
  /**
15
15
  * A resolved "slot" containing the property definition, key, and the
16
- * concrete value extracted from an entity.
16
+ * concrete value extracted from a entity.
17
17
  */
18
18
  export interface PreviewSlot {
19
19
  property: Property;
@@ -102,7 +102,7 @@ export interface CollectionSlotKeys {
102
102
  * Pure function — call inside `useMemo`.
103
103
  */
104
104
  export function resolveCollectionSlotKeys(
105
- collection: EntityCollection<Record<string, unknown>>,
105
+ collection: CollectionConfig<Record<string, unknown>>,
106
106
  authController: AuthController,
107
107
  propertyConfigs: Record<string, PropertyConfig>
108
108
  ): CollectionSlotKeys {
@@ -216,7 +216,7 @@ dateKey };
216
216
  * and value is the first element (for arrays) or the raw value.
217
217
  */
218
218
  function resolveImageSlot(
219
- collection: EntityCollection<Record<string, unknown>>,
219
+ collection: CollectionConfig<Record<string, unknown>>,
220
220
  imageKey: string,
221
221
  entity: Entity<Record<string, unknown>>
222
222
  ): PreviewSlot | undefined {
@@ -277,7 +277,7 @@ function formatDateValue(value: unknown): string {
277
277
  * `resolveEntitySlots` for each entity row.
278
278
  */
279
279
  export function useCollectionSlotKeys(
280
- collection: EntityCollection<Record<string, unknown>>,
280
+ collection: CollectionConfig<Record<string, unknown>>,
281
281
  authController: AuthController,
282
282
  propertyConfigs: Record<string, PropertyConfig>
283
283
  ): CollectionSlotKeys {
@@ -296,7 +296,7 @@ export function useCollectionSlotKeys(
296
296
  */
297
297
  export function resolveEntitySlots(
298
298
  entity: Entity<Record<string, unknown>>,
299
- collection: EntityCollection<Record<string, unknown>>,
299
+ collection: CollectionConfig<Record<string, unknown>>,
300
300
  slotKeys: CollectionSlotKeys
301
301
  ): EntityPreviewSlots {
302
302
  const { titleKey, imageKey, subtitleKey, relationKeys, statusKey, dateKey } = slotKeys;
@@ -441,11 +441,11 @@ function resolveRelationDisplayName(
441
441
  const data = "data" in relation ? (relation as EntityRelation).data : undefined;
442
442
 
443
443
  // Resolve target collection from either `prop.relation.target()` or `prop.target()` (inline API)
444
- let targetCollection: EntityCollection | undefined;
444
+ let targetCollection: CollectionConfig | undefined;
445
445
  try {
446
446
  const resolved = prop.relation?.target?.() ?? (typeof prop.target === "function" ? prop.target() : undefined);
447
447
  if (resolved && typeof resolved === "object") {
448
- targetCollection = resolved as EntityCollection;
448
+ targetCollection = resolved as CollectionConfig;
449
449
  }
450
450
  } catch {
451
451
  // Target collection may not be resolvable
@@ -2,7 +2,7 @@
2
2
  import React from "react";
3
3
 
4
4
  import { Link, useNavigate } from "react-router-dom";
5
- import { RebaseLogo, LanguageToggle } from "@rebasepro/core";
5
+ import { RebaseLogo, LanguageToggle } from "@rebasepro/app";
6
6
  import { ErrorBoundary, iconSize } from "@rebasepro/ui";
7
7
  import {
8
8
  Avatar,
@@ -18,12 +18,12 @@ import {
18
18
  SunMoonIcon,
19
19
  Typography
20
20
  } from "@rebasepro/ui";
21
- import { useAuthController, useLargeLayout, useModeController, useAdminModeController, useTranslation } from "@rebasepro/core";
21
+ import { useAuthController, useLargeLayout, useModeController, useAdminModeController, useTranslation } from "@rebasepro/app";
22
22
  import { useUrlController } from "../hooks/navigation/contexts/UrlContext";
23
23
  import { User } from "@rebasepro/types";
24
24
  import { useApp } from "./app/useApp";
25
25
  import { useBreadcrumbsController } from "../hooks/useBreadcrumbsController";
26
- import { UserSettingsView } from "@rebasepro/core";
26
+ import { UserSettingsView } from "@rebasepro/app";
27
27
 
28
28
  export type DefaultAppBarProps<ADDITIONAL_PROPS = object> = {
29
29
 
@@ -1,7 +1,7 @@
1
1
  import type { NavigationEntry, NavigationResult } from "@rebasepro/types";
2
2
  import React, { useMemo } from "react";
3
3
 
4
- import { useCollapsedGroups, buildCollapsedDefaults, useLargeLayout, useAdminModeController, useAuthController, useModeController, useTranslation, useSlot, useRebaseContext, useAnalyticsController, useRebaseRegistry, useComponentOverride } from "@rebasepro/core";
4
+ import { useCollapsedGroups, buildCollapsedDefaults, useLargeLayout, useAdminModeController, useAuthController, useModeController, useTranslation, useSlot, useRebaseContext, useAnalyticsController, useRebaseRegistry, useComponentOverride } from "@rebasepro/app";
5
5
  import { useUrlController } from "../hooks/navigation/contexts/UrlContext";
6
6
  import { useNavigationStateController } from "../hooks/navigation/contexts/NavigationStateContext";
7
7
 
@@ -29,7 +29,7 @@ import {
29
29
  Typography
30
30
  } from "@rebasepro/ui";
31
31
  import { DrawerNavigationGroup } from "./DrawerNavigationGroup";
32
- import { LanguageToggle, RebaseLogo } from "@rebasepro/core";
32
+ import { LanguageToggle, RebaseLogo } from "@rebasepro/app";
33
33
  import { useApp } from "./app/useApp";
34
34
 
35
35
  /**
@@ -166,7 +166,7 @@ function CMSNavigationContent() {
166
166
  const allNavigationEntries = navigationState.topLevelNavigation?.navigationEntries ?? [];
167
167
 
168
168
  // Build a set of Studio-only dev view slugs so we can distinguish them from
169
- // CMS custom views added via <RebaseCMS views={...}> or plugins.
169
+ // CMS custom views added via <RebaseAdmin views={...}> or plugins.
170
170
  const studioViewSlugs = useMemo(() => {
171
171
  const slugs = new Set<string>();
172
172
  (registry.studioConfig?.devViews ?? []).forEach(v => slugs.add(v.slug));
@@ -1,5 +1,5 @@
1
- import type { EntityCollection } from "@rebasepro/types";
2
- import { Entity, EntityCallbacks } from "@rebasepro/types";
1
+ import type { CollectionConfig } from "@rebasepro/types";
2
+ import { Entity, CollectionCallbacks } from "@rebasepro/types";
3
3
  import React, { useCallback, useMemo, useState } from "react";
4
4
  import { Button, CircularProgress, Dialog, DialogActions, DialogContent, DialogTitle } from "@rebasepro/ui";
5
5
  import {
@@ -9,17 +9,17 @@ import {
9
9
  useData,
10
10
  useSnackbarController,
11
11
  useTranslation
12
- } from "@rebasepro/core";
12
+ } from "@rebasepro/app";
13
13
  import { useCMSContext } from "../hooks";
14
- import { EntityView } from "./EntityView";
14
+ import { EntityViewBinding } from "./EntityViewBinding";
15
15
 
16
16
  export interface DeleteEntityDialogProps<M extends Record<string, unknown>> {
17
17
  entityOrEntitiesToDelete?: Entity<M> | Entity<M>[],
18
18
  path: string,
19
- collection: EntityCollection<M>
19
+ collection: CollectionConfig<M>
20
20
  open: boolean;
21
21
  onClose: () => void;
22
- callbacks?: EntityCallbacks<M>,
22
+ callbacks?: CollectionCallbacks<M>,
23
23
 
24
24
  onEntityDelete?(path: string, entity: Entity<M>): void;
25
25
 
@@ -135,7 +135,7 @@ export function DeleteEntityDialog<M extends Record<string, unknown>>({
135
135
  } else {
136
136
  const entity = entityOrEntities as Entity<M> | undefined;
137
137
  content = entity
138
- ? <EntityView
138
+ ? <EntityViewBinding
139
139
  entity={entity}
140
140
  collection={collection}
141
141
  path={path}/>