@rebasepro/admin 0.0.1-canary.eae7889 → 0.0.1-canary.eb08332

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 (716) hide show
  1. package/LICENSE +21 -6
  2. package/README.md +139 -0
  3. package/dist/CollectionEditorDialog-DKGlYDPc.js +3630 -0
  4. package/dist/CollectionEditorDialog-DKGlYDPc.js.map +1 -0
  5. package/dist/PropertyEditView-h0N-AMCY.js +3808 -0
  6. package/dist/PropertyEditView-h0N-AMCY.js.map +1 -0
  7. package/dist/RouterCollectionsStudioView-DdEStpFk.js +192 -0
  8. package/dist/RouterCollectionsStudioView-DdEStpFk.js.map +1 -0
  9. package/dist/collection_editor/ConfigControllerProvider.d.ts +2 -11
  10. package/dist/collection_editor/_cms_internals.d.ts +4 -4
  11. package/dist/collection_editor/api/generateCollectionApi.d.ts +10 -9
  12. package/dist/collection_editor/extensibility_types.d.ts +135 -0
  13. package/dist/collection_editor/index.d.ts +6 -1
  14. package/dist/collection_editor/pgColumnToProperty.d.ts +3 -3
  15. package/dist/collection_editor/serializable_types.d.ts +370 -0
  16. package/dist/collection_editor/serializable_utils.d.ts +50 -0
  17. package/dist/collection_editor/types/collection_editor_controller.d.ts +11 -10
  18. package/dist/collection_editor/types/collection_inference.d.ts +2 -2
  19. package/dist/collection_editor/types/config_controller.d.ts +21 -14
  20. package/dist/collection_editor/ui/AddKanbanColumnAction.d.ts +7 -5
  21. package/dist/collection_editor/ui/CollectionViewHeaderAction.d.ts +7 -5
  22. package/dist/collection_editor/ui/EditorCollectionAction.d.ts +1 -1
  23. package/dist/collection_editor/ui/EditorCollectionActionStart.d.ts +1 -1
  24. package/dist/collection_editor/ui/EditorEntityAction.d.ts +1 -1
  25. package/dist/collection_editor/ui/HomePageEditorCollectionAction.d.ts +1 -1
  26. package/dist/collection_editor/ui/KanbanSetupAction.d.ts +7 -5
  27. package/dist/collection_editor/ui/MissingReferenceWidget.d.ts +1 -1
  28. package/dist/collection_editor/ui/NewCollectionButton.d.ts +1 -1
  29. package/dist/collection_editor/ui/NewCollectionCard.d.ts +1 -1
  30. package/dist/collection_editor/ui/PropertyAddColumnComponent.d.ts +6 -5
  31. package/dist/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.d.ts +4 -4
  32. package/dist/collection_editor/ui/collection_editor/AIModifiedPathsContext.d.ts +1 -1
  33. package/dist/collection_editor/ui/collection_editor/CollectionDetailsForm.d.ts +7 -7
  34. package/dist/collection_editor/ui/collection_editor/CollectionEditorDialog.d.ts +10 -11
  35. package/dist/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.d.ts +4 -4
  36. package/dist/collection_editor/ui/collection_editor/CollectionJsonImportDialog.d.ts +4 -3
  37. package/dist/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +17 -7
  38. package/dist/collection_editor/ui/collection_editor/CollectionRLSTab.d.ts +2 -1
  39. package/dist/collection_editor/ui/collection_editor/CollectionRelationsTab.d.ts +2 -1
  40. package/dist/collection_editor/ui/collection_editor/CollectionStudioView.d.ts +14 -1
  41. package/dist/collection_editor/ui/collection_editor/CollectionYupValidation.d.ts +1 -9
  42. package/dist/collection_editor/ui/collection_editor/CollectionsStudioView.d.ts +25 -2
  43. package/dist/collection_editor/ui/collection_editor/DisplaySettingsForm.d.ts +4 -2
  44. package/dist/collection_editor/ui/collection_editor/EntityActionsEditTab.d.ts +4 -3
  45. package/dist/collection_editor/ui/collection_editor/EntityActionsSelectDialog.d.ts +2 -1
  46. package/dist/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.d.ts +2 -1
  47. package/dist/collection_editor/ui/collection_editor/EnumForm.d.ts +2 -1
  48. package/dist/collection_editor/ui/collection_editor/GeneralSettingsForm.d.ts +8 -4
  49. package/dist/collection_editor/ui/collection_editor/GetCodeDialog.d.ts +4 -3
  50. package/dist/collection_editor/ui/collection_editor/KanbanConfigSection.d.ts +2 -1
  51. package/dist/collection_editor/ui/collection_editor/LayoutModeSwitch.d.ts +3 -3
  52. package/dist/collection_editor/ui/collection_editor/PropertyEditView.d.ts +17 -5
  53. package/dist/collection_editor/ui/collection_editor/PropertyFieldPreview.d.ts +2 -2
  54. package/dist/collection_editor/ui/collection_editor/PropertyTree.d.ts +2 -2
  55. package/dist/collection_editor/ui/collection_editor/RouterCollectionStudioView.d.ts +15 -0
  56. package/dist/collection_editor/ui/collection_editor/RouterCollectionsStudioView.d.ts +14 -0
  57. package/dist/collection_editor/ui/collection_editor/SubcollectionsEditTab.d.ts +8 -6
  58. package/dist/collection_editor/ui/collection_editor/SwitchControl.d.ts +3 -2
  59. package/dist/collection_editor/ui/collection_editor/ViewModeSwitch.d.ts +1 -1
  60. package/dist/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.d.ts +1 -1
  61. package/dist/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.d.ts +3 -2
  62. package/dist/collection_editor/ui/collection_editor/properties/BlockPropertyField.d.ts +2 -1
  63. package/dist/collection_editor/ui/collection_editor/properties/BooleanPropertyField.d.ts +2 -1
  64. package/dist/collection_editor/ui/collection_editor/properties/DateTimePropertyField.d.ts +2 -1
  65. package/dist/collection_editor/ui/collection_editor/properties/EnumPropertyField.d.ts +2 -1
  66. package/dist/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.d.ts +2 -1
  67. package/dist/collection_editor/ui/collection_editor/properties/MapPropertyField.d.ts +2 -1
  68. package/dist/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.d.ts +2 -1
  69. package/dist/collection_editor/ui/collection_editor/properties/NumberPropertyField.d.ts +2 -1
  70. package/dist/collection_editor/ui/collection_editor/properties/ReferencePropertyField.d.ts +3 -2
  71. package/dist/collection_editor/ui/collection_editor/properties/RelationPropertyField.d.ts +3 -8
  72. package/dist/collection_editor/ui/collection_editor/properties/RepeatPropertyField.d.ts +2 -1
  73. package/dist/collection_editor/ui/collection_editor/properties/StoragePropertyField.d.ts +2 -1
  74. package/dist/collection_editor/ui/collection_editor/properties/StringPropertyField.d.ts +2 -1
  75. package/dist/collection_editor/ui/collection_editor/properties/UrlPropertyField.d.ts +2 -1
  76. package/dist/collection_editor/ui/collection_editor/properties/VectorPropertyField.d.ts +4 -0
  77. package/dist/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.d.ts +2 -1
  78. package/dist/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.d.ts +2 -1
  79. package/dist/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.d.ts +1 -1
  80. package/dist/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.d.ts +2 -1
  81. package/dist/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.d.ts +2 -1
  82. package/dist/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.d.ts +2 -1
  83. package/dist/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.d.ts +2 -1
  84. package/dist/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.d.ts +2 -1
  85. package/dist/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.d.ts +1 -1
  86. package/dist/collection_editor/ui/collection_editor/templates/blog_template.d.ts +2 -2
  87. package/dist/collection_editor/ui/collection_editor/templates/pages_template.d.ts +2 -2
  88. package/dist/collection_editor/ui/collection_editor/templates/products_template.d.ts +2 -2
  89. package/dist/collection_editor/ui/collection_editor/templates/users_template.d.ts +2 -2
  90. package/dist/collection_editor/useJsonCollectionsConfigController.d.ts +37 -0
  91. package/dist/collection_editor/useLocalCollectionsConfigController.d.ts +2 -2
  92. package/dist/collection_editor/useSafeSnackbarController.d.ts +2 -0
  93. package/dist/collection_editor/validateCollectionJson.d.ts +2 -2
  94. package/dist/collection_editor_ui.d.ts +4 -0
  95. package/dist/collection_editor_ui.js +33 -11
  96. package/dist/collection_editor_ui.js.map +1 -1
  97. package/dist/components/ArrayContainer.d.ts +5 -5
  98. package/dist/components/ClearFilterSortButton.d.ts +1 -1
  99. package/dist/components/CollectionEditorDialogs.d.ts +2 -1
  100. package/dist/components/CollectionPanel.d.ts +58 -0
  101. package/dist/components/{EntityCollectionTable/EntityCollectionRowActions.d.ts → CollectionTableBinding/CollectionRowActions.d.ts} +5 -5
  102. package/dist/components/CollectionTableBinding/CollectionTableBinding.d.ts +28 -0
  103. package/dist/components/{EntityCollectionTable/EntityCollectionTableProps.d.ts → CollectionTableBinding/CollectionTableBindingProps.d.ts} +4 -4
  104. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/column_utils.d.ts +2 -2
  105. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableMultipleRelationField.d.ts +6 -6
  106. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableReferenceField.d.ts +6 -6
  107. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationField.d.ts +6 -6
  108. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationSelectorField.d.ts +3 -2
  109. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableStorageUpload.d.ts +4 -4
  110. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableSelect.d.ts +1 -1
  111. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableUserSelect.d.ts +1 -1
  112. package/dist/components/CollectionTableBinding/index.d.ts +6 -0
  113. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/CollectionTableToolbar.d.ts +5 -1
  114. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCell.d.ts +3 -3
  115. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCellActions.d.ts +1 -1
  116. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/common.d.ts +2 -2
  117. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/PopupFormField.d.ts +7 -6
  118. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/table_bindings.d.ts +4 -3
  119. package/dist/components/CollectionViewBinding/BoardCardBinding.d.ts +31 -0
  120. package/dist/components/CollectionViewBinding/CollectionBoardViewBinding.d.ts +22 -0
  121. package/dist/components/{EntityCollectionView/EntityCollectionCardView.d.ts → CollectionViewBinding/CollectionCardViewBinding.d.ts} +5 -5
  122. package/dist/components/CollectionViewBinding/CollectionListViewBinding.d.ts +50 -0
  123. package/dist/components/CollectionViewBinding/CollectionViewActions.d.ts +20 -0
  124. package/dist/components/CollectionViewBinding/CollectionViewBinding.d.ts +41 -0
  125. package/dist/components/CollectionViewBinding/CollectionViewStartActions.d.ts +21 -0
  126. package/dist/components/CollectionViewBinding/EntityCardBinding.d.ts +21 -0
  127. package/dist/components/CollectionViewBinding/FilterPresetsButton.d.ts +22 -0
  128. package/dist/components/{EntityCollectionView → CollectionViewBinding}/FiltersDialog.d.ts +3 -2
  129. package/dist/components/{EntityCollectionView → CollectionViewBinding}/SplitListView.d.ts +6 -5
  130. package/dist/components/{EntityCollectionView → CollectionViewBinding}/ViewModeToggle.d.ts +2 -1
  131. package/dist/components/{EntityCollectionView → CollectionViewBinding}/hooks/useCollectionInlineEditor.d.ts +3 -3
  132. package/dist/components/{EntityCollectionView → CollectionViewBinding}/hooks/useKanbanDragAndDrop.d.ts +7 -6
  133. package/dist/components/{EntityCollectionView → CollectionViewBinding}/useBoardDataController.d.ts +2 -2
  134. package/dist/components/{EntityCollectionView/useEntityPreviewSlots.d.ts → CollectionViewBinding/usePreviewSlots.d.ts} +5 -5
  135. package/dist/components/DefaultAppBar.d.ts +18 -1
  136. package/dist/components/DefaultDrawer.d.ts +53 -5
  137. package/dist/components/DeleteEntityDialog.d.ts +6 -5
  138. package/dist/components/DetailViewBinding.d.ts +28 -0
  139. package/dist/components/DrawerNavigationGroup.d.ts +1 -1
  140. package/dist/components/DrawerNavigationItem.d.ts +1 -1
  141. package/dist/components/EditFormActions.d.ts +3 -0
  142. package/dist/components/EditViewBinding.d.ts +58 -0
  143. package/dist/components/{EntityPreview.d.ts → EntityPreviewBinding.d.ts} +14 -14
  144. package/dist/components/EntityViewBinding.d.ts +13 -0
  145. package/dist/components/FieldCaption.d.ts +1 -1
  146. package/dist/components/HomePage/ContentHomePage.d.ts +1 -1
  147. package/dist/components/HomePage/FavouritesView.d.ts +1 -1
  148. package/dist/components/HomePage/HomePageDnD.d.ts +7 -7
  149. package/dist/components/HomePage/NavigationCard.d.ts +1 -1
  150. package/dist/components/HomePage/NavigationCardBinding.d.ts +2 -1
  151. package/dist/components/HomePage/NavigationGroup.d.ts +2 -2
  152. package/dist/components/HomePage/RenameGroupDialog.d.ts +2 -1
  153. package/dist/components/HomePage/SmallNavigationCard.d.ts +1 -1
  154. package/dist/components/JsonPreviewBinding.d.ts +4 -0
  155. package/dist/components/PropertyCollectionView.d.ts +3 -2
  156. package/dist/components/PropertyIdCopyTooltip.d.ts +3 -3
  157. package/dist/components/{RebaseCMS.d.ts → RebaseAdmin.d.ts} +2 -2
  158. package/dist/components/RebaseAuthGate.d.ts +1 -1
  159. package/dist/components/RebaseLayout.d.ts +6 -5
  160. package/dist/components/RebaseNavigation.d.ts +2 -2
  161. package/dist/components/RebaseRouteDefs.d.ts +2 -2
  162. package/dist/components/RebaseShell.d.ts +2 -1
  163. package/dist/components/ReferenceTable/{EntitySelectionTable.d.ts → SelectionTableBinding.d.ts} +6 -6
  164. package/dist/components/ReferenceWidget.d.ts +3 -2
  165. package/dist/components/RelationSelector.d.ts +1 -1
  166. package/dist/components/SearchIconsView.d.ts +2 -1
  167. package/dist/components/SelectableTable/SelectableTable.d.ts +11 -11
  168. package/dist/components/SelectableTable/SelectableTableContext.d.ts +3 -3
  169. package/dist/components/SelectableTable/SelectionStore.d.ts +16 -22
  170. package/dist/components/SelectableTable/filters/BooleanFilterField.d.ts +9 -3
  171. package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +10 -3
  172. package/dist/components/SelectableTable/filters/FilterFieldBinding.d.ts +40 -0
  173. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +10 -3
  174. package/dist/components/SelectableTable/filters/RelationFilterField.d.ts +8 -1
  175. package/dist/components/SelectableTable/filters/StringNumberFilterField.d.ts +10 -3
  176. package/dist/components/SideDialogs.d.ts +2 -2
  177. package/dist/components/SidePanelBinding.d.ts +11 -0
  178. package/dist/components/{SideEntityProvider.d.ts → SidePanelProvider.d.ts} +8 -8
  179. package/dist/components/admin/CreationResultDialog.d.ts +6 -0
  180. package/dist/components/admin/index.d.ts +1 -3
  181. package/dist/components/app/AppBar.d.ts +1 -1
  182. package/dist/components/app/Drawer.d.ts +9 -2
  183. package/dist/components/common/default_entity_actions.d.ts +8 -1
  184. package/dist/components/field_configs.d.ts +1 -1
  185. package/dist/components/history/EntityHistoryEntry.d.ts +3 -3
  186. package/dist/components/history/EntityHistoryView.d.ts +1 -1
  187. package/dist/components/history/LastEditedByFormAction.d.ts +2 -1
  188. package/dist/components/history/LastEditedByIndicator.d.ts +4 -3
  189. package/dist/components/history/UserChip.d.ts +1 -1
  190. package/dist/components/index.d.ts +16 -13
  191. package/dist/contexts/SidePanelControllerContext.d.ts +3 -0
  192. package/dist/data_export/export/BasicExportAction.d.ts +2 -1
  193. package/dist/data_export/export/ExportCollectionAction.d.ts +4 -4
  194. package/dist/data_export/export/export.d.ts +3 -3
  195. package/dist/data_import/components/DataNewPropertiesMapping.d.ts +1 -1
  196. package/dist/data_import/components/ImportFileUpload.d.ts +1 -1
  197. package/dist/data_import/components/ImportNewPropertyFieldPreview.d.ts +2 -1
  198. package/dist/data_import/components/ImportSaveInProgress.d.ts +3 -3
  199. package/dist/data_import/import/ImportCollectionAction.d.ts +4 -3
  200. package/dist/data_import/utils/data.d.ts +1 -1
  201. package/dist/data_import/utils/file_headers.d.ts +6 -1
  202. package/dist/data_import/utils/file_to_json.d.ts +1 -11
  203. package/dist/data_import/utils/transforms.d.ts +11 -0
  204. package/dist/editor/components/SlashCommandMenu.d.ts +2 -1
  205. package/dist/editor/components/editor-bubble.d.ts +5 -1
  206. package/dist/editor/components/image-bubble.d.ts +5 -1
  207. package/dist/editor/components/index.d.ts +3 -3
  208. package/dist/editor/components/table-bubble.d.ts +5 -1
  209. package/dist/editor/editor.d.ts +4 -4
  210. package/dist/editor/nodeViews/ReactNodeView.d.ts +4 -1
  211. package/dist/editor/selectors/color-selector.d.ts +1 -1
  212. package/dist/editor/selectors/link-selector.d.ts +1 -1
  213. package/dist/editor/selectors/node-selector.d.ts +1 -1
  214. package/dist/editor/selectors/text-buttons.d.ts +1 -1
  215. package/dist/editor/useProseMirror.d.ts +2 -2
  216. package/dist/editor/utils/remove_classes.d.ts +1 -1
  217. package/dist/editor.js +2625 -3569
  218. package/dist/editor.js.map +1 -1
  219. package/dist/form/EntityForm.d.ts +11 -9
  220. package/dist/form/EntityFormActions.d.ts +2 -1
  221. package/dist/form/EntityFormBinding.d.ts +27 -0
  222. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  223. package/dist/form/components/FieldHelperText.d.ts +1 -1
  224. package/dist/form/components/FormEntry.d.ts +1 -1
  225. package/dist/form/components/FormLayout.d.ts +1 -1
  226. package/dist/form/components/LabelWithIconAndTooltip.d.ts +1 -1
  227. package/dist/form/components/LocalChangesMenu.d.ts +3 -2
  228. package/dist/form/components/StorageItemPreview.d.ts +2 -1
  229. package/dist/form/components/StorageUploadProgress.d.ts +10 -4
  230. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +2 -1
  231. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +2 -1
  232. package/dist/form/field_bindings/BlockFieldBinding.d.ts +2 -1
  233. package/dist/form/field_bindings/DateTimeFieldBinding.d.ts +2 -1
  234. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +2 -1
  235. package/dist/form/field_bindings/MapFieldBinding.d.ts +2 -1
  236. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +4 -3
  237. package/dist/form/field_bindings/MultiSelectFieldBinding.d.ts +2 -1
  238. package/dist/form/field_bindings/MultipleRelationFieldBinding.d.ts +2 -1
  239. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +2 -1
  240. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -1
  241. package/dist/form/field_bindings/RelationFieldBinding.d.ts +2 -1
  242. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +2 -1
  243. package/dist/form/field_bindings/SelectFieldBinding.d.ts +2 -1
  244. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +5 -4
  245. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +2 -1
  246. package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -1
  247. package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +2 -1
  248. package/dist/form/field_bindings/VectorFieldBinding.d.ts +12 -0
  249. package/dist/form/form_utils.d.ts +8 -0
  250. package/dist/form/index.d.ts +6 -2
  251. package/dist/form/validation.d.ts +3 -3
  252. package/dist/history-C0FdqGNz.js +311 -0
  253. package/dist/history-C0FdqGNz.js.map +1 -0
  254. package/dist/hooks/index.d.ts +4 -4
  255. package/dist/hooks/navigation/contexts/CollectionRegistryContext.d.ts +2 -2
  256. package/dist/hooks/navigation/useAsyncResolver.d.ts +26 -0
  257. package/dist/hooks/navigation/useBuildCollectionRegistryController.d.ts +2 -0
  258. package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +6 -8
  259. package/dist/hooks/navigation/useNavigationResolution.d.ts +6 -7
  260. package/dist/hooks/navigation/useResolvedCollections.d.ts +11 -7
  261. package/dist/hooks/navigation/useResolvedViews.d.ts +2 -5
  262. package/dist/hooks/navigation/useTopLevelNavigation.d.ts +3 -3
  263. package/dist/hooks/navigation/utils.d.ts +5 -5
  264. package/dist/hooks/useBreadcrumbsController.d.ts +2 -32
  265. package/dist/hooks/useBuildSidePanel.d.ts +6 -0
  266. package/dist/hooks/useCMSContext.d.ts +2 -2
  267. package/dist/hooks/{useEntityHistory.d.ts → useHistory.d.ts} +2 -2
  268. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  269. package/dist/hooks/{useEntitySelectionDialog.d.ts → useSelectionDialog.d.ts} +2 -2
  270. package/dist/hooks/useSideDialogsController.d.ts +1 -1
  271. package/dist/hooks/useSidePanel.d.ts +11 -0
  272. package/dist/index.d.ts +6 -3
  273. package/dist/index.js +2 -799
  274. package/dist/markdown-CklalUUk.js +526 -0
  275. package/dist/markdown-CklalUUk.js.map +1 -0
  276. package/dist/preview/components/ArrayEnumPreview.d.ts +2 -1
  277. package/dist/preview/components/EmptyValue.d.ts +2 -1
  278. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  279. package/dist/preview/components/ImagePreview.d.ts +2 -1
  280. package/dist/preview/components/ReferencePreview.d.ts +2 -1
  281. package/dist/preview/components/RelationPreview.d.ts +2 -1
  282. package/dist/preview/components/StorageThumbnail.d.ts +3 -1
  283. package/dist/preview/components/UrlComponentPreview.d.ts +1 -0
  284. package/dist/preview/components/UserPreview.d.ts +6 -3
  285. package/dist/preview/property_previews/ArrayOfMapsPreview.d.ts +2 -1
  286. package/dist/preview/property_previews/ArrayOfReferencesPreview.d.ts +1 -1
  287. package/dist/preview/property_previews/ArrayOfRelationsPreview.d.ts +1 -1
  288. package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +2 -1
  289. package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +2 -1
  290. package/dist/preview/property_previews/ArrayOneOfPreview.d.ts +2 -1
  291. package/dist/preview/property_previews/ArrayPropertyEnumPreview.d.ts +1 -1
  292. package/dist/preview/property_previews/ArrayPropertyPreview.d.ts +2 -1
  293. package/dist/preview/property_previews/MapPropertyPreview.d.ts +3 -2
  294. package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +5 -4
  295. package/dist/rolldown-runtime-D7D4PA-g.js +13 -0
  296. package/dist/routes/CustomViewRoute.d.ts +2 -1
  297. package/dist/routes/RebaseRoute.d.ts +1 -1
  298. package/dist/src-DLAFyeZI.js +24222 -0
  299. package/dist/src-DLAFyeZI.js.map +1 -0
  300. package/dist/types/components/EntityFormActionsProps.d.ts +4 -4
  301. package/dist/types/components/EntityFormProps.d.ts +65 -5
  302. package/dist/types/components/PropertyPreviewProps.d.ts +6 -1
  303. package/dist/types/components/formex.d.ts +1 -40
  304. package/dist/types/fields.d.ts +23 -12
  305. package/dist/util/dataControllerAdapter.d.ts +27 -0
  306. package/dist/util/navigation_utils.d.ts +16 -6
  307. package/dist/util/previews.d.ts +8 -3
  308. package/dist/util/propertyConfigMapper.d.ts +17 -0
  309. package/dist/util/property_utils.d.ts +3 -3
  310. package/dist/util/resolutions.d.ts +1 -2
  311. package/dist/util/view_constants.d.ts +6 -0
  312. package/package.json +56 -55
  313. package/src/collection_editor/ConfigControllerProvider.tsx +37 -53
  314. package/src/collection_editor/_cms_internals.ts +4 -4
  315. package/src/collection_editor/api/generateCollectionApi.ts +10 -9
  316. package/src/collection_editor/extensibility_types.ts +168 -0
  317. package/src/collection_editor/index.ts +47 -3
  318. package/src/collection_editor/pgColumnToProperty.ts +23 -6
  319. package/src/collection_editor/serializable_types.ts +474 -0
  320. package/src/collection_editor/serializable_utils.ts +576 -0
  321. package/src/collection_editor/types/collection_editor_controller.tsx +8 -11
  322. package/src/collection_editor/types/collection_inference.ts +2 -2
  323. package/src/collection_editor/types/config_controller.tsx +14 -14
  324. package/src/collection_editor/ui/AddKanbanColumnAction.tsx +21 -9
  325. package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +8 -8
  326. package/src/collection_editor/ui/EditorCollectionAction.tsx +9 -14
  327. package/src/collection_editor/ui/EditorCollectionActionStart.tsx +13 -18
  328. package/src/collection_editor/ui/EditorEntityAction.tsx +9 -14
  329. package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +13 -19
  330. package/src/collection_editor/ui/KanbanSetupAction.tsx +8 -6
  331. package/src/collection_editor/ui/MissingReferenceWidget.tsx +5 -3
  332. package/src/collection_editor/ui/NewCollectionButton.tsx +4 -4
  333. package/src/collection_editor/ui/NewCollectionCard.tsx +8 -13
  334. package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +11 -16
  335. package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +20 -12
  336. package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +29 -59
  337. package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +213 -135
  338. package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +21 -7
  339. package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +29 -23
  340. package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +142 -112
  341. package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +49 -12
  342. package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +29 -10
  343. package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +26 -23
  344. package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +104 -37
  345. package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +26 -14
  346. package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +21 -8
  347. package/src/collection_editor/ui/collection_editor/EntityActionsSelectDialog.tsx +1 -1
  348. package/src/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +1 -1
  349. package/src/collection_editor/ui/collection_editor/EnumForm.tsx +20 -5
  350. package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +45 -12
  351. package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +10 -12
  352. package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +5 -6
  353. package/src/collection_editor/ui/collection_editor/LayoutModeSwitch.tsx +17 -5
  354. package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +190 -27
  355. package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +58 -49
  356. package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +17 -4
  357. package/src/collection_editor/ui/collection_editor/RouterCollectionStudioView.tsx +44 -0
  358. package/src/collection_editor/ui/collection_editor/RouterCollectionsStudioView.tsx +41 -0
  359. package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +27 -13
  360. package/src/collection_editor/ui/collection_editor/SwitchControl.tsx +1 -1
  361. package/src/collection_editor/ui/collection_editor/ViewModeSwitch.tsx +9 -2
  362. package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +4 -4
  363. package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +4 -4
  364. package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +5 -6
  365. package/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx +1 -1
  366. package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +5 -5
  367. package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +10 -10
  368. package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +10 -9
  369. package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +7 -8
  370. package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +17 -10
  371. package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +7 -7
  372. package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +19 -53
  373. package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +43 -60
  374. package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +3 -3
  375. package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +56 -13
  376. package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +7 -7
  377. package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +4 -3
  378. package/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx +34 -0
  379. package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +5 -6
  380. package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +18 -9
  381. package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.tsx +1 -2
  382. package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +17 -5
  383. package/src/collection_editor/ui/collection_editor/properties/conditions/property_paths.ts +1 -1
  384. package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +4 -4
  385. package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +3 -3
  386. package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +6 -9
  387. package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +6 -6
  388. package/src/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.tsx +1 -2
  389. package/src/collection_editor/ui/collection_editor/templates/blog_template.ts +3 -3
  390. package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +3 -3
  391. package/src/collection_editor/ui/collection_editor/templates/products_template.ts +4 -4
  392. package/src/collection_editor/ui/collection_editor/templates/users_template.ts +2 -2
  393. package/src/collection_editor/ui/collection_editor/utils/supported_fields.tsx +0 -1
  394. package/src/collection_editor/ui/collection_editor/utils/update_property_for_widget.ts +7 -29
  395. package/src/collection_editor/useJsonCollectionsConfigController.tsx +286 -0
  396. package/src/collection_editor/useLocalCollectionsConfigController.tsx +11 -8
  397. package/src/collection_editor/useSafeSnackbarController.ts +9 -0
  398. package/src/collection_editor/validateCollectionJson.ts +111 -24
  399. package/src/collection_editor_ui.ts +6 -0
  400. package/src/components/AdminModeSyncer.tsx +2 -2
  401. package/src/components/ArrayContainer.tsx +28 -24
  402. package/src/components/ClearFilterSortButton.tsx +2 -3
  403. package/src/components/CollectionEditorDialogs.tsx +1 -1
  404. package/src/components/CollectionPanel.tsx +178 -0
  405. package/src/components/{EntityCollectionTable/EntityCollectionRowActions.tsx → CollectionTableBinding/CollectionRowActions.tsx} +26 -16
  406. package/src/components/{EntityCollectionTable/EntityCollectionTable.tsx → CollectionTableBinding/CollectionTableBinding.tsx} +34 -31
  407. package/src/components/{EntityCollectionTable/EntityCollectionTableProps.tsx → CollectionTableBinding/CollectionTableBindingProps.tsx} +4 -4
  408. package/src/components/{EntityCollectionTable → CollectionTableBinding}/PropertyTableCell.tsx +14 -12
  409. package/src/components/{EntityCollectionTable → CollectionTableBinding}/column_utils.tsx +4 -4
  410. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableMultipleRelationField.tsx +13 -13
  411. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableReferenceField.tsx +39 -19
  412. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationField.tsx +14 -14
  413. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationSelectorField.tsx +3 -3
  414. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableStorageUpload.tsx +29 -27
  415. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableSelect.tsx +0 -1
  416. package/src/components/CollectionTableBinding/index.tsx +14 -0
  417. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/CollectionTableToolbar.tsx +22 -28
  418. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCell.tsx +8 -9
  419. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCellActions.tsx +2 -3
  420. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/common.tsx +7 -7
  421. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/PopupFormField.tsx +12 -13
  422. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useDraggable.tsx +5 -2
  423. package/src/components/{EntityCollectionTable → CollectionTableBinding}/table_bindings.tsx +101 -104
  424. package/src/components/{EntityCollectionView/EntityBoardCard.tsx → CollectionViewBinding/BoardCardBinding.tsx} +39 -40
  425. package/src/components/{EntityCollectionView/EntityCollectionBoardView.tsx → CollectionViewBinding/CollectionBoardViewBinding.tsx} +88 -52
  426. package/src/components/CollectionViewBinding/CollectionCardViewBinding.tsx +157 -0
  427. package/src/components/{EntityCollectionView/EntityCollectionListView.tsx → CollectionViewBinding/CollectionListViewBinding.tsx} +234 -151
  428. package/src/components/{EntityCollectionView/EntityCollectionViewActions.tsx → CollectionViewBinding/CollectionViewActions.tsx} +36 -26
  429. package/src/components/{EntityCollectionView/EntityCollectionView.tsx → CollectionViewBinding/CollectionViewBinding.tsx} +392 -213
  430. package/src/components/{EntityCollectionView/EntityCollectionViewStartActions.tsx → CollectionViewBinding/CollectionViewStartActions.tsx} +42 -23
  431. package/src/components/{EntityCollectionView/EntityCard.tsx → CollectionViewBinding/EntityCardBinding.tsx} +14 -14
  432. package/src/components/CollectionViewBinding/FilterPresetsButton.tsx +294 -0
  433. package/src/components/{EntityCollectionView → CollectionViewBinding}/FiltersDialog.tsx +37 -79
  434. package/src/components/{EntityCollectionView → CollectionViewBinding}/SplitListView.tsx +97 -30
  435. package/src/components/{EntityCollectionView → CollectionViewBinding}/ViewModeToggle.tsx +20 -8
  436. package/src/components/{EntityCollectionView → CollectionViewBinding}/hooks/useCollectionInlineEditor.ts +9 -8
  437. package/src/components/{EntityCollectionView → CollectionViewBinding}/hooks/useKanbanDragAndDrop.ts +17 -16
  438. package/src/components/{EntityCollectionView → CollectionViewBinding}/useBoardDataController.tsx +118 -70
  439. package/src/components/{EntityCollectionView/useEntityPreviewSlots.ts → CollectionViewBinding/usePreviewSlots.ts} +136 -48
  440. package/src/components/DefaultAppBar.tsx +73 -41
  441. package/src/components/DefaultDrawer.tsx +317 -85
  442. package/src/components/DeleteEntityDialog.tsx +7 -7
  443. package/src/components/DetailViewBinding.tsx +670 -0
  444. package/src/components/DrawerNavigationGroup.tsx +11 -11
  445. package/src/components/DrawerNavigationItem.tsx +6 -6
  446. package/src/components/{EntityEditViewFormActions.tsx → EditFormActions.tsx} +78 -59
  447. package/src/components/EditViewBinding.tsx +761 -0
  448. package/src/components/{EntityPreview.tsx → EntityPreviewBinding.tsx} +53 -39
  449. package/src/components/{EntityView.tsx → EntityViewBinding.tsx} +8 -9
  450. package/src/components/HomePage/ContentHomePage.tsx +35 -17
  451. package/src/components/HomePage/FavouritesView.tsx +2 -3
  452. package/src/components/HomePage/HomePageDnD.tsx +3 -2
  453. package/src/components/HomePage/NavigationCard.tsx +9 -16
  454. package/src/components/HomePage/NavigationCardBinding.tsx +6 -7
  455. package/src/components/HomePage/NavigationGroup.tsx +4 -5
  456. package/src/components/HomePage/RenameGroupDialog.tsx +1 -1
  457. package/src/components/HomePage/SmallNavigationCard.tsx +0 -5
  458. package/src/components/{EntityJsonPreview.tsx → JsonPreviewBinding.tsx} +2 -2
  459. package/src/components/PropertyCollectionView.tsx +2 -1
  460. package/src/components/PropertyIdCopyTooltip.tsx +2 -3
  461. package/src/components/{RebaseCMS.tsx → RebaseAdmin.tsx} +8 -6
  462. package/src/components/RebaseAuthGate.tsx +5 -3
  463. package/src/components/RebaseLayout.tsx +10 -9
  464. package/src/components/RebaseNavigation.tsx +107 -31
  465. package/src/components/RebaseRouteDefs.tsx +10 -13
  466. package/src/components/RebaseShell.tsx +18 -14
  467. package/src/components/ReferenceTable/{EntitySelectionTable.tsx → SelectionTableBinding.tsx} +40 -33
  468. package/src/components/ReferenceWidget.tsx +7 -7
  469. package/src/components/RelationSelector.tsx +82 -24
  470. package/src/components/SearchIconsView.tsx +13 -12
  471. package/src/components/SelectableTable/SelectableTable.tsx +68 -115
  472. package/src/components/SelectableTable/SelectableTableContext.tsx +4 -3
  473. package/src/components/SelectableTable/SelectionStore.ts +20 -44
  474. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +13 -5
  475. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +37 -16
  476. package/src/components/SelectableTable/filters/FilterFieldBinding.tsx +187 -0
  477. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +27 -13
  478. package/src/components/SelectableTable/filters/RelationFilterField.tsx +17 -3
  479. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +95 -35
  480. package/src/components/SideDialogs.tsx +58 -40
  481. package/src/components/SidePanelBinding.tsx +261 -0
  482. package/src/components/{SideEntityProvider.tsx → SidePanelProvider.tsx} +17 -16
  483. package/src/components/UserSelector.tsx +123 -9
  484. package/src/components/admin/CreationResultDialog.tsx +138 -0
  485. package/src/components/admin/index.ts +1 -3
  486. package/src/components/app/Drawer.tsx +9 -1
  487. package/src/components/app/Scaffold.tsx +16 -9
  488. package/src/components/common/default_entity_actions.tsx +270 -29
  489. package/src/components/field_configs.tsx +68 -46
  490. package/src/components/history/EntityHistoryEntry.tsx +4 -5
  491. package/src/components/history/EntityHistoryView.tsx +18 -8
  492. package/src/components/history/LastEditedByIndicator.tsx +4 -4
  493. package/src/components/index.ts +20 -17
  494. package/src/contexts/BreacrumbsContext.tsx +15 -6
  495. package/src/contexts/SidePanelControllerContext.tsx +5 -0
  496. package/src/data_export/export/BasicExportAction.tsx +42 -43
  497. package/src/data_export/export/ExportCollectionAction.tsx +55 -54
  498. package/src/data_export/export/export.ts +17 -17
  499. package/src/data_import/components/DataNewPropertiesMapping.tsx +17 -4
  500. package/src/data_import/components/ImportFileUpload.tsx +2 -3
  501. package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +2 -3
  502. package/src/data_import/components/ImportSaveInProgress.tsx +4 -4
  503. package/src/data_import/import/ImportCollectionAction.tsx +26 -13
  504. package/src/data_import/utils/data.ts +26 -8
  505. package/src/data_import/utils/file_headers.ts +13 -89
  506. package/src/data_import/utils/file_to_json.ts +43 -68
  507. package/src/data_import/utils/get_properties_mapping.ts +1 -1
  508. package/src/data_import/utils/transforms.ts +47 -0
  509. package/src/editor/components/SlashCommandMenu.tsx +17 -2
  510. package/src/editor/components/editor-bubble-item.tsx +1 -1
  511. package/src/editor/components/editor-bubble.tsx +32 -9
  512. package/src/editor/components/image-bubble.tsx +28 -12
  513. package/src/editor/components/index.ts +3 -3
  514. package/src/editor/components/table-bubble.tsx +80 -18
  515. package/src/editor/editor.tsx +34 -15
  516. package/src/editor/extensions/HighlightDecorationExtension.ts +3 -2
  517. package/src/editor/extensions/Image/index.ts +3 -3
  518. package/src/editor/extensions/Image.ts +3 -3
  519. package/src/editor/extensions/clipboard.ts +2 -2
  520. package/src/editor/markdown-it-plugins.d.ts +24 -0
  521. package/src/editor/markdown.ts +2 -3
  522. package/src/editor/nodeViews/ReactNodeView.tsx +1 -1
  523. package/src/editor/nodeViews/TaskItemComponent.tsx +9 -8
  524. package/src/editor/schema.ts +135 -59
  525. package/src/editor/selectors/ai-selector.tsx +0 -1
  526. package/src/editor/selectors/color-selector.tsx +1 -2
  527. package/src/editor/selectors/link-selector.tsx +9 -7
  528. package/src/editor/selectors/node-selector.tsx +17 -3
  529. package/src/editor/selectors/text-buttons.tsx +1 -2
  530. package/src/editor/useProseMirror.ts +2 -2
  531. package/src/editor/utils/prosemirror-utils.ts +1 -1
  532. package/src/editor/utils/remove_classes.ts +6 -5
  533. package/src/form/EntityForm.tsx +222 -442
  534. package/src/form/EntityFormActions.tsx +49 -55
  535. package/src/form/EntityFormBinding.tsx +323 -0
  536. package/src/form/PropertyFieldBinding.tsx +81 -84
  537. package/src/form/components/ErrorFocus.tsx +1 -1
  538. package/src/form/components/FieldHelperText.tsx +6 -7
  539. package/src/form/components/FormLayout.tsx +1 -1
  540. package/src/form/components/LocalChangesMenu.tsx +20 -5
  541. package/src/form/components/StorageItemPreview.tsx +2 -3
  542. package/src/form/components/StorageUploadProgress.tsx +14 -7
  543. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +5 -5
  544. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +12 -13
  545. package/src/form/field_bindings/BlockFieldBinding.tsx +59 -58
  546. package/src/form/field_bindings/DateTimeFieldBinding.tsx +2 -2
  547. package/src/form/field_bindings/KeyValueFieldBinding.tsx +319 -303
  548. package/src/form/field_bindings/MapFieldBinding.tsx +14 -56
  549. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +28 -10
  550. package/src/form/field_bindings/MultiSelectFieldBinding.tsx +3 -4
  551. package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +11 -12
  552. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +9 -2
  553. package/src/form/field_bindings/ReferenceFieldBinding.tsx +17 -15
  554. package/src/form/field_bindings/RelationFieldBinding.tsx +157 -156
  555. package/src/form/field_bindings/RepeatFieldBinding.tsx +8 -8
  556. package/src/form/field_bindings/SelectFieldBinding.tsx +3 -4
  557. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +107 -103
  558. package/src/form/field_bindings/SwitchFieldBinding.tsx +17 -17
  559. package/src/form/field_bindings/TextFieldBinding.tsx +90 -78
  560. package/src/form/field_bindings/UserSelectFieldBinding.tsx +18 -18
  561. package/src/form/field_bindings/VectorFieldBinding.tsx +202 -0
  562. package/src/form/form_utils.ts +163 -0
  563. package/src/form/index.tsx +15 -6
  564. package/src/form/useClearRestoreValue.tsx +1 -1
  565. package/src/form/validation.ts +104 -50
  566. package/src/hooks/index.ts +4 -4
  567. package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +5 -4
  568. package/src/hooks/navigation/contexts/NavigationStateContext.tsx +2 -2
  569. package/src/hooks/navigation/contexts/UrlContext.tsx +1 -2
  570. package/src/hooks/navigation/useAsyncResolver.ts +100 -0
  571. package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +40 -21
  572. package/src/hooks/navigation/useBuildNavigationStateController.tsx +21 -22
  573. package/src/hooks/navigation/useNavigationResolution.ts +193 -21
  574. package/src/hooks/navigation/useResolvedCollections.ts +45 -77
  575. package/src/hooks/navigation/useResolvedViews.tsx +44 -123
  576. package/src/hooks/navigation/useTopLevelNavigation.ts +22 -18
  577. package/src/hooks/navigation/utils.ts +12 -9
  578. package/src/hooks/useBreadcrumbsController.tsx +2 -34
  579. package/src/hooks/{useBuildSideEntityController.tsx → useBuildSidePanel.tsx} +63 -24
  580. package/src/hooks/useCMSContext.tsx +7 -7
  581. package/src/hooks/{useEntityHistory.ts → useHistory.ts} +9 -4
  582. package/src/hooks/useResolvedNavigationFrom.tsx +8 -5
  583. package/src/hooks/{useEntitySelectionDialog.tsx → useSelectionDialog.tsx} +7 -7
  584. package/src/hooks/useSideDialogsController.tsx +1 -1
  585. package/src/hooks/useSidePanel.tsx +13 -0
  586. package/src/index.ts +34 -20
  587. package/src/preview/PropertyPreview.tsx +34 -41
  588. package/src/preview/components/DatePreview.tsx +1 -1
  589. package/src/preview/components/EnumValuesChip.tsx +1 -1
  590. package/src/preview/components/ImagePreview.tsx +4 -3
  591. package/src/preview/components/ReferencePreview.tsx +69 -18
  592. package/src/preview/components/RelationPreview.tsx +107 -18
  593. package/src/preview/components/StorageThumbnail.tsx +28 -8
  594. package/src/preview/components/UrlComponentPreview.tsx +12 -4
  595. package/src/preview/components/UserPreview.tsx +6 -15
  596. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +5 -5
  597. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +5 -5
  598. package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +4 -4
  599. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +4 -4
  600. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +3 -2
  601. package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -9
  602. package/src/preview/property_previews/ArrayPropertyEnumPreview.tsx +1 -1
  603. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -4
  604. package/src/preview/property_previews/MapPropertyPreview.tsx +4 -3
  605. package/src/preview/property_previews/NumberPropertyPreview.tsx +5 -3
  606. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +24 -25
  607. package/src/preview/property_previews/StringPropertyPreview.tsx +13 -11
  608. package/src/routes/CustomViewRoute.tsx +14 -6
  609. package/src/routes/RebaseRoute.tsx +112 -36
  610. package/src/types/components/EntityFormActionsProps.tsx +4 -4
  611. package/src/types/components/EntityFormProps.tsx +75 -5
  612. package/src/types/components/PropertyPreviewProps.tsx +6 -1
  613. package/src/types/components/formex.tsx +1 -45
  614. package/src/types/fields.tsx +26 -15
  615. package/src/util/dataControllerAdapter.ts +87 -0
  616. package/src/util/navigation_utils.ts +43 -13
  617. package/src/util/previews.ts +149 -13
  618. package/src/util/propertyConfigMapper.ts +134 -0
  619. package/src/util/property_utils.tsx +24 -9
  620. package/src/util/resolutions.ts +4 -8
  621. package/src/util/view_constants.ts +6 -0
  622. package/dist/CollectionEditorDialog-B2M9lCyL.js +0 -4720
  623. package/dist/CollectionEditorDialog-B2M9lCyL.js.map +0 -1
  624. package/dist/CollectionsStudioView-WG6soyfs.js +0 -218
  625. package/dist/CollectionsStudioView-WG6soyfs.js.map +0 -1
  626. package/dist/ContentHomePage-CDF_a6Lp.js +0 -1786
  627. package/dist/ContentHomePage-CDF_a6Lp.js.map +0 -1
  628. package/dist/ExportCollectionAction-Dc0VOWMN.js +0 -439
  629. package/dist/ExportCollectionAction-Dc0VOWMN.js.map +0 -1
  630. package/dist/ImportCollectionAction-DpCagAOy.js +0 -686
  631. package/dist/ImportCollectionAction-DpCagAOy.js.map +0 -1
  632. package/dist/PropertyEditView-DS67DxoT.js +0 -8138
  633. package/dist/PropertyEditView-DS67DxoT.js.map +0 -1
  634. package/dist/RoleChip-QtUFXeTp.js +0 -67
  635. package/dist/RoleChip-QtUFXeTp.js.map +0 -1
  636. package/dist/RolesView-CIuYBimF.js +0 -424
  637. package/dist/RolesView-CIuYBimF.js.map +0 -1
  638. package/dist/UsersView-B5zelXnH.js +0 -493
  639. package/dist/UsersView-B5zelXnH.js.map +0 -1
  640. package/dist/collection_editor/types/config_permissions.d.ts +0 -19
  641. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +0 -27
  642. package/dist/components/EntityCollectionTable/fields/VirtualTableDateField.d.ts +0 -12
  643. package/dist/components/EntityCollectionTable/fields/VirtualTableInput.d.ts +0 -9
  644. package/dist/components/EntityCollectionTable/fields/VirtualTableNumberInput.d.ts +0 -8
  645. package/dist/components/EntityCollectionTable/fields/VirtualTableSwitch.d.ts +0 -7
  646. package/dist/components/EntityCollectionTable/index.d.ts +0 -6
  647. package/dist/components/EntityCollectionView/Board.d.ts +0 -2
  648. package/dist/components/EntityCollectionView/BoardColumn.d.ts +0 -42
  649. package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +0 -9
  650. package/dist/components/EntityCollectionView/BoardSortableList.d.ts +0 -14
  651. package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +0 -31
  652. package/dist/components/EntityCollectionView/EntityCard.d.ts +0 -20
  653. package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +0 -21
  654. package/dist/components/EntityCollectionView/EntityCollectionListView.d.ts +0 -34
  655. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +0 -64
  656. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +0 -18
  657. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +0 -18
  658. package/dist/components/EntityCollectionView/board_types.d.ts +0 -105
  659. package/dist/components/EntityEditView.d.ts +0 -49
  660. package/dist/components/EntityEditViewFormActions.d.ts +0 -2
  661. package/dist/components/EntityJsonPreview.d.ts +0 -3
  662. package/dist/components/EntitySidePanel.d.ts +0 -10
  663. package/dist/components/EntityView.d.ts +0 -12
  664. package/dist/components/admin/RoleChip.d.ts +0 -4
  665. package/dist/components/admin/RolesView.d.ts +0 -4
  666. package/dist/components/admin/UsersView.d.ts +0 -4
  667. package/dist/contexts/SideEntityControllerContext.d.ts +0 -3
  668. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +0 -10
  669. package/dist/hooks/navigation/useNavigationRegistry.d.ts +0 -11
  670. package/dist/hooks/navigation/useNavigationURLs.d.ts +0 -11
  671. package/dist/hooks/useBuildSideEntityController.d.ts +0 -6
  672. package/dist/hooks/useSideEntityController.d.ts +0 -11
  673. package/dist/index-CBhrgpR7.js +0 -12
  674. package/dist/index-CBhrgpR7.js.map +0 -1
  675. package/dist/index-CHxgwt6E.js +0 -456
  676. package/dist/index-CHxgwt6E.js.map +0 -1
  677. package/dist/index-Dey5WJpO.js +0 -8
  678. package/dist/index-Dey5WJpO.js.map +0 -1
  679. package/dist/index.js.map +0 -1
  680. package/dist/markdown-z2Ir7Cgo.js +0 -618
  681. package/dist/markdown-z2Ir7Cgo.js.map +0 -1
  682. package/dist/useEntityHistory-Dcj4zhGj.js +0 -121
  683. package/dist/useEntityHistory-Dcj4zhGj.js.map +0 -1
  684. package/dist/util-BQ82ySL3.js +0 -27720
  685. package/dist/util-BQ82ySL3.js.map +0 -1
  686. package/src/collection_editor/types/config_permissions.ts +0 -20
  687. package/src/components/EntityCollectionTable/fields/VirtualTableDateField.tsx +0 -39
  688. package/src/components/EntityCollectionTable/fields/VirtualTableInput.tsx +0 -90
  689. package/src/components/EntityCollectionTable/fields/VirtualTableNumberInput.tsx +0 -80
  690. package/src/components/EntityCollectionTable/fields/VirtualTableSwitch.tsx +0 -32
  691. package/src/components/EntityCollectionTable/index.tsx +0 -14
  692. package/src/components/EntityCollectionView/Board.tsx +0 -474
  693. package/src/components/EntityCollectionView/BoardColumn.tsx +0 -158
  694. package/src/components/EntityCollectionView/BoardColumnTitle.tsx +0 -45
  695. package/src/components/EntityCollectionView/BoardSortableList.tsx +0 -177
  696. package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +0 -267
  697. package/src/components/EntityCollectionView/board_types.ts +0 -113
  698. package/src/components/EntityEditView.tsx +0 -632
  699. package/src/components/EntitySidePanel.tsx +0 -160
  700. package/src/components/admin/RoleChip.tsx +0 -23
  701. package/src/components/admin/RolesView.tsx +0 -419
  702. package/src/components/admin/UsersView.tsx +0 -782
  703. package/src/contexts/SideEntityControllerContext.tsx +0 -5
  704. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +0 -141
  705. package/src/hooks/navigation/useNavigationRegistry.ts +0 -153
  706. package/src/hooks/navigation/useNavigationURLs.ts +0 -56
  707. package/src/hooks/useSideEntityController.tsx +0 -13
  708. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/PropertyTableCell.d.ts +0 -0
  709. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useDraggable.d.ts +0 -0
  710. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useWindowSize.d.ts +0 -0
  711. /package/dist/components/{EntityCollectionView → CollectionViewBinding}/useSelectionController.d.ts +0 -0
  712. /package/dist/components/{EntityCollectionView → CollectionViewBinding}/utils.d.ts +0 -0
  713. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableUserSelect.tsx +0 -0
  714. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useWindowSize.tsx +0 -0
  715. /package/src/components/{EntityCollectionView → CollectionViewBinding}/useSelectionController.tsx +0 -0
  716. /package/src/components/{EntityCollectionView → CollectionViewBinding}/utils.ts +0 -0
