@rebasepro/admin 0.5.0 → 0.6.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 (337) hide show
  1. package/dist/CollectionEditorDialog-jA-PLh6N.js +3549 -0
  2. package/dist/CollectionEditorDialog-jA-PLh6N.js.map +1 -0
  3. package/dist/CollectionsStudioView-UKouBPOm.js +170 -0
  4. package/dist/CollectionsStudioView-UKouBPOm.js.map +1 -0
  5. package/dist/PropertyEditView-DEUddmg_.js +3660 -0
  6. package/dist/PropertyEditView-DEUddmg_.js.map +1 -0
  7. package/dist/collection_editor/ConfigControllerProvider.d.ts +2 -2
  8. package/dist/collection_editor/ui/AddKanbanColumnAction.d.ts +2 -1
  9. package/dist/collection_editor/ui/CollectionViewHeaderAction.d.ts +2 -1
  10. package/dist/collection_editor/ui/EditorCollectionAction.d.ts +1 -1
  11. package/dist/collection_editor/ui/EditorCollectionActionStart.d.ts +1 -1
  12. package/dist/collection_editor/ui/EditorEntityAction.d.ts +1 -1
  13. package/dist/collection_editor/ui/HomePageEditorCollectionAction.d.ts +1 -1
  14. package/dist/collection_editor/ui/KanbanSetupAction.d.ts +2 -1
  15. package/dist/collection_editor/ui/MissingReferenceWidget.d.ts +1 -1
  16. package/dist/collection_editor/ui/NewCollectionButton.d.ts +1 -1
  17. package/dist/collection_editor/ui/NewCollectionCard.d.ts +1 -1
  18. package/dist/collection_editor/ui/PropertyAddColumnComponent.d.ts +1 -1
  19. package/dist/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.d.ts +1 -1
  20. package/dist/collection_editor/ui/collection_editor/AIModifiedPathsContext.d.ts +1 -1
  21. package/dist/collection_editor/ui/collection_editor/CollectionDetailsForm.d.ts +2 -1
  22. package/dist/collection_editor/ui/collection_editor/CollectionEditorDialog.d.ts +2 -2
  23. package/dist/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.d.ts +2 -2
  24. package/dist/collection_editor/ui/collection_editor/CollectionJsonImportDialog.d.ts +2 -1
  25. package/dist/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +1 -1
  26. package/dist/collection_editor/ui/collection_editor/CollectionRLSTab.d.ts +2 -1
  27. package/dist/collection_editor/ui/collection_editor/CollectionRelationsTab.d.ts +2 -1
  28. package/dist/collection_editor/ui/collection_editor/CollectionStudioView.d.ts +2 -1
  29. package/dist/collection_editor/ui/collection_editor/CollectionYupValidation.d.ts +1 -9
  30. package/dist/collection_editor/ui/collection_editor/CollectionsStudioView.d.ts +2 -1
  31. package/dist/collection_editor/ui/collection_editor/DisplaySettingsForm.d.ts +2 -1
  32. package/dist/collection_editor/ui/collection_editor/EntityActionsEditTab.d.ts +2 -1
  33. package/dist/collection_editor/ui/collection_editor/EntityActionsSelectDialog.d.ts +2 -1
  34. package/dist/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.d.ts +2 -1
  35. package/dist/collection_editor/ui/collection_editor/EnumForm.d.ts +2 -1
  36. package/dist/collection_editor/ui/collection_editor/GeneralSettingsForm.d.ts +2 -1
  37. package/dist/collection_editor/ui/collection_editor/GetCodeDialog.d.ts +2 -1
  38. package/dist/collection_editor/ui/collection_editor/KanbanConfigSection.d.ts +2 -1
  39. package/dist/collection_editor/ui/collection_editor/LayoutModeSwitch.d.ts +1 -1
  40. package/dist/collection_editor/ui/collection_editor/PropertyEditView.d.ts +4 -4
  41. package/dist/collection_editor/ui/collection_editor/PropertyFieldPreview.d.ts +2 -2
  42. package/dist/collection_editor/ui/collection_editor/PropertyTree.d.ts +2 -2
  43. package/dist/collection_editor/ui/collection_editor/SubcollectionsEditTab.d.ts +2 -1
  44. package/dist/collection_editor/ui/collection_editor/SwitchControl.d.ts +2 -1
  45. package/dist/collection_editor/ui/collection_editor/ViewModeSwitch.d.ts +1 -1
  46. package/dist/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.d.ts +1 -1
  47. package/dist/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.d.ts +3 -2
  48. package/dist/collection_editor/ui/collection_editor/properties/BlockPropertyField.d.ts +2 -1
  49. package/dist/collection_editor/ui/collection_editor/properties/BooleanPropertyField.d.ts +2 -1
  50. package/dist/collection_editor/ui/collection_editor/properties/DateTimePropertyField.d.ts +2 -1
  51. package/dist/collection_editor/ui/collection_editor/properties/EnumPropertyField.d.ts +2 -1
  52. package/dist/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.d.ts +2 -1
  53. package/dist/collection_editor/ui/collection_editor/properties/MapPropertyField.d.ts +2 -1
  54. package/dist/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.d.ts +2 -1
  55. package/dist/collection_editor/ui/collection_editor/properties/NumberPropertyField.d.ts +2 -1
  56. package/dist/collection_editor/ui/collection_editor/properties/ReferencePropertyField.d.ts +3 -2
  57. package/dist/collection_editor/ui/collection_editor/properties/RelationPropertyField.d.ts +2 -1
  58. package/dist/collection_editor/ui/collection_editor/properties/RepeatPropertyField.d.ts +2 -1
  59. package/dist/collection_editor/ui/collection_editor/properties/StoragePropertyField.d.ts +2 -1
  60. package/dist/collection_editor/ui/collection_editor/properties/StringPropertyField.d.ts +2 -1
  61. package/dist/collection_editor/ui/collection_editor/properties/UrlPropertyField.d.ts +2 -1
  62. package/dist/collection_editor/ui/collection_editor/properties/VectorPropertyField.d.ts +2 -1
  63. package/dist/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.d.ts +2 -1
  64. package/dist/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.d.ts +2 -1
  65. package/dist/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.d.ts +1 -1
  66. package/dist/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.d.ts +2 -1
  67. package/dist/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.d.ts +2 -1
  68. package/dist/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.d.ts +2 -1
  69. package/dist/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.d.ts +2 -1
  70. package/dist/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.d.ts +2 -1
  71. package/dist/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.d.ts +1 -1
  72. package/dist/collection_editor_ui.js +4 -11
  73. package/dist/components/ArrayContainer.d.ts +3 -3
  74. package/dist/components/ClearFilterSortButton.d.ts +1 -1
  75. package/dist/components/CollectionEditorDialogs.d.ts +2 -1
  76. package/dist/components/CollectionPanel.d.ts +2 -27
  77. package/dist/components/DefaultAppBar.d.ts +1 -1
  78. package/dist/components/DefaultDrawer.d.ts +4 -4
  79. package/dist/components/DeleteEntityDialog.d.ts +2 -1
  80. package/dist/components/DrawerNavigationGroup.d.ts +1 -1
  81. package/dist/components/DrawerNavigationItem.d.ts +1 -1
  82. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +1 -1
  83. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -1
  84. package/dist/components/EntityCollectionTable/fields/TableMultipleRelationField.d.ts +3 -3
  85. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -3
  86. package/dist/components/EntityCollectionTable/fields/TableRelationField.d.ts +3 -3
  87. package/dist/components/EntityCollectionTable/fields/TableRelationSelectorField.d.ts +2 -1
  88. package/dist/components/EntityCollectionTable/fields/TableStorageUpload.d.ts +2 -2
  89. package/dist/components/EntityCollectionTable/fields/VirtualTableDateField.d.ts +1 -1
  90. package/dist/components/EntityCollectionTable/fields/VirtualTableInput.d.ts +2 -1
  91. package/dist/components/EntityCollectionTable/fields/VirtualTableNumberInput.d.ts +2 -1
  92. package/dist/components/EntityCollectionTable/fields/VirtualTableSelect.d.ts +1 -1
  93. package/dist/components/EntityCollectionTable/fields/VirtualTableSwitch.d.ts +2 -1
  94. package/dist/components/EntityCollectionTable/fields/VirtualTableUserSelect.d.ts +1 -1
  95. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -1
  96. package/dist/components/EntityCollectionTable/internal/EntityTableCellActions.d.ts +1 -1
  97. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +4 -3
  98. package/dist/components/EntityCollectionView/Board.d.ts +2 -1
  99. package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +1 -1
  100. package/dist/components/EntityCollectionView/BoardSortableList.d.ts +1 -1
  101. package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +1 -1
  102. package/dist/components/EntityCollectionView/EntityCard.d.ts +2 -1
  103. package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +1 -1
  104. package/dist/components/EntityCollectionView/EntityCollectionCardView.d.ts +1 -1
  105. package/dist/components/EntityCollectionView/EntityCollectionListView.d.ts +1 -1
  106. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +0 -24
  107. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +1 -1
  108. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +2 -1
  109. package/dist/components/EntityCollectionView/FilterPresetsButton.d.ts +2 -1
  110. package/dist/components/EntityCollectionView/FiltersDialog.d.ts +2 -1
  111. package/dist/components/EntityCollectionView/SplitListView.d.ts +1 -1
  112. package/dist/components/EntityCollectionView/ViewModeToggle.d.ts +2 -1
  113. package/dist/components/EntityDetailView.d.ts +1 -1
  114. package/dist/components/EntityEditView.d.ts +2 -2
  115. package/dist/components/EntityEditViewFormActions.d.ts +2 -1
  116. package/dist/components/EntityJsonPreview.d.ts +2 -1
  117. package/dist/components/EntityPreview.d.ts +3 -3
  118. package/dist/components/EntitySidePanel.d.ts +2 -1
  119. package/dist/components/EntityView.d.ts +2 -1
  120. package/dist/components/FieldCaption.d.ts +1 -1
  121. package/dist/components/HomePage/ContentHomePage.d.ts +1 -1
  122. package/dist/components/HomePage/FavouritesView.d.ts +1 -1
  123. package/dist/components/HomePage/HomePageDnD.d.ts +4 -4
  124. package/dist/components/HomePage/NavigationCard.d.ts +1 -1
  125. package/dist/components/HomePage/NavigationCardBinding.d.ts +2 -1
  126. package/dist/components/HomePage/NavigationGroup.d.ts +2 -2
  127. package/dist/components/HomePage/RenameGroupDialog.d.ts +2 -1
  128. package/dist/components/HomePage/SmallNavigationCard.d.ts +1 -1
  129. package/dist/components/PropertyCollectionView.d.ts +2 -1
  130. package/dist/components/PropertyIdCopyTooltip.d.ts +2 -2
  131. package/dist/components/RebaseAuthGate.d.ts +1 -1
  132. package/dist/components/RebaseLayout.d.ts +1 -1
  133. package/dist/components/RebaseNavigation.d.ts +1 -1
  134. package/dist/components/RebaseRouteDefs.d.ts +1 -1
  135. package/dist/components/RebaseShell.d.ts +1 -1
  136. package/dist/components/ReferenceTable/EntitySelectionTable.d.ts +1 -1
  137. package/dist/components/ReferenceWidget.d.ts +2 -1
  138. package/dist/components/SearchIconsView.d.ts +2 -1
  139. package/dist/components/SelectableTable/SelectableTable.d.ts +2 -2
  140. package/dist/components/SelectableTable/filters/BooleanFilterField.d.ts +2 -1
  141. package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +2 -1
  142. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  143. package/dist/components/SelectableTable/filters/RelationFilterField.d.ts +2 -1
  144. package/dist/components/SelectableTable/filters/StringNumberFilterField.d.ts +2 -1
  145. package/dist/components/SideDialogs.d.ts +1 -1
  146. package/dist/components/SideEntityProvider.d.ts +1 -1
  147. package/dist/components/admin/CreationResultDialog.d.ts +2 -1
  148. package/dist/components/app/AppBar.d.ts +1 -1
  149. package/dist/components/app/Drawer.d.ts +1 -1
  150. package/dist/components/common/default_entity_actions.d.ts +2 -1
  151. package/dist/components/history/EntityHistoryEntry.d.ts +1 -1
  152. package/dist/components/history/EntityHistoryView.d.ts +1 -1
  153. package/dist/components/history/LastEditedByFormAction.d.ts +2 -1
  154. package/dist/components/history/LastEditedByIndicator.d.ts +2 -1
  155. package/dist/components/history/UserChip.d.ts +1 -1
  156. package/dist/data_export/export/BasicExportAction.d.ts +2 -1
  157. package/dist/data_export/export/ExportCollectionAction.d.ts +1 -1
  158. package/dist/data_import/components/DataNewPropertiesMapping.d.ts +1 -1
  159. package/dist/data_import/components/ImportFileUpload.d.ts +1 -1
  160. package/dist/data_import/components/ImportNewPropertyFieldPreview.d.ts +2 -1
  161. package/dist/data_import/components/ImportSaveInProgress.d.ts +1 -1
  162. package/dist/data_import/import/ImportCollectionAction.d.ts +4 -3
  163. package/dist/editor/components/SlashCommandMenu.d.ts +2 -1
  164. package/dist/editor/editor.d.ts +1 -1
  165. package/dist/editor/selectors/color-selector.d.ts +1 -1
  166. package/dist/editor/selectors/link-selector.d.ts +1 -1
  167. package/dist/editor/selectors/node-selector.d.ts +1 -1
  168. package/dist/editor/selectors/text-buttons.d.ts +1 -1
  169. package/dist/editor.js +2621 -3574
  170. package/dist/editor.js.map +1 -1
  171. package/dist/form/EntityForm.d.ts +2 -1
  172. package/dist/form/EntityFormActions.d.ts +2 -1
  173. package/dist/form/components/FieldHelperText.d.ts +1 -1
  174. package/dist/form/components/FormEntry.d.ts +1 -1
  175. package/dist/form/components/FormLayout.d.ts +1 -1
  176. package/dist/form/components/LabelWithIconAndTooltip.d.ts +1 -1
  177. package/dist/form/components/LocalChangesMenu.d.ts +2 -1
  178. package/dist/form/components/StorageItemPreview.d.ts +2 -1
  179. package/dist/form/components/StorageUploadProgress.d.ts +2 -1
  180. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +2 -1
  181. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +2 -1
  182. package/dist/form/field_bindings/BlockFieldBinding.d.ts +2 -1
  183. package/dist/form/field_bindings/DateTimeFieldBinding.d.ts +2 -1
  184. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +2 -1
  185. package/dist/form/field_bindings/MapFieldBinding.d.ts +2 -1
  186. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +2 -1
  187. package/dist/form/field_bindings/MultiSelectFieldBinding.d.ts +2 -1
  188. package/dist/form/field_bindings/MultipleRelationFieldBinding.d.ts +2 -1
  189. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +2 -1
  190. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +2 -1
  191. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -1
  192. package/dist/form/field_bindings/RelationFieldBinding.d.ts +2 -1
  193. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +2 -1
  194. package/dist/form/field_bindings/SelectFieldBinding.d.ts +2 -1
  195. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -2
  196. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +2 -1
  197. package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -1
  198. package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +2 -1
  199. package/dist/form/field_bindings/VectorFieldBinding.d.ts +2 -1
  200. package/dist/history-BL49TIDb.js +311 -0
  201. package/dist/history-BL49TIDb.js.map +1 -0
  202. package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +0 -2
  203. package/dist/hooks/navigation/useNavigationResolution.d.ts +5 -6
  204. package/dist/hooks/navigation/useResolvedCollections.d.ts +0 -2
  205. package/dist/hooks/useBreadcrumbsController.d.ts +2 -32
  206. package/dist/index.js +2 -3393
  207. package/dist/markdown-CklalUUk.js +526 -0
  208. package/dist/markdown-CklalUUk.js.map +1 -0
  209. package/dist/preview/components/ArrayEnumPreview.d.ts +2 -1
  210. package/dist/preview/components/EmptyValue.d.ts +2 -1
  211. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  212. package/dist/preview/components/ImagePreview.d.ts +2 -1
  213. package/dist/preview/components/ReferencePreview.d.ts +2 -1
  214. package/dist/preview/components/RelationPreview.d.ts +2 -1
  215. package/dist/preview/components/StorageThumbnail.d.ts +1 -1
  216. package/dist/preview/components/UserPreview.d.ts +6 -3
  217. package/dist/preview/property_previews/ArrayOfMapsPreview.d.ts +2 -1
  218. package/dist/preview/property_previews/ArrayOfReferencesPreview.d.ts +1 -1
  219. package/dist/preview/property_previews/ArrayOfRelationsPreview.d.ts +1 -1
  220. package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +2 -1
  221. package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +2 -1
  222. package/dist/preview/property_previews/ArrayOneOfPreview.d.ts +2 -1
  223. package/dist/preview/property_previews/ArrayPropertyEnumPreview.d.ts +1 -1
  224. package/dist/preview/property_previews/ArrayPropertyPreview.d.ts +2 -1
  225. package/dist/preview/property_previews/MapPropertyPreview.d.ts +3 -2
  226. package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +5 -4
  227. package/dist/rolldown-runtime-D7D4PA-g.js +13 -0
  228. package/dist/routes/RebaseRoute.d.ts +1 -1
  229. package/dist/src-BJ8fkM8y.js +24010 -0
  230. package/dist/src-BJ8fkM8y.js.map +1 -0
  231. package/dist/types/components/PropertyPreviewProps.d.ts +4 -0
  232. package/dist/types/components/formex.d.ts +1 -40
  233. package/dist/types/fields.d.ts +9 -1
  234. package/dist/util/navigation_utils.d.ts +2 -1
  235. package/dist/util/previews.d.ts +5 -0
  236. package/dist/util/property_utils.d.ts +1 -1
  237. package/package.json +29 -26
  238. package/src/collection_editor/ConfigControllerProvider.tsx +10 -7
  239. package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +2 -1
  240. package/src/collection_editor/ui/EditorCollectionAction.tsx +2 -1
  241. package/src/collection_editor/ui/EditorCollectionActionStart.tsx +2 -1
  242. package/src/collection_editor/ui/EditorEntityAction.tsx +2 -1
  243. package/src/collection_editor/ui/KanbanSetupAction.tsx +2 -1
  244. package/src/collection_editor/ui/MissingReferenceWidget.tsx +2 -1
  245. package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +2 -1
  246. package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +2 -3
  247. package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +0 -1
  248. package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +8 -4
  249. package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +2 -1
  250. package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +1 -1
  251. package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +5 -2
  252. package/src/collection_editor/useLocalCollectionsConfigController.tsx +7 -2
  253. package/src/collection_editor/validateCollectionJson.ts +2 -2
  254. package/src/components/CollectionPanel.tsx +51 -25
  255. package/src/components/DefaultAppBar.tsx +1 -2
  256. package/src/components/DefaultDrawer.tsx +3 -2
  257. package/src/components/DrawerNavigationGroup.tsx +3 -2
  258. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -9
  259. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +1 -1
  260. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +1 -0
  261. package/src/components/EntityCollectionView/Board.tsx +10 -8
  262. package/src/components/EntityCollectionView/BoardSortableList.tsx +2 -2
  263. package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +4 -2
  264. package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +14 -4
  265. package/src/components/EntityCollectionView/EntityCollectionListView.tsx +48 -26
  266. package/src/components/EntityCollectionView/EntityCollectionView.tsx +146 -73
  267. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +2 -1
  268. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +3 -2
  269. package/src/components/EntityCollectionView/FilterPresetsButton.tsx +4 -2
  270. package/src/components/EntityCollectionView/ViewModeToggle.tsx +0 -1
  271. package/src/components/EntityCollectionView/useBoardDataController.tsx +17 -15
  272. package/src/components/EntityCollectionView/useEntityPreviewSlots.ts +29 -19
  273. package/src/components/EntityDetailView.tsx +66 -30
  274. package/src/components/EntityEditView.tsx +70 -32
  275. package/src/components/EntitySidePanel.tsx +6 -3
  276. package/src/components/HomePage/ContentHomePage.tsx +3 -3
  277. package/src/components/HomePage/NavigationCard.tsx +5 -5
  278. package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
  279. package/src/components/RebaseLayout.tsx +5 -2
  280. package/src/components/RebaseNavigation.tsx +1 -4
  281. package/src/components/RebaseRouteDefs.tsx +5 -3
  282. package/src/components/SearchIconsView.tsx +1 -1
  283. package/src/components/SelectableTable/SelectableTable.tsx +2 -3
  284. package/src/components/SelectableTable/SelectionStore.ts +9 -3
  285. package/src/components/UserSelector.tsx +92 -2
  286. package/src/components/common/default_entity_actions.tsx +23 -6
  287. package/src/components/field_configs.tsx +6 -3
  288. package/src/editor/editor.tsx +1 -1
  289. package/src/editor/extensions/Image/index.ts +2 -2
  290. package/src/editor/extensions/Image.ts +2 -2
  291. package/src/editor/extensions/clipboard.ts +2 -2
  292. package/src/editor/markdown-it-plugins.d.ts +24 -0
  293. package/src/editor/markdown.ts +2 -3
  294. package/src/form/EntityForm.tsx +21 -15
  295. package/src/form/field_bindings/MapFieldBinding.tsx +3 -3
  296. package/src/form/field_bindings/VectorFieldBinding.tsx +3 -3
  297. package/src/form/validation.ts +17 -15
  298. package/src/hooks/navigation/useBuildNavigationStateController.tsx +3 -6
  299. package/src/hooks/navigation/useNavigationResolution.ts +143 -19
  300. package/src/hooks/navigation/useResolvedCollections.ts +4 -6
  301. package/src/hooks/useBreadcrumbsController.tsx +2 -34
  302. package/src/hooks/useBuildSideEntityController.tsx +25 -3
  303. package/src/preview/PropertyPreview.tsx +6 -2
  304. package/src/preview/components/ReferencePreview.tsx +64 -13
  305. package/src/preview/components/RelationPreview.tsx +101 -13
  306. package/src/preview/components/UserPreview.tsx +5 -14
  307. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +1 -1
  308. package/src/routes/RebaseRoute.tsx +5 -4
  309. package/src/types/components/PropertyPreviewProps.tsx +5 -0
  310. package/src/types/components/formex.tsx +1 -45
  311. package/src/types/fields.tsx +10 -1
  312. package/src/util/navigation_utils.ts +14 -4
  313. package/src/util/previews.ts +101 -4
  314. package/dist/CollectionEditorDialog-C8E440oK.js +0 -4574
  315. package/dist/CollectionEditorDialog-C8E440oK.js.map +0 -1
  316. package/dist/CollectionsStudioView-Brr_b06v.js +0 -217
  317. package/dist/CollectionsStudioView-Brr_b06v.js.map +0 -1
  318. package/dist/ExportCollectionAction-D3TTYXrq.js +0 -446
  319. package/dist/ExportCollectionAction-D3TTYXrq.js.map +0 -1
  320. package/dist/ImportCollectionAction-Dn7lya6E.js +0 -685
  321. package/dist/ImportCollectionAction-Dn7lya6E.js.map +0 -1
  322. package/dist/PropertyEditView-ChBleIbN.js +0 -8197
  323. package/dist/PropertyEditView-ChBleIbN.js.map +0 -1
  324. package/dist/collection_editor_ui.js.map +0 -1
  325. package/dist/index-D3S9x_RP.js +0 -462
  326. package/dist/index-D3S9x_RP.js.map +0 -1
  327. package/dist/index-D9RNzm01.js +0 -12
  328. package/dist/index-D9RNzm01.js.map +0 -1
  329. package/dist/index-DrrT332R.js +0 -8
  330. package/dist/index-DrrT332R.js.map +0 -1
  331. package/dist/index.js.map +0 -1
  332. package/dist/markdown-DD2JDU1X.js +0 -618
  333. package/dist/markdown-DD2JDU1X.js.map +0 -1
  334. package/dist/useEntityHistory-UVsSclfZ.js +0 -123
  335. package/dist/useEntityHistory-UVsSclfZ.js.map +0 -1
  336. package/dist/util-COYYD8zr.js +0 -30474
  337. package/dist/util-COYYD8zr.js.map +0 -1
