@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
package/src/index.ts CHANGED
@@ -2,33 +2,33 @@
2
2
  export * from "./types";
3
3
  // Editor types only — the full ProseMirror editor (RichTextEditor) is a heavy import (~300 KB)
4
4
  // and is available as a separate entry point: @rebasepro/admin/editor
5
- export type { RichTextEditorProps, RichTextEditorTextSize, RebaseEditorProps, RebaseEditorTextSize, JSONContent, EditorAIController } from "./editor";
5
+ export type { RichTextEditorProps, RichTextEditorTextSize, JSONContent, EditorAIController } from "./editor";
6
6
  export * from "./form";
7
7
  export * from "./preview";
8
8
  export * from "./routes";
9
9
 
10
10
  // Components — explicitly listed to avoid conflicts with ./types re-exports
11
11
  export {
12
- EntityView,
13
- EntitySelectionTable,
12
+ EntityViewBinding,
13
+ SelectionTableBinding,
14
14
  SelectableTable,
15
15
  SelectableTableContext,
16
- EntityCollectionView,
17
- EntityCollectionViewActions,
18
- EntityCollectionCardView,
19
- EntityCard,
16
+ CollectionViewBinding,
17
+ CollectionViewActions,
18
+ CollectionCardViewBinding,
19
+ EntityCardBinding,
20
20
  useSelectionController,
21
21
  PropertyConfigBadge,
22
22
  PropertyIdCopyTooltip,
23
- EntityCollectionTable,
24
- EntityCollectionRowActions,
23
+ CollectionTableBinding,
24
+ CollectionRowActions,
25
25
  VirtualTableInput,
26
26
  ArrayContainer,
27
27
  type ArrayEntryParams,
28
28
  ReferenceWidget,
29
29
  SearchIconsView,
30
30
  FieldCaption,
31
- EntityPreview,
31
+ EntityPreviewBinding,
32
32
  getFieldConfig,
33
33
  getFieldId,
34
34
  getDefaultFieldConfig,
@@ -38,7 +38,7 @@ export {
38
38
  copyEntityAction,
39
39
  deleteEntityAction,
40
40
  resetPasswordAction,
41
- SideEntityProvider,
41
+ SidePanelProvider,
42
42
  Scaffold,
43
43
  AppBar,
44
44
  Drawer,
@@ -57,8 +57,8 @@ export {
57
57
  CollectionPanel
58
58
  } from "./components";
59
59
  export type {
60
- EntityViewProps,
61
- EntitySelectionProps,
60
+ EntityViewBindingProps,
61
+ SelectionProps,
62
62
  SelectableTableProps,
63
63
  CollectionPanelProps
64
64
  } from "./components";
@@ -82,6 +82,7 @@ export const PropertyPreview = React.memo(function PropertyPreview<P extends Pro
82
82
  content = <StorageThumbnail
83
83
  interactive={interactive}
84
84
  storeUrl={property.storage?.storeUrl ?? false}
85
+ storageSourceKey={stringProperty.storage.storageSource}
85
86
  size={props.size}
86
87
  fill={fill}
87
88
  storagePathOrDownloadUrl={filePath}/>;
@@ -107,22 +108,6 @@ export const PropertyPreview = React.memo(function PropertyPreview<P extends Pro
107
108
  propertyKey={propertyKey}
108
109
  size={props.size}
109
110
  />;
110
- } else if (stringProperty.reference) {
111
- if (typeof stringProperty.reference.path === "string") {
112
- content = <ReferencePreview
113
- disabled={!stringProperty.reference.path}
114
- previewProperties={stringProperty.reference?.ui?.previewProperties}
115
- includeId={stringProperty.reference.includeId}
116
- includeEntityLink={stringProperty.reference.includeEntityLink}
117
- size={props.size}
118
- reference={new EntityReference({ id: value,
119
- path: stringProperty.reference.path })}
120
- textOnly={props.textOnly}
121
- />;
122
- } else {
123
- content = <EmptyValue/>;
124
- }
125
-
126
111
  } else {
127
112
  content = <StringPropertyPreview {...props}
128
113
  property={stringProperty}
@@ -1,13 +1,13 @@
1
- import type { EntityCollection } from "@rebasepro/types";
1
+ import type { CollectionConfig } from "@rebasepro/types";
2
2
  import * as React from "react";
3
3
 
4
4
  import { Entity, EntityReference } from "@rebasepro/types";
5
5
  import type { PreviewSize } from "../../types/components/PropertyPreviewProps";
6
- import { useCustomizationController, useEntityFetch, useComponentOverride, CollectionComponentOverrideProvider } from "@rebasepro/core";
6
+ import { useCustomizationController, useFetch, useComponentOverride, CollectionScopeProvider } from "@rebasepro/core";
7
7
  import { Skeleton } from "@rebasepro/ui";
8
8
  import { ErrorBoundary } from "@rebasepro/ui";
9
9
  import { ErrorView } from "@rebasepro/core";
10
- import { EntityPreview, EntityPreviewContainer } from "../../components/EntityPreview";
10
+ import { EntityPreviewBinding, EntityPreviewContainer } from "../../components/EntityPreviewBinding";
11
11
  import { useCollectionRegistryController } from "../../index";
12
12
  import { getEntityTitlePropertyKey } from "../../util/previews";
13
13
  import { getValueInPath } from "@rebasepro/utils";
@@ -59,7 +59,7 @@ function ReferencePreviewInternalInner({
59
59
  includeId = true,
60
60
  textOnly,
61
61
  collection
62
- }: ReferencePreviewProps & { collection?: EntityCollection }) {
62
+ }: ReferencePreviewProps & { collection?: CollectionConfig }) {
63
63
  const ResolvedMissingReference = useComponentOverride("Entity.MissingReference", DefaultMissingReference);
64
64
 
65
65
  if (!collection) {
@@ -102,11 +102,11 @@ function ReferencePreviewInternal(props: ReferencePreviewProps) {
102
102
  />
103
103
  );
104
104
 
105
- if (collection?.components) {
105
+ if (collection) {
106
106
  return (
107
- <CollectionComponentOverrideProvider overrides={collection.components}>
107
+ <CollectionScopeProvider collection={collection}>
108
108
  {content}
109
- </CollectionComponentOverrideProvider>
109
+ </CollectionScopeProvider>
110
110
  );
111
111
  }
112
112
  return content;
@@ -124,17 +124,17 @@ function ReferencePreviewExisting<M extends Record<string, unknown> = Record<str
124
124
  hover,
125
125
  textOnly
126
126
  }: ReferencePreviewProps & {
127
- collection: EntityCollection<M>
127
+ collection: CollectionConfig<M>
128
128
  }) {
129
129
 
130
- const ResolvedEntityPreview = useComponentOverride("Entity.Preview", EntityPreview);
130
+ const ResolvedEntityPreview = useComponentOverride("EntityPreview", EntityPreviewBinding);
131
131
  const customizationController = useCustomizationController();
132
132
 
133
133
  const {
134
134
  entity,
135
135
  dataLoading,
136
136
  dataLoadingError
137
- } = useEntityFetch({
137
+ } = useFetch({
138
138
  path: reference.path,
139
139
  entityId: reference.id,
140
140
  collection,
@@ -1,11 +1,11 @@
1
- import type { EntityCollection } from "@rebasepro/types";
1
+ import type { CollectionConfig } from "@rebasepro/types";
2
2
  import * as React from "react";
3
3
 
4
4
  import { Entity, EntityRelation } from "@rebasepro/types";
5
5
  import type { PreviewSize } from "../../types/components/PropertyPreviewProps";
6
- import { useCustomizationController, useEntityFetch, ErrorView, useComponentOverride, CollectionComponentOverrideProvider } from "@rebasepro/core";
6
+ import { useCustomizationController, useFetch, ErrorView, useComponentOverride, CollectionScopeProvider } from "@rebasepro/core";
7
7
  import { Skeleton } from "@rebasepro/ui";
8
- import { EntityPreview, EntityPreviewContainer } from "../../components";
8
+ import { EntityPreviewBinding, EntityPreviewContainer } from "../../components";
9
9
  import { useCollectionRegistryController } from "../../index";
10
10
  import { getEntityTitlePropertyKey } from "../../util/previews";
11
11
  import { getValueInPath } from "@rebasepro/utils";
@@ -31,7 +31,7 @@ function extractDisplayFromPlainObject(obj: unknown): string {
31
31
  if (!obj || typeof obj !== "object") return "—";
32
32
  const record = obj as Record<string, unknown>;
33
33
 
34
- // Try data.values.{name,title,...} (EntityRelation.data is an Entity with .values)
34
+ // Try data.values.{name,title,...} (EntityRelation.data is a Entity with .values)
35
35
  const data = record.data;
36
36
  if (data && typeof data === "object") {
37
37
  const dataRecord = data as Record<string, unknown>;
@@ -92,7 +92,7 @@ function RelationPreviewInternalInner({
92
92
  includeId = true,
93
93
  textOnly,
94
94
  collection
95
- }: RelationPreviewProps & { collection?: EntityCollection }) {
95
+ }: RelationPreviewProps & { collection?: CollectionConfig }) {
96
96
  const ResolvedMissingReference = useComponentOverride("Entity.MissingReference", DefaultMissingReference);
97
97
 
98
98
  if (!collection) {
@@ -132,11 +132,11 @@ function RelationPreviewInternal(props: RelationPreviewProps) {
132
132
  />
133
133
  );
134
134
 
135
- if (collection?.components) {
135
+ if (collection) {
136
136
  return (
137
- <CollectionComponentOverrideProvider overrides={collection.components}>
137
+ <CollectionScopeProvider collection={collection}>
138
138
  {content}
139
- </CollectionComponentOverrideProvider>
139
+ </CollectionScopeProvider>
140
140
  );
141
141
  }
142
142
  return content;
@@ -154,18 +154,19 @@ function RelationPreviewExisting<M extends Record<string, unknown> = Record<stri
154
154
  hover,
155
155
  textOnly
156
156
  }: RelationPreviewProps & {
157
- collection: EntityCollection<M>
157
+ collection: CollectionConfig<M>
158
158
  }) {
159
159
 
160
- const passedEntity = relation.data;
161
- const ResolvedEntityPreview = useComponentOverride("Entity.Preview", EntityPreview);
160
+ // CMS wire format embeds relation data as { id, path, values }
161
+ const passedEntity = relation.data as Entity<M> | undefined;
162
+ const ResolvedEntityPreview = useComponentOverride("EntityPreview", EntityPreviewBinding);
162
163
  const customizationController = useCustomizationController();
163
164
 
164
165
  const {
165
166
  entity,
166
167
  dataLoading,
167
168
  dataLoadingError
168
- } = useEntityFetch({
169
+ } = useFetch({
169
170
  path: relation.path,
170
171
  entityId: passedEntity ? undefined : relation.id,
171
172
  collection,
@@ -2,7 +2,8 @@ import React, { useEffect } from "react";
2
2
 
3
3
  import { renderSkeletonImageThumbnail } from "../property_previews/SkeletonPropertyComponent";
4
4
  import { UrlComponentPreview } from "./UrlComponentPreview";
5
- import { ErrorView, useStorageSource } from "@rebasepro/core";
5
+ import { ErrorView, useStorageSource, useStorageSources } from "@rebasepro/core";
6
+ import { resolveStorageSource } from "@rebasepro/common";
6
7
  import { DownloadConfig, FileType } from "@rebasepro/types";
7
8
  import type { PreviewSize } from "../../types/components/PropertyPreviewProps";
8
9
  import { Skeleton } from "@rebasepro/ui";
@@ -12,6 +13,8 @@ type StorageThumbnailProps = {
12
13
  size: PreviewSize;
13
14
  interactive?: boolean;
14
15
  fill?: boolean;
16
+ /** Key of the storage source backing this property (`StorageConfig.storageSource`). */
17
+ storageSourceKey?: string;
15
18
  };
16
19
 
17
20
  /**
@@ -24,7 +27,8 @@ function areEqual(prevProps: StorageThumbnailProps, nextProps: StorageThumbnailP
24
27
  prevProps.storagePathOrDownloadUrl === nextProps.storagePathOrDownloadUrl &&
25
28
  prevProps.storeUrl === nextProps.storeUrl &&
26
29
  prevProps.interactive === nextProps.interactive &&
27
- prevProps.fill === nextProps.fill;
30
+ prevProps.fill === nextProps.fill &&
31
+ prevProps.storageSourceKey === nextProps.storageSourceKey;
28
32
  }
29
33
 
30
34
  const URL_CACHE: Record<string, DownloadConfig> = {};
@@ -34,13 +38,26 @@ export function StorageThumbnailInternal({
34
38
  interactive,
35
39
  storagePathOrDownloadUrl,
36
40
  size,
37
- fill
41
+ fill,
42
+ storageSourceKey
38
43
  }: StorageThumbnailProps) {
39
44
 
40
45
  const [error, setError] = React.useState<Error | undefined>(undefined);
41
- const storage = useStorageSource();
46
+ const defaultStorage = useStorageSource();
47
+ const storageSources = useStorageSources();
48
+ // Resolve the per-property backend so previews of `storeUrl: false`
49
+ // properties pointing at a named source hit the right backend.
50
+ const storage = resolveStorageSource({
51
+ sourceKey: storageSourceKey,
52
+ sources: storageSources.sources,
53
+ defaultSource: defaultStorage
54
+ });
42
55
 
43
- const [downloadConfig, setDownloadConfig] = React.useState<DownloadConfig>(URL_CACHE[storagePathOrDownloadUrl]);
56
+ // Cache key is namespaced by source so the same path on two backends
57
+ // does not collide.
58
+ const cacheKey = `${storageSourceKey ?? ""}::${storagePathOrDownloadUrl}`;
59
+
60
+ const [downloadConfig, setDownloadConfig] = React.useState<DownloadConfig>(URL_CACHE[cacheKey]);
44
61
 
45
62
  useEffect(() => {
46
63
  if (!storagePathOrDownloadUrl)
@@ -50,13 +67,13 @@ export function StorageThumbnailInternal({
50
67
  .then(function (downloadConfig) {
51
68
  if (!unmounted) {
52
69
  setDownloadConfig(downloadConfig);
53
- URL_CACHE[storagePathOrDownloadUrl] = downloadConfig;
70
+ URL_CACHE[cacheKey] = downloadConfig;
54
71
  }
55
72
  }).catch(setError);
56
73
  return () => {
57
74
  unmounted = true;
58
75
  };
59
- }, [storagePathOrDownloadUrl]);
76
+ }, [storagePathOrDownloadUrl, cacheKey]);
60
77
 
61
78
  if (!storagePathOrDownloadUrl) return null;
62
79
 
@@ -1,10 +1,10 @@
1
- import type { EntityCollection, ViewMode } from "@rebasepro/types";
1
+ import type { CollectionConfig, ViewMode } from "@rebasepro/types";
2
2
  import { Blocker, useBlocker, useLocation } from "react-router-dom";
3
- import { EntityEditView } from "../components/EntityEditView";
4
- import { EntityDetailView } from "../components/EntityDetailView";
3
+ import { EditViewBinding } from "../components/EditViewBinding";
4
+ import { DetailViewBinding } from "../components/DetailViewBinding";
5
5
  import { useEffect, useRef, useState } from "react";
6
6
  import { useNavigate } from "react-router-dom";
7
- import { EntityCollectionView } from "../components";
7
+ import { CollectionViewBinding } from "../components";
8
8
  import { NotFoundPage, useUserConfigurationPersistence, useComponentOverride } from "@rebasepro/core";
9
9
  import { UnsavedChangesDialog } from "@rebasepro/core";
10
10
  import { CircularProgressCenter } from "@rebasepro/ui";
@@ -20,7 +20,7 @@ export function RebaseRoute() {
20
20
  const urlController = useUrlController();
21
21
  const breadcrumbs = useBreadcrumbsController();
22
22
  const userConfigPersistence = useUserConfigurationPersistence();
23
- const ResolvedCollectionView = useComponentOverride("Collection.View", EntityCollectionView);
23
+ const ResolvedCollectionView = useComponentOverride("Collection.View", CollectionViewBinding);
24
24
 
25
25
  const hash = location.hash;
26
26
  const isSidePanel = hash.includes("#side");
@@ -82,7 +82,7 @@ export function RebaseRoute() {
82
82
  }
83
83
 
84
84
  if (navigationEntries.length === 1 && navigationEntries[0].type === "collection") {
85
- let collection: EntityCollection<any> | undefined;
85
+ let collection: CollectionConfig<any> | undefined;
86
86
  collection = collectionRegistry.getCollection(navigationEntries[0].id);
87
87
  if (!collection)
88
88
  collection = collectionRegistry.getCollection(navigationEntries[0].slug);
@@ -104,7 +104,7 @@ export function RebaseRoute() {
104
104
  if (isSidePanel) {
105
105
  const lastCollectionEntry = [...navigationEntries].reverse().find((entry) => entry.type === "collection");
106
106
  if (lastCollectionEntry) {
107
- let collection: EntityCollection<any> | undefined;
107
+ let collection: CollectionConfig<any> | undefined;
108
108
  const firstEntry = navigationEntries[0] as NavigationViewCollectionInternal<any>;
109
109
  collection = collectionRegistry.getCollection(firstEntry.id);
110
110
  if (!collection)
@@ -140,7 +140,7 @@ export function RebaseRoute() {
140
140
  lastEntityEntry?.type === "entity" &&
141
141
  (navigationEntries.length === 2 || navigationEntries.length === 3)
142
142
  ) {
143
- let collection: EntityCollection<any> | undefined;
143
+ let collection: CollectionConfig<any> | undefined;
144
144
  collection = collectionRegistry.getCollection(firstCollectionEntry.id);
145
145
  if (!collection)
146
146
  collection = collectionRegistry.getCollection(firstCollectionEntry.slug);
@@ -345,7 +345,7 @@ function EntityFullScreenRoute({
345
345
 
346
346
  if (isDetailMode) {
347
347
  return <>
348
- <EntityDetailView
348
+ <DetailViewBinding
349
349
  key={collection.slug + "_view_" + entityId}
350
350
  entityId={entityId}
351
351
  collection={collection}
@@ -372,7 +372,7 @@ function EntityFullScreenRoute({
372
372
  }
373
373
 
374
374
  return <>
375
- <EntityEditView
375
+ <EditViewBinding
376
376
  key={collection.slug + "_" + (isNew ? "new" : (isCopy ? entityId + "_copy" : entityId))}
377
377
  entityId={isNew ? undefined : entityId}
378
378
  collection={collection}
@@ -1,11 +1,11 @@
1
1
  import { Entity } from "@rebasepro/types";
2
- import { EntityCollection } from "@rebasepro/types";
2
+ import { CollectionConfig } from "@rebasepro/types";
3
3
  import { FormContext } from "../fields";
4
4
  import { FormexController } from "./formex";
5
5
 
6
6
  export interface EntityFormActionsProps {
7
7
  path: string;
8
- collection: EntityCollection;
8
+ collection: CollectionConfig;
9
9
  entity?: Entity;
10
10
  layout: "bottom" | "side" | "responsive";
11
11
  savingError?: Error;
@@ -1,5 +1,5 @@
1
1
  import { Entity, EntityStatus } from "@rebasepro/types";
2
- import { EntityCollection, EntityCustomViewParams } from "@rebasepro/types";
2
+ import { CollectionConfig, EntityCustomViewParams } from "@rebasepro/types";
3
3
  import { FormContext } from "../fields";
4
4
  import { FormexController } from "./formex";
5
5
  import { EntityFormActionsProps } from "./EntityFormActionsProps";
@@ -12,7 +12,7 @@ import { EntityFormActionsProps } from "./EntityFormActionsProps";
12
12
  export type EntityFormProps<M extends Record<string, unknown>> = {
13
13
  path: string;
14
14
  fullIdPath?: string;
15
- collection: EntityCollection<M>;
15
+ collection: CollectionConfig<M>;
16
16
  entityId?: string | number;
17
17
  entity?: Entity<M>;
18
18
  databaseId?: string;
@@ -120,5 +120,5 @@ export type OnUpdateParams = {
120
120
  path: string,
121
121
  entityId?: string | number;
122
122
  selectedTab?: string;
123
- collection: EntityCollection<Record<string, unknown>>
123
+ collection: CollectionConfig<Record<string, unknown>>
124
124
  };
@@ -15,7 +15,7 @@ export interface PropertyPreviewProps<P extends Property | Property, CustomProps
15
15
  */
16
16
  propertyKey?: string;
17
17
 
18
- value: any;
18
+ value: InferPropertyType<P> | any;
19
19
 
20
20
  /**
21
21
  * Property this display is related to, now strongly typed to P
@@ -1,7 +1,7 @@
1
1
  import { InferPropertyType } from "@rebasepro/types";
2
2
  import { Entity } from "@rebasepro/types";
3
3
  import { FormexController } from "./components/formex";
4
- import { EntityCollection } from "@rebasepro/types";
4
+ import { CollectionConfig } from "@rebasepro/types";
5
5
  import { Property } from "@rebasepro/types";
6
6
 
7
7
  export type DefaultFieldConfig =
@@ -19,7 +19,6 @@ export type DefaultFieldConfig =
19
19
  | "multi_number_select"
20
20
  | "file_upload"
21
21
  | "multi_file_upload"
22
- | "reference_as_string"
23
22
  | "reference"
24
23
  | "multi_references"
25
24
  | "relation"
@@ -51,12 +50,8 @@ export interface FieldProps<
51
50
  /**
52
51
  * Current value of this field, inferred from the property type P
53
52
  */
54
- value: any;
55
-
56
- /**
57
- * Set value of field directly
58
- */
59
- setValue: (value: any | null, shouldValidate?: boolean) => void;
53
+ value: InferPropertyType<P> | any;
54
+ setValue: (value: InferPropertyType<P> | null | any, shouldValidate?: boolean) => void;
60
55
 
61
56
  /**
62
57
  * Set value of a different field directly
@@ -195,7 +190,7 @@ export interface FormContext<M extends Record<string, unknown> = Record<string,
195
190
  /**
196
191
  * Collection of the entity being modified
197
192
  */
198
- collection?: EntityCollection<M>;
193
+ collection?: CollectionConfig<M>;
199
194
 
200
195
  /**
201
196
  * Entity id, it can be undefined if it's a new entity
@@ -9,25 +9,19 @@ import type { Entity, EntityTableController } from "@rebasepro/types";
9
9
  import type { CollectionDataController } from "@rebasepro/ui";
10
10
 
11
11
  /**
12
- * Flatten Entity<M> objects to plain row objects.
13
- * The headless view works with flat `Record<string, unknown>` rows,
14
- * while the entity system uses `{ id, path, values: M }`.
15
- *
16
- * The flattened row includes `id` and `path` at the top level,
17
- * plus all values spread.
12
+ * Unwrap `Entity<M>` objects to flat rows for the headless view.
13
+ * The entity system uses `{ id, path, values: M }`; `values` is already the
14
+ * flat row `M` carrying its real primary key, so unwrapping is just `.values` —
15
+ * no `id`/`path` merge (those are view-model metadata, not row columns).
18
16
  */
19
17
  function flattenEntities<M extends Record<string, unknown>>(
20
18
  entities: Entity<M>[]
21
- ): Array<M & { id: string | number; path: string }> {
22
- return entities.map(entity => ({
23
- id: entity.id,
24
- path: entity.path,
25
- ...entity.values
26
- }));
19
+ ): M[] {
20
+ return entities.map(entity => entity.values);
27
21
  }
28
22
 
29
23
  /**
30
- * React hook that adapts an EntityTableController to a CollectionDataController.
24
+ * React hook that adapts a EntityTableController to a CollectionDataController.
31
25
  *
32
26
  * Usage:
33
27
  * ```tsx
@@ -39,13 +33,13 @@ function flattenEntities<M extends Record<string, unknown>>(
39
33
  */
40
34
  export function useCollectionDataController<M extends Record<string, unknown>>(
41
35
  tableController: EntityTableController<M>
42
- ): CollectionDataController<M & { id: string | number; path: string }> {
36
+ ): CollectionDataController<M> {
43
37
  const flatData = useMemo(
44
38
  () => flattenEntities(tableController.data),
45
39
  [tableController.data]
46
40
  );
47
41
 
48
- return useMemo((): CollectionDataController<M & { id: string | number; path: string }> => ({
42
+ return useMemo((): CollectionDataController<M> => ({
49
43
  data: flatData,
50
44
  loading: tableController.dataLoading,
51
45
  noMoreToLoad: tableController.noMoreToLoad,
@@ -1,4 +1,4 @@
1
- import type { EntityCollection, UrlController, SideEntityController, NavigateOptions } from "@rebasepro/types";
1
+ import type { CollectionConfig, UrlController, SidePanelController, NavigateOptions } from "@rebasepro/types";
2
2
 
3
3
  // Canonical path utilities — single source of truth in @rebasepro/common
4
4
  export {
@@ -13,7 +13,7 @@ export {
13
13
  } from "@rebasepro/common";
14
14
 
15
15
  /**
16
- * Navigate to an entity using either a side panel or full-screen mode.
16
+ * Navigate to a entity using either a side panel or full-screen mode.
17
17
  * This is an admin-specific UI concern and lives here (not in common).
18
18
  */
19
19
  export function navigateToEntity({
@@ -24,7 +24,7 @@ export function navigateToEntity({
24
24
  path,
25
25
  selectedTab,
26
26
  defaultValues,
27
- sideEntityController,
27
+ sidePanelController,
28
28
  onClose,
29
29
  navigation,
30
30
  replace
@@ -32,7 +32,7 @@ export function navigateToEntity({
32
32
 
33
33
  {
34
34
  openEntityMode?: "side_panel" | "full_screen" | "split" | "dialog";
35
- collection?: EntityCollection;
35
+ collection?: CollectionConfig;
36
36
  entityId?: string | number;
37
37
  selectedTab?: string;
38
38
  copy?: boolean;
@@ -40,13 +40,13 @@ export function navigateToEntity({
40
40
  * Pre-populate the new entity form with these values.
41
41
  * Only applied when entityId is not set (i.e. "new" mode).
42
42
  *
43
- * Side panel: passed through EntitySidePanelPropsEntityEditView.
43
+ * Side panel: passed through SidePanelBindingPropsEditViewBinding.
44
44
  * Full screen: carried via React Router location.state so the route
45
45
  * component can read it on mount without polluting the URL.
46
46
  */
47
47
  defaultValues?: Record<string, unknown>;
48
48
  path: string;
49
- sideEntityController: SideEntityController;
49
+ sidePanelController: SidePanelController;
50
50
  onClose?: () => void;
51
51
  navigation: UrlController;
52
52
  replace?: boolean;
@@ -55,7 +55,7 @@ export function navigateToEntity({
55
55
  if (openEntityMode === "side_panel" || openEntityMode === "dialog") {
56
56
 
57
57
 
58
- sideEntityController.open({
58
+ sidePanelController.open({
59
59
  entityId,
60
60
  path: path,
61
61
  copy,
@@ -1,4 +1,4 @@
1
- import type { EntityCollection, Property, PropertyConfig } from "@rebasepro/types";
1
+ import type { CollectionConfig, Property, PropertyConfig } from "@rebasepro/types";
2
2
  import { AuthController } from "@rebasepro/types";
3
3
  import { isPropertyBuilder } from "@rebasepro/common";
4
4
  import { isReferenceProperty, isRelationProperty } from "./property_utils";
@@ -8,9 +8,28 @@ function isHiddenProperty(property: Property | undefined): boolean {
8
8
  return Boolean(property.ui?.hideFromCollection);
9
9
  }
10
10
 
11
+ /**
12
+ * Returns true when the property holds file-storage content (single image,
13
+ * array of images, generic upload, …). These properties are rendered by the
14
+ * dedicated image-slot and should NOT appear as regular preview columns.
15
+ */
16
+ function isStorageProperty(property: Property | undefined): boolean {
17
+ if (!property) return false;
18
+ // Single string with storage config
19
+ if (property.type === "string" && property.storage) return true;
20
+ // String displayed as image URL
21
+ if (property.type === "string" && property.ui?.url === "image") return true;
22
+ // Array whose inner element has storage config or image URL
23
+ if (property.type === "array" && property.of && !Array.isArray(property.of)) {
24
+ const inner = property.of;
25
+ if (inner.type === "string" && (inner.storage || inner.ui?.url === "image")) return true;
26
+ }
27
+ return false;
28
+ }
29
+
11
30
  export function getEntityPreviewKeys(
12
31
  authController: AuthController,
13
- targetCollection: EntityCollection<any>,
32
+ targetCollection: CollectionConfig<any>,
14
33
  fields: Record<string, PropertyConfig>,
15
34
  previewProperties?: string[],
16
35
  limit = 3) {
@@ -33,12 +52,13 @@ export function getEntityPreviewKeys(
33
52
  .filter(key => {
34
53
  const property = targetCollection.properties[key];
35
54
  return property && !isPropertyBuilder(property) && !isReferenceProperty(property) && !isHiddenProperty(property)
55
+ && !isStorageProperty(property as Property)
36
56
  && (hasExplicitOrder || !isRelationProperty(property));
37
57
  }).slice(0, limit);
38
58
  }
39
59
  }
40
60
 
41
- export function getEntityTitlePropertyKey<M extends Record<string, unknown>>(collection: EntityCollection<M>, propertyConfigs: Record<string, PropertyConfig>): string | undefined {
61
+ export function getEntityTitlePropertyKey<M extends Record<string, unknown>>(collection: CollectionConfig<M>, propertyConfigs: Record<string, PropertyConfig>): string | undefined {
42
62
  if (collection.titleProperty) {
43
63
  return collection.titleProperty as string;
44
64
  }
@@ -44,10 +44,10 @@ export function mapPropertyToConfig(property: Property): CollectionPropertyConfi
44
44
  if (property.enum) {
45
45
  base.enum = mapEnumValues(property.enum);
46
46
  }
47
- if (property.multiline) base.multiline = true;
47
+ if (property.ui?.multiline) base.multiline = true;
48
48
  if (property.ui?.previewAsTag) base.previewAsTag = true;
49
- if (property.url || property.ui?.url) base.url = property.url ?? property.ui?.url;
50
- if (property.ui?.markdown || property.markdown) base.markdown = true;
49
+ if (property.ui?.url) base.url = property.ui.url;
50
+ if (property.ui?.markdown) base.markdown = true;
51
51
  if (property.storage) base.storage = true;
52
52
  if (property.email) base.email = true;
53
53
  }
@@ -1,6 +1,6 @@
1
1
 
2
2
  import type { Properties } from "@rebasepro/types";
3
- import type { EntityCollection, MapProperty, Property, PropertyConfig, StringProperty } from "@rebasepro/types";
3
+ import type { CollectionConfig, MapProperty, Property, PropertyConfig } from "@rebasepro/types";
4
4
  import React from "react";
5
5
 
6
6
  import { isPropertyBuilder } from "@rebasepro/common";
@@ -75,7 +75,6 @@ function getDefaultIconForProperty(property: Property): LucideIcon {
75
75
  if (property.ui?.url) return GlobeIcon;
76
76
  if (property.email) return MailIcon;
77
77
  if (property.ui?.multiline || property.ui?.markdown) return AlignLeftIcon;
78
- if ((property as StringProperty).reference) return LinkIcon;
79
78
  return TextIcon;
80
79
  }
81
80
  case "number":
@@ -225,7 +224,7 @@ export function getPropertiesWithPropertiesOrder(properties: Properties, propert
225
224
  return result;
226
225
  }
227
226
 
228
- export function getDefaultPropertiesOrder(collection: EntityCollection): string[] {
227
+ export function getDefaultPropertiesOrder(collection: CollectionConfig): string[] {
229
228
  if (collection.propertiesOrder) return collection.propertiesOrder;
230
229
  return [...Object.keys(collection.properties), ...(collection.additionalFields ?? []).map(field => field.key)];
231
230
  }