@rebasepro/cms 0.17.3 → 0.18.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 (449) hide show
  1. package/README.md +4 -0
  2. package/dist/{CollectionEditorDialog-B-akreOU.js → CollectionEditorDialog-BeX4b92r.js} +13 -7
  3. package/dist/{CollectionEditorDialog-B-akreOU.js.map → CollectionEditorDialog-BeX4b92r.js.map} +1 -1
  4. package/dist/{PropertyEditView-CiY84wkR.js → PropertyEditView-C7thfj4L.js} +3 -3
  5. package/dist/{PropertyEditView-CiY84wkR.js.map → PropertyEditView-C7thfj4L.js.map} +1 -1
  6. package/dist/{RouterCollectionsStudioView-DkAWda4N.js → RouterCollectionsStudioView-BtjzvB6E.js} +4 -4
  7. package/dist/{RouterCollectionsStudioView-DkAWda4N.js.map → RouterCollectionsStudioView-BtjzvB6E.js.map} +1 -1
  8. package/dist/{SchemaChangeDialog-DceT8QFX.js → SchemaChangeDialog-CkqK6KOC.js} +4 -2
  9. package/dist/{SchemaChangeDialog-DceT8QFX.js.map → SchemaChangeDialog-CkqK6KOC.js.map} +1 -1
  10. package/dist/collection_editor/api/generateCollectionApi.d.ts +1 -2
  11. package/dist/collection_editor_ui.d.ts +2 -0
  12. package/dist/collection_editor_ui.js +6 -5
  13. package/dist/collection_editor_ui.js.map +1 -1
  14. package/dist/components/DeleteEntityDialog.d.ts +2 -3
  15. package/dist/components/RebaseLayout.d.ts +11 -4
  16. package/dist/components/field_configs.d.ts +1 -1
  17. package/dist/editor/sanitize-html.d.ts +15 -0
  18. package/dist/editor.js +195 -10
  19. package/dist/editor.js.map +1 -1
  20. package/dist/{export-Ben8E355.js → export--arni_VY.js} +2 -2
  21. package/dist/{export-Ben8E355.js.map → export--arni_VY.js.map} +1 -1
  22. package/dist/form/components/LabelWithIcon.d.ts +10 -0
  23. package/dist/{history-DIEVd26f.js → history-C2TpoQwi.js} +2 -2
  24. package/dist/{history-DIEVd26f.js.map → history-C2TpoQwi.js.map} +1 -1
  25. package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +1 -1
  26. package/dist/hooks/navigation/useResolvedViews.d.ts +1 -1
  27. package/dist/hooks/navigation/useTopLevelNavigation.d.ts +1 -1
  28. package/dist/{import-D25x7ko-.js → import-DTkXNoBg.js} +2 -2
  29. package/dist/{import-D25x7ko-.js.map → import-DTkXNoBg.js.map} +1 -1
  30. package/dist/index.js +78 -33
  31. package/dist/index.js.map +1 -1
  32. package/dist/util/propertyConfigMapper.d.ts +1 -1
  33. package/dist/util-CfLFggP7.js +57 -0
  34. package/dist/util-CfLFggP7.js.map +1 -0
  35. package/dist/{util-DVqnqlLn.js → util-DE1WQW6h.js} +134 -112
  36. package/dist/util-DE1WQW6h.js.map +1 -0
  37. package/package.json +42 -34
  38. package/dist/util-DVqnqlLn.js.map +0 -1
  39. package/src/collection_editor/CollectionEditorDialogsContext.tsx +0 -25
  40. package/src/collection_editor/ConfigControllerProvider.tsx +0 -395
  41. package/src/collection_editor/_cms_internals.ts +0 -41
  42. package/src/collection_editor/api/generateCollectionApi.ts +0 -126
  43. package/src/collection_editor/api/index.ts +0 -1
  44. package/src/collection_editor/extensibility_types.ts +0 -168
  45. package/src/collection_editor/index.ts +0 -108
  46. package/src/collection_editor/liveSchemaClient.ts +0 -285
  47. package/src/collection_editor/relation_kinds.ts +0 -44
  48. package/src/collection_editor/serializable_types.ts +0 -535
  49. package/src/collection_editor/serializable_utils.ts +0 -729
  50. package/src/collection_editor/types/collection_editor_controller.tsx +0 -62
  51. package/src/collection_editor/types/collection_inference.ts +0 -18
  52. package/src/collection_editor/types/config_controller.tsx +0 -121
  53. package/src/collection_editor/ui/AddKanbanColumnAction.tsx +0 -199
  54. package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +0 -51
  55. package/src/collection_editor/ui/EditorCollectionAction.tsx +0 -54
  56. package/src/collection_editor/ui/EditorCollectionActionStart.tsx +0 -90
  57. package/src/collection_editor/ui/EditorEntityAction.tsx +0 -50
  58. package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +0 -114
  59. package/src/collection_editor/ui/KanbanSetupAction.tsx +0 -43
  60. package/src/collection_editor/ui/MissingReferenceWidget.tsx +0 -35
  61. package/src/collection_editor/ui/NewCollectionButton.tsx +0 -27
  62. package/src/collection_editor/ui/NewCollectionCard.tsx +0 -48
  63. package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +0 -49
  64. package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +0 -260
  65. package/src/collection_editor/ui/collection_editor/AIModifiedPathsContext.tsx +0 -90
  66. package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +0 -388
  67. package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +0 -1098
  68. package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +0 -301
  69. package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +0 -172
  70. package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +0 -620
  71. package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +0 -530
  72. package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +0 -462
  73. package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +0 -104
  74. package/src/collection_editor/ui/collection_editor/CollectionYupValidation.tsx +0 -9
  75. package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +0 -199
  76. package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +0 -315
  77. package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +0 -164
  78. package/src/collection_editor/ui/collection_editor/EntityActionsSelectDialog.tsx +0 -40
  79. package/src/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +0 -39
  80. package/src/collection_editor/ui/collection_editor/EnumForm.tsx +0 -373
  81. package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +0 -288
  82. package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +0 -141
  83. package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +0 -194
  84. package/src/collection_editor/ui/collection_editor/LayoutModeSwitch.tsx +0 -53
  85. package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +0 -980
  86. package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +0 -164
  87. package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +0 -364
  88. package/src/collection_editor/ui/collection_editor/RouterCollectionStudioView.tsx +0 -44
  89. package/src/collection_editor/ui/collection_editor/RouterCollectionsStudioView.tsx +0 -41
  90. package/src/collection_editor/ui/collection_editor/SchemaChangeDialog.tsx +0 -470
  91. package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +0 -256
  92. package/src/collection_editor/ui/collection_editor/SwitchControl.tsx +0 -39
  93. package/src/collection_editor/ui/collection_editor/ViewModeSwitch.tsx +0 -68
  94. package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +0 -67
  95. package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +0 -296
  96. package/src/collection_editor/ui/collection_editor/import/clean_import_data.ts +0 -57
  97. package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +0 -147
  98. package/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx +0 -41
  99. package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +0 -113
  100. package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +0 -250
  101. package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +0 -126
  102. package/src/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.tsx +0 -20
  103. package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +0 -153
  104. package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +0 -217
  105. package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +0 -117
  106. package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +0 -129
  107. package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +0 -335
  108. package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +0 -107
  109. package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +0 -403
  110. package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +0 -148
  111. package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +0 -91
  112. package/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx +0 -34
  113. package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +0 -49
  114. package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +0 -925
  115. package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.tsx +0 -28
  116. package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +0 -626
  117. package/src/collection_editor/ui/collection_editor/properties/conditions/index.ts +0 -6
  118. package/src/collection_editor/ui/collection_editor/properties/conditions/property_paths.ts +0 -93
  119. package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +0 -52
  120. package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +0 -63
  121. package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +0 -114
  122. package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +0 -154
  123. package/src/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.tsx +0 -28
  124. package/src/collection_editor/ui/collection_editor/templates/blog_template.ts +0 -112
  125. package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +0 -183
  126. package/src/collection_editor/ui/collection_editor/templates/products_template.ts +0 -88
  127. package/src/collection_editor/ui/collection_editor/templates/users_template.ts +0 -42
  128. package/src/collection_editor/ui/collection_editor/util.ts +0 -28
  129. package/src/collection_editor/ui/collection_editor/utils/strings.ts +0 -1
  130. package/src/collection_editor/ui/collection_editor/utils/supported_fields.tsx +0 -39
  131. package/src/collection_editor/ui/collection_editor/utils/update_property_for_widget.ts +0 -276
  132. package/src/collection_editor/useCollectionEditorController.tsx +0 -9
  133. package/src/collection_editor/useCollectionsConfigController.tsx +0 -9
  134. package/src/collection_editor/useJsonCollectionsConfigController.tsx +0 -297
  135. package/src/collection_editor/useLiveSchemaEditing.tsx +0 -315
  136. package/src/collection_editor/useLocalCollectionsConfigController.tsx +0 -341
  137. package/src/collection_editor/useSafeSnackbarController.ts +0 -9
  138. package/src/collection_editor/validateCollectionJson.ts +0 -440
  139. package/src/collection_editor_ui.ts +0 -21
  140. package/src/components/AdditionalFieldValue.tsx +0 -68
  141. package/src/components/AdminModeSyncer.tsx +0 -56
  142. package/src/components/ArrayContainer.tsx +0 -542
  143. package/src/components/ClearFilterSortButton.tsx +0 -56
  144. package/src/components/CollectionEditorDialogs.tsx +0 -69
  145. package/src/components/CollectionPanel.tsx +0 -179
  146. package/src/components/CollectionTableBinding/CollectionRowActions.tsx +0 -244
  147. package/src/components/CollectionTableBinding/CollectionTableBinding.tsx +0 -394
  148. package/src/components/CollectionTableBinding/CollectionTableBindingProps.tsx +0 -172
  149. package/src/components/CollectionTableBinding/PropertyTableCell.tsx +0 -350
  150. package/src/components/CollectionTableBinding/column_utils.tsx +0 -155
  151. package/src/components/CollectionTableBinding/fields/TableMultipleRelationField.tsx +0 -131
  152. package/src/components/CollectionTableBinding/fields/TableReferenceField.tsx +0 -193
  153. package/src/components/CollectionTableBinding/fields/TableRelationField.tsx +0 -192
  154. package/src/components/CollectionTableBinding/fields/TableRelationSelectorField.tsx +0 -42
  155. package/src/components/CollectionTableBinding/fields/TableStorageUpload.tsx +0 -324
  156. package/src/components/CollectionTableBinding/fields/VirtualTableSelect.tsx +0 -132
  157. package/src/components/CollectionTableBinding/fields/VirtualTableUserSelect.tsx +0 -41
  158. package/src/components/CollectionTableBinding/index.tsx +0 -14
  159. package/src/components/CollectionTableBinding/internal/CollectionTableToolbar.tsx +0 -96
  160. package/src/components/CollectionTableBinding/internal/EntityTableCell.tsx +0 -309
  161. package/src/components/CollectionTableBinding/internal/EntityTableCellActions.tsx +0 -80
  162. package/src/components/CollectionTableBinding/internal/common.tsx +0 -74
  163. package/src/components/CollectionTableBinding/internal/popup_field/PopupFormField.tsx +0 -422
  164. package/src/components/CollectionTableBinding/internal/popup_field/useDraggable.tsx +0 -99
  165. package/src/components/CollectionTableBinding/internal/popup_field/useWindowSize.tsx +0 -22
  166. package/src/components/CollectionTableBinding/table_bindings.tsx +0 -350
  167. package/src/components/CollectionViewBinding/BoardCardBinding.tsx +0 -263
  168. package/src/components/CollectionViewBinding/CollectionBoardViewBinding.tsx +0 -662
  169. package/src/components/CollectionViewBinding/CollectionCardViewBinding.tsx +0 -159
  170. package/src/components/CollectionViewBinding/CollectionListViewBinding.tsx +0 -1430
  171. package/src/components/CollectionViewBinding/CollectionViewActions.tsx +0 -227
  172. package/src/components/CollectionViewBinding/CollectionViewBinding.tsx +0 -1603
  173. package/src/components/CollectionViewBinding/CollectionViewStartActions.tsx +0 -240
  174. package/src/components/CollectionViewBinding/EntityCardBinding.tsx +0 -239
  175. package/src/components/CollectionViewBinding/FilterPresetsButton.tsx +0 -298
  176. package/src/components/CollectionViewBinding/FiltersDialog.tsx +0 -218
  177. package/src/components/CollectionViewBinding/SearchExplanation.tsx +0 -106
  178. package/src/components/CollectionViewBinding/SearchHighlight.tsx +0 -311
  179. package/src/components/CollectionViewBinding/SlotValue.tsx +0 -156
  180. package/src/components/CollectionViewBinding/SortButton.tsx +0 -354
  181. package/src/components/CollectionViewBinding/SplitListCloseButton.tsx +0 -49
  182. package/src/components/CollectionViewBinding/SplitListShowButton.tsx +0 -28
  183. package/src/components/CollectionViewBinding/SplitListView.tsx +0 -488
  184. package/src/components/CollectionViewBinding/SplitViewContext.tsx +0 -34
  185. package/src/components/CollectionViewBinding/ViewModeToggle.tsx +0 -250
  186. package/src/components/CollectionViewBinding/hooks/useCollectionInlineEditor.ts +0 -81
  187. package/src/components/CollectionViewBinding/hooks/useKanbanDragAndDrop.ts +0 -181
  188. package/src/components/CollectionViewBinding/useBoardDataController.tsx +0 -802
  189. package/src/components/CollectionViewBinding/usePreviewSlots.ts +0 -703
  190. package/src/components/CollectionViewBinding/useSelectionController.tsx +0 -40
  191. package/src/components/CollectionViewBinding/utils.ts +0 -22
  192. package/src/components/DefaultAppBar.tsx +0 -264
  193. package/src/components/DefaultDrawer.tsx +0 -593
  194. package/src/components/DeleteEntityDialog.tsx +0 -205
  195. package/src/components/DetailViewBinding.tsx +0 -731
  196. package/src/components/DrawerNavigationGroup.tsx +0 -141
  197. package/src/components/DrawerNavigationItem.tsx +0 -115
  198. package/src/components/EditFormActions.tsx +0 -303
  199. package/src/components/EditViewBinding.tsx +0 -1069
  200. package/src/components/EntityDisplayHeader.tsx +0 -170
  201. package/src/components/EntityIdentityBar.tsx +0 -428
  202. package/src/components/EntityInspector.tsx +0 -156
  203. package/src/components/EntityPreviewBinding.tsx +0 -432
  204. package/src/components/EntityPreviewNesting.tsx +0 -50
  205. package/src/components/EntityViewBinding.tsx +0 -374
  206. package/src/components/FieldCaption.tsx +0 -14
  207. package/src/components/HomePage/ContentHomePage.tsx +0 -586
  208. package/src/components/HomePage/FavouritesView.tsx +0 -60
  209. package/src/components/HomePage/HomePageDnD.tsx +0 -704
  210. package/src/components/HomePage/NavigationCard.tsx +0 -81
  211. package/src/components/HomePage/NavigationCardBinding.tsx +0 -107
  212. package/src/components/HomePage/NavigationGroup.tsx +0 -156
  213. package/src/components/HomePage/RenameGroupDialog.tsx +0 -123
  214. package/src/components/HomePage/SmallNavigationCard.tsx +0 -41
  215. package/src/components/HomePage/index.tsx +0 -5
  216. package/src/components/InlineEntityPreview.tsx +0 -149
  217. package/src/components/JsonPreviewBinding.tsx +0 -66
  218. package/src/components/PropertyCollectionView.tsx +0 -336
  219. package/src/components/PropertyConfigBadge.tsx +0 -28
  220. package/src/components/PropertyIdCopyTooltip.tsx +0 -47
  221. package/src/components/RebaseAuthGate.tsx +0 -44
  222. package/src/components/RebaseCMS.tsx +0 -30
  223. package/src/components/RebaseLayout.tsx +0 -80
  224. package/src/components/RebaseNavigation.tsx +0 -369
  225. package/src/components/RebaseRouteDefs.tsx +0 -127
  226. package/src/components/RebaseShell.tsx +0 -83
  227. package/src/components/ReferenceTable/SelectionTableBinding.tsx +0 -389
  228. package/src/components/ReferenceWidget.tsx +0 -156
  229. package/src/components/RelationSelector.tsx +0 -926
  230. package/src/components/SearchIconsView.tsx +0 -78
  231. package/src/components/SelectableTable/SelectableTable.tsx +0 -309
  232. package/src/components/SelectableTable/SelectableTableContext.tsx +0 -7
  233. package/src/components/SelectableTable/SelectionStore.ts +0 -43
  234. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +0 -59
  235. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +0 -146
  236. package/src/components/SelectableTable/filters/FilterFieldBinding.tsx +0 -190
  237. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +0 -250
  238. package/src/components/SelectableTable/filters/RelationFilterField.tsx +0 -238
  239. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +0 -282
  240. package/src/components/SelectableTable/filters/null_filter.ts +0 -63
  241. package/src/components/SideDialogs.tsx +0 -238
  242. package/src/components/SidePanelBinding.tsx +0 -361
  243. package/src/components/SidePanelProvider.tsx +0 -80
  244. package/src/components/UserSelector.tsx +0 -513
  245. package/src/components/admin/CreationResultDialog.tsx +0 -138
  246. package/src/components/admin/index.ts +0 -1
  247. package/src/components/app/AppBar.tsx +0 -17
  248. package/src/components/app/Drawer.tsx +0 -38
  249. package/src/components/app/Scaffold.tsx +0 -366
  250. package/src/components/app/index.ts +0 -4
  251. package/src/components/app/useApp.tsx +0 -36
  252. package/src/components/common/default_entity_actions.tsx +0 -440
  253. package/src/components/common/index.ts +0 -1
  254. package/src/components/field_configs.tsx +0 -506
  255. package/src/components/history/EntityHistoryEntry.tsx +0 -203
  256. package/src/components/history/EntityHistoryView.tsx +0 -206
  257. package/src/components/history/LastEditedByFormAction.tsx +0 -24
  258. package/src/components/history/LastEditedByIndicator.tsx +0 -95
  259. package/src/components/history/UserChip.tsx +0 -15
  260. package/src/components/history/index.tsx +0 -5
  261. package/src/components/index.ts +0 -63
  262. package/src/contexts/BreacrumbsContext.tsx +0 -45
  263. package/src/contexts/SideDialogsControllerContext.tsx +0 -5
  264. package/src/contexts/SidePanelControllerContext.tsx +0 -5
  265. package/src/data_export/export/BasicExportAction.tsx +0 -142
  266. package/src/data_export/export/ExportCollectionAction.tsx +0 -321
  267. package/src/data_export/export/export.ts +0 -295
  268. package/src/data_export/export/fetch_export_data.ts +0 -90
  269. package/src/data_export/export/index.ts +0 -4
  270. package/src/data_export/index.ts +0 -1
  271. package/src/data_import/components/DataNewPropertiesMapping.tsx +0 -261
  272. package/src/data_import/components/ImportFileUpload.tsx +0 -42
  273. package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +0 -58
  274. package/src/data_import/components/ImportSaveInProgress.tsx +0 -121
  275. package/src/data_import/components/index.ts +0 -4
  276. package/src/data_import/hooks/index.ts +0 -1
  277. package/src/data_import/hooks/useImportConfig.tsx +0 -34
  278. package/src/data_import/import/ImportCollectionAction.tsx +0 -461
  279. package/src/data_import/import/index.ts +0 -1
  280. package/src/data_import/index.ts +0 -5
  281. package/src/data_import/types/column_mapping.ts +0 -32
  282. package/src/data_import/types/index.ts +0 -1
  283. package/src/data_import/utils/csv.ts +0 -153
  284. package/src/data_import/utils/data.ts +0 -181
  285. package/src/data_import/utils/file_headers.ts +0 -14
  286. package/src/data_import/utils/file_to_json.ts +0 -149
  287. package/src/data_import/utils/get_import_inference_type.ts +0 -33
  288. package/src/data_import/utils/get_properties_mapping.ts +0 -67
  289. package/src/data_import/utils/index.ts +0 -5
  290. package/src/data_import/utils/save_entities.ts +0 -138
  291. package/src/data_import/utils/transforms.ts +0 -70
  292. package/src/editor/components/SlashCommandMenu.tsx +0 -532
  293. package/src/editor/components/editor-bubble-item.tsx +0 -32
  294. package/src/editor/components/editor-bubble.tsx +0 -143
  295. package/src/editor/components/image-bubble.tsx +0 -183
  296. package/src/editor/components/index.ts +0 -14
  297. package/src/editor/components/table-bubble.tsx +0 -233
  298. package/src/editor/editor.tsx +0 -529
  299. package/src/editor/extensions/HighlightDecorationExtension.ts +0 -115
  300. package/src/editor/extensions/Image.ts +0 -159
  301. package/src/editor/extensions/TextLoadingDecorationExtension.tsx +0 -107
  302. package/src/editor/extensions/clipboard.ts +0 -72
  303. package/src/editor/extensions/custom-keymap.ts +0 -25
  304. package/src/editor/extensions/drag-and-drop.tsx +0 -508
  305. package/src/editor/hooks/useProseMirror.ts +0 -126
  306. package/src/editor/hooks/useProseMirrorContext.ts +0 -15
  307. package/src/editor/index.ts +0 -2
  308. package/src/editor/markdown-it-plugins.d.ts +0 -24
  309. package/src/editor/markdown.ts +0 -204
  310. package/src/editor/nodeViews/ImageComponent.tsx +0 -20
  311. package/src/editor/nodeViews/ReactNodeView.tsx +0 -89
  312. package/src/editor/nodeViews/TaskItemComponent.tsx +0 -30
  313. package/src/editor/nodeViews/index.ts +0 -35
  314. package/src/editor/plugins/index.ts +0 -58
  315. package/src/editor/plugins/inputrules.ts +0 -82
  316. package/src/editor/plugins/placeholderPlugin.ts +0 -55
  317. package/src/editor/plugins/slashCommandPlugin.ts +0 -65
  318. package/src/editor/schema.ts +0 -339
  319. package/src/editor/selectors/ai-selector.tsx +0 -110
  320. package/src/editor/selectors/color-selector.tsx +0 -199
  321. package/src/editor/selectors/link-selector.tsx +0 -122
  322. package/src/editor/selectors/node-selector.tsx +0 -159
  323. package/src/editor/selectors/text-buttons.tsx +0 -79
  324. package/src/editor/types.ts +0 -6
  325. package/src/editor/useProseMirror.ts +0 -125
  326. package/src/editor/utils/prosemirror-utils.ts +0 -113
  327. package/src/editor/utils/remove_classes.ts +0 -18
  328. package/src/editor/utils/useDebouncedCallback.ts +0 -25
  329. package/src/form/EntityForm.tsx +0 -761
  330. package/src/form/EntityFormActions.tsx +0 -160
  331. package/src/form/EntityFormBinding.tsx +0 -342
  332. package/src/form/PropertyFieldBinding.tsx +0 -348
  333. package/src/form/components/ErrorFocus.tsx +0 -44
  334. package/src/form/components/FieldBlock.tsx +0 -189
  335. package/src/form/components/FieldHelperText.tsx +0 -84
  336. package/src/form/components/FormRail.tsx +0 -153
  337. package/src/form/components/FormSections.tsx +0 -145
  338. package/src/form/components/LabelWithIcon.tsx +0 -43
  339. package/src/form/components/LabelWithIconAndTooltip.tsx +0 -28
  340. package/src/form/components/LocalChangesMenu.tsx +0 -147
  341. package/src/form/components/StorageItemPreview.tsx +0 -81
  342. package/src/form/components/StorageUploadProgress.tsx +0 -118
  343. package/src/form/components/index.tsx +0 -6
  344. package/src/form/components/useRailVisible.tsx +0 -47
  345. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +0 -109
  346. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +0 -172
  347. package/src/form/field_bindings/BinaryFieldBinding.tsx +0 -177
  348. package/src/form/field_bindings/BlockFieldBinding.tsx +0 -282
  349. package/src/form/field_bindings/DateTimeFieldBinding.tsx +0 -78
  350. package/src/form/field_bindings/GeopointFieldBinding.tsx +0 -200
  351. package/src/form/field_bindings/KeyValueFieldBinding.tsx +0 -574
  352. package/src/form/field_bindings/MapFieldBinding.tsx +0 -120
  353. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +0 -259
  354. package/src/form/field_bindings/MultiSelectFieldBinding.tsx +0 -130
  355. package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +0 -168
  356. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +0 -94
  357. package/src/form/field_bindings/ReferenceFieldBinding.tsx +0 -146
  358. package/src/form/field_bindings/RelationFieldBinding.tsx +0 -202
  359. package/src/form/field_bindings/RepeatFieldBinding.tsx +0 -143
  360. package/src/form/field_bindings/SelectFieldBinding.tsx +0 -111
  361. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +0 -521
  362. package/src/form/field_bindings/SwitchFieldBinding.tsx +0 -70
  363. package/src/form/field_bindings/TextFieldBinding.tsx +0 -189
  364. package/src/form/field_bindings/UserSelectFieldBinding.tsx +0 -71
  365. package/src/form/field_bindings/VectorFieldBinding.tsx +0 -209
  366. package/src/form/form_utils.ts +0 -243
  367. package/src/form/index.tsx +0 -36
  368. package/src/form/useClearRestoreValue.tsx +0 -36
  369. package/src/form/useUndoableDiscard.ts +0 -39
  370. package/src/form/validation.ts +0 -583
  371. package/src/hooks/index.ts +0 -16
  372. package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +0 -22
  373. package/src/hooks/navigation/contexts/NavigationStateContext.tsx +0 -16
  374. package/src/hooks/navigation/contexts/UrlContext.tsx +0 -24
  375. package/src/hooks/navigation/contexts/index.ts +0 -14
  376. package/src/hooks/navigation/useAsyncResolver.ts +0 -100
  377. package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +0 -218
  378. package/src/hooks/navigation/useBuildNavigationStateController.tsx +0 -134
  379. package/src/hooks/navigation/useBuildUrlController.tsx +0 -66
  380. package/src/hooks/navigation/useNavigationResolution.ts +0 -271
  381. package/src/hooks/navigation/useResolvedCollections.ts +0 -102
  382. package/src/hooks/navigation/useResolvedViews.tsx +0 -139
  383. package/src/hooks/navigation/useTopLevelNavigation.ts +0 -273
  384. package/src/hooks/navigation/utils.ts +0 -200
  385. package/src/hooks/useAdminContext.tsx +0 -83
  386. package/src/hooks/useBreadcrumbsController.tsx +0 -17
  387. package/src/hooks/useBuildSideDialogsController.tsx +0 -145
  388. package/src/hooks/useBuildSidePanel.tsx +0 -315
  389. package/src/hooks/useChildViewSource.ts +0 -46
  390. package/src/hooks/useEntityDisplay.tsx +0 -262
  391. package/src/hooks/useEntityDisplayTitle.tsx +0 -49
  392. package/src/hooks/useHistory.ts +0 -178
  393. package/src/hooks/useRecordActions.tsx +0 -69
  394. package/src/hooks/useResolvedNavigationFrom.tsx +0 -167
  395. package/src/hooks/useResolvedUsers.ts +0 -148
  396. package/src/hooks/useSelectionDialog.tsx +0 -58
  397. package/src/hooks/useSideDialogsController.tsx +0 -25
  398. package/src/hooks/useSidePanel.tsx +0 -13
  399. package/src/index.ts +0 -124
  400. package/src/preview/PropertyPreview.tsx +0 -331
  401. package/src/preview/compact_text.ts +0 -68
  402. package/src/preview/components/ArrayEnumPreview.tsx +0 -39
  403. package/src/preview/components/BooleanPreview.tsx +0 -28
  404. package/src/preview/components/DatePreview.tsx +0 -106
  405. package/src/preview/components/EmptyValue.tsx +0 -10
  406. package/src/preview/components/EnumValuesChip.tsx +0 -39
  407. package/src/preview/components/ImagePreview.tsx +0 -144
  408. package/src/preview/components/InlineEntityListPreview.tsx +0 -42
  409. package/src/preview/components/ReferencePreview.tsx +0 -235
  410. package/src/preview/components/RelationPreview.tsx +0 -271
  411. package/src/preview/components/StorageThumbnail.tsx +0 -147
  412. package/src/preview/components/UrlComponentPreview.tsx +0 -116
  413. package/src/preview/components/UserPreview.tsx +0 -30
  414. package/src/preview/components/date_fns_locales.ts +0 -125
  415. package/src/preview/index.ts +0 -26
  416. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +0 -73
  417. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +0 -67
  418. package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +0 -77
  419. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +0 -49
  420. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -70
  421. package/src/preview/property_previews/ArrayOneOfPreview.tsx +0 -79
  422. package/src/preview/property_previews/ArrayPropertyEnumPreview.tsx +0 -35
  423. package/src/preview/property_previews/ArrayPropertyPreview.tsx +0 -79
  424. package/src/preview/property_previews/MapPropertyPreview.tsx +0 -198
  425. package/src/preview/property_previews/NumberPropertyPreview.tsx +0 -39
  426. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +0 -276
  427. package/src/preview/property_previews/StringPropertyPreview.tsx +0 -70
  428. package/src/preview/util.ts +0 -39
  429. package/src/routes/CustomViewRoute.tsx +0 -33
  430. package/src/routes/RebaseRoute.tsx +0 -467
  431. package/src/routes/index.ts +0 -2
  432. package/src/types/components/EntityFormActionsProps.tsx +0 -20
  433. package/src/types/components/EntityFormProps.tsx +0 -119
  434. package/src/types/components/PropertyPreviewProps.tsx +0 -85
  435. package/src/types/components/formex.tsx +0 -2
  436. package/src/types/components/index.ts +0 -3
  437. package/src/types/fields.tsx +0 -340
  438. package/src/types/index.ts +0 -4
  439. package/src/util/dataControllerAdapter.ts +0 -88
  440. package/src/util/entity_actions.ts +0 -28
  441. package/src/util/index.ts +0 -5
  442. package/src/util/navigation_utils.ts +0 -89
  443. package/src/util/number_format.ts +0 -46
  444. package/src/util/previews.ts +0 -131
  445. package/src/util/propertyConfigMapper.ts +0 -134
  446. package/src/util/property_utils.tsx +0 -236
  447. package/src/util/resolutions.ts +0 -96
  448. package/src/util/view_constants.ts +0 -33
  449. package/src/util/view_mode.ts +0 -176