@@ -3,7 +3,7 @@ import type { FormContext } from "../types/fields";
3
3
  import type { PluginFormActionProps } from "@rebasepro/types";
4
4
  import React, { lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState } from "react";
5
5
  import { Entity, EntityStatus, Property } from "@rebasepro/types";
6
- import { PluginProviderStack, resolveComponentRef } from "@rebasepro/core";
6
+ import { PluginProviderStack, resolveComponentRef, useComponentOverride, CollectionComponentOverrideProvider } from "@rebasepro/core";
7
7
 
8
8
  import { EntityCollectionView, EntityView } from "../components";
9
9
  import { CircularProgressCenter, iconSize } from "@rebasepro/ui";
@@ -42,7 +42,7 @@ import {
42
42
  import { useUrlController, useCollectionRegistryController } from "../index";
43
43
  import { useNavigate } from "react-router-dom";
44
44
  import { getValueInPath } from "@rebasepro/utils";
45
- import { getEntityTitlePropertyKey } from "../util/previews";
45
+ import { getEntityTitlePropertyKey, resolveTitleToString } from "../util/previews";
46
46
  import { EntityJsonPreview } from "../components/EntityJsonPreview";
47
47
 
48
48
  const EntityHistoryView = lazy(() => import("../components/history").then(m => ({ default: m.EntityHistoryView })));
@@ -104,12 +104,23 @@ export function EntityDetailView<M extends Record<string, unknown>>({
104
104
  </CenteredView>;
105
105
  }
106
106
 
107
- return <EntityDetailViewInner<M>
108
- {...props}
109
- entityId={entityId}
110
- entity={entity}
111
- dataLoading={dataLoading}
112
- />;
107
+ const content = (
108
+ <EntityDetailViewInner<M>
109
+ {...props}
110
+ entityId={entityId}
111
+ entity={entity}
112
+ dataLoading={dataLoading}
113
+ />
114
+ );
115
+
116
+ if (props.collection.components) {
117
+ return (
118
+ <CollectionComponentOverrideProvider overrides={props.collection.components}>
119
+ {content}
120
+ </CollectionComponentOverrideProvider>
121
+ );
122
+ }
123
+ return content;
113
124
  }
114
125
 
115
126
  function EntityDetailViewInner<M extends Record<string, unknown>>({
@@ -129,6 +140,7 @@ function EntityDetailViewInner<M extends Record<string, unknown>>({
129
140
  entity?: Entity<M>,
130
141
  dataLoading: boolean,
131
142
  }) {
143
+ const ResolvedCollectionView = useComponentOverride("Collection.View", EntityCollectionView);
132
144
  const { t } = useTranslation();
133
145
  const context = useRebaseContext();
134
146
  const urlController = useUrlController();
@@ -149,7 +161,8 @@ function EntityDetailViewInner<M extends Record<string, unknown>>({
149
161
 
150
162
  const defaultSelectedView = useMemo(() => resolveDefaultSelectedView(
151
163
  collection.defaultSelectedView,
152
- { status: "existing", entityId }
164
+ { status: "existing",
165
+ entityId }
153
166
  ), [collection, entityId]);
154
167
 
155
168
  // Track whether the user has explicitly clicked a tab in this component
@@ -179,16 +192,32 @@ function EntityDetailViewInner<M extends Record<string, unknown>>({
179
192
  const hasAdditionalViews = customViewsCount > 0 || subcollectionsCount > 0 || includeJsonView || includeHistoryView;
180
193
 
181
194
  const {
182
- resolvedEntityViews,
195
+ resolvedEntityViews
196
+ } = resolvedSelectedEntityView(customViews, customizationController, undefined, canEdit);
197
+
198
+ const validTabValues = useMemo(() => {
199
+ const set = new Set<string>([
200
+ MAIN_TAB_VALUE,
201
+ ...(includeJsonView ? [JSON_TAB_VALUE] : []),
202
+ ...(includeHistoryView ? [HISTORY_TAB_VALUE] : []),
203
+ ...resolvedEntityViews.map(v => v.key),
204
+ ...subcollections.map(s => s.slug)
205
+ ]);
206
+ return set;
207
+ }, [includeJsonView, includeHistoryView, resolvedEntityViews, subcollections]);
208
+
209
+ const activeTab = validTabValues.has(selectedTab) ? selectedTab : MAIN_TAB_VALUE;
210
+
211
+ const {
183
212
  selectedEntityView
184
- } = resolvedSelectedEntityView(customViews, customizationController, selectedTab, canEdit);
213
+ } = resolvedSelectedEntityView(customViews, customizationController, activeTab, canEdit);
185
214
 
186
- const mainViewVisible = selectedTab === MAIN_TAB_VALUE;
215
+ const mainViewVisible = activeTab === MAIN_TAB_VALUE;
187
216
 
188
217
  // Track which custom view tabs have been visited
189
218
  const mountedTabsRef = useRef<Set<string>>(new Set());
190
- if (selectedTab) {
191
- mountedTabsRef.current.add(selectedTab);
219
+ if (activeTab) {
220
+ mountedTabsRef.current.add(activeTab);
192
221
  }
193
222
 
194
223
  // Read-only form context for custom entity views
@@ -208,6 +237,9 @@ function EntityDetailViewInner<M extends Record<string, unknown>>({
208
237
  save: () => {
209
238
  throw new Error("Cannot save in read-only detail view");
210
239
  },
240
+ submit: () => {
241
+ throw new Error("Cannot submit in read-only detail view");
242
+ },
211
243
  collection,
212
244
  path,
213
245
  entity: usedEntity,
@@ -237,9 +269,10 @@ function EntityDetailViewInner<M extends Record<string, unknown>>({
237
269
 
238
270
  // Title resolution
239
271
  const titlePropertyKey = getEntityTitlePropertyKey(collection, customizationController.propertyConfigs);
240
- const title = (usedEntity?.values && titlePropertyKey ? getValueInPath(usedEntity.values, titlePropertyKey) as React.ReactNode : undefined)
241
- ?? collection.singularName
242
- ?? collection.name;
272
+ const rawTitle = usedEntity?.values && titlePropertyKey ? getValueInPath(usedEntity.values, titlePropertyKey) : undefined;
273
+ const title = rawTitle !== undefined && rawTitle !== null
274
+ ? resolveTitleToString(rawTitle)
275
+ : (collection.singularName ?? collection.name);
243
276
 
244
277
  // Non-action custom views
245
278
  const nonActionCustomViews = useMemo(() =>
@@ -254,7 +287,7 @@ function EntityDetailViewInner<M extends Record<string, unknown>>({
254
287
  if (!Builder) return null;
255
288
  if (!entityId) return null;
256
289
 
257
- const isActive = selectedTab === customView.key;
290
+ const isActive = activeTab === customView.key;
258
291
  const hasBeenMounted = mountedTabsRef.current.has(customView.key);
259
292
  if (!isActive && !hasBeenMounted) return null;
260
293
 
@@ -284,9 +317,9 @@ function EntityDetailViewInner<M extends Record<string, unknown>>({
284
317
 
285
318
  // JSON view
286
319
  const jsonTabMounted = mountedTabsRef.current.has(JSON_TAB_VALUE);
287
- const jsonView = (selectedTab === JSON_TAB_VALUE || jsonTabMounted) ? <div
320
+ const jsonView = (activeTab === JSON_TAB_VALUE || jsonTabMounted) ? <div
288
321
  className={cls("relative flex-1 h-full overflow-auto w-full",
289
- { "hidden": selectedTab !== JSON_TAB_VALUE })}
322
+ { "hidden": activeTab !== JSON_TAB_VALUE })}
290
323
  key={"json_view"}
291
324
  role="tabpanel">
292
325
  <ErrorBoundary>
@@ -295,7 +328,7 @@ function EntityDetailViewInner<M extends Record<string, unknown>>({
295
328
  </div> : null;
296
329
 
297
330
  // History view
298
- const historyView = includeHistoryView && selectedTab === HISTORY_TAB_VALUE ? <div
331
+ const historyView = includeHistoryView && activeTab === HISTORY_TAB_VALUE ? <div
299
332
  className={"relative flex-1 h-full overflow-auto w-full"}
300
333
  key={"history_view"}
301
334
  role="tabpanel">
@@ -316,7 +349,7 @@ function EntityDetailViewInner<M extends Record<string, unknown>>({
316
349
  const subcollectionId = subcollection.slug;
317
350
  const newFullPath = usedEntity ? `${path}/${usedEntity?.id}/${removeInitialAndTrailingSlashes(subcollection.slug)}` : undefined;
318
351
 
319
- if (selectedTab !== subcollectionId) return null;
352
+ if (activeTab !== subcollectionId) return null;
320
353
  return (
321
354
  <div
322
355
  className={"relative flex-1 h-full overflow-auto w-full"}
@@ -325,7 +358,7 @@ function EntityDetailViewInner<M extends Record<string, unknown>>({
325
358
  {globalLoading && <CircularProgressCenter />}
326
359
  {!globalLoading &&
327
360
  (usedEntity && newFullPath
328
- ? <EntityCollectionView
361
+ ? <ResolvedCollectionView
329
362
  path={newFullPath}
330
363
  parentCollectionSlugs={[...parentCollectionSlugs, collection.slug]}
331
364
  parentEntityIds={[...parentEntityIds, String(usedEntity?.id)]}
@@ -383,7 +416,7 @@ function EntityDetailViewInner<M extends Record<string, unknown>>({
383
416
 
384
417
  // Tabs
385
418
  const subcollectionTabs = subcollections && subcollections.map((subcollection) => {
386
- const icon = getIcon(subcollection.icon, undefined, undefined, "small");
419
+ const icon = getIcon(subcollection.icon, undefined, undefined, "smallest");
387
420
  return (
388
421
  <Tab
389
422
  className="text-sm min-w-[90px]"
@@ -399,7 +432,7 @@ function EntityDetailViewInner<M extends Record<string, unknown>>({
399
432
 
400
433
  const customViewTabsStart = resolvedEntityViews.filter(view => view.position === "start")
401
434
  .map((view) => {
402
- const icon = getIcon(view.icon, undefined, undefined, "small");
435
+ const icon = getIcon(view.icon, undefined, undefined, "smallest");
403
436
  return (
404
437
  <Tab
405
438
  className={!view.tabComponent ? "text-sm min-w-[90px]" : undefined}
@@ -416,7 +449,7 @@ function EntityDetailViewInner<M extends Record<string, unknown>>({
416
449
  });
417
450
  const customViewTabsEnd = resolvedEntityViews.filter(view => !view.position || view.position === "end")
418
451
  .map((view) => {
419
- const icon = getIcon(view.icon, undefined, undefined, "small");
452
+ const icon = getIcon(view.icon, undefined, undefined, "smallest");
420
453
  return (
421
454
  <Tab
422
455
  className={!view.tabComponent ? "text-sm min-w-[90px]" : undefined}
@@ -538,7 +571,7 @@ function EntityDetailViewInner<M extends Record<string, unknown>>({
538
571
  {hasAdditionalViews && <div className={"flex-1 flex justify-end min-w-0 shrink-0"}>
539
572
  <Tabs
540
573
  className={"!w-fit max-w-full"}
541
- value={selectedTab}
574
+ value={activeTab}
542
575
  onValueChange={(value) => {
543
576
  onSideTabClick(value);
544
577
  }}>
@@ -547,21 +580,24 @@ function EntityDetailViewInner<M extends Record<string, unknown>>({
547
580
  disabled={!hasAdditionalViews}
548
581
  value={JSON_TAB_VALUE}
549
582
  className={"text-sm"}>
550
- <CodeIcon size={iconSize.small} />
583
+ <CodeIcon size={iconSize.smallest} />
551
584
  </Tab>}
552
585
 
553
586
  {includeHistoryView && <Tab
554
587
  disabled={!hasAdditionalViews}
555
588
  value={HISTORY_TAB_VALUE}
556
589
  className={"text-sm"}>
557
- <HistoryIcon size={iconSize.small} />
590
+ <HistoryIcon size={iconSize.smallest} />
558
591
  </Tab>}
559
592
 
560
593
  <Tab
561
594
  disabled={!hasAdditionalViews}
562
595
  value={MAIN_TAB_VALUE}
563
596
  className={"text-sm min-w-[90px]"}>
564
- {collection.singularName ?? collection.name}
597
+ <span className="flex items-center gap-1.5">
598
+ {getIcon(collection.icon, undefined, undefined, "smallest")}
599
+ {collection.singularName ?? collection.name}
600
+ </span>
565
601
  </Tab>
566
602
 
567
603
  {customViewTabsStart}
@@ -3,7 +3,7 @@ import type { FormContext } from "../types/fields";
3
3
  import type { PluginFormActionProps } from "@rebasepro/types";
4
4
  import React, { lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState } from "react";
5
5
  import { Entity, EntityStatus } from "@rebasepro/types";
6
- import { PluginProviderStack, resolveComponentRef } from "@rebasepro/core";
6
+ import { PluginProviderStack, resolveComponentRef, useComponentOverride, CollectionComponentOverrideProvider } from "@rebasepro/core";
7
7
 
8
8
  import { EntityCollectionView, EntityView } from "../components";
9
9
  import { CircularProgressCenter, iconSize } from "@rebasepro/ui";
@@ -146,15 +146,26 @@ export function EntityEditView<M extends Record<string, unknown>>({
146
146
  </CenteredView>;
147
147
  }
148
148
 
149
- return <EntityEditViewInner<M> {...props}
150
- entityId={entityId}
151
- entity={entity}
152
- initialDirtyValues={initialDirtyValues as Partial<M>}
153
- dataLoading={dataLoading}
154
- status={status}
155
- setStatus={setStatus}
156
- canEdit={canEdit}
157
- />;
149
+ const content = (
150
+ <EntityEditViewInner<M> {...props}
151
+ entityId={entityId}
152
+ entity={entity}
153
+ initialDirtyValues={initialDirtyValues as Partial<M>}
154
+ dataLoading={dataLoading}
155
+ status={status}
156
+ setStatus={setStatus}
157
+ canEdit={canEdit}
158
+ />
159
+ );
160
+
161
+ if (props.collection.components) {
162
+ return (
163
+ <CollectionComponentOverrideProvider overrides={props.collection.components}>
164
+ {content}
165
+ </CollectionComponentOverrideProvider>
166
+ );
167
+ }
168
+ return content;
158
169
  }
159
170
 
160
171
  export function EntityEditViewInner<M extends Record<string, unknown>>({
@@ -185,6 +196,10 @@ export function EntityEditViewInner<M extends Record<string, unknown>>({
185
196
  canEdit?: boolean,
186
197
  }) {
187
198
 
199
+ const ResolvedFormActions = useComponentOverride("Entity.FormActions", EntityEditViewFormActions);
200
+ const ResolvedEntityForm = useComponentOverride("Entity.Form", EntityForm) as typeof EntityForm;
201
+ const ResolvedCollectionView = useComponentOverride("Collection.View", EntityCollectionView);
202
+
188
203
  const context = useRebaseContext();
189
204
  const urlController = useUrlController();
190
205
  const navigate = useNavigate();
@@ -205,7 +220,8 @@ export function EntityEditViewInner<M extends Record<string, unknown>>({
205
220
 
206
221
  const formActionTopProps: PluginFormActionProps = useMemo(() => ({
207
222
  entityId,
208
- parentCollectionSlugs, parentEntityIds,
223
+ parentCollectionSlugs,
224
+ parentEntityIds,
209
225
  path: path,
210
226
  status,
211
227
  collection: collection!,
@@ -254,20 +270,36 @@ export function EntityEditViewInner<M extends Record<string, unknown>>({
254
270
  const hasAdditionalViews = customViewsCount > 0 || subcollectionsCount > 0 || includeJsonView || includeHistoryView;
255
271
 
256
272
  const {
257
- resolvedEntityViews,
273
+ resolvedEntityViews
274
+ } = resolvedSelectedEntityView(customViews, customizationController, undefined, canEdit);
275
+
276
+ const validTabValues = useMemo(() => {
277
+ const set = new Set<string>([
278
+ MAIN_TAB_VALUE,
279
+ ...(includeJsonView ? [JSON_TAB_VALUE] : []),
280
+ ...(includeHistoryView ? [HISTORY_TAB_VALUE] : []),
281
+ ...resolvedEntityViews.map(v => v.key),
282
+ ...subcollections.map(s => s.slug)
283
+ ]);
284
+ return set;
285
+ }, [includeJsonView, includeHistoryView, resolvedEntityViews, subcollections]);
286
+
287
+ const activeTab = validTabValues.has(selectedTab) ? selectedTab : MAIN_TAB_VALUE;
288
+
289
+ const {
258
290
  selectedEntityView,
259
291
  selectedSecondaryForm
260
- } = resolvedSelectedEntityView(customViews, customizationController, selectedTab, canEdit);
292
+ } = resolvedSelectedEntityView(customViews, customizationController, activeTab, canEdit);
261
293
 
262
294
  const actionsAtTheBottom = layout === "side_panel" || layout === "dialog" || selectedEntityView?.includeActions === "bottom";
263
295
 
264
- const mainViewVisible = selectedTab === MAIN_TAB_VALUE || Boolean(selectedSecondaryForm);
296
+ const mainViewVisible = activeTab === MAIN_TAB_VALUE || Boolean(selectedSecondaryForm);
265
297
 
266
298
  // Track which custom view tabs have been visited so we keep them mounted
267
299
  // (preserving their state) but don't eagerly mount tabs never visited.
268
300
  const mountedTabsRef = useRef<Set<string>>(new Set());
269
- if (selectedTab) {
270
- mountedTabsRef.current.add(selectedTab);
301
+ if (activeTab) {
302
+ mountedTabsRef.current.add(activeTab);
271
303
  }
272
304
 
273
305
  // Memoize the read-only fallback form context to avoid recreating it every render
@@ -288,6 +320,9 @@ export function EntityEditViewInner<M extends Record<string, unknown>>({
288
320
  save: () => {
289
321
  throw new Error("You can't save in read only mode");
290
322
  },
323
+ submit: () => {
324
+ throw new Error("You can't submit in read only mode");
325
+ },
291
326
  collection,
292
327
  path: path,
293
328
  entity: usedEntity,
@@ -317,7 +352,7 @@ export function EntityEditViewInner<M extends Record<string, unknown>>({
317
352
  }
318
353
 
319
354
  // Only mount tabs that have been visited at least once
320
- const isActive = selectedTab === customView.key;
355
+ const isActive = activeTab === customView.key;
321
356
  const hasBeenMounted = mountedTabsRef.current.has(customView.key);
322
357
  if (!isActive && !hasBeenMounted) {
323
358
  return null;
@@ -350,9 +385,9 @@ export function EntityEditViewInner<M extends Record<string, unknown>>({
350
385
 
351
386
  // Only mount JSON view when its tab is selected (or was previously selected)
352
387
  const jsonTabMounted = mountedTabsRef.current.has(JSON_TAB_VALUE);
353
- const jsonView = (selectedTab === JSON_TAB_VALUE || jsonTabMounted) ? <div
388
+ const jsonView = (activeTab === JSON_TAB_VALUE || jsonTabMounted) ? <div
354
389
  className={cls("relative flex-1 h-full overflow-auto w-full",
355
- { "hidden": selectedTab !== JSON_TAB_VALUE })}
390
+ { "hidden": activeTab !== JSON_TAB_VALUE })}
356
391
  key={"json_view"}
357
392
  role="tabpanel">
358
393
  <ErrorBoundary>
@@ -362,7 +397,7 @@ export function EntityEditViewInner<M extends Record<string, unknown>>({
362
397
  </div> : null;
363
398
 
364
399
  // Only mount history view when its tab is actually selected
365
- const historyView = includeHistoryView && selectedTab === HISTORY_TAB_VALUE ? <div
400
+ const historyView = includeHistoryView && activeTab === HISTORY_TAB_VALUE ? <div
366
401
  className={"relative flex-1 h-full overflow-auto w-full"}
367
402
  key={"history_view"}
368
403
  role="tabpanel">
@@ -382,7 +417,7 @@ export function EntityEditViewInner<M extends Record<string, unknown>>({
382
417
  const subcollectionId = subcollection.slug;
383
418
  const newFullPath = usedEntity ? `${path}/${usedEntity?.id}/${removeInitialAndTrailingSlashes(subcollection.slug)}` : undefined;
384
419
 
385
- if (selectedTab !== subcollectionId) return null;
420
+ if (activeTab !== subcollectionId) return null;
386
421
  return (
387
422
  <div
388
423
  className={"relative flex-1 h-full overflow-auto w-full"}
@@ -393,7 +428,7 @@ export function EntityEditViewInner<M extends Record<string, unknown>>({
393
428
 
394
429
  {!globalLoading &&
395
430
  (usedEntity && newFullPath
396
- ? <EntityCollectionView
431
+ ? <ResolvedCollectionView
397
432
  path={newFullPath}
398
433
  parentCollectionSlugs={[...parentCollectionSlugs, collection.slug]}
399
434
  parentEntityIds={[...parentEntityIds, String(usedEntity?.id)]}
@@ -479,7 +514,7 @@ export function EntityEditViewInner<M extends Record<string, unknown>>({
479
514
  </ErrorBoundary>
480
515
  </div>
481
516
  ) : (
482
- <EntityForm<M>
517
+ <ResolvedEntityForm<M>
483
518
  collection={collection}
484
519
  path={path}
485
520
  entityId={entityId ?? usedEntity?.id}
@@ -490,7 +525,7 @@ export function EntityEditViewInner<M extends Record<string, unknown>>({
490
525
  forceActionsAtTheBottom={actionsAtTheBottom}
491
526
  initialStatus={status}
492
527
  className={cls((!mainViewVisible || !canEdit) && !selectedSecondaryForm ? "hidden" : "", formProps?.className)}
493
- EntityFormActionsComponent={EntityEditViewFormActions}
528
+ EntityFormActionsComponent={ResolvedFormActions as React.FC<typeof ResolvedFormActions extends React.ComponentType<infer P> ? P : never>}
494
529
  disabled={!canEdit}
495
530
  navigateBack={navigateBack}
496
531
  {...formProps}
@@ -509,7 +544,7 @@ export function EntityEditViewInner<M extends Record<string, unknown>>({
509
544
  onSaved={(params) => {
510
545
  const res = {
511
546
  ...params,
512
- selectedTab: MAIN_TAB_VALUE === selectedTab ? undefined : selectedTab
547
+ selectedTab: MAIN_TAB_VALUE === activeTab ? undefined : activeTab
513
548
  };
514
549
  onSaved?.(res);
515
550
  formProps?.onSaved?.(res);
@@ -519,7 +554,7 @@ export function EntityEditViewInner<M extends Record<string, unknown>>({
519
554
  );
520
555
 
521
556
  const subcollectionTabs = subcollections && subcollections.map((subcollection) => {
522
- const icon = getIcon(subcollection.icon, undefined, undefined, "small");
557
+ const icon = getIcon(subcollection.icon, undefined, undefined, "smallest");
523
558
  return (
524
559
  <Tab
525
560
  className="text-sm min-w-[90px]"
@@ -535,7 +570,7 @@ export function EntityEditViewInner<M extends Record<string, unknown>>({
535
570
 
536
571
  const customViewTabsStart = resolvedEntityViews.filter(view => view.position === "start")
537
572
  .map((view) => {
538
- const icon = getIcon(view.icon, undefined, undefined, "small");
573
+ const icon = getIcon(view.icon, undefined, undefined, "smallest");
539
574
  return (
540
575
  <Tab
541
576
  className={!view.tabComponent ? "text-sm min-w-[90px]" : undefined}
@@ -552,7 +587,7 @@ export function EntityEditViewInner<M extends Record<string, unknown>>({
552
587
  });
553
588
  const customViewTabsEnd = resolvedEntityViews.filter(view => !view.position || view.position === "end")
554
589
  .map((view) => {
555
- const icon = getIcon(view.icon, undefined, undefined, "small");
590
+ const icon = getIcon(view.icon, undefined, undefined, "smallest");
556
591
  return (
557
592
  <Tab
558
593
  className={!view.tabComponent ? "text-sm min-w-[90px]" : undefined}
@@ -606,7 +641,7 @@ export function EntityEditViewInner<M extends Record<string, unknown>>({
606
641
  {hasAdditionalViews && <div className={"flex-1 flex justify-end min-w-0 shrink-0"}>
607
642
  <Tabs
608
643
  className={"!w-fit max-w-full"}
609
- value={selectedTab}
644
+ value={activeTab}
610
645
  onValueChange={(value) => {
611
646
  onSideTabClick(value);
612
647
  }}>
@@ -615,21 +650,24 @@ export function EntityEditViewInner<M extends Record<string, unknown>>({
615
650
  disabled={!hasAdditionalViews}
616
651
  value={JSON_TAB_VALUE}
617
652
  className={"text-sm"}>
618
- <CodeIcon size={iconSize.small} />
653
+ <CodeIcon size={iconSize.smallest} />
619
654
  </Tab>}
620
655
 
621
656
  {includeHistoryView && <Tab
622
657
  disabled={!hasAdditionalViews}
623
658
  value={HISTORY_TAB_VALUE}
624
659
  className={"text-sm"}>
625
- <HistoryIcon size={iconSize.small} />
660
+ <HistoryIcon size={iconSize.smallest} />
626
661
  </Tab>}
627
662
 
628
663
  <Tab
629
664
  disabled={!hasAdditionalViews}
630
665
  value={MAIN_TAB_VALUE}
631
666
  className={"text-sm min-w-[90px]"}>
632
- {collection.singularName ?? collection.name}
667
+ <span className="flex items-center gap-1.5">
668
+ {getIcon(collection.icon, undefined, undefined, "smallest")}
669
+ {collection.singularName ?? collection.name}
670
+ </span>
633
671
  </Tab>
634
672
 
635
673
  {customViewTabsStart}
@@ -9,7 +9,7 @@ import { EntityEditView } from "./EntityEditView";
9
9
  import { EntityDetailView } from "./EntityDetailView";
10
10
  import { useSideDialogContext } from "./SideDialogs";
11
11
  import { useNavigate } from "react-router-dom";
12
- import { saveEntityToMemoryCache } from "@rebasepro/core";
12
+ import { saveEntityToMemoryCache, useComponentOverride } from "@rebasepro/core";
13
13
  import { useCollectionRegistryController, useSideEntityController } from "../index";
14
14
  import { useUrlController } from "../index";
15
15
  import { resolveDefaultSelectedView } from "@rebasepro/common";
@@ -32,6 +32,8 @@ export function EntitySidePanel(props: EntitySidePanelProps) {
32
32
  formProps
33
33
  } = props;
34
34
 
35
+ const ResolvedDetailView = useComponentOverride("Entity.DetailView", EntityDetailView);
36
+
35
37
  const {
36
38
  blocked,
37
39
  setBlocked,
@@ -112,7 +114,8 @@ export function EntitySidePanel(props: EntitySidePanelProps) {
112
114
 
113
115
  const effectiveDefault = resolveDefaultSelectedView(
114
116
  collection.defaultSelectedView,
115
- { status: "existing", entityId }
117
+ { status: "existing",
118
+ entityId }
116
119
  );
117
120
  if (effectiveDefault && effectiveDefault !== "edit") {
118
121
  hasCorrectedDefaultView.current = true;
@@ -144,7 +147,7 @@ export function EntitySidePanel(props: EntitySidePanelProps) {
144
147
  <>
145
148
  <ErrorBoundary>
146
149
  {isDetailMode
147
- ? <EntityDetailView
150
+ ? <ResolvedDetailView
148
151
  path={path}
149
152
  layout={collection?.openEntityMode === "dialog" ? "dialog" : "side_panel"}
150
153
  collection={collection as EntityCollection}
@@ -22,7 +22,7 @@ import { toArray } from "@rebasepro/utils";
22
22
  import { useCollapsedGroups, buildCollapsedDefaults, useCustomizationController, useTranslation, useSlot, useAdminModeController, useRebaseRegistry } from "@rebasepro/core";
23
23
  import { useRestoreScroll } from "@rebasepro/core";
24
24
 
25
- import { BootstrapAdminBanner } from "@rebasepro/core";
25
+ import { SchemaDriftBanner } from "@rebasepro/core";
26
26
  import { useBreadcrumbsController, useCMSContext } from "../../index";
27
27
 
28
28
  export const DEFAULT_GROUP_NAME = "Views";
@@ -320,8 +320,8 @@ export function ContentHomePage({
320
320
  return (
321
321
  <div ref={containerRef} className="py-2 overflow-auto h-full w-full bg-surface-50 dark:bg-surface-800">
322
322
  <Container maxWidth="6xl">
323
- <div className="mb-4">
324
- <BootstrapAdminBanner />
323
+ <div className="mb-4 flex flex-col gap-2">
324
+ <SchemaDriftBanner />
325
325
  </div>
326
326
  {/* search & actions */}
327
327
  <div
@@ -1,4 +1,4 @@
1
- import { ArrowRightIcon, Card, cls, Markdown, Typography } from "@rebasepro/ui";
1
+ import { ArrowRightIcon, Card, cls, iconSize, Markdown, Typography } from "@rebasepro/ui";
2
2
  import React from "react";
3
3
 
4
4
  export type NavigationCardProps = {
@@ -40,7 +40,7 @@ export const NavigationCard = React.memo(function NavigationCard({
40
40
  {/* Header: title + icon left, actions right */}
41
41
  <div className="flex items-center w-full justify-between mb-1">
42
42
  <div className="flex items-center gap-4">
43
- <div className="flex items-center justify-center w-7 h-7 rounded-lg bg-primary/8 dark:bg-primary/10 text-primary/70 dark:text-primary/60 transition-colors duration-200 group-hover:bg-primary/12 dark:group-hover:bg-primary/15 group-hover:text-primary dark:group-hover:text-primary/80">
43
+ <div className="flex items-center justify-center w-6 h-6 rounded-lg bg-primary/8 dark:bg-primary/10 text-primary/70 dark:text-primary/60 transition-colors duration-200 group-hover:bg-primary/12 dark:group-hover:bg-primary/15 group-hover:text-primary dark:group-hover:text-primary/80">
44
44
  {icon}
45
45
  </div>
46
46
  <Typography variant="subtitle1"
@@ -60,7 +60,7 @@ export const NavigationCard = React.memo(function NavigationCard({
60
60
  </div>
61
61
 
62
62
  {/* Description */}
63
- <div className="grow pl-[44px]">
63
+ <div className="grow pl-[40px]">
64
64
  {description && <Typography variant="caption"
65
65
  color="secondary"
66
66
  component="div">
@@ -69,7 +69,7 @@ export const NavigationCard = React.memo(function NavigationCard({
69
69
  </div>
70
70
 
71
71
  {additionalContent && (
72
- <div className="pl-[44px] pointer-events-none">
72
+ <div className="pl-[40px] pointer-events-none">
73
73
  {additionalContent}
74
74
  </div>
75
75
  )}
@@ -77,7 +77,7 @@ export const NavigationCard = React.memo(function NavigationCard({
77
77
  {/* Arrow */}
78
78
  <div className="self-end mt-1">
79
79
  <div className={"transition-transform duration-200 group-hover:translate-x-0.5"}>
80
- <ArrowRightIcon className="text-primary"/>
80
+ <ArrowRightIcon className="text-primary" size={iconSize.small}/>
81
81
  </div>
82
82
  </div>
83
83
 
@@ -38,7 +38,7 @@ export function NavigationCardBinding({
38
38
  }) {
39
39
 
40
40
  const userConfigurationPersistence = useUserConfigurationPersistence();
41
- const collectionIcon = <IconForView collectionOrView={collection ?? view}/>;
41
+ const collectionIcon = <IconForView collectionOrView={collection ?? view} size={"small"}/>;
42
42
 
43
43
  const navigate = useNavigate();
44
44
  const context = useRebaseContext();
@@ -2,6 +2,7 @@ import React from "react";
2
2
  import { Outlet } from "react-router-dom";
3
3
  import {
4
4
  useAdminModeController,
5
+ useComponentOverride,
5
6
  useRebaseRegistry
6
7
  } from "@rebasepro/core";
7
8
 
@@ -52,14 +53,16 @@ export function RebaseLayout(props: RebaseLayoutProps) {
52
53
  } = props;
53
54
 
54
55
  const adminModeController = useAdminModeController();
56
+ const ResolvedAppBar = useComponentOverride("Shell.AppBar", AppBar);
57
+ const ResolvedDrawer = useComponentOverride("Shell.Drawer", Drawer);
55
58
 
56
- const ActiveAppBar = appBar ?? <AppBar
59
+ const ActiveAppBar = appBar ?? <ResolvedAppBar
57
60
  includeLanguageToggle={false}
58
61
  includeModeToggle={false}
59
62
  includeUserMenu={false}
60
63
  />;
61
64
  const ActiveDrawer = drawer ?? (
62
- <Drawer
65
+ <ResolvedDrawer
63
66
  title={title}
64
67
  logoDestination={adminModeController.mode === "studio" ? "/s" : "/"}
65
68
  />
@@ -6,7 +6,6 @@ import {
6
6
  useCustomizationController,
7
7
  useAdminModeController,
8
8
  useBuildLocalConfigurationPersistence,
9
- useInternalUserManagementController,
10
9
  useRebaseClient,
11
10
  StudioBridgeRegistryProvider,
12
11
  useBridgeRegistration,
@@ -67,7 +66,6 @@ export function RebaseNavigation({ children }: RebaseNavigationProps) {
67
66
  const registry = useRebaseRegistry();
68
67
  const context = useRebaseContext();
69
68
  const adminModeController = useAdminModeController();
70
- const userManagement = useInternalUserManagementController();
71
69
  const userConfigPersistence = useBuildLocalConfigurationPersistence();
72
70
 
73
71
  // ── Collection Editor resolution ──────────────────────────────────
@@ -147,8 +145,7 @@ export function RebaseNavigation({ children }: RebaseNavigationProps) {
147
145
  data: context.data,
148
146
  collectionRegistryController,
149
147
  urlController,
150
- adminMode: adminModeController?.mode,
151
- userManagement
148
+ adminMode: adminModeController?.mode
152
149
  });
153
150
 
154
151
  // ── Merge CMS-registered entityViews/entityActions into the customization controller ──