@rebasepro/admin 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +20 -20
  3. package/dist/{CollectionEditorDialog-iGgS4rLX.js → CollectionEditorDialog-B-7uW3iJ.js} +15 -15
  4. package/dist/CollectionEditorDialog-B-7uW3iJ.js.map +1 -0
  5. package/dist/{PropertyEditView-C9yhLyja.js → PropertyEditView-7KMTcrqi.js} +140 -106
  6. package/dist/PropertyEditView-7KMTcrqi.js.map +1 -0
  7. package/dist/{RouterCollectionsStudioView-Dqx27GD8.js → RouterCollectionsStudioView-epqIbZrJ.js} +4 -4
  8. package/dist/{RouterCollectionsStudioView-Dqx27GD8.js.map → RouterCollectionsStudioView-epqIbZrJ.js.map} +1 -1
  9. package/dist/collection_editor/_cms_internals.d.ts +4 -4
  10. package/dist/collection_editor/api/generateCollectionApi.d.ts +7 -6
  11. package/dist/collection_editor/extensibility_types.d.ts +3 -3
  12. package/dist/collection_editor/index.d.ts +2 -2
  13. package/dist/collection_editor/pgColumnToProperty.d.ts +3 -3
  14. package/dist/collection_editor/serializable_types.d.ts +12 -16
  15. package/dist/collection_editor/serializable_utils.d.ts +8 -8
  16. package/dist/collection_editor/types/collection_editor_controller.d.ts +5 -5
  17. package/dist/collection_editor/types/collection_inference.d.ts +2 -2
  18. package/dist/collection_editor/types/config_controller.d.ts +7 -7
  19. package/dist/collection_editor/ui/AddKanbanColumnAction.d.ts +2 -2
  20. package/dist/collection_editor/ui/CollectionViewHeaderAction.d.ts +2 -2
  21. package/dist/collection_editor/ui/KanbanSetupAction.d.ts +2 -2
  22. package/dist/collection_editor/ui/PropertyAddColumnComponent.d.ts +2 -2
  23. package/dist/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.d.ts +3 -3
  24. package/dist/collection_editor/ui/collection_editor/CollectionDetailsForm.d.ts +2 -2
  25. package/dist/collection_editor/ui/collection_editor/CollectionEditorDialog.d.ts +4 -5
  26. package/dist/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.d.ts +2 -2
  27. package/dist/collection_editor/ui/collection_editor/CollectionJsonImportDialog.d.ts +2 -2
  28. package/dist/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +4 -4
  29. package/dist/collection_editor/ui/collection_editor/CollectionStudioView.d.ts +2 -2
  30. package/dist/collection_editor/ui/collection_editor/CollectionsStudioView.d.ts +2 -2
  31. package/dist/collection_editor/ui/collection_editor/EntityActionsEditTab.d.ts +2 -2
  32. package/dist/collection_editor/ui/collection_editor/GeneralSettingsForm.d.ts +2 -2
  33. package/dist/collection_editor/ui/collection_editor/GetCodeDialog.d.ts +2 -2
  34. package/dist/collection_editor/ui/collection_editor/PropertyEditView.d.ts +4 -4
  35. package/dist/collection_editor/ui/collection_editor/SubcollectionsEditTab.d.ts +3 -3
  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/validateCollectionJson.d.ts +2 -2
  42. package/dist/collection_editor_ui.js +4 -4
  43. package/dist/components/CollectionPanel.d.ts +4 -4
  44. package/dist/components/{EntityCollectionTable/EntityCollectionRowActions.d.ts → CollectionTableBinding/CollectionRowActions.d.ts} +3 -3
  45. package/dist/components/CollectionTableBinding/CollectionTableBinding.d.ts +28 -0
  46. package/dist/components/{EntityCollectionTable/EntityCollectionTableProps.d.ts → CollectionTableBinding/CollectionTableBindingProps.d.ts} +1 -1
  47. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableMultipleRelationField.d.ts +2 -2
  48. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableReferenceField.d.ts +2 -2
  49. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationField.d.ts +2 -2
  50. package/dist/components/CollectionTableBinding/index.d.ts +6 -0
  51. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/common.d.ts +2 -2
  52. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/PopupFormField.d.ts +2 -2
  53. package/dist/components/{EntityCollectionView/EntityBoardCard.d.ts → CollectionViewBinding/BoardCardBinding.d.ts} +8 -8
  54. package/dist/components/{EntityCollectionView/EntityCollectionBoardView.d.ts → CollectionViewBinding/CollectionBoardViewBinding.d.ts} +4 -4
  55. package/dist/components/{EntityCollectionView/EntityCollectionCardView.d.ts → CollectionViewBinding/CollectionCardViewBinding.d.ts} +5 -5
  56. package/dist/components/{EntityCollectionView/EntityCollectionListView.d.ts → CollectionViewBinding/CollectionListViewBinding.d.ts} +4 -4
  57. package/dist/components/{EntityCollectionView/EntityCollectionViewActions.d.ts → CollectionViewBinding/CollectionViewActions.d.ts} +4 -4
  58. package/dist/components/{EntityCollectionView/EntityCollectionView.d.ts → CollectionViewBinding/CollectionViewBinding.d.ts} +4 -4
  59. package/dist/components/{EntityCollectionView/EntityCollectionViewStartActions.d.ts → CollectionViewBinding/CollectionViewStartActions.d.ts} +4 -4
  60. package/dist/components/CollectionViewBinding/EntityCardBinding.d.ts +21 -0
  61. package/dist/components/{EntityCollectionView → CollectionViewBinding}/SplitListView.d.ts +3 -3
  62. package/dist/components/{EntityCollectionView → CollectionViewBinding}/hooks/useCollectionInlineEditor.d.ts +2 -2
  63. package/dist/components/{EntityCollectionView → CollectionViewBinding}/hooks/useKanbanDragAndDrop.d.ts +2 -2
  64. package/dist/components/{EntityCollectionView → CollectionViewBinding}/useBoardDataController.d.ts +2 -2
  65. package/dist/components/{EntityCollectionView/useEntityPreviewSlots.d.ts → CollectionViewBinding/usePreviewSlots.d.ts} +5 -5
  66. package/dist/components/DeleteEntityDialog.d.ts +4 -4
  67. package/dist/components/{EntityDetailView.d.ts → DetailViewBinding.d.ts} +5 -5
  68. package/dist/components/EditFormActions.d.ts +3 -0
  69. package/dist/components/{EntityEditView.d.ts → EditViewBinding.d.ts} +9 -9
  70. package/dist/components/{EntityPreview.d.ts → EntityPreviewBinding.d.ts} +13 -13
  71. package/dist/components/EntityViewBinding.d.ts +13 -0
  72. package/dist/components/{EntityJsonPreview.d.ts → JsonPreviewBinding.d.ts} +1 -1
  73. package/dist/components/RebaseCMS.d.ts +1 -1
  74. package/dist/components/RebaseNavigation.d.ts +1 -1
  75. package/dist/components/ReferenceTable/{EntitySelectionTable.d.ts → SelectionTableBinding.d.ts} +5 -5
  76. package/dist/components/SelectableTable/SelectableTable.d.ts +5 -5
  77. package/dist/components/SelectableTable/SelectableTableContext.d.ts +3 -3
  78. package/dist/components/SelectableTable/SelectionStore.d.ts +13 -22
  79. package/dist/components/SelectableTable/filters/BooleanFilterField.d.ts +6 -1
  80. package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +7 -1
  81. package/dist/components/SelectableTable/filters/FilterFieldBinding.d.ts +40 -0
  82. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +7 -1
  83. package/dist/components/SelectableTable/filters/RelationFilterField.d.ts +7 -1
  84. package/dist/components/SelectableTable/filters/StringNumberFilterField.d.ts +7 -1
  85. package/dist/components/SideDialogs.d.ts +1 -1
  86. package/dist/components/SidePanelBinding.d.ts +11 -0
  87. package/dist/components/{SideEntityProvider.d.ts → SidePanelProvider.d.ts} +7 -7
  88. package/dist/components/field_configs.d.ts +1 -1
  89. package/dist/components/history/EntityHistoryEntry.d.ts +2 -2
  90. package/dist/components/history/LastEditedByIndicator.d.ts +2 -2
  91. package/dist/components/index.d.ts +14 -13
  92. package/dist/contexts/SidePanelControllerContext.d.ts +3 -0
  93. package/dist/data_export/export/ExportCollectionAction.d.ts +3 -3
  94. package/dist/data_import/components/ImportSaveInProgress.d.ts +2 -2
  95. package/dist/editor/editor.d.ts +0 -6
  96. package/dist/editor.js +1 -3
  97. package/dist/editor.js.map +1 -1
  98. package/dist/form/EntityForm.d.ts +1 -1
  99. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  100. package/dist/form/components/StorageUploadProgress.d.ts +6 -1
  101. package/dist/form/form_utils.d.ts +2 -2
  102. package/dist/form/index.d.ts +0 -1
  103. package/dist/{history-ChHgyyvM.js → history-7X5bON_n.js} +4 -4
  104. package/dist/history-7X5bON_n.js.map +1 -0
  105. package/dist/hooks/index.d.ts +4 -4
  106. package/dist/hooks/navigation/contexts/CollectionRegistryContext.d.ts +2 -2
  107. package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +5 -5
  108. package/dist/hooks/navigation/useNavigationResolution.d.ts +4 -4
  109. package/dist/hooks/navigation/useResolvedCollections.d.ts +7 -7
  110. package/dist/hooks/navigation/useTopLevelNavigation.d.ts +2 -2
  111. package/dist/hooks/navigation/utils.d.ts +5 -5
  112. package/dist/hooks/useBuildSidePanel.d.ts +6 -0
  113. package/dist/hooks/useCMSContext.d.ts +2 -2
  114. package/dist/hooks/{useEntityHistory.d.ts → useHistory.d.ts} +1 -1
  115. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  116. package/dist/hooks/{useEntitySelectionDialog.d.ts → useSelectionDialog.d.ts} +2 -2
  117. package/dist/hooks/useSideDialogsController.d.ts +1 -1
  118. package/dist/hooks/useSidePanel.d.ts +11 -0
  119. package/dist/index.d.ts +3 -3
  120. package/dist/index.js +2 -2
  121. package/dist/preview/components/StorageThumbnail.d.ts +3 -1
  122. package/dist/{src-DOX2nOyh.js → src-sUZfe29F.js} +904 -1096
  123. package/dist/src-sUZfe29F.js.map +1 -0
  124. package/dist/types/components/EntityFormActionsProps.d.ts +2 -2
  125. package/dist/types/components/EntityFormProps.d.ts +3 -3
  126. package/dist/types/components/PropertyPreviewProps.d.ts +2 -1
  127. package/dist/types/fields.d.ts +6 -8
  128. package/dist/util/dataControllerAdapter.d.ts +2 -5
  129. package/dist/util/navigation_utils.d.ts +6 -6
  130. package/dist/util/previews.d.ts +3 -3
  131. package/dist/util/property_utils.d.ts +2 -2
  132. package/dist/util/{entity_view_constants.d.ts → view_constants.d.ts} +1 -1
  133. package/package.json +18 -18
  134. package/src/collection_editor/ConfigControllerProvider.tsx +10 -10
  135. package/src/collection_editor/_cms_internals.ts +4 -4
  136. package/src/collection_editor/api/generateCollectionApi.ts +7 -6
  137. package/src/collection_editor/extensibility_types.ts +3 -3
  138. package/src/collection_editor/index.ts +3 -3
  139. package/src/collection_editor/pgColumnToProperty.ts +4 -4
  140. package/src/collection_editor/serializable_types.ts +22 -35
  141. package/src/collection_editor/serializable_utils.ts +40 -52
  142. package/src/collection_editor/types/collection_editor_controller.tsx +5 -5
  143. package/src/collection_editor/types/collection_inference.ts +2 -2
  144. package/src/collection_editor/types/config_controller.tsx +7 -7
  145. package/src/collection_editor/ui/AddKanbanColumnAction.tsx +2 -2
  146. package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +2 -2
  147. package/src/collection_editor/ui/EditorCollectionAction.tsx +2 -2
  148. package/src/collection_editor/ui/EditorCollectionActionStart.tsx +2 -2
  149. package/src/collection_editor/ui/EditorEntityAction.tsx +2 -2
  150. package/src/collection_editor/ui/KanbanSetupAction.tsx +2 -2
  151. package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +2 -2
  152. package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +5 -5
  153. package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +3 -3
  154. package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +63 -46
  155. package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +3 -3
  156. package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +2 -2
  157. package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +8 -8
  158. package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +2 -2
  159. package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +2 -2
  160. package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +2 -2
  161. package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +2 -2
  162. package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +2 -2
  163. package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +3 -3
  164. package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +5 -5
  165. package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +4 -4
  166. package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +2 -2
  167. package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +7 -16
  168. package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +45 -36
  169. package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +1 -1
  170. package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +5 -5
  171. package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +3 -3
  172. package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +2 -2
  173. package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +2 -2
  174. package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +35 -1
  175. package/src/collection_editor/ui/collection_editor/templates/blog_template.ts +3 -3
  176. package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +2 -2
  177. package/src/collection_editor/ui/collection_editor/templates/products_template.ts +2 -2
  178. package/src/collection_editor/ui/collection_editor/templates/users_template.ts +2 -2
  179. package/src/collection_editor/ui/collection_editor/utils/supported_fields.tsx +0 -1
  180. package/src/collection_editor/ui/collection_editor/utils/update_property_for_widget.ts +7 -29
  181. package/src/collection_editor/useJsonCollectionsConfigController.tsx +14 -14
  182. package/src/collection_editor/useLocalCollectionsConfigController.tsx +4 -4
  183. package/src/collection_editor/validateCollectionJson.ts +3 -3
  184. package/src/components/CollectionPanel.tsx +14 -17
  185. package/src/components/{EntityCollectionTable/EntityCollectionRowActions.tsx → CollectionTableBinding/CollectionRowActions.tsx} +6 -6
  186. package/src/components/{EntityCollectionTable/EntityCollectionTable.tsx → CollectionTableBinding/CollectionTableBinding.tsx} +19 -17
  187. package/src/components/{EntityCollectionTable/EntityCollectionTableProps.tsx → CollectionTableBinding/CollectionTableBindingProps.tsx} +1 -1
  188. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableMultipleRelationField.tsx +7 -6
  189. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableReferenceField.tsx +10 -10
  190. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationField.tsx +7 -6
  191. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableStorageUpload.tsx +23 -20
  192. package/src/components/CollectionTableBinding/index.tsx +14 -0
  193. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/common.tsx +2 -2
  194. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/PopupFormField.tsx +2 -2
  195. package/src/components/{EntityCollectionTable → CollectionTableBinding}/table_bindings.tsx +24 -44
  196. package/src/components/{EntityCollectionView/EntityBoardCard.tsx → CollectionViewBinding/BoardCardBinding.tsx} +15 -15
  197. package/src/components/{EntityCollectionView/EntityCollectionBoardView.tsx → CollectionViewBinding/CollectionBoardViewBinding.tsx} +15 -14
  198. package/src/components/{EntityCollectionView/EntityCollectionCardView.tsx → CollectionViewBinding/CollectionCardViewBinding.tsx} +8 -8
  199. package/src/components/{EntityCollectionView/EntityCollectionListView.tsx → CollectionViewBinding/CollectionListViewBinding.tsx} +24 -13
  200. package/src/components/{EntityCollectionView/EntityCollectionViewActions.tsx → CollectionViewBinding/CollectionViewActions.tsx} +5 -5
  201. package/src/components/{EntityCollectionView/EntityCollectionView.tsx → CollectionViewBinding/CollectionViewBinding.tsx} +112 -114
  202. package/src/components/{EntityCollectionView/EntityCollectionViewStartActions.tsx → CollectionViewBinding/CollectionViewStartActions.tsx} +5 -5
  203. package/src/components/{EntityCollectionView/EntityCard.tsx → CollectionViewBinding/EntityCardBinding.tsx} +9 -9
  204. package/src/components/{EntityCollectionView → CollectionViewBinding}/FiltersDialog.tsx +31 -72
  205. package/src/components/{EntityCollectionView → CollectionViewBinding}/SplitListView.tsx +9 -9
  206. package/src/components/{EntityCollectionView → CollectionViewBinding}/hooks/useCollectionInlineEditor.ts +6 -6
  207. package/src/components/{EntityCollectionView → CollectionViewBinding}/hooks/useKanbanDragAndDrop.ts +4 -4
  208. package/src/components/{EntityCollectionView → CollectionViewBinding}/useBoardDataController.tsx +28 -50
  209. package/src/components/{EntityCollectionView/useEntityPreviewSlots.ts → CollectionViewBinding/usePreviewSlots.ts} +11 -11
  210. package/src/components/DefaultDrawer.tsx +1 -1
  211. package/src/components/DeleteEntityDialog.tsx +6 -6
  212. package/src/components/{EntityDetailView.tsx → DetailViewBinding.tsx} +28 -31
  213. package/src/components/{EntityEditViewFormActions.tsx → EditFormActions.tsx} +15 -15
  214. package/src/components/{EntityEditView.tsx → EditViewBinding.tsx} +31 -34
  215. package/src/components/{EntityPreview.tsx → EntityPreviewBinding.tsx} +27 -27
  216. package/src/components/{EntityView.tsx → EntityViewBinding.tsx} +5 -5
  217. package/src/components/HomePage/ContentHomePage.tsx +1 -1
  218. package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
  219. package/src/components/{EntityJsonPreview.tsx → JsonPreviewBinding.tsx} +1 -1
  220. package/src/components/RebaseCMS.tsx +4 -4
  221. package/src/components/RebaseNavigation.tsx +20 -10
  222. package/src/components/ReferenceTable/{EntitySelectionTable.tsx → SelectionTableBinding.tsx} +22 -19
  223. package/src/components/ReferenceWidget.tsx +4 -4
  224. package/src/components/RelationSelector.tsx +16 -14
  225. package/src/components/SelectableTable/SelectableTable.tsx +44 -89
  226. package/src/components/SelectableTable/SelectableTableContext.tsx +3 -3
  227. package/src/components/SelectableTable/SelectionStore.ts +22 -52
  228. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +9 -1
  229. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +33 -12
  230. package/src/components/SelectableTable/filters/FilterFieldBinding.tsx +187 -0
  231. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +21 -7
  232. package/src/components/SelectableTable/filters/RelationFilterField.tsx +17 -3
  233. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +66 -12
  234. package/src/components/SideDialogs.tsx +3 -3
  235. package/src/components/{EntitySidePanel.tsx → SidePanelBinding.tsx} +19 -19
  236. package/src/components/{SideEntityProvider.tsx → SidePanelProvider.tsx} +16 -16
  237. package/src/components/common/default_entity_actions.tsx +24 -13
  238. package/src/components/field_configs.tsx +0 -14
  239. package/src/components/history/EntityHistoryEntry.tsx +2 -2
  240. package/src/components/history/EntityHistoryView.tsx +3 -3
  241. package/src/components/history/LastEditedByIndicator.tsx +2 -2
  242. package/src/components/index.ts +15 -14
  243. package/src/contexts/SidePanelControllerContext.tsx +5 -0
  244. package/src/data_export/export/ExportCollectionAction.tsx +4 -4
  245. package/src/data_import/components/ImportSaveInProgress.tsx +3 -3
  246. package/src/data_import/import/ImportCollectionAction.tsx +4 -4
  247. package/src/data_import/utils/data.ts +2 -2
  248. package/src/editor/editor.tsx +4 -7
  249. package/src/form/EntityForm.tsx +2 -2
  250. package/src/form/EntityFormActions.tsx +4 -4
  251. package/src/form/EntityFormBinding.tsx +7 -7
  252. package/src/form/PropertyFieldBinding.tsx +4 -4
  253. package/src/form/components/StorageUploadProgress.tsx +9 -2
  254. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +4 -4
  255. package/src/form/field_bindings/KeyValueFieldBinding.tsx +19 -19
  256. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +12 -1
  257. package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +6 -6
  258. package/src/form/field_bindings/ReferenceFieldBinding.tsx +5 -5
  259. package/src/form/field_bindings/RelationFieldBinding.tsx +8 -10
  260. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +19 -15
  261. package/src/form/form_utils.ts +2 -2
  262. package/src/form/index.tsx +0 -1
  263. package/src/hooks/index.ts +4 -4
  264. package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +2 -2
  265. package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +11 -11
  266. package/src/hooks/navigation/useBuildNavigationStateController.tsx +5 -5
  267. package/src/hooks/navigation/useNavigationResolution.ts +10 -10
  268. package/src/hooks/navigation/useResolvedCollections.ts +8 -8
  269. package/src/hooks/navigation/useTopLevelNavigation.ts +2 -2
  270. package/src/hooks/navigation/utils.ts +5 -5
  271. package/src/hooks/{useBuildSideEntityController.tsx → useBuildSidePanel.tsx} +28 -28
  272. package/src/hooks/useCMSContext.tsx +6 -6
  273. package/src/hooks/{useEntityHistory.ts → useHistory.ts} +1 -1
  274. package/src/hooks/useResolvedNavigationFrom.tsx +8 -5
  275. package/src/hooks/{useEntitySelectionDialog.tsx → useSelectionDialog.tsx} +7 -7
  276. package/src/hooks/useSideDialogsController.tsx +1 -1
  277. package/src/hooks/useSidePanel.tsx +13 -0
  278. package/src/index.ts +13 -13
  279. package/src/preview/PropertyPreview.tsx +1 -16
  280. package/src/preview/components/ReferencePreview.tsx +10 -10
  281. package/src/preview/components/RelationPreview.tsx +13 -12
  282. package/src/preview/components/StorageThumbnail.tsx +24 -7
  283. package/src/routes/RebaseRoute.tsx +10 -10
  284. package/src/types/components/EntityFormActionsProps.tsx +2 -2
  285. package/src/types/components/EntityFormProps.tsx +3 -3
  286. package/src/types/components/PropertyPreviewProps.tsx +1 -1
  287. package/src/types/fields.tsx +4 -9
  288. package/src/util/dataControllerAdapter.ts +9 -15
  289. package/src/util/navigation_utils.ts +7 -7
  290. package/src/util/previews.ts +23 -3
  291. package/src/util/propertyConfigMapper.ts +3 -3
  292. package/src/util/property_utils.tsx +2 -3
  293. package/src/util/{entity_view_constants.ts → view_constants.ts} +1 -1
  294. package/dist/CollectionEditorDialog-iGgS4rLX.js.map +0 -1
  295. package/dist/PropertyEditView-C9yhLyja.js.map +0 -1
  296. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +0 -28
  297. package/dist/components/EntityCollectionTable/fields/VirtualTableDateField.d.ts +0 -12
  298. package/dist/components/EntityCollectionTable/fields/VirtualTableInput.d.ts +0 -10
  299. package/dist/components/EntityCollectionTable/fields/VirtualTableNumberInput.d.ts +0 -9
  300. package/dist/components/EntityCollectionTable/fields/VirtualTableSwitch.d.ts +0 -8
  301. package/dist/components/EntityCollectionTable/index.d.ts +0 -6
  302. package/dist/components/EntityCollectionView/EntityCard.d.ts +0 -21
  303. package/dist/components/EntityEditViewFormActions.d.ts +0 -3
  304. package/dist/components/EntitySidePanel.d.ts +0 -11
  305. package/dist/components/EntityView.d.ts +0 -13
  306. package/dist/contexts/SideEntityControllerContext.d.ts +0 -3
  307. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +0 -11
  308. package/dist/history-ChHgyyvM.js.map +0 -1
  309. package/dist/hooks/useBuildSideEntityController.d.ts +0 -6
  310. package/dist/hooks/useSideEntityController.d.ts +0 -11
  311. package/dist/src-DOX2nOyh.js.map +0 -1
  312. package/src/components/EntityCollectionTable/fields/VirtualTableDateField.tsx +0 -39
  313. package/src/components/EntityCollectionTable/fields/VirtualTableInput.tsx +0 -90
  314. package/src/components/EntityCollectionTable/fields/VirtualTableNumberInput.tsx +0 -83
  315. package/src/components/EntityCollectionTable/fields/VirtualTableSwitch.tsx +0 -32
  316. package/src/components/EntityCollectionTable/index.tsx +0 -14
  317. package/src/contexts/SideEntityControllerContext.tsx +0 -5
  318. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +0 -141
  319. package/src/hooks/useSideEntityController.tsx +0 -13
  320. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/PropertyTableCell.d.ts +0 -0
  321. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/column_utils.d.ts +0 -0
  322. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationSelectorField.d.ts +0 -0
  323. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableStorageUpload.d.ts +0 -0
  324. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableSelect.d.ts +0 -0
  325. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableUserSelect.d.ts +0 -0
  326. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/CollectionTableToolbar.d.ts +0 -0
  327. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCell.d.ts +0 -0
  328. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCellActions.d.ts +0 -0
  329. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useDraggable.d.ts +0 -0
  330. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useWindowSize.d.ts +0 -0
  331. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/table_bindings.d.ts +0 -0
  332. /package/dist/components/{EntityCollectionView → CollectionViewBinding}/FilterPresetsButton.d.ts +0 -0
  333. /package/dist/components/{EntityCollectionView → CollectionViewBinding}/FiltersDialog.d.ts +0 -0
  334. /package/dist/components/{EntityCollectionView → CollectionViewBinding}/ViewModeToggle.d.ts +0 -0
  335. /package/dist/components/{EntityCollectionView → CollectionViewBinding}/useSelectionController.d.ts +0 -0
  336. /package/dist/components/{EntityCollectionView → CollectionViewBinding}/utils.d.ts +0 -0
  337. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/PropertyTableCell.tsx +0 -0
  338. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/column_utils.tsx +0 -0
  339. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationSelectorField.tsx +0 -0
  340. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableSelect.tsx +0 -0
  341. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableUserSelect.tsx +0 -0
  342. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/CollectionTableToolbar.tsx +0 -0
  343. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCell.tsx +0 -0
  344. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCellActions.tsx +0 -0
  345. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useDraggable.tsx +0 -0
  346. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useWindowSize.tsx +0 -0
  347. /package/src/components/{EntityCollectionView → CollectionViewBinding}/FilterPresetsButton.tsx +0 -0
  348. /package/src/components/{EntityCollectionView → CollectionViewBinding}/ViewModeToggle.tsx +0 -0
  349. /package/src/components/{EntityCollectionView → CollectionViewBinding}/useSelectionController.tsx +0 -0
  350. /package/src/components/{EntityCollectionView → CollectionViewBinding}/utils.ts +0 -0