@@ -1,156 +0,0 @@
1
- import type { AdminCollection } from "@rebasepro/cms-types";
2
- import type { Entity } from "@rebasepro/types";
3
- import type { FormContext } from "../types/fields";
4
- import React, { Suspense, useEffect } from "react";
5
- import {
6
- CircularProgressCenter,
7
- cls,
8
- defaultBorderMixin,
9
- ErrorBoundary,
10
- IconButton,
11
- iconSize,
12
- lazyChunk,
13
- Tab,
14
- Tabs,
15
- XIcon
16
- } from "@rebasepro/ui";
17
- import { useTranslation } from "@rebasepro/app";
18
- import { JsonPreviewBinding } from "./JsonPreviewBinding";
19
-
20
- const EntityHistoryView = lazyChunk(() => import("./history").then(m => ({ default: m.EntityHistoryView })));
21
-
22
- export type InspectorTab = "json" | "history";
23
-
24
- export interface EntityInspectorProps {
25
- /** The open tab, or null when the panel is closed. */
26
- tab: InspectorTab | null;
27
- onTabChange: (tab: InspectorTab) => void;
28
- onClose: () => void;
29
- collection: AdminCollection;
30
- entity?: Entity<Record<string, unknown>>;
31
- formContext?: FormContext<Record<string, unknown>>;
32
- values?: Record<string, unknown>;
33
- /** History is only offered when the collection records it. */
34
- includeHistory: boolean;
35
- /**
36
- * Bumped once per save by the view that owns the form. The panel stays open
37
- * across a save — the bar's Save button sits above it — so without this the
38
- * history list would still be the one fetched when the panel opened.
39
- */
40
- refreshToken?: number;
41
- }
42
-
43
- /**
44
- * Raw values and revision history, as an inspector rather than as tabs.
45
- *
46
- * These were the first two entries in the entity tab strip — two icon-only tabs
47
- * with no label and no tooltip, sitting *before* the record you opened the page
48
- * to edit. They are developer tools, not places the record lives, so they belong
49
- * behind one affordance in the bar; a content editor should never meet `<>`.
50
- *
51
- * The panel sits below the identity bar and beside the record deliberately: you
52
- * keep seeing which record you are inspecting, and keep being able to edit it.
53
- */
54
- export function EntityInspector({
55
- tab,
56
- onTabChange,
57
- onClose,
58
- collection,
59
- entity,
60
- formContext,
61
- values,
62
- includeHistory,
63
- refreshToken
64
- }: EntityInspectorProps) {
65
-
66
- const { t } = useTranslation();
67
- const open = tab !== null;
68
-
69
- // Escape closes the inspector, and only the inspector.
70
- //
71
- // The split view holds its own Escape listener for as long as a record is
72
- // selected, and closing the record panel is a navigation — so an Escape
73
- // meant for this panel was taking the whole record with it. On `window` in
74
- // the bubble phase, as this listener used to be, `stopPropagation` cannot
75
- // prevent that: it governs an event's travel *between* elements and says
76
- // nothing about the other listeners on the element it is called from. Both
77
- // ran, and the split's ran first, because it registered first — this one
78
- // only exists while the inspector is open, which is always later.
79
- //
80
- // Capture on `document` is the idiom that holds regardless of mount order:
81
- // it runs on the way down, before anything bubbles back to `window`, and
82
- // there `stopPropagation` is enough. It is what the relation and user
83
- // selectors already use to own the key while their popovers are open.
84
- // Pinned in escape_key_ownership.test.tsx; see docs/bug-classes.md.
85
- useEffect(() => {
86
- if (!open) return;
87
- const onKeyDown = (e: KeyboardEvent) => {
88
- if (e.key !== "Escape") return;
89
- // A Radix overlay opened from inside the inspector is above it and
90
- // owns the key first — the same rule the split view applies.
91
- if (document.querySelector('[role="dialog"][data-state="open"]')) return;
92
- e.stopPropagation();
93
- onClose();
94
- };
95
- document.addEventListener("keydown", onKeyDown, true);
96
- return () => document.removeEventListener("keydown", onKeyDown, true);
97
- }, [open, onClose]);
98
-
99
- if (!open) return null;
100
-
101
- return (
102
- // Docked beside the record rather than over it. As an overlay with a
103
- // scrim this was modal in effect: the first click into the form went to
104
- // the scrim and closed the panel, so a revision list could never be
105
- // open while you edited the record it belongs to — which is the only
106
- // time watching it is worth anything.
107
- <div className={cls(
108
- "relative flex flex-col shrink-0 h-full w-full max-w-md border-l",
109
- "bg-white dark:bg-surface-800",
110
- defaultBorderMixin
111
- )}
112
- role={"complementary"}
113
- aria-label={t("inspect_record") ?? "Inspect record"}>
114
-
115
- <div className={cls("h-11 shrink-0 flex items-center gap-2 pl-4 pr-1.5 border-b", defaultBorderMixin)}>
116
- <span className={"text-sm font-semibold"}>{t("inspect") ?? "Inspect"}</span>
117
-
118
- <div className={"flex-1"}/>
119
-
120
- {includeHistory
121
- ? <Tabs value={tab ?? "json"}
122
- className={"!w-fit"}
123
- onValueChange={(v) => onTabChange(v as InspectorTab)}>
124
- <Tab value={"json"} className={"text-xs"}>{t("json")}</Tab>
125
- <Tab value={"history"} className={"text-xs"}>
126
- {t("record_history") ?? "History"}
127
- </Tab>
128
- </Tabs>
129
- : null}
130
-
131
- <IconButton size={"small"} onClick={onClose}
132
- aria-label={t("close_inspector") ?? "Close inspector"}>
133
- <XIcon size={iconSize.smallest}/>
134
- </IconButton>
135
- </div>
136
-
137
- <div className={"flex-1 min-h-0 overflow-auto"}>
138
- <ErrorBoundary>
139
- {tab === "json" && (
140
- <JsonPreviewBinding values={values ?? entity?.values ?? {}}/>
141
- )}
142
- {tab === "history" && includeHistory && formContext && (
143
- <Suspense fallback={<CircularProgressCenter/>}>
144
- <EntityHistoryView
145
- collection={collection}
146
- entity={entity}
147
- formContext={formContext}
148
- refreshToken={refreshToken}
149
- modifiedValues={values ?? entity?.values}/>
150
- </Suspense>
151
- )}
152
- </ErrorBoundary>
153
- </div>
154
- </div>
155
- );
156
- }
@@ -1,432 +0,0 @@
1
-
2
- import type { Property } from "@rebasepro/types";
3
- import * as React from "react";
4
- import { useEffect, useMemo } from "react";
5
-
6
- import { Entity } from "@rebasepro/types";
7
- import type { PreviewSize } from "../types/components/PropertyPreviewProps";
8
- import { getEntityImagePreviewPropertyKey } from "@rebasepro/app";
9
- import {
10
- ArrowRightToLineIcon,
11
- cls,
12
- defaultBorderMixin,
13
- IconButton,
14
- Skeleton,
15
- Tooltip,
16
- Typography
17
- } from "@rebasepro/ui";
18
- import { PropertyPreview, SkeletonPropertyComponent } from "../preview";
19
- import {
20
- useAuthController,
21
- useCustomizationController,
22
- useData,
23
- ErrorView
24
- } from "@rebasepro/app";
25
- import { useAnalyticsController } from "@rebasepro/app";
26
- import { IconForView } from "@rebasepro/app";
27
- import { getPropertyInPath } from "../util/property_utils";
28
- import { resolveCollectionSlotKeys } from "./CollectionViewBinding/usePreviewSlots";
29
- import { useEntityTitle } from "../hooks/useEntityDisplay";
30
- import { getValueInPath } from "@rebasepro/utils";
31
- import { useCollectionRegistryController } from "../hooks/navigation/contexts/CollectionRegistryContext";
32
- import { useSidePanel } from "../hooks/useSidePanel";
33
- import { NestedEntityPreviewBoundary } from "./EntityPreviewNesting";
34
- import type { AdminCollection } from "@rebasepro/cms-types";
35
-
36
- export type EntityPreviewBindingProps = {
37
- size?: PreviewSize,
38
- actions?: React.ReactNode,
39
- collection?: AdminCollection,
40
- hover?: boolean;
41
- previewKeys?: string[],
42
- disabled?: boolean,
43
- entity: Entity<any>,
44
- includeId?: boolean,
45
- includeTitle?: boolean,
46
- includeEntityLink?: boolean,
47
- includeImage?: boolean,
48
- onClick?: (e: React.SyntheticEvent) => void;
49
- onSidePanelClick?: (entity: Entity) => void,
50
- };
51
-
52
- export type EntityPreviewBindingDataProps = {
53
- size?: "smallest" | "small" | "medium" | "large",
54
- actions?: React.ReactNode,
55
- collection?: AdminCollection,
56
- previewKeys?: string[],
57
- entity: Entity<any>,
58
- onSidePanelClick?: (entity: Entity) => void,
59
- includeId?: boolean,
60
- includeTitle?: boolean,
61
- includeEntityLink?: boolean,
62
- includeImage?: boolean,
63
- };
64
-
65
- /**
66
- * This component contains the main logic and content for displaying a entity preview,
67
- * without any container wrapper. Used internally by EntityPreviewBinding.
68
- */
69
- export function EntityPreviewBindingData({
70
- actions,
71
- collection: collectionProp,
72
- previewKeys,
73
- size = "medium",
74
- includeId = true,
75
- onSidePanelClick,
76
- includeTitle = true,
77
- includeEntityLink = true,
78
- includeImage = true,
79
- entity
80
- }: EntityPreviewBindingDataProps) {
81
-
82
- const authController = useAuthController();
83
- const analyticsController = useAnalyticsController();
84
- const sidePanelController = useSidePanel();
85
- const customizationController = useCustomizationController();
86
-
87
- const collectionRegistryController = useCollectionRegistryController();
88
-
89
- const collection = collectionProp ?? collectionRegistryController.getCollection(entity.path);
90
-
91
- // Above the `!collection` return, because hooks are. `useEntityTitle`
92
- // tolerates a missing collection for exactly this reason.
93
- const title = useEntityTitle({
94
- collection,
95
- entity
96
- });
97
-
98
- // What the card says under the title.
99
- //
100
- // A stated list wins outright — `previewProperties` is the one place a
101
- // developer says "show these", and nothing here is allowed to second-guess
102
- // it. Failing that, the card fills the same slots as every other surface
103
- // that renders one record in a row: a supporting line and a status. It used
104
- // to take the first few properties in declaration order instead, which is
105
- // how an author card ended up rendering an entire Markdown biography.
106
- const statedKeys = previewKeys ?? (collection?.previewProperties as string[] | undefined);
107
- const listProperties = useMemo(() => {
108
- if (!collection) return [];
109
- if (statedKeys && statedKeys.length > 0) {
110
- return statedKeys.filter(key => getPropertyInPath(collection.properties, key));
111
- }
112
- const slotKeys = resolveCollectionSlotKeys(
113
- collection as AdminCollection<Record<string, unknown>>,
114
- authController,
115
- customizationController.propertyConfigs);
116
- return [slotKeys.subtitleKey, slotKeys.statusKey].filter(Boolean) as string[];
117
- }, [statedKeys, collection, authController, customizationController.propertyConfigs]);
118
-
119
- if (!collection) {
120
- return (
121
- <>
122
- <ErrorView error={`Collection not found: ${entity.path}`}/>
123
- </>
124
- );
125
- }
126
-
127
- const titleProperty = includeTitle ? title.source?.key : undefined;
128
- const imagePropertyKey = includeImage ? getEntityImagePreviewPropertyKey(collection) : undefined;
129
- const imageProperty = imagePropertyKey ? collection.properties[imagePropertyKey] : undefined;
130
- const ofProp = imageProperty && "of" in imageProperty ? imageProperty.of : undefined;
131
- const usedImageProperty = ofProp ? (Array.isArray(ofProp) ? ofProp[0] : ofProp) : imageProperty;
132
- const restProperties = listProperties.filter(p => p !== titleProperty && p !== imagePropertyKey);
133
-
134
- const imageValue = imagePropertyKey ? getValueInPath(entity.values, imagePropertyKey) : undefined;
135
- const usedImageValue = imageProperty !== undefined ? ("of" in imageProperty
136
- ? (((imageValue as unknown[]) ?? []).length > 0
137
- ? (imageValue as unknown[])[0] : undefined)
138
- : imageValue)
139
- : undefined;
140
-
141
- return (
142
- // Everything below renders *inside* this preview: a reference or
143
- // relation among the preview properties collapses to one line instead
144
- // of nesting another bordered card with its own id and action button.
145
- <NestedEntityPreviewBoundary>
146
- {/* `overflow-hidden`: the image slot is a fixed box, and a thumbnail
147
- that fails to load renders a "file not found" message sized for a
148
- full preview — which spilled across the title beside it. */}
149
- <div className={cls("flex shrink-0 overflow-hidden", {
150
- "w-6 h-6 mx-1 my-0.5": size === "small" || size === "smallest",
151
- "w-8 h-8 ml-1 mr-2 m-2 self-start": size === "medium",
152
- "w-10 h-10 ml-2 mr-2 m-2 self-start": size === "large"
153
- })}>
154
- {usedImageProperty && usedImageValue ? <PropertyPreview property={usedImageProperty}
155
- propertyKey={imagePropertyKey as string}
156
- size={"small"}
157
- value={usedImageValue as never}/> : null}
158
- {(!usedImageProperty || !usedImageValue) ? <IconForView collectionOrView={collection}
159
- color={"primary"}
160
- size={size}
161
- className={"m-auto"}/> : null}
162
- </div>
163
-
164
- <div
165
- className={"flex flex-col grow w-full m-1 shrink min-w-0 text-text-primary dark:text-text-primary-dark flex-1 mr-2"}>
166
-
167
- {includeId && (
168
- entity
169
- ? <div className={"block whitespace-nowrap overflow-hidden truncate"}>
170
- <Typography variant={"caption"}
171
- color={"disabled"}
172
- className={"font-mono"}>
173
- {entity.id}
174
- </Typography>
175
- </div>
176
- : <Skeleton/>)}
177
-
178
- {/* A title that came from a property keeps that property's own
179
- rendering — an enum stays its coloured chip, a relation stays
180
- a link. A computed one is text, because that is all a
181
- resolver returns. */}
182
- {includeTitle && (titleProperty || title.value) && (
183
- <div
184
- className={"truncate my-0.5 text-sm font-medium text-text-primary dark:text-text-primary-dark"}>
185
- {!entity && titleProperty
186
- ? <SkeletonPropertyComponent
187
- property={getPropertyInPath(collection.properties, titleProperty) as Property}
188
- size={"medium"}/>
189
- : titleProperty
190
- ? <PropertyPreview
191
- propertyKey={titleProperty}
192
- value={title.source?.value as never}
193
- property={getPropertyInPath(collection.properties, titleProperty) as Property}
194
- size={"medium"}/>
195
- : title.value}
196
- </div>
197
- )}
198
-
199
- {restProperties && restProperties.map((key) => {
200
- const childProperty = getPropertyInPath(collection.properties, key);
201
- if (!childProperty) return null;
202
-
203
- const valueInPath = getValueInPath(entity.values, key);
204
- return (
205
- // `truncate` clamps a line of text; it does nothing to a
206
- // preview that renders blocks. Custom `admin.Preview`
207
- // components can render anything at all, so the height
208
- // is capped here as well — a card that loses the tail of
209
- // an unusual value beats a card the size of a document.
210
- <div key={"ref_prev_" + key}
211
- className={cls("truncate min-w-0 max-h-8 overflow-hidden",
212
- restProperties.length > 1 ? "my-0.5" : "my-0")}>
213
- {
214
- entity
215
- ? <PropertyPreview
216
- propertyKey={key as string}
217
- value={valueInPath as never}
218
- property={childProperty as Property}
219
- size={"small"}/>
220
- : <SkeletonPropertyComponent
221
- property={childProperty as Property}
222
- size={"small"}/>
223
- }
224
- </div>
225
- );
226
- })}
227
-
228
- </div>
229
-
230
- {entity && includeEntityLink &&
231
- <div className="flex-shrink-0">
232
- <Tooltip title={`See details for ${entity.id}`} className={"shrink-0"}>
233
- <IconButton
234
- color={"inherit"}
235
- size={"small"}
236
- className={size !== "small" ? "self-start" : ""}
237
- onClick={(e) => {
238
- e.stopPropagation();
239
- e.preventDefault();
240
- onSidePanelClick?.(entity);
241
- analyticsController.onAnalyticsEvent?.("entity_click_from_reference", {
242
- path: entity.path,
243
- entityId: entity.id
244
- });
245
- sidePanelController.open({
246
- entityId: entity.id,
247
- path: entity.path,
248
- collection,
249
- updateUrl: true
250
- });
251
- }}>
252
- <ArrowRightToLineIcon/>
253
- </IconButton>
254
- </Tooltip>
255
- </div>}
256
-
257
- {actions && <div className="flex-shrink-0">{actions}</div>}
258
- </NestedEntityPreviewBoundary>
259
- );
260
- }
261
-
262
- export function EntityPreviewBindingWithId({
263
- entityId,
264
- path,
265
- ...props
266
- }: Omit<EntityPreviewBindingProps, "entity"> & {
267
- entityId: string | number;
268
- path: string;
269
- databaseId?: string;
270
- }) {
271
-
272
- const [entity, setEntity] = React.useState<Entity | undefined>();
273
- const [dataLoading, setDataLoading] = React.useState(false);
274
- const dataClient = useData();
275
-
276
- useEffect(() => {
277
- let isMounted = true;
278
- if (!entityId || !path) {
279
- setEntity(undefined);
280
- return;
281
- }
282
- const fetchOne = async () => {
283
- setDataLoading(true);
284
- try {
285
- const fetchedEntity = await dataClient.collection(path).findById(entityId);
286
- if (isMounted) {
287
- setEntity(fetchedEntity);
288
- }
289
- } catch (error) {
290
- console.error("Error fetching entity:", error);
291
- if (isMounted) {
292
- setEntity(undefined);
293
- }
294
- } finally {
295
- if (isMounted) {
296
- setDataLoading(false);
297
- }
298
- }
299
- }
300
-
301
- fetchOne();
302
-
303
- return () => {
304
- isMounted = false;
305
- }
306
- }, [entityId, path]);
307
-
308
- if (dataLoading && !entity) {
309
- return (
310
- <EntityPreviewContainer
311
- hover={props.hover}
312
- size={props.size}>
313
- <Skeleton/>
314
- </EntityPreviewContainer>
315
- );
316
- }
317
-
318
- if (!entity) {
319
- return (
320
- <EntityPreviewContainer
321
- hover={props.hover}
322
- size={props.size}>
323
- <div className={"text-text-secondary dark:text-text-secondary-dark"}>
324
- Entity not found
325
- </div>
326
- </EntityPreviewContainer>
327
- );
328
- }
329
-
330
- return <EntityPreviewBindingData
331
- {...props}
332
- entity={entity}/>;
333
- }
334
-
335
- /**
336
- * This view is used to display a preview of a entity.
337
- * It is used by default in reference fields and whenever a reference is displayed.
338
- */
339
- export function EntityPreviewBinding({
340
- actions,
341
- disabled,
342
- hover,
343
- collection,
344
- previewKeys,
345
- onClick,
346
- size = "medium",
347
- includeId = true,
348
- includeTitle = true,
349
- includeEntityLink = true,
350
- includeImage = true,
351
- onSidePanelClick,
352
- entity
353
- }: EntityPreviewBindingProps) {
354
-
355
- return (
356
- <EntityPreviewContainer
357
- onClick={disabled ? undefined : onClick}
358
- hover={disabled ? undefined : hover}
359
- size={size}>
360
- <EntityPreviewBindingData
361
- actions={actions}
362
- collection={collection}
363
- previewKeys={previewKeys}
364
- size={size}
365
- includeId={includeId}
366
- includeTitle={includeTitle}
367
- includeEntityLink={includeEntityLink}
368
- includeImage={includeImage}
369
- onSidePanelClick={onSidePanelClick}
370
- entity={entity}
371
- />
372
- </EntityPreviewContainer>
373
- );
374
- }
375
-
376
- export type EntityPreviewContainerProps = {
377
- children: React.ReactNode;
378
- hover?: boolean;
379
- fullwidth?: boolean;
380
- size?: PreviewSize;
381
- className?: string;
382
- style?: React.CSSProperties;
383
- onClick?: (e: React.SyntheticEvent) => void;
384
- };
385
-
386
- export const EntityPreviewContainer = React.forwardRef<HTMLDivElement, EntityPreviewContainerProps>(({
387
- children,
388
- hover,
389
- onClick,
390
- size = "medium",
391
- style,
392
- className,
393
- fullwidth = true,
394
- ...props
395
- }, ref) => {
396
- return <div
397
- ref={ref}
398
- tabIndex={0}
399
- style={style}
400
- className={cls(
401
- "bg-white dark:bg-surface-900",
402
- // On the shared 28/32/40/48 control scale. `44px` was between two
403
- // steps of it, so a reference in a form was 4px short of the field
404
- // next to it and their boxes never quite agreed.
405
- size === "small" ? "min-h-[32px]" : "min-h-[48px]",
406
- fullwidth ? "w-full" : "",
407
- "items-center overflow-hidden",
408
- hover ? "hover:bg-surface-accent-50 dark:hover:bg-surface-800 group-hover:bg-surface-accent-50 dark:group-hover:bg-surface-800" : "",
409
- size === "small" ? "p-1" : "px-2 py-1",
410
- "flex border rounded-lg",
411
- onClick ? "cursor-pointer" : "",
412
- defaultBorderMixin,
413
- className)}
414
- role={onClick ? "button" : undefined}
415
- onClick={(event) => {
416
- if (onClick) {
417
- event.preventDefault();
418
- onClick(event);
419
- }
420
- }}
421
- onKeyDown={(event) => {
422
- if (onClick && (event.key === "Enter" || event.key === " ")) {
423
- event.preventDefault();
424
- onClick(event);
425
- }
426
- }}
427
- {...props}>
428
- {children}
429
- </div>;
430
- });
431
-
432
- EntityPreviewContainer.displayName = "EntityPreviewContainer";
@@ -1,50 +0,0 @@
1
- import * as React from "react";
2
-
3
- /**
4
- * How deep the current entity preview is nested inside another one.
5
- *
6
- * A reference or relation rendered on its own (a form field, a table cell) is
7
- * at depth 0 and gets the full card treatment: image slot, id, title, preview
8
- * properties and a link to the side panel. A reference rendered *inside*
9
- * another entity preview is at depth 1+, where repeating that card produces a
10
- * box-inside-a-box with its own borders, id line and action button. Nested
11
- * previews collapse to a compact chip instead.
12
- */
13
- const EntityPreviewDepthContext = React.createContext<number>(0);
14
-
15
- /**
16
- * Current entity preview nesting depth. 0 means "not inside another preview".
17
- */
18
- export function useEntityPreviewDepth(): number {
19
- return React.useContext(EntityPreviewDepthContext);
20
- }
21
-
22
- /**
23
- * True when the preview being rendered lives inside another entity preview,
24
- * and should therefore render its compact variant.
25
- */
26
- export function useIsNestedEntityPreview(): boolean {
27
- return useEntityPreviewDepth() > 0;
28
- }
29
-
30
- /**
31
- * Marks its children as being rendered inside an entity preview, so any
32
- * reference or relation below collapses to a chip.
33
- */
34
- export function NestedEntityPreviewBoundary({ children }: { children: React.ReactNode }) {
35
- const depth = useEntityPreviewDepth();
36
- return <EntityPreviewDepthContext.Provider value={depth + 1}>
37
- {children}
38
- </EntityPreviewDepthContext.Provider>;
39
- }
40
-
41
- /**
42
- * Resets the nesting depth back to 0. Used by surfaces that open a fresh
43
- * rendering context for an entity — a side panel, a dialog — from within a
44
- * preview, where the children are no longer visually nested.
45
- */
46
- export function RootEntityPreviewBoundary({ children }: { children: React.ReactNode }) {
47
- return <EntityPreviewDepthContext.Provider value={0}>
48
- {children}
49
- </EntityPreviewDepthContext.Provider>;
50
- }