@rebasepro/cms 0.17.3 → 0.18.1

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,141 +0,0 @@
1
- import type { NavigationEntry } from "@rebasepro/cms-types";
2
- import React from "react";
3
- import { ChevronDownIcon, cls, iconSize, Typography } from "@rebasepro/ui";
4
-
5
- import { IconForView, getIcon } from "@rebasepro/app";
6
- import { DrawerNavigationItem } from "./DrawerNavigationItem";
7
- import { useTranslation, useComponentOverride } from "@rebasepro/app";
8
-
9
- export interface DrawerNavigationGroupProps {
10
- /**
11
- * Group name to display in header
12
- */
13
- group: string;
14
- /**
15
- * Navigation entries in this group
16
- */
17
- entries: NavigationEntry[];
18
- /**
19
- * Whether the group is collapsed
20
- */
21
- collapsed: boolean;
22
- /**
23
- * Callback when collapse state should toggle
24
- */
25
- onToggleCollapsed: () => void;
26
- /**
27
- * Whether the drawer is in open (expanded) state
28
- */
29
- drawerOpen: boolean;
30
- /**
31
- * Optional actions to render in the group header (e.g., "Add collection" button)
32
- */
33
- headerActions?: React.ReactNode;
34
- /**
35
- * Optional callback when a navigation item is clicked
36
- */
37
- onItemClick?: (entry: NavigationEntry) => void;
38
- /**
39
- * Hide the group header (title and expandable panel)
40
- */
41
- hideHeader?: boolean;
42
- /**
43
- * Lucide icon name for the group header, from `NavigationGroupMapping.icon`.
44
- *
45
- * It decorates the header and nothing else: the entries below are untouched and
46
- * keep their own icons. An app that wants the categorised look — rows giving up
47
- * their icons to indent under the group — builds it in its own drawer, by
48
- * overriding `Shell.DrawerNavigationItem` and passing `indented`.
49
- */
50
- icon?: string;
51
- }
52
-
53
- /**
54
- * Shared drawer navigation group component used by both DefaultDrawer and RebaseCloudDrawer.
55
- * Renders a collapsible group with header and navigation items.
56
- */
57
- export function DrawerNavigationGroup({
58
- group,
59
- entries,
60
- collapsed,
61
- onToggleCollapsed,
62
- drawerOpen,
63
- headerActions,
64
- onItemClick,
65
- hideHeader,
66
- icon
67
- }: DrawerNavigationGroupProps) {
68
- const { t } = useTranslation();
69
- const ResolvedDrawerNavigationItem = useComponentOverride("Shell.DrawerNavigationItem", DrawerNavigationItem);
70
-
71
- // The icon decorates the header, and stops there. It used to also strip the
72
- // entries of theirs and indent them, which made a per-app styling choice into
73
- // framework behaviour: every project that labelled a group with an icon lost the
74
- // icons on its rows, with nothing to turn it off. An app that wants that look
75
- // now opts into it in its own drawer — see `indented` on
76
- // {@link DrawerNavigationItem}.
77
- const groupIcon = !hideHeader && drawerOpen ? getIcon(icon, undefined, undefined, "small") : undefined;
78
- return (
79
- <div
80
- className={"my-2 mx-2 flex flex-col"}
81
- key={`drawer_group_${group}`}
82
- >
83
- {/* Group Header */}
84
- {!hideHeader && (
85
- <div
86
- className={cls("pl-3 pr-2 py-0.5 flex flex-row items-center transition-colors",
87
- drawerOpen ? "cursor-pointer hover:bg-surface-100 dark:hover:bg-surface-800/40 rounded-lg" : "opacity-0 invisible pointer-events-none"
88
- )}
89
- onClick={drawerOpen ? onToggleCollapsed : undefined}
90
- >
91
- <ChevronDownIcon
92
- size={iconSize.small}
93
- className={cls(
94
- "text-surface-400 dark:text-surface-400 transition-transform duration-200 mr-1",
95
- collapsed ? "-rotate-90" : "rotate-0"
96
- )}
97
- />
98
- {groupIcon && (
99
- <span className="shrink-0 mr-2 flex items-center text-surface-600 dark:text-surface-300 [&>svg]:size-4">
100
- {groupIcon}
101
- </span>
102
- )}
103
- <Typography
104
- variant={"caption"}
105
- color={"secondary"}
106
- className="font-semibold text-[11px] uppercase tracking-wider flex-grow line-clamp-1 text-surface-400 dark:text-surface-400"
107
- >
108
- {(group || t("views_group"))}
109
- </Typography>
110
- {headerActions && (
111
- <div onClick={(e) => e.stopPropagation()}>
112
- {headerActions}
113
- </div>
114
- )}
115
- </div>
116
- )}
117
-
118
- {/* Collapsible Content */}
119
- <div
120
- className={cls(
121
- "transition-all duration-200 ease-in-out",
122
- "overflow-hidden",
123
- !hideHeader && "dark:bg-transparent",
124
- "rounded-lg",
125
- (!hideHeader && collapsed) ? "max-h-0 opacity-0" : "max-h-[2000px] opacity-100"
126
- )}
127
- >
128
- {entries.map((entry) => (
129
- <ResolvedDrawerNavigationItem
130
- key={entry.id}
131
- icon={<IconForView collectionOrView={entry.collection ?? entry.view} size={"small"}/>}
132
- drawerOpen={drawerOpen}
133
- onClick={() => onItemClick?.(entry)}
134
- url={entry.url}
135
- name={entry.name}
136
- />
137
- ))}
138
- </div>
139
- </div>
140
- );
141
- }
@@ -1,115 +0,0 @@
1
- import React from "react";
2
-
3
- import { NavLink } from "react-router";
4
- import { cls, Tooltip } from "@rebasepro/ui";
5
-
6
- /**
7
- * Props of a drawer navigation row, named so an app overriding
8
- * `Shell.DrawerNavigationItem` can type its wrapper against them.
9
- */
10
- export type DrawerNavigationItemProps = {
11
- icon: React.ReactElement,
12
- name: string,
13
- drawerOpen: boolean,
14
- url: string,
15
- onClick?: () => void,
16
- /**
17
- * Drop the row's icon and indent the label into the space it occupied, so the
18
- * row reads as a child of the group header above it.
19
- *
20
- * Nothing in the framework sets this: the stock drawer always passes `false`,
21
- * and an app that wants the categorised look opts into it by overriding
22
- * `Shell.DrawerNavigationItem` and deciding for itself which rows get it.
23
- */
24
- indented?: boolean,
25
- };
26
-
27
- export function DrawerNavigationItem({
28
- name,
29
- icon,
30
- drawerOpen,
31
- url,
32
- onClick,
33
- indented = false
34
- }: DrawerNavigationItemProps) {
35
-
36
- // Indented rows give up the icon rather than keeping it *and* indenting: a
37
- // per-row icon repeated down a group is what flattens the hierarchy, since
38
- // every row then reads at the weight of the category above it. The indent is
39
- // the same 44px the icon occupied, so labels stay on the original grid and the
40
- // rail width does not change.
41
- const iconWrap = indented
42
- ? <div className={"shrink-0 w-[44px] h-[30px]"} aria-hidden={true}/>
43
- : <div
44
- className={"shrink-0 flex items-center justify-center w-[44px] h-[30px] text-surface-500 dark:text-text-secondary-dark [&>svg]:size-4 group-hover/nav:text-primary transition-colors duration-150"}>
45
- {icon}
46
- </div>;
47
-
48
- const [wantsTooltip, setWantsTooltip] = React.useState(false);
49
-
50
- // Radix will not report a close it never noticed: while the tooltip is masked
51
- // the pointer can leave the row without `onOpenChange(false)` ever firing. So
52
- // the stale `true` is dropped on the way *into* the masked state — otherwise
53
- // it surfaces the moment the mask lifts, as a tooltip hanging over a rail the
54
- // pointer left long ago.
55
- if (drawerOpen && wantsTooltip) setWantsTooltip(false);
56
-
57
- const listItem = <div>
58
- <NavLink
59
- onClick={onClick}
60
- // The label below is `hidden` (display:none) while the rail is
61
- // collapsed, which takes it out of the accessibility tree along with
62
- // the row's only text — a collapsed rail was a column of links with no
63
- // accessible name at all. The tooltip does not cover this: Radix wires
64
- // a trigger to its content with `aria-describedby`, which is a
65
- // description rather than a name, and only while the tooltip is open —
66
- // and this one is masked shut whenever the drawer is open.
67
- //
68
- // Named unconditionally rather than only when collapsed: expanded, this
69
- // is the same string the row already displays, so the accessible name
70
- // stays stable across the transition instead of appearing with it.
71
- aria-label={name}
72
- style={{
73
- width: "100%",
74
- transition: drawerOpen ? "width 150ms ease-in" : undefined
75
- }}
76
- className={({ isActive }: { isActive: boolean }) => cls("rounded-lg truncate group/nav",
77
- "hover:bg-primary/5 dark:hover:bg-primary/5 text-surface-700 dark:text-surface-300 hover:text-surface-900 dark:hover:text-white",
78
- "flex flex-row items-center",
79
- drawerOpen ? "pr-4 h-[30px]" : "h-[30px]",
80
- "font-medium text-[13px]",
81
- isActive ? "bg-primary/8 dark:bg-primary/10 text-primary dark:text-primary [&_div]:text-primary" : ""
82
- )}
83
- to={url}
84
- >
85
-
86
- {iconWrap}
87
-
88
- <div
89
- className={cls(
90
- "text-text-primary dark:text-surface-200",
91
- drawerOpen ? "opacity-100" : "opacity-0 hidden",
92
- "font-inherit truncate space-x-2"
93
- )}>
94
- {name}
95
- </div>
96
- </NavLink>
97
- </div>;
98
-
99
- // Per row, and always controlled. The old shared flag could only say "every
100
- // tooltip" or "none", and the state it needed was unreachable, so no entry
101
- // tooltip ever opened — leaving a bare rail of unlabelled icons. Radix decides
102
- // when this one wants to be open, from the pointer and from focus; the drawer
103
- // only masks it once the label says the same thing.
104
- //
105
- // Masked rather than withheld: dropping `open`, or the title, would move the
106
- // tooltip between controlled and uncontrolled as the drawer opens, which
107
- // strands the old state — a tooltip left up over a pointer nowhere near it.
108
- return <Tooltip
109
- open={!drawerOpen && wantsTooltip}
110
- onOpenChange={setWantsTooltip}
111
- side="right"
112
- title={name}>
113
- {listItem}
114
- </Tooltip>;
115
- }
@@ -1,303 +0,0 @@
1
-
2
-
3
- import type { FormContext } from "../types/fields";
4
- import type { EntityAction, EntityActionClickProps, SidePanelController, AdminCollection } from "@rebasepro/cms-types";
5
- import React, { useMemo } from "react";
6
- import { Entity, getCollectionDataPath } from "@rebasepro/types";
7
- import { RebaseContext } from "@rebasepro/cms-types";
8
- import type { EntityFormActionsProps } from "../types/components/EntityFormActionsProps";
9
- import { copyEntityAction, deleteEntityAction, unlinkEntityAction } from "./common/default_entity_actions";
10
- import { mergeEntityActions } from "../util/entity_actions";
11
- import { resolveEntityAction } from "../util/resolutions";
12
- import { Button, CircularProgress, cls, defaultBorderMixin, DialogActions, IconButton, LoadingButton, Tooltip, Typography } from "@rebasepro/ui";
13
- import { AlertCircleIcon, iconSize } from "@rebasepro/ui";
14
- import {
15
- useCustomizationController,
16
- useSnackbarController,
17
- useTranslation
18
- } from "@rebasepro/app";
19
- import { SideDialogController, useSideDialogContext } from "./SideDialogs";
20
- import { FormexController } from "@rebasepro/forms";
21
- import { ErrorTooltip } from "@rebasepro/app";
22
- import { usePermissions } from "@rebasepro/app";
23
- import { getIcon } from "@rebasepro/app";
24
- import { useAdminContext } from "../hooks/useAdminContext";
25
- import { useChildViewSource } from "../hooks/useChildViewSource";
26
-
27
- /**
28
- * The entity form's footer.
29
- *
30
- * It used to render in two shapes: this footer, and a `w-80 2xl:w-96` sticky
31
- * side rail carrying the same Save and Discard above several hundred pixels of
32
- * nothing. The rail is gone, and Save/Discard have moved to the identity bar
33
- * where they stay visible while the form scrolls — so with
34
- * `showDefaultActions={false}` this renders only what the bar cannot host:
35
- * record actions (copy, delete, custom), plugin actions, the saving error, and
36
- * the side-panel-only "save and close".
37
- */
38
- export function EditFormActions({
39
- collection,
40
- path,
41
- entity,
42
- savingError,
43
- formex,
44
- disabled,
45
- status,
46
- pluginActions,
47
- openEntityMode,
48
- showDefaultActions = true,
49
- navigateBack,
50
- formContext
51
- }: EntityFormActionsProps) {
52
-
53
- const { canCreate, canDelete } = usePermissions();
54
- const context = useAdminContext();
55
- const sidePanelController = context.sidePanelController;
56
- const sideDialogContext = useSideDialogContext();
57
- const customizationController = useCustomizationController();
58
- const { t } = useTranslation();
59
-
60
- // Rows shared through a junction: the delete button here removes the
61
- // link, because that is what the server does for this path.
62
- const childViewSource = useChildViewSource(path);
63
- const isLinkedChildView = childViewSource?.kind === "relation" && childViewSource.mode === "linked";
64
-
65
- const entityActions = useMemo((): EntityAction[] => {
66
- const customEntityActions = (collection.entityActions ?? [])
67
- .map(action => resolveEntityAction(action, customizationController.entityActions))
68
- .filter(Boolean) as EntityAction[];
69
- const createEnabled = canCreate(collection, path);
70
- const deleteEnabled = entity ? canDelete(collection, path, entity) : false;
71
- const disableActions = collection.disableDefaultActions ?? [];
72
- const actions: EntityAction[] = [];
73
- if (createEnabled && !disableActions.includes("copy"))
74
- actions.push(copyEntityAction);
75
- if (deleteEnabled && !disableActions.includes("delete"))
76
- actions.push(isLinkedChildView ? unlinkEntityAction : deleteEntityAction);
77
- if (customEntityActions)
78
- return mergeEntityActions(actions, customEntityActions);
79
- return actions;
80
- }, [canCreate, canDelete, collection, path, customizationController.entityActions?.length, entity, collection.disableDefaultActions, isLinkedChildView]);
81
-
82
- // Record actions stay in the footer whether or not the bar carries Save;
83
- // they are things you do *to* the record, not ways to leave the form.
84
- const formActions = entityActions.filter(a => a.includeInForm === undefined || a.includeInForm);
85
-
86
- return buildBottomActions({
87
- savingError,
88
- entity,
89
- formActions,
90
- collection,
91
- context,
92
- sidePanelController,
93
- disabled,
94
- status,
95
- sideDialogContext,
96
- pluginActions,
97
- openEntityMode,
98
- navigateBack,
99
- formContext,
100
- formex,
101
- t,
102
- showDefaultActions
103
- });
104
- }
105
-
106
- type ActionsViewProps<M extends Record<string, unknown>> = {
107
- savingError: Error | undefined,
108
- entity: Entity<M> | undefined,
109
- formActions: EntityAction[],
110
- collection: AdminCollection,
111
- context: RebaseContext,
112
- sidePanelController: SidePanelController,
113
- disabled: boolean,
114
- status: "new" | "existing" | "copy",
115
- sideDialogContext: SideDialogController,
116
- pluginActions?: React.ReactNode[],
117
- openEntityMode?: "side_panel" | "full_screen" | "split" | "dialog";
118
- navigateBack: () => void;
119
- formContext: FormContext,
120
- formex: FormexController<Record<string, unknown>>;
121
- t: (key: string, vars?: Record<string, string>) => string;
122
- showDefaultActions: boolean;
123
- className?: string;
124
- };
125
-
126
- function buildBottomActions<M extends Record<string, unknown>>({
127
- savingError,
128
- entity,
129
- formActions,
130
- collection,
131
- context,
132
- sidePanelController,
133
- disabled,
134
- status,
135
- sideDialogContext,
136
- pluginActions,
137
- openEntityMode,
138
- navigateBack,
139
- formContext,
140
- formex,
141
- t,
142
- showDefaultActions,
143
- className
144
- }: ActionsViewProps<M>) {
145
-
146
- const hasErrors = Object.keys(formex.errors).length > 0 && formex.submitCount > 0;
147
- // "Save and close" only means something where there is something to close.
148
- const canClose = openEntityMode === "side_panel" || openEntityMode === "dialog";
149
- const showBackToDetail = collection.defaultEntityAction === "view" && status === "existing";
150
-
151
- // When the container carries the actions — the entity view's identity bar
152
- // does — this renders nothing at all. A full-width bar holding a copy icon
153
- // and a delete icon is the same waste as the side rail it replaced: the
154
- // record actions moved into the bar's overflow menu, and Save, Discard and
155
- // "save and close" are buttons up there too.
156
- const hasContent = showDefaultActions || Boolean(savingError);
157
-
158
- if (!hasContent) return null;
159
-
160
- return <DialogActions
161
- className={className}
162
- // In normal flow at the foot of the form column, not overlaying it.
163
- position={"sticky"}>
164
- {savingError &&
165
- <div className="text-right">
166
- <Typography color={"error"}>{savingError.message}</Typography>
167
- </div>
168
- }
169
-
170
- {formActions.length > 0 && <div className="grow flex overflow-auto no-scrollbar">
171
- {formActions.map((action, index) => {
172
-
173
- const props = {
174
- view: "form",
175
- entity,
176
- path: getCollectionDataPath(collection),
177
- collection: collection,
178
- context,
179
- sidePanelController,
180
- openEntityMode,
181
- navigateBack,
182
- formContext
183
- } satisfies EntityActionClickProps<Record<string, unknown>>;
184
-
185
- const isEnabled = !action.isEnabled || action.isEnabled(props);
186
- return (
187
- <EntityActionButton
188
- key={action.key ?? action.name ?? index}
189
- action={action}
190
- enabled={isEnabled}
191
- props={props}
192
- />
193
- );
194
- })}
195
- </div>}
196
-
197
- {pluginActions}
198
-
199
- {hasErrors ?
200
- <ErrorTooltip title={"This form has errors"}>
201
- <AlertCircleIcon className="ml-4 text-red-500" size={iconSize.smallest}/>
202
- </ErrorTooltip> : null}
203
-
204
- {showBackToDetail && (
205
- <Button variant="text"
206
- color="primary"
207
- disabled={disabled}
208
- onClick={navigateBack}>
209
- {t("back_to_detail") ?? "Back to details"}
210
- </Button>
211
- )}
212
-
213
- {showDefaultActions && <>
214
- <Button variant="text"
215
- color="primary"
216
- disabled={disabled || formex.isSubmitting}
217
- type="reset">
218
- {status === "existing" ? t("discard") : t("clear")}
219
- </Button>
220
- <Tooltip title={hasErrors ? (t("fix_errors_before_saving") ?? "Fix highlighted errors before saving") : undefined}>
221
- <Button variant={canClose ? "text" : "filled"}
222
- color="primary"
223
- type="submit"
224
- disabled={disabled || formex.isSubmitting}
225
- onClick={() => {
226
- sideDialogContext.setPendingClose(false);
227
- }}>
228
- {status === "existing" && t("save")}
229
- {status === "copy" && t("create_copy")}
230
- {status === "new" && t("create")}
231
- </Button>
232
- </Tooltip>
233
- </>}
234
-
235
- {canClose && <LoadingButton variant="filled"
236
- color="primary"
237
- type="submit"
238
- loading={formex.isSubmitting}
239
- disabled={disabled}
240
- onClick={() => {
241
- sideDialogContext.setPendingClose?.(true);
242
- }}>
243
- {status === "existing" && t("save_and_close")}
244
- {status === "copy" && t("create_copy_and_close")}
245
- {status === "new" && t("create_and_close")}
246
- </LoadingButton>}
247
- </DialogActions>;
248
- }
249
-
250
- function EntityActionButton({
251
- action,
252
- enabled,
253
- props
254
- }: {
255
- action: EntityAction,
256
- enabled: boolean,
257
- props: EntityActionClickProps<Record<string, unknown>>
258
- }) {
259
- const snackbarController = useSnackbarController();
260
- const [loading, setLoading] = React.useState(false);
261
- return <Tooltip
262
- title={action.name}>
263
- <IconButton
264
- color="primary"
265
- disabled={!enabled}
266
- onClick={(event) => {
267
- console.debug("Executing action", action.key, props);
268
- try {
269
- event.stopPropagation();
270
- if (props.entity) {
271
- const onClick = action.onClick(props);
272
- // If the action returns a promise, we can handle it
273
- if (onClick instanceof Promise) {
274
- setLoading(true);
275
- onClick
276
- .catch((error) => {
277
- console.error("Error executing action", action.key, error);
278
- snackbarController.open({
279
- message: `Error executing action: ${error.message}`,
280
- type: "error"
281
- })
282
- })
283
- .finally(() => setLoading(false));
284
- } else {
285
- snackbarController.open({
286
- message: `Action ${action.name} executed successfully`,
287
- type: "success"
288
- });
289
- }
290
-
291
- }
292
- } catch (e: unknown) {
293
- console.error("Error executing action", action.key, e);
294
- snackbarController.open({
295
- message: `Error executing action: ${e instanceof Error ? e.message : String(e)}`,
296
- type: "error"
297
- });
298
- }
299
- }}>
300
- {loading ? <CircularProgress size={"smallest"}/> : getIcon(action.icon, undefined, undefined, "smallest")}
301
- </IconButton>
302
- </Tooltip>;
303
- }