@@ -4,12 +4,9 @@ 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/core";
9
+ import { FilterFieldBinding } from "../SelectableTable/filters/FilterFieldBinding";
13
10
 
14
11
  export interface FiltersDialogProps {
15
12
  open: boolean;
@@ -33,6 +30,9 @@ export function FiltersDialog({
33
30
  fixedFilter
34
31
  }: FiltersDialogProps) {
35
32
  const { t } = useTranslation();
33
+ // Engine of the collection this dialog filters — read from the
34
+ // surrounding CollectionScopeProvider mounted by the collection view.
35
+ const engine = useCollectionScope()?.engine;
36
36
  // Local state for filters being edited
37
37
  const [localFilters, setLocalFilters] = useState<FilterValues<any>>(filterValues ?? {});
38
38
 
@@ -52,12 +52,17 @@ export function FiltersDialog({
52
52
  if (!property) return false;
53
53
  // Force filter properties should not be editable
54
54
  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);
55
+ const isArray = property.type === "array";
56
+ const ofProp = isArray && "of" in property ? property.of : undefined;
57
+ const baseProperty = isArray ? (Array.isArray(ofProp) ? ofProp[0] : ofProp) as Property | undefined : property;
58
+ if (!baseProperty) return false;
59
+ // A property is filterable when it has a custom filter field, or
60
+ // when at least one operator survives the engine ∩ type ∩
61
+ // property-narrowing resolution.
62
+ if (baseProperty.ui?.Filter) return true;
63
+ return resolveFilterOperators({ property: baseProperty, isArray, engine }).length > 0;
59
64
  });
60
- }, [properties, fixedFilter]);
65
+ }, [properties, fixedFilter, engine]);
61
66
 