@@ -0,0 +1,761 @@
1
+ import type { ComponentRef, CollectionConfig, EntityCustomViewParams, FormViewConfig } from "@rebasepro/types";
2
+ import type { FormContext } from "../types/fields";
3
+ import type { PluginFormActionProps } from "@rebasepro/types";
4
+ import React, { lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState } from "react";
5
+ import { Entity, EntityStatus, getCollectionDataPath } from "@rebasepro/types";
6
+ import { PluginProviderStack, resolveComponentRef, useComponentOverride, CollectionScopeProvider } from "@rebasepro/app";
7
+
8
+ import { CollectionViewBinding, EntityViewBinding } from "../components";
9
+ import { CircularProgressCenter, iconSize } from "@rebasepro/ui";
10
+ import {
11
+ CenteredView,
12
+ CircularProgress,
13
+ cls,
14
+ CodeIcon,
15
+ defaultBorderMixin,
16
+ HistoryIcon,
17
+ IconButton,
18
+ Maximize2Icon,
19
+ Skeleton,
20
+ Tab,
21
+ Tabs,
22
+ Tooltip,
23
+ Typography
24
+ } from "@rebasepro/ui";
25
+ import { ErrorBoundary } from "@rebasepro/ui";
26
+ import { ErrorView } from "@rebasepro/app";
27
+ import {
28
+ getSubcollections,
29
+ removeInitialAndTrailingSlashes,
30
+ resolveDefaultSelectedView
31
+ } from "@rebasepro/common";
32
+ import { resolvedSelectedEntityView } from "../util/resolutions";
33
+ import {
34
+ useCustomizationController,
35
+ useFetch,
36
+ useRebaseContext,
37
+ useLargeLayout,
38
+ useSlot,
39
+ getIcon
40
+ } from "@rebasepro/app";
41
+ import { getEntityFromMemoryCache } from "@rebasepro/app";
42
+ import { EntityFormBinding } from "../form";
43
+ import type { EntityFormBindingProps } from "../form";
44
+ import type { OnUpdateParams } from "../types/components/EntityFormProps";
45
+ import { EditFormActions } from "./EditFormActions";
46
+ import { JsonPreviewBinding } from "../components/JsonPreviewBinding";
47
+ // Lazy-load history view — only loaded when user clicks the HistoryIcon tab
48
+ const EntityHistoryView = lazy(() => import("../components/history").then(m => ({ default: m.EntityHistoryView })));
49
+ import { createFormexStub, getEntityFromCache } from "@rebasepro/app";
50
+ import { usePermissions } from "@rebasepro/app";
51
+ import { useUrlController } from "../index";
52
+ import { useNavigate } from "react-router-dom";
53
+
54
+ import { MAIN_TAB_VALUE, JSON_TAB_VALUE, HISTORY_TAB_VALUE } from "../util/view_constants";
55
+ export { MAIN_TAB_VALUE, JSON_TAB_VALUE, HISTORY_TAB_VALUE };
56
+
57
+ export type BarActionsParams = {
58
+ values: object,
59
+ status: EntityStatus,
60
+ path: string,
61
+ entityId?: string | number;
62
+ };
63
+
64
+ export type OnTabChangeParams<M extends Record<string, unknown>> = {
65
+ path: string;
66
+ entityId?: string | number;
67
+ selectedTab?: string;
68
+ collection: CollectionConfig<M>;
69
+
70
+ };
71
+
72
+ export interface EditViewBindingProps<M extends Record<string, unknown> = Record<string, unknown>> {
73
+ /**
74
+ * The CMS path of the entity, e.g. "users" or "products".
75
+ */
76
+ path: string;
77
+ collection: CollectionConfig<M>;
78
+ entityId?: string | number;
79
+ databaseId?: string;
80
+ copy?: boolean;
81
+ selectedTab?: string;
82
+ parentCollectionSlugs: string[], parentEntityIds: string[];
83
+ onValuesModified?: (modified: boolean, values: M) => void;
84
+ onSaved?: (params: OnUpdateParams) => void;
85
+ onTabChange?: (props: OnTabChangeParams<M>) => void;
86
+ navigateBack?: () => void;
87
+ layout?: "side_panel" | "full_screen" | "split" | "dialog";
88
+ barActions?: (params: BarActionsParams) => React.ReactNode;
89
+ formProps?: Partial<EntityFormBindingProps<M>>,
90
+ /**
91
+ * Pre-populate the form with these values when creating a new entity.
92
+ * Only applied when the form is in "new" mode (no entityId).
93
+ * Sourced from SidePanelBindingProps (side panel) or location.state (full screen).
94
+ */
95
+ defaultValues?: Partial<M>;
96
+ }
97
+
98
+ /**
99
+ * This is the default view that is used as the content of a side panel when
100
+ * a record is opened.
101
+ */
102
+ export function EditViewBinding<M extends Record<string, unknown>>({
103
+ entityId,
104
+ ...props
105
+ }: EditViewBindingProps<M>) {
106
+
107
+ const {
108
+ entity,
109
+ dataLoading,
110
+
111
+ dataLoadingError
112
+ } = useFetch<M>({
113
+ path: props.path,
114
+ entityId: entityId,
115
+ collection: props.collection,
116
+ databaseId: props.databaseId,
117
+ useCache: false
118
+ });
119
+
120
+ const initialDirtyValues = entityId
121
+ ? getEntityFromMemoryCache(props.path + "/" + entityId)
122
+ : (props.defaultValues ?? getEntityFromMemoryCache(props.path + "#new"));
123
+
124
+ const { canEdit: canEditHook } = usePermissions();
125
+
126
+ const initialStatus = props.copy ? "copy" : (entityId ? "existing" : "new");
127
+ const [status, setStatus] = useState<EntityStatus>(initialStatus);
128
+
129
+ const canEdit = useMemo(() => {
130
+ if (status === "new" || status === "copy") {
131
+ return true;
132
+ } else {
133
+ return entity ? canEditHook(props.collection, props.path, entity ?? null) : undefined;
134
+ }
135
+ }, [canEditHook, entity, status, props.collection, props.path]);
136
+
137
+ if (!dataLoading && dataLoadingError) {
138
+ return <CenteredView>
139
+ <ErrorView error={dataLoadingError} />
140
+ </CenteredView>
141
+ }
142
+
143
+ if (!dataLoading && !initialDirtyValues && !entity && (status === "existing" || status === "copy")) {
144
+ console.error(`Entity with id ${entityId} not found in collection ${props.path}`);
145
+ return <CenteredView>
146
+ <Typography variant="label">Entity not found</Typography>
147
+ </CenteredView>;
148
+ }
149
+
150
+ const content = (
151
+ <EditViewBindingInner<M> {...props}
152
+ entityId={entityId}
153
+ entity={entity}
154
+ initialDirtyValues={initialDirtyValues as Partial<M>}
155
+ dataLoading={dataLoading}
156
+ status={status}
157
+ setStatus={setStatus}
158
+ canEdit={canEdit}
159
+ />
160
+ );
161
+
162
+ return (
163
+ <CollectionScopeProvider collection={props.collection}>
164
+ {content}
165
+ </CollectionScopeProvider>
166
+ );
167
+ }
168
+
169
+ export function EditViewBindingInner<M extends Record<string, unknown>>({
170
+ path,
171
+ entityId,
172
+ selectedTab: selectedTabProp,
173
+ collection,
174
+ parentCollectionSlugs, parentEntityIds,
175
+ onValuesModified,
176
+ onSaved,
177
+ onTabChange,
178
+ navigateBack,
179
+ entity,
180
+ initialDirtyValues,
181
+ dataLoading,
182
+ layout = "side_panel",
183
+ barActions,
184
+ status,
185
+ setStatus,
186
+ formProps,
187
+ canEdit
188
+ }: EditViewBindingProps<M> & {
189
+ entity?: Entity<M>,
190
+ initialDirtyValues?: Partial<M>, // dirty cached entity in memory
191
+ dataLoading: boolean,
192
+ status: EntityStatus,
193
+ setStatus: (status: EntityStatus) => void,
194
+ canEdit?: boolean,
195
+ }) {
196
+
197
+ const ResolvedFormActions = useComponentOverride("EditView.FormActions", EditFormActions);
198
+ const ResolvedEntityForm = useComponentOverride("Entity.Form", EntityFormBinding) as typeof EntityFormBinding;
199
+ const ResolvedCollectionView = useComponentOverride("Collection.View", CollectionViewBinding);
200
+
201
+ const context = useRebaseContext();
202
+ const urlController = useUrlController();
203
+ const navigate = useNavigate();
204
+
205
+ const [usedEntity, setUsedEntity] = useState<Entity<M> | undefined>(entity);
206
+
207
+ useEffect(() => {
208
+ if (entity)
209
+ setUsedEntity(entity);
210
+ }, [entity]);
211
+
212
+ const [formContext, setFormContext] = useState<FormContext<M> | undefined>(undefined);
213
+
214
+ const largeLayout = useLargeLayout();
215
+
216
+ const customizationController = useCustomizationController();
217
+ const plugins = customizationController.plugins;
218
+
219
+ const formActionTopProps: PluginFormActionProps = useMemo(() => ({
220
+ entityId,
221
+ parentCollectionSlugs,
222
+ parentEntityIds,
223
+ path: path,
224
+ status,
225
+ collection: collection!,
226
+ context,
227
+ formContext: formContext as FormContext<Record<string, unknown>> | undefined,
228
+ openEntityMode: layout,
229
+ disabled: false
230
+ }), [entityId, parentCollectionSlugs, parentEntityIds, path, status, collection, context, formContext, layout]);
231
+ const pluginActionsTop = useSlot("form.actions.top", formActionTopProps);
232
+
233
+ const defaultSelectedView = useMemo(() => resolveDefaultSelectedView(
234
+ collection ? collection.defaultSelectedView : undefined,
235
+ {
236
+ status,
237
+ entityId
238
+ }
239
+ ), [collection, status, entityId]);
240
+
241
+ // Track whether the user has explicitly clicked a tab in this component
242
+ // instance. When false, we fall back to defaultSelectedView (which may
243
+ // resolve asynchronously if the collection loads from the registry after
244
+ // mount). Once true, selectedTabProp=undefined means the user selected
245
+ // the form tab, so we must NOT re-apply defaultSelectedView.
246
+ const userHasChangedTab = useRef(false);
247
+
248
+ const [selectedTab, setSelectedTab] = useState<string>(() => {
249
+ const val = selectedTabProp ?? defaultSelectedView ?? MAIN_TAB_VALUE;
250
+ return val === "edit" ? MAIN_TAB_VALUE : val;
251
+ });
252
+ useEffect(() => {
253
+ const val = userHasChangedTab.current
254
+ ? (selectedTabProp ?? MAIN_TAB_VALUE)
255
+ : (selectedTabProp ?? defaultSelectedView ?? MAIN_TAB_VALUE);
256
+ const target = val === "edit" ? MAIN_TAB_VALUE : val;
257
+ if (target !== selectedTab) {
258
+ setSelectedTab(target);
259
+ }
260
+ }, [selectedTabProp, defaultSelectedView]);
261
+
262
+ const subcollections = getSubcollections(collection).filter(c => !c.hideFromNavigation);
263
+ const subcollectionsCount = subcollections?.length ?? 0;
264
+ const customViews = collection.entityViews ?? [];
265
+ const customViewsCount = customViews?.length ?? 0;
266
+ const includeJsonView = collection.includeJsonView === undefined ? true : collection.includeJsonView;
267
+ const includeHistoryView = Boolean(collection.history);
268
+ const hasAdditionalViews = customViewsCount > 0 || subcollectionsCount > 0 || includeJsonView || includeHistoryView;
269
+
270
+ const {
271
+ resolvedEntityViews
272
+ } = resolvedSelectedEntityView(customViews, customizationController, undefined, canEdit);
273
+
274
+ const validTabValues = useMemo(() => {
275
+ const set = new Set<string>([
276
+ MAIN_TAB_VALUE,
277
+ ...(includeJsonView ? [JSON_TAB_VALUE] : []),
278
+ ...(includeHistoryView ? [HISTORY_TAB_VALUE] : []),
279
+ ...resolvedEntityViews.map(v => v.key),
280
+ ...subcollections.map(s => s.slug)
281
+ ]);
282
+ return set;
283
+ }, [includeJsonView, includeHistoryView, resolvedEntityViews, subcollections]);
284
+
285
+ const activeTab = validTabValues.has(selectedTab) ? selectedTab : MAIN_TAB_VALUE;
286
+
287
+ const {
288
+ selectedEntityView,
289
+ selectedSecondaryForm
290
+ } = resolvedSelectedEntityView(customViews, customizationController, activeTab, canEdit);
291
+
292
+ const actionsAtTheBottom = layout === "side_panel" || layout === "dialog" || selectedEntityView?.includeActions === "bottom";
293
+
294
+ const mainViewVisible = activeTab === MAIN_TAB_VALUE || Boolean(selectedSecondaryForm);
295
+
296
+ // Track which custom view tabs have been visited so we keep them mounted
297
+ // (preserving their state) but don't eagerly mount tabs never visited.
298
+ const mountedTabsRef = useRef<Set<string>>(new Set());
299
+ if (activeTab) {
300
+ mountedTabsRef.current.add(activeTab);
301
+ }
302
+
303
+ // Memoize the read-only fallback form context to avoid recreating it every render
304
+ const readOnlyFormContext = useMemo<FormContext<M> | undefined>(() => {
305
+ if (formContext) return undefined; // not needed when real formContext exists
306
+ if (!entityId) return undefined;
307
+ const formexStub = createFormexStub<M>(usedEntity?.values ?? {} as M);
308
+ return {
309
+ entityId,
310
+ disabled: false,
311
+ readOnly: true,
312
+ openEntityMode: layout,
313
+ status: status,
314
+ values: usedEntity?.values ?? ({} as M),
315
+ setFieldValue: (key: string, value: unknown) => {
316
+ throw new Error("You can't update values in read only mode");
317
+ },
318
+ save: () => {
319
+ throw new Error("You can't save in read only mode");
320
+ },
321
+ submit: () => {
322
+ throw new Error("You can't submit in read only mode");
323
+ },
324
+ collection,
325
+ path: path,
326
+ entity: usedEntity,
327
+ savingError: undefined,
328
+ formex: formexStub
329
+ };
330
+ }, [formContext, entityId, layout, status, usedEntity, collection, path]);
331
+
332
+ const nonActionCustomViews = useMemo(() =>
333
+ resolvedEntityViews.filter(e => !e.includeActions),
334
+ [resolvedEntityViews]
335
+ );
336
+
337
+ const customViewsView: React.ReactNode[] | undefined = customViews && nonActionCustomViews
338
+ .map((customView) => {
339
+
340
+ if (!customView)
341
+ return null;
342
+ const Builder = resolveComponentRef<EntityCustomViewParams>(customView.Builder);
343
+ if (!Builder) {
344
+ console.error("INTERNAL: customView.Builder is not defined or could not be resolved");
345
+ return null;
346
+ }
347
+
348
+ if (!entityId) {
349
+ return null;
350
+ }
351
+
352
+ // Only mount tabs that have been visited at least once
353
+ const isActive = activeTab === customView.key;
354
+ const hasBeenMounted = mountedTabsRef.current.has(customView.key);
355
+ if (!isActive && !hasBeenMounted) {
356
+ return null;
357
+ }
358
+
359
+ const usedFormContext: FormContext<M> = formContext ?? readOnlyFormContext!;
360
+
361
+ return <div
362
+ className={cls(defaultBorderMixin,
363
+ "relative flex-1 w-full h-full overflow-auto",
364
+ { "hidden": !isActive }
365
+ )}
366
+ key={`custom_view_${customView.key}`}
367
+ role="tabpanel">
368
+ <ErrorBoundary>
369
+ <Suspense fallback={<CircularProgressCenter />}>
370
+ {usedFormContext && <Builder
371
+ collection={collection}
372
+ parentCollectionSlugs={parentCollectionSlugs} parentEntityIds={parentEntityIds}
373
+ entity={usedEntity}
374
+ modifiedValues={usedFormContext?.formex?.values ?? usedEntity?.values}
375
+ formContext={usedFormContext as FormContext<Record<string, unknown>>}
376
+ />}
377
+ </Suspense>
378
+ </ErrorBoundary>
379
+ </div>;
380
+ }).filter(Boolean);
381
+
382
+ const globalLoading = (dataLoading && !usedEntity) || (canEdit === undefined && (status === "existing" || status === "copy"));
383
+
384
+ // Only mount JSON view when its tab is selected (or was previously selected)
385
+ const jsonTabMounted = mountedTabsRef.current.has(JSON_TAB_VALUE);
386
+ const jsonView = (activeTab === JSON_TAB_VALUE || jsonTabMounted) ? <div
387
+ className={cls("relative flex-1 h-full overflow-auto w-full",
388
+ { "hidden": activeTab !== JSON_TAB_VALUE })}
389
+ key={"json_view"}
390
+ role="tabpanel">
391
+ <ErrorBoundary>
392
+ <JsonPreviewBinding
393
+ values={formContext?.values ?? entity?.values ?? {}} />
394
+ </ErrorBoundary>
395
+ </div> : null;
396
+
397
+ // Only mount history view when its tab is actually selected
398
+ const historyView = includeHistoryView && activeTab === HISTORY_TAB_VALUE ? <div
399
+ className={"relative flex-1 h-full overflow-auto w-full"}
400
+ key={"history_view"}
401
+ role="tabpanel">
402
+ <ErrorBoundary>
403
+ <Suspense fallback={<CircularProgressCenter />}>
404
+ <EntityHistoryView
405
+ collection={collection}
406
+ entity={usedEntity}
407
+ formContext={formContext as FormContext<Record<string, unknown>>}
408
+ modifiedValues={formContext?.values ?? usedEntity?.values}
409
+ />
410
+ </Suspense>
411
+ </ErrorBoundary>
412
+ </div> : null;
413
+
414
+ const subCollectionsViews = subcollections && subcollections.map((subcollection) => {
415
+ const subcollectionId = subcollection.slug;
416
+ const newFullPath = usedEntity ? `${path}/${usedEntity?.id}/${removeInitialAndTrailingSlashes(getCollectionDataPath(subcollection))}` : undefined;
417
+
418
+ if (activeTab !== subcollectionId) return null;
419
+ return (
420
+ <div
421
+ className={"relative flex-1 h-full overflow-auto w-full"}
422
+ key={`subcol_${subcollectionId}`}
423
+ role="tabpanel">
424
+
425
+ {globalLoading && <CircularProgressCenter />}
426
+
427
+ {!globalLoading &&
428
+ (usedEntity && newFullPath
429
+ ? <ResolvedCollectionView
430
+ path={newFullPath}
431
+ parentCollectionSlugs={[...parentCollectionSlugs, collection.slug]}
432
+ parentEntityIds={[...parentEntityIds, String(usedEntity?.id)]}
433
+ updateUrl={false}
434
+ {...subcollection}
435
+ openEntityMode={layout} />
436
+ : <div className="flex items-center justify-center w-full h-full p-3">
437
+ <Typography variant={"label"}>
438
+ You need to save your entity before
439
+ adding additional collections
440
+ </Typography>
441
+ </div>)
442
+ }
443
+
444
+ </div>
445
+ );
446
+ }).filter(Boolean);
447
+
448
+ const onSideTabClick = useCallback((value: string) => {
449
+ userHasChangedTab.current = true;
450
+ setSelectedTab(value);
451
+ if (status === "existing") {
452
+ onTabChange?.({
453
+ path: path,
454
+ entityId,
455
+ selectedTab: value === MAIN_TAB_VALUE ? undefined : value,
456
+ collection
457
+ });
458
+ }
459
+ }, [status, onTabChange, path, entityId, collection]);
460
+
461
+ // Resolve formView.Builder if provided
462
+ const formViewConfig = (collection as CollectionConfig<M> & { formView?: FormViewConfig<M> }).formView;
463
+ const FormViewBuilder = formViewConfig?.Builder ? resolveComponentRef<EntityCustomViewParams>(formViewConfig.Builder as ComponentRef<EntityCustomViewParams>) : null;
464
+ const formViewIncludeActions = formViewConfig?.includeActions !== false;
465
+
466
+ const entityReadOnlyView = !canEdit && entity ? <div
467
+ className={cls("flex-1 flex flex-row w-full overflow-y-auto justify-center", (canEdit || !mainViewVisible || selectedSecondaryForm) ? "hidden" : "")}>
468
+ <div
469
+ className={cls("relative flex flex-col max-w-4xl lg:max-w-3xl xl:max-w-4xl 2xl:max-w-6xl w-full h-fit")}>
470
+ <Typography className={"mt-16 mb-8 mx-8"} variant={"h4"}>
471
+ {collection.singularName ?? collection.name}
472
+ </Typography>
473
+ {FormViewBuilder && readOnlyFormContext ? (
474
+ <ErrorBoundary>
475
+ <Suspense fallback={<CircularProgressCenter />}>
476
+ <FormViewBuilder
477
+ collection={collection}
478
+ parentCollectionSlugs={parentCollectionSlugs} parentEntityIds={parentEntityIds}
479
+ entity={usedEntity}
480
+ modifiedValues={usedEntity?.values}
481
+ formContext={readOnlyFormContext as FormContext<Record<string, unknown>>}
482
+ />
483
+ </Suspense>
484
+ </ErrorBoundary>
485
+ ) : (
486
+ <EntityViewBinding
487
+ className={"px-8 h-full overflow-auto"}
488
+ entity={entity}
489
+ path={path}
490
+ collection={collection} />
491
+ )}
492
+ <div className="h-16" />
493
+ </div>
494
+ </div> : null;
495
+
496
+ const entityView = FormViewBuilder ? (
497
+ // formView.Builder replaces the default form
498
+ <div className={cls(
499
+ "relative flex-1 w-full h-full overflow-auto",
500
+ (!mainViewVisible || !canEdit) && !selectedSecondaryForm ? "hidden" : ""
501
+ )}>
502
+ <ErrorBoundary>
503
+ <Suspense fallback={<CircularProgressCenter />}>
504
+ {(formContext ?? readOnlyFormContext) && <FormViewBuilder
505
+ collection={collection}
506
+ parentCollectionSlugs={parentCollectionSlugs} parentEntityIds={parentEntityIds}
507
+ entity={usedEntity}
508
+ modifiedValues={(formContext ?? readOnlyFormContext)?.formex?.values ?? usedEntity?.values}
509
+ formContext={(formContext ?? readOnlyFormContext) as FormContext<Record<string, unknown>>}
510
+ />}
511
+ </Suspense>
512
+ </ErrorBoundary>
513
+ </div>
514
+ ) : (
515
+ <ResolvedEntityForm<M>
516
+ collection={collection}
517
+ path={path}
518
+ entityId={entityId ?? usedEntity?.id}
519
+ onValuesModified={onValuesModified}
520
+ entity={entity}
521
+ initialDirtyValues={initialDirtyValues}
522
+ openEntityMode={layout}
523
+ forceActionsAtTheBottom={actionsAtTheBottom}
524
+ initialStatus={status}
525
+ className={cls((!mainViewVisible || !canEdit) && !selectedSecondaryForm ? "hidden" : "", formProps?.className)}
526
+ EntityFormActionsComponent={ResolvedFormActions as React.FC<typeof ResolvedFormActions extends React.ComponentType<infer P> ? P : never>}
527
+ disabled={!canEdit}
528
+ navigateBack={navigateBack}
529
+ {...formProps}
530
+ onEntityChange={(entity) => {
531
+ setUsedEntity(entity);
532
+ formProps?.onEntityChange?.(entity);
533
+ }}
534
+ onStatusChange={(status) => {
535
+ setStatus(status);
536
+ formProps?.onStatusChange?.(status);
537
+ }}
538
+ onFormContextReady={(formContext) => {
539
+ setFormContext(formContext);
540
+ formProps?.onFormContextReady?.(formContext);
541
+ }}
542
+ onSaved={(params) => {
543
+ const res = {
544
+ ...params,
545
+ selectedTab: MAIN_TAB_VALUE === activeTab ? undefined : activeTab
546
+ };
547
+ onSaved?.(res);
548
+ formProps?.onSaved?.(res);
549
+ }}
550
+ Builder={resolveComponentRef(selectedSecondaryForm?.Builder as ComponentRef<EntityCustomViewParams<M>> | undefined) as React.ComponentType<EntityCustomViewParams<M>> | undefined}
551
+ />
552
+ );
553
+
554
+ const subcollectionTabs = subcollections && subcollections.map((subcollection) => {
555
+ const icon = getIcon(subcollection.icon, undefined, undefined, "smallest");
556
+ return (
557
+ <Tab
558
+ className="text-sm min-w-[90px]"
559
+ value={subcollection.slug}
560
+ key={`entity_detail_collection_tab_${subcollection.name}`}>
561
+ <span className="flex items-center gap-1.5">
562
+ {icon}
563
+ {subcollection.name}
564
+ </span>
565
+ </Tab>
566
+ );
567
+ });
568
+
569
+ const customViewTabsStart = resolvedEntityViews.filter(view => view.position === "start")
570
+ .map((view) => {
571
+ const icon = getIcon(view.icon, undefined, undefined, "smallest");
572
+ return (
573
+ <Tab
574
+ className={!view.tabComponent ? "text-sm min-w-[90px]" : undefined}
575
+ value={view.key}
576
+ key={`entity_detail_collection_tab_${view.name}`}>
577
+ {view.tabComponent ?? (
578
+ <span className="flex items-center gap-1.5">
579
+ {icon}
580
+ {view.name}
581
+ </span>
582
+ )}
583
+ </Tab>
584
+ );
585
+ });
586
+ const customViewTabsEnd = resolvedEntityViews.filter(view => !view.position || view.position === "end")
587
+ .map((view) => {
588
+ const icon = getIcon(view.icon, undefined, undefined, "smallest");
589
+ return (
590
+ <Tab
591
+ className={!view.tabComponent ? "text-sm min-w-[90px]" : undefined}
592
+ value={view.key}
593
+ key={`entity_detail_collection_tab_${view.name}`}>
594
+ {view.tabComponent ?? (
595
+ <span className="flex items-center gap-1.5">
596
+ {icon}
597
+ {view.name}
598
+ </span>
599
+ )}
600
+ </Tab>
601
+ );
602
+ });
603
+
604
+ const shouldShowTopBar = Boolean(barActions) || hasAdditionalViews || layout === "side_panel" || layout === "dialog";
605
+
606
+ const fullScreenButton = !barActions && (layout === "side_panel" || layout === "split" || layout === "dialog") && entityId ? (
607
+ <Tooltip title={"Open full screen"}>
608
+ <IconButton
609
+ size="small"
610
+ onClick={() => {
611
+ const editSuffix = collection.defaultEntityAction === "view" ? "/edit" : "";
612
+ const entityUrl = urlController.buildUrlCollectionPath(`${path}/${entityId}${editSuffix}`);
613
+ navigate(`${entityUrl}#full`);
614
+ }}
615
+ >
616
+ <Maximize2Icon size={iconSize.smallest} />
617
+ </IconButton>
618
+ </Tooltip>
619
+ ) : null;
620
+
621
+
622
+ let result = <div className="relative flex flex-col h-full w-full bg-white dark:bg-surface-800">
623
+
624
+ {shouldShowTopBar && <div
625
+ className={cls("h-[52px] items-center flex overflow-hidden w-full border-b pl-2 pr-2 flex bg-surface-50 dark:bg-surface-900", defaultBorderMixin)}>
626
+
627
+ {fullScreenButton}
628
+
629
+ {barActions?.({
630
+ path,
631
+ entityId,
632
+ values: formContext?.values ?? usedEntity?.values ?? {},
633
+ status
634
+ })}
635
+
636
+
637
+ {pluginActionsTop}
638
+
639
+ {hasAdditionalViews && <div className={"flex-1 flex justify-end min-w-0 shrink-0"}>
640
+ <Tabs
641
+ className={"!w-fit max-w-full"}
642
+ value={activeTab}
643
+ onValueChange={(value) => {
644
+ onSideTabClick(value);
645
+ }}>
646
+
647
+ {includeJsonView && <Tab
648
+ disabled={!hasAdditionalViews}
649
+ value={JSON_TAB_VALUE}
650
+ className={"text-sm"}>
651
+ <CodeIcon size={iconSize.smallest} />
652
+ </Tab>}
653
+
654
+ {includeHistoryView && <Tab
655
+ disabled={!hasAdditionalViews}
656
+ value={HISTORY_TAB_VALUE}
657
+ className={"text-sm"}>
658
+ <HistoryIcon size={iconSize.smallest} />
659
+ </Tab>}
660
+
661
+ <Tab
662
+ disabled={!hasAdditionalViews}
663
+ value={MAIN_TAB_VALUE}
664
+ className={"text-sm min-w-[90px]"}>
665
+ <span className="flex items-center gap-1.5">
666
+ {getIcon(collection.icon, undefined, undefined, "smallest")}
667
+ {collection.singularName ?? collection.name}
668
+ </span>
669
+ </Tab>
670
+
671
+ {customViewTabsStart}
672
+
673
+ {customViewTabsEnd}
674
+
675
+ {subcollectionTabs}
676
+ </Tabs>
677
+ </div>}
678
+ </div>}
679
+
680
+ {globalLoading
681
+ ? <EntityFormSkeleton collection={collection} />
682
+ : <>
683
+ {entityReadOnlyView}
684
+ {entityView}
685
+ </>}
686
+
687
+ {jsonView}
688
+
689
+ {historyView}
690
+
691
+ {customViewsView}
692
+
693
+ {subCollectionsViews}
694
+
695
+ </div>;
696
+
697
+ if (plugins && plugins.length > 0) {
698
+ result = (
699
+ <PluginProviderStack
700
+ plugins={plugins}
701
+ scope="form"
702
+ scopeProps={{
703
+ status,
704
+ path,
705
+ collection,
706
+ entity: usedEntity,
707
+ context,
708
+ formContext
709
+ }}>
710
+ {result}
711
+ </PluginProviderStack>
712
+ );
713
+ }
714
+
715
+ return result;
716
+ }
717
+
718
+ function EntityFormSkeleton({ collection }: { collection: CollectionConfig }) {
719
+ return (
720
+ <div className="flex-1 flex flex-row w-full overflow-y-auto justify-center">
721
+ <div className="relative flex flex-row max-w-4xl lg:max-w-3xl xl:max-w-4xl 2xl:max-w-6xl w-full h-fit">
722
+ <div className="flex flex-col w-full pt-12 pb-16 px-4 sm:px-8 md:px-10">
723
+
724
+ <div className="flex flex-row gap-4 self-end sticky top-4 z-10">
725
+ <Skeleton height={24} className="w-8 rounded-full" />
726
+ </div>
727
+
728
+ <div className="w-full flex flex-col items-start my-4 lg:my-6">
729
+ <div className={`py-1 my-4 w-2/3 ${collection.hideIdFromForm ? "mb-6" : ""}`}>
730
+ <Skeleton height={28} className="w-full rounded-md" />
731
+ </div>
732
+ <Skeleton height={32} className="w-full rounded-md" />
733
+ </div>
734
+
735
+ <div className="mt-12 flex flex-col gap-8">
736
+ <div className="flex flex-wrap gap-x-4 w-full space-y-8">
737
+
738
+ <div className="relative w-full">
739
+ <Skeleton height={60} className="w-full rounded-md" />
740
+ </div>
741
+
742
+ <div className="relative w-full">
743
+ <Skeleton height={60} className="w-full rounded-md" />
744
+ </div>
745
+
746
+ <div className="relative w-full">
747
+ <Skeleton height={60} className="w-full rounded-md" />
748
+ </div>
749
+
750
+ <div className="relative w-full">
751
+ <Skeleton height={60} className="w-full rounded-md" />
752
+ </div>
753
+
754
+ </div>
755
+ </div>
756
+ </div>
757
+ </div>
758
+ </div>
759
+ );
760
+ }
761
+