62
67
  const handleFilterChange = useCallback((propertyKey: string, value?: [VirtualTableWhereFilterOp, any]) => {
63
68
  setLocalFilters(prev => {
@@ -94,67 +99,21 @@ export function FiltersDialog({
94
99
  const activeFilterCount = Object.keys(localFilters).length;
95
100
 
96
101
  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]);
102
+ const filterValue = localFilters[propertyKey] as [WhereFilterOp, any] | undefined;
103
+ const setValue = (value?: [WhereFilterOp, any]) => handleFilterChange(propertyKey, value as [VirtualTableWhereFilterOp, any] | undefined);
104
+
105
+ return (
106
+ <FilterFieldBinding
107
+ propertyKey={propertyKey}
108
+ property={property}
109
+ engine={engine}
110
+ value={filterValue}
111
+ setValue={setValue}
112
+ hidden={hiddenFields[propertyKey] ?? false}
113
+ setHidden={(hidden) => setHiddenForField(propertyKey, hidden)}
114
+ />
115
+ );
116
+ }, [localFilters, handleFilterChange, hiddenFields, setHiddenForField, engine]);
158
117
 
159
118
  return (
160
119
  <Dialog
@@ -1,8 +1,8 @@
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,
@@ -15,7 +15,7 @@ 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}
@@ -1,11 +1,11 @@
1
1
  import { useCallback, useMemo } from "react";
2
2
  import { setIn } from "@rebasepro/formex";
3
- import { EntityCollection, SaveEntityProps, RebaseData, RebaseContext } from "@rebasepro/types";
4
- import { OnCellValueChange, saveEntityWithCallbacks, UniqueFieldValidator } from "@rebasepro/core";
3
+ import { CollectionConfig, RebaseData, RebaseContext } from "@rebasepro/types";
4
+ import { OnCellValueChange, saveEntityWithCallbacks, SaveEntityWithCallbacksProps, UniqueFieldValidator } from "@rebasepro/core";
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,12 +17,12 @@ 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);
24
24
  const res = await accessor.find({
25
- where: { [name]: "eq." + value }
25
+ where: { [name]: ["==", value] }
26
26
  });
27
27
 
28
28
  const conflictingEntities = res.data;
@@ -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
2
  import { setIn } from "@rebasepro/formex";
3
- import { EntityCollection, SaveEntityProps, RebaseData, RebaseContext, AnalyticsController, Entity } from "@rebasepro/types";
4
- import { saveEntityWithCallbacks } from "@rebasepro/core";
3
+ import { CollectionConfig, RebaseData, RebaseContext, AnalyticsController, Entity } from "@rebasepro/types";
4
+ import { saveEntityWithCallbacks, SaveEntityWithCallbacksProps } from "@rebasepro/core";
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,6 +1,6 @@
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";
3
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
4
  import { useData, useRebaseContext } from "@rebasepro/core";
5
5
 
6
6
  const DEFAULT_PAGE_SIZE = 20;
@@ -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) */
@@ -238,27 +238,13 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
238
238
  return;
239
239
  }
240
240
 
241
- // Build where map for this column
242
- const whereMap: Record<string, string> = {};
243
- if (currentFilterValues) {
244
- Object.entries(currentFilterValues).forEach(([key, value]) => {
245
- if (value && Array.isArray(value)) {
246
- const [op, val] = value;
247
- const postgrestOp = op === "==" ? "eq" : op === "!=" ? "neq" : op === ">" ? "gt" : op === ">=" ? "gte" : op === "<" ? "lt" : op === "<=" ? "lte" : op === "in" ? "in" : op === "not-in" ? "nin" : op === "array-contains" ? "cs" : op === "array-contains-any" ? "csa" : "eq";
248
-
249
- let stringVal: string;
250
- if (Array.isArray(val)) {
251
- stringVal = `(${val.join(",")})`;
252
- } else {
253
- stringVal = String(val);
254
- }
255
- whereMap[key] = `${postgrestOp}.${stringVal}`;
256
- }
257
- });
258
- }
259
- whereMap[currentColumnProperty] = `eq.${column}`;
241
+ // Build filter map for this column — pass FilterValues directly
242
+ const whereFilter: FilterValues<string> = {
243
+ ...(currentFilterValues ?? {}),
244
+ [currentColumnProperty]: ["==", column]
245
+ };
260
246
 
261
- const orderByParam = currentOrderProperty ? `${currentOrderProperty}:asc` : undefined;
247
+ const orderByParam: [string, "asc" | "desc"] | undefined = currentOrderProperty ? [currentOrderProperty, "asc"] : undefined;
262
248
 
263
249
  // Mark column as loading
264
250
  setColumnData(prev => ({
@@ -340,18 +326,24 @@ values: { ...e.values,
340
326
  });
341
327
  }
342
328
 
343
- // 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.
344
332
  if (currentCollection.callbacks?.afterRead) {
345
333
  try {
346
334
  processed = await Promise.all(
347
- processed.map(entity =>
348
- currentCollection.callbacks!.afterRead!({
335
+ processed.map(async (entity) => {
336
+ const processedRow = await currentCollection.callbacks!.afterRead!({
349
337
  collection: currentCollection,
350
338
  path: currentResolvedPath,
351
- entity,
339
+ row: { id: entity.id, ...entity.values },
352
340
  context: currentContext
353
- })
354
- )
341
+ });
342
+ return {
343
+ ...entity,
344
+ values: processedRow as M
345
+ };
346
+ })
355
347
  );
356
348
  } catch (e) {
357
349
  console.error("Error in afterRead callback:", e);
@@ -420,14 +412,14 @@ values: { ...e.values,
420
412
  const accessor = currentDataClient.collection(currentResolvedPath);
421
413
  if (accessor.listen) {
422
414
  const unsubscribe = accessor.listen({
423
- where: whereMap,
415
+ where: whereFilter,
424
416
  limit: itemCount,
425
417
  orderBy: orderByParam
426
418
  }, res => onUpdate(res.data as Entity<M>[]), onError);
427
419
  unsubscribersRef.current[column] = unsubscribe;
428
420
  } else {
429
421
  accessor.find({
430
- where: whereMap,
422
+ where: whereFilter,
431
423
  limit: itemCount,
432
424
  orderBy: orderByParam
433
425
  })
@@ -479,27 +471,13 @@ values: { ...e.values,
479
471
  const accessor = currentDataClient.collection(currentResolvedPath);
480
472
  if (accessor.count) {
481
473
 
482
- const whereMap: Record<string, string> = {};
483
- if (currentFilterValues) {
484
- Object.entries(currentFilterValues).forEach(([key, value]) => {
485
- if (value && Array.isArray(value)) {
486
- const [op, val] = value;
487
- const postgrestOp = op === "==" ? "eq" : op === "!=" ? "neq" : op === ">" ? "gt" : op === ">=" ? "gte" : op === "<" ? "lt" : op === "<=" ? "lte" : op === "in" ? "in" : op === "not-in" ? "nin" : op === "array-contains" ? "cs" : op === "array-contains-any" ? "csa" : "eq";
488
-
489
- let stringVal: string;
490
- if (Array.isArray(val)) {
491
- stringVal = `(${val.join(",")})`;
492
- } else {
493
- stringVal = String(val);
494
- }
495
- whereMap[key] = `${postgrestOp}.${stringVal}`;
496
- }
497
- });
498
- }
499
- whereMap[currentColumnProperty] = `eq.${column}`;
474
+ const whereFilter: FilterValues<string> = {
475
+ ...(currentFilterValues ?? {}),
476
+ [currentColumnProperty]: ["==", column]
477
+ };
500
478
 
501
479
  accessor.count({
502
- where: whereMap
480
+ where: whereFilter
503
481
  }).then(count => {
504
482
  if (isCleaningUpRef.current) return;
505
483
  setColumnData(prev => ({
@@ -1,5 +1,5 @@
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
5
  import { getEntityFromCache } from "@rebasepro/core";
@@ -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 {
@@ -194,8 +194,8 @@ export function resolveCollectionSlotKeys(
194
194
  : [...previewKeys].sort((a, b) => {
195
195
  const propA = collection.properties[a] as Property | undefined;
196
196
  const propB = collection.properties[b] as Property | undefined;
197
- const scoreA = propA?.type === "string" ? (propA.multiline ? 2 : 1) : 0;
198
- const scoreB = propB?.type === "string" ? (propB.multiline ? 2 : 1) : 0;
197
+ const scoreA = propA?.type === "string" ? (propA.ui?.multiline ? 2 : 1) : 0;
198
+ const scoreB = propB?.type === "string" ? (propB.ui?.multiline ? 2 : 1) : 0;
199
199
  return scoreB - scoreA;
200
200
  });
201
201
  const subtitleKey = sortedPreviewKeys.length > 0 ? sortedPreviewKeys[0] : undefined;
@@ -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
@@ -468,7 +468,7 @@ function resolveRelationDisplayName(
468
468
 
469
469
  // Helper to check if a property is a visible, non-id string
470
470
  const isDisplayCandidate = (p: Property): boolean => {
471
- return p.type === "string" && !p.multiline && !p.markdown && !p.storage
471
+ return p.type === "string" && !p.ui?.multiline && !p.ui?.markdown && !p.storage
472
472
  && !("isId" in p && p.isId) && !isHiddenProp(p);
473
473
  };
474
474
 
@@ -178,7 +178,7 @@ function CMSNavigationContent() {
178
178
  // Studio mode shows Studio dev views + admin entries (Users/Roles).
179
179
  // Content mode shows collections, CMS custom views, and admin entries — but not Studio dev views.
180
180
  const filteredEntries = adminModeController.mode === "studio"
181
- ? allNavigationEntries.filter(e => e.type === "view" || e.type === "admin")
181
+ ? allNavigationEntries.filter(e => (e.type === "view" && studioViewSlugs.has(e.slug)) || e.type === "admin")
182
182
  : allNavigationEntries.filter(e => e.type !== "view" || !studioViewSlugs.has(e.slug));
183
183
 
184
184
  // Derive groups from the filtered entries, preserving the order from topLevelNavigation.groups
@@ -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 {
@@ -11,15 +11,15 @@ import {
11
11
  useTranslation
12
12
  } from "@rebasepro/core";
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}/>