@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.
- package/README.md +4 -0
- package/dist/{CollectionEditorDialog-B-akreOU.js → CollectionEditorDialog-BeX4b92r.js} +13 -7
- package/dist/{CollectionEditorDialog-B-akreOU.js.map → CollectionEditorDialog-BeX4b92r.js.map} +1 -1
- package/dist/{PropertyEditView-CiY84wkR.js → PropertyEditView-C7thfj4L.js} +3 -3
- package/dist/{PropertyEditView-CiY84wkR.js.map → PropertyEditView-C7thfj4L.js.map} +1 -1
- package/dist/{RouterCollectionsStudioView-DkAWda4N.js → RouterCollectionsStudioView-BtjzvB6E.js} +4 -4
- package/dist/{RouterCollectionsStudioView-DkAWda4N.js.map → RouterCollectionsStudioView-BtjzvB6E.js.map} +1 -1
- package/dist/{SchemaChangeDialog-DceT8QFX.js → SchemaChangeDialog-CkqK6KOC.js} +4 -2
- package/dist/{SchemaChangeDialog-DceT8QFX.js.map → SchemaChangeDialog-CkqK6KOC.js.map} +1 -1
- package/dist/collection_editor/api/generateCollectionApi.d.ts +1 -2
- package/dist/collection_editor_ui.d.ts +2 -0
- package/dist/collection_editor_ui.js +6 -5
- package/dist/collection_editor_ui.js.map +1 -1
- package/dist/components/DeleteEntityDialog.d.ts +2 -3
- package/dist/components/RebaseLayout.d.ts +11 -4
- package/dist/components/field_configs.d.ts +1 -1
- package/dist/editor/sanitize-html.d.ts +15 -0
- package/dist/editor.js +195 -10
- package/dist/editor.js.map +1 -1
- package/dist/{export-Ben8E355.js → export--arni_VY.js} +2 -2
- package/dist/{export-Ben8E355.js.map → export--arni_VY.js.map} +1 -1
- package/dist/form/components/LabelWithIcon.d.ts +10 -0
- package/dist/{history-DIEVd26f.js → history-C2TpoQwi.js} +2 -2
- package/dist/{history-DIEVd26f.js.map → history-C2TpoQwi.js.map} +1 -1
- package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +1 -1
- package/dist/hooks/navigation/useResolvedViews.d.ts +1 -1
- package/dist/hooks/navigation/useTopLevelNavigation.d.ts +1 -1
- package/dist/{import-D25x7ko-.js → import-DTkXNoBg.js} +2 -2
- package/dist/{import-D25x7ko-.js.map → import-DTkXNoBg.js.map} +1 -1
- package/dist/index.js +78 -33
- package/dist/index.js.map +1 -1
- package/dist/util/propertyConfigMapper.d.ts +1 -1
- package/dist/util-CfLFggP7.js +57 -0
- package/dist/util-CfLFggP7.js.map +1 -0
- package/dist/{util-DVqnqlLn.js → util-DE1WQW6h.js} +134 -112
- package/dist/util-DE1WQW6h.js.map +1 -0
- package/package.json +42 -34
- package/dist/util-DVqnqlLn.js.map +0 -1
- package/src/collection_editor/CollectionEditorDialogsContext.tsx +0 -25
- package/src/collection_editor/ConfigControllerProvider.tsx +0 -395
- package/src/collection_editor/_cms_internals.ts +0 -41
- package/src/collection_editor/api/generateCollectionApi.ts +0 -126
- package/src/collection_editor/api/index.ts +0 -1
- package/src/collection_editor/extensibility_types.ts +0 -168
- package/src/collection_editor/index.ts +0 -108
- package/src/collection_editor/liveSchemaClient.ts +0 -285
- package/src/collection_editor/relation_kinds.ts +0 -44
- package/src/collection_editor/serializable_types.ts +0 -535
- package/src/collection_editor/serializable_utils.ts +0 -729
- package/src/collection_editor/types/collection_editor_controller.tsx +0 -62
- package/src/collection_editor/types/collection_inference.ts +0 -18
- package/src/collection_editor/types/config_controller.tsx +0 -121
- package/src/collection_editor/ui/AddKanbanColumnAction.tsx +0 -199
- package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +0 -51
- package/src/collection_editor/ui/EditorCollectionAction.tsx +0 -54
- package/src/collection_editor/ui/EditorCollectionActionStart.tsx +0 -90
- package/src/collection_editor/ui/EditorEntityAction.tsx +0 -50
- package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +0 -114
- package/src/collection_editor/ui/KanbanSetupAction.tsx +0 -43
- package/src/collection_editor/ui/MissingReferenceWidget.tsx +0 -35
- package/src/collection_editor/ui/NewCollectionButton.tsx +0 -27
- package/src/collection_editor/ui/NewCollectionCard.tsx +0 -48
- package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +0 -49
- package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +0 -260
- package/src/collection_editor/ui/collection_editor/AIModifiedPathsContext.tsx +0 -90
- package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +0 -388
- package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +0 -1098
- package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +0 -301
- package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +0 -172
- package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +0 -620
- package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +0 -530
- package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +0 -462
- package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +0 -104
- package/src/collection_editor/ui/collection_editor/CollectionYupValidation.tsx +0 -9
- package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +0 -199
- package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +0 -315
- package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +0 -164
- package/src/collection_editor/ui/collection_editor/EntityActionsSelectDialog.tsx +0 -40
- package/src/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +0 -39
- package/src/collection_editor/ui/collection_editor/EnumForm.tsx +0 -373
- package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +0 -288
- package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +0 -141
- package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +0 -194
- package/src/collection_editor/ui/collection_editor/LayoutModeSwitch.tsx +0 -53
- package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +0 -980
- package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +0 -164
- package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +0 -364
- package/src/collection_editor/ui/collection_editor/RouterCollectionStudioView.tsx +0 -44
- package/src/collection_editor/ui/collection_editor/RouterCollectionsStudioView.tsx +0 -41
- package/src/collection_editor/ui/collection_editor/SchemaChangeDialog.tsx +0 -470
- package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +0 -256
- package/src/collection_editor/ui/collection_editor/SwitchControl.tsx +0 -39
- package/src/collection_editor/ui/collection_editor/ViewModeSwitch.tsx +0 -68
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +0 -67
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +0 -296
- package/src/collection_editor/ui/collection_editor/import/clean_import_data.ts +0 -57
- package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +0 -147
- package/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx +0 -41
- package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +0 -113
- package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +0 -250
- package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +0 -126
- package/src/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.tsx +0 -20
- package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +0 -153
- package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +0 -217
- package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +0 -117
- package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +0 -129
- package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +0 -335
- package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +0 -107
- package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +0 -403
- package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +0 -148
- package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +0 -91
- package/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx +0 -34
- package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +0 -49
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +0 -925
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.tsx +0 -28
- package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +0 -626
- package/src/collection_editor/ui/collection_editor/properties/conditions/index.ts +0 -6
- package/src/collection_editor/ui/collection_editor/properties/conditions/property_paths.ts +0 -93
- package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +0 -52
- package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +0 -63
- package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +0 -114
- package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +0 -154
- package/src/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.tsx +0 -28
- package/src/collection_editor/ui/collection_editor/templates/blog_template.ts +0 -112
- package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +0 -183
- package/src/collection_editor/ui/collection_editor/templates/products_template.ts +0 -88
- package/src/collection_editor/ui/collection_editor/templates/users_template.ts +0 -42
- package/src/collection_editor/ui/collection_editor/util.ts +0 -28
- package/src/collection_editor/ui/collection_editor/utils/strings.ts +0 -1
- package/src/collection_editor/ui/collection_editor/utils/supported_fields.tsx +0 -39
- package/src/collection_editor/ui/collection_editor/utils/update_property_for_widget.ts +0 -276
- package/src/collection_editor/useCollectionEditorController.tsx +0 -9
- package/src/collection_editor/useCollectionsConfigController.tsx +0 -9
- package/src/collection_editor/useJsonCollectionsConfigController.tsx +0 -297
- package/src/collection_editor/useLiveSchemaEditing.tsx +0 -315
- package/src/collection_editor/useLocalCollectionsConfigController.tsx +0 -341
- package/src/collection_editor/useSafeSnackbarController.ts +0 -9
- package/src/collection_editor/validateCollectionJson.ts +0 -440
- package/src/collection_editor_ui.ts +0 -21
- package/src/components/AdditionalFieldValue.tsx +0 -68
- package/src/components/AdminModeSyncer.tsx +0 -56
- package/src/components/ArrayContainer.tsx +0 -542
- package/src/components/ClearFilterSortButton.tsx +0 -56
- package/src/components/CollectionEditorDialogs.tsx +0 -69
- package/src/components/CollectionPanel.tsx +0 -179
- package/src/components/CollectionTableBinding/CollectionRowActions.tsx +0 -244
- package/src/components/CollectionTableBinding/CollectionTableBinding.tsx +0 -394
- package/src/components/CollectionTableBinding/CollectionTableBindingProps.tsx +0 -172
- package/src/components/CollectionTableBinding/PropertyTableCell.tsx +0 -350
- package/src/components/CollectionTableBinding/column_utils.tsx +0 -155
- package/src/components/CollectionTableBinding/fields/TableMultipleRelationField.tsx +0 -131
- package/src/components/CollectionTableBinding/fields/TableReferenceField.tsx +0 -193
- package/src/components/CollectionTableBinding/fields/TableRelationField.tsx +0 -192
- package/src/components/CollectionTableBinding/fields/TableRelationSelectorField.tsx +0 -42
- package/src/components/CollectionTableBinding/fields/TableStorageUpload.tsx +0 -324
- package/src/components/CollectionTableBinding/fields/VirtualTableSelect.tsx +0 -132
- package/src/components/CollectionTableBinding/fields/VirtualTableUserSelect.tsx +0 -41
- package/src/components/CollectionTableBinding/index.tsx +0 -14
- package/src/components/CollectionTableBinding/internal/CollectionTableToolbar.tsx +0 -96
- package/src/components/CollectionTableBinding/internal/EntityTableCell.tsx +0 -309
- package/src/components/CollectionTableBinding/internal/EntityTableCellActions.tsx +0 -80
- package/src/components/CollectionTableBinding/internal/common.tsx +0 -74
- package/src/components/CollectionTableBinding/internal/popup_field/PopupFormField.tsx +0 -422
- package/src/components/CollectionTableBinding/internal/popup_field/useDraggable.tsx +0 -99
- package/src/components/CollectionTableBinding/internal/popup_field/useWindowSize.tsx +0 -22
- package/src/components/CollectionTableBinding/table_bindings.tsx +0 -350
- package/src/components/CollectionViewBinding/BoardCardBinding.tsx +0 -263
- package/src/components/CollectionViewBinding/CollectionBoardViewBinding.tsx +0 -662
- package/src/components/CollectionViewBinding/CollectionCardViewBinding.tsx +0 -159
- package/src/components/CollectionViewBinding/CollectionListViewBinding.tsx +0 -1430
- package/src/components/CollectionViewBinding/CollectionViewActions.tsx +0 -227
- package/src/components/CollectionViewBinding/CollectionViewBinding.tsx +0 -1603
- package/src/components/CollectionViewBinding/CollectionViewStartActions.tsx +0 -240
- package/src/components/CollectionViewBinding/EntityCardBinding.tsx +0 -239
- package/src/components/CollectionViewBinding/FilterPresetsButton.tsx +0 -298
- package/src/components/CollectionViewBinding/FiltersDialog.tsx +0 -218
- package/src/components/CollectionViewBinding/SearchExplanation.tsx +0 -106
- package/src/components/CollectionViewBinding/SearchHighlight.tsx +0 -311
- package/src/components/CollectionViewBinding/SlotValue.tsx +0 -156
- package/src/components/CollectionViewBinding/SortButton.tsx +0 -354
- package/src/components/CollectionViewBinding/SplitListCloseButton.tsx +0 -49
- package/src/components/CollectionViewBinding/SplitListShowButton.tsx +0 -28
- package/src/components/CollectionViewBinding/SplitListView.tsx +0 -488
- package/src/components/CollectionViewBinding/SplitViewContext.tsx +0 -34
- package/src/components/CollectionViewBinding/ViewModeToggle.tsx +0 -250
- package/src/components/CollectionViewBinding/hooks/useCollectionInlineEditor.ts +0 -81
- package/src/components/CollectionViewBinding/hooks/useKanbanDragAndDrop.ts +0 -181
- package/src/components/CollectionViewBinding/useBoardDataController.tsx +0 -802
- package/src/components/CollectionViewBinding/usePreviewSlots.ts +0 -703
- package/src/components/CollectionViewBinding/useSelectionController.tsx +0 -40
- package/src/components/CollectionViewBinding/utils.ts +0 -22
- package/src/components/DefaultAppBar.tsx +0 -264
- package/src/components/DefaultDrawer.tsx +0 -593
- package/src/components/DeleteEntityDialog.tsx +0 -205
- package/src/components/DetailViewBinding.tsx +0 -731
- package/src/components/DrawerNavigationGroup.tsx +0 -141
- package/src/components/DrawerNavigationItem.tsx +0 -115
- package/src/components/EditFormActions.tsx +0 -303
- package/src/components/EditViewBinding.tsx +0 -1069
- package/src/components/EntityDisplayHeader.tsx +0 -170
- package/src/components/EntityIdentityBar.tsx +0 -428
- package/src/components/EntityInspector.tsx +0 -156
- package/src/components/EntityPreviewBinding.tsx +0 -432
- package/src/components/EntityPreviewNesting.tsx +0 -50
- package/src/components/EntityViewBinding.tsx +0 -374
- package/src/components/FieldCaption.tsx +0 -14
- package/src/components/HomePage/ContentHomePage.tsx +0 -586
- package/src/components/HomePage/FavouritesView.tsx +0 -60
- package/src/components/HomePage/HomePageDnD.tsx +0 -704
- package/src/components/HomePage/NavigationCard.tsx +0 -81
- package/src/components/HomePage/NavigationCardBinding.tsx +0 -107
- package/src/components/HomePage/NavigationGroup.tsx +0 -156
- package/src/components/HomePage/RenameGroupDialog.tsx +0 -123
- package/src/components/HomePage/SmallNavigationCard.tsx +0 -41
- package/src/components/HomePage/index.tsx +0 -5
- package/src/components/InlineEntityPreview.tsx +0 -149
- package/src/components/JsonPreviewBinding.tsx +0 -66
- package/src/components/PropertyCollectionView.tsx +0 -336
- package/src/components/PropertyConfigBadge.tsx +0 -28
- package/src/components/PropertyIdCopyTooltip.tsx +0 -47
- package/src/components/RebaseAuthGate.tsx +0 -44
- package/src/components/RebaseCMS.tsx +0 -30
- package/src/components/RebaseLayout.tsx +0 -80
- package/src/components/RebaseNavigation.tsx +0 -369
- package/src/components/RebaseRouteDefs.tsx +0 -127
- package/src/components/RebaseShell.tsx +0 -83
- package/src/components/ReferenceTable/SelectionTableBinding.tsx +0 -389
- package/src/components/ReferenceWidget.tsx +0 -156
- package/src/components/RelationSelector.tsx +0 -926
- package/src/components/SearchIconsView.tsx +0 -78
- package/src/components/SelectableTable/SelectableTable.tsx +0 -309
- package/src/components/SelectableTable/SelectableTableContext.tsx +0 -7
- package/src/components/SelectableTable/SelectionStore.ts +0 -43
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +0 -59
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +0 -146
- package/src/components/SelectableTable/filters/FilterFieldBinding.tsx +0 -190
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +0 -250
- package/src/components/SelectableTable/filters/RelationFilterField.tsx +0 -238
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +0 -282
- package/src/components/SelectableTable/filters/null_filter.ts +0 -63
- package/src/components/SideDialogs.tsx +0 -238
- package/src/components/SidePanelBinding.tsx +0 -361
- package/src/components/SidePanelProvider.tsx +0 -80
- package/src/components/UserSelector.tsx +0 -513
- package/src/components/admin/CreationResultDialog.tsx +0 -138
- package/src/components/admin/index.ts +0 -1
- package/src/components/app/AppBar.tsx +0 -17
- package/src/components/app/Drawer.tsx +0 -38
- package/src/components/app/Scaffold.tsx +0 -366
- package/src/components/app/index.ts +0 -4
- package/src/components/app/useApp.tsx +0 -36
- package/src/components/common/default_entity_actions.tsx +0 -440
- package/src/components/common/index.ts +0 -1
- package/src/components/field_configs.tsx +0 -506
- package/src/components/history/EntityHistoryEntry.tsx +0 -203
- package/src/components/history/EntityHistoryView.tsx +0 -206
- package/src/components/history/LastEditedByFormAction.tsx +0 -24
- package/src/components/history/LastEditedByIndicator.tsx +0 -95
- package/src/components/history/UserChip.tsx +0 -15
- package/src/components/history/index.tsx +0 -5
- package/src/components/index.ts +0 -63
- package/src/contexts/BreacrumbsContext.tsx +0 -45
- package/src/contexts/SideDialogsControllerContext.tsx +0 -5
- package/src/contexts/SidePanelControllerContext.tsx +0 -5
- package/src/data_export/export/BasicExportAction.tsx +0 -142
- package/src/data_export/export/ExportCollectionAction.tsx +0 -321
- package/src/data_export/export/export.ts +0 -295
- package/src/data_export/export/fetch_export_data.ts +0 -90
- package/src/data_export/export/index.ts +0 -4
- package/src/data_export/index.ts +0 -1
- package/src/data_import/components/DataNewPropertiesMapping.tsx +0 -261
- package/src/data_import/components/ImportFileUpload.tsx +0 -42
- package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +0 -58
- package/src/data_import/components/ImportSaveInProgress.tsx +0 -121
- package/src/data_import/components/index.ts +0 -4
- package/src/data_import/hooks/index.ts +0 -1
- package/src/data_import/hooks/useImportConfig.tsx +0 -34
- package/src/data_import/import/ImportCollectionAction.tsx +0 -461
- package/src/data_import/import/index.ts +0 -1
- package/src/data_import/index.ts +0 -5
- package/src/data_import/types/column_mapping.ts +0 -32
- package/src/data_import/types/index.ts +0 -1
- package/src/data_import/utils/csv.ts +0 -153
- package/src/data_import/utils/data.ts +0 -181
- package/src/data_import/utils/file_headers.ts +0 -14
- package/src/data_import/utils/file_to_json.ts +0 -149
- package/src/data_import/utils/get_import_inference_type.ts +0 -33
- package/src/data_import/utils/get_properties_mapping.ts +0 -67
- package/src/data_import/utils/index.ts +0 -5
- package/src/data_import/utils/save_entities.ts +0 -138
- package/src/data_import/utils/transforms.ts +0 -70
- package/src/editor/components/SlashCommandMenu.tsx +0 -532
- package/src/editor/components/editor-bubble-item.tsx +0 -32
- package/src/editor/components/editor-bubble.tsx +0 -143
- package/src/editor/components/image-bubble.tsx +0 -183
- package/src/editor/components/index.ts +0 -14
- package/src/editor/components/table-bubble.tsx +0 -233
- package/src/editor/editor.tsx +0 -529
- package/src/editor/extensions/HighlightDecorationExtension.ts +0 -115
- package/src/editor/extensions/Image.ts +0 -159
- package/src/editor/extensions/TextLoadingDecorationExtension.tsx +0 -107
- package/src/editor/extensions/clipboard.ts +0 -72
- package/src/editor/extensions/custom-keymap.ts +0 -25
- package/src/editor/extensions/drag-and-drop.tsx +0 -508
- package/src/editor/hooks/useProseMirror.ts +0 -126
- package/src/editor/hooks/useProseMirrorContext.ts +0 -15
- package/src/editor/index.ts +0 -2
- package/src/editor/markdown-it-plugins.d.ts +0 -24
- package/src/editor/markdown.ts +0 -204
- package/src/editor/nodeViews/ImageComponent.tsx +0 -20
- package/src/editor/nodeViews/ReactNodeView.tsx +0 -89
- package/src/editor/nodeViews/TaskItemComponent.tsx +0 -30
- package/src/editor/nodeViews/index.ts +0 -35
- package/src/editor/plugins/index.ts +0 -58
- package/src/editor/plugins/inputrules.ts +0 -82
- package/src/editor/plugins/placeholderPlugin.ts +0 -55
- package/src/editor/plugins/slashCommandPlugin.ts +0 -65
- package/src/editor/schema.ts +0 -339
- package/src/editor/selectors/ai-selector.tsx +0 -110
- package/src/editor/selectors/color-selector.tsx +0 -199
- package/src/editor/selectors/link-selector.tsx +0 -122
- package/src/editor/selectors/node-selector.tsx +0 -159
- package/src/editor/selectors/text-buttons.tsx +0 -79
- package/src/editor/types.ts +0 -6
- package/src/editor/useProseMirror.ts +0 -125
- package/src/editor/utils/prosemirror-utils.ts +0 -113
- package/src/editor/utils/remove_classes.ts +0 -18
- package/src/editor/utils/useDebouncedCallback.ts +0 -25
- package/src/form/EntityForm.tsx +0 -761
- package/src/form/EntityFormActions.tsx +0 -160
- package/src/form/EntityFormBinding.tsx +0 -342
- package/src/form/PropertyFieldBinding.tsx +0 -348
- package/src/form/components/ErrorFocus.tsx +0 -44
- package/src/form/components/FieldBlock.tsx +0 -189
- package/src/form/components/FieldHelperText.tsx +0 -84
- package/src/form/components/FormRail.tsx +0 -153
- package/src/form/components/FormSections.tsx +0 -145
- package/src/form/components/LabelWithIcon.tsx +0 -43
- package/src/form/components/LabelWithIconAndTooltip.tsx +0 -28
- package/src/form/components/LocalChangesMenu.tsx +0 -147
- package/src/form/components/StorageItemPreview.tsx +0 -81
- package/src/form/components/StorageUploadProgress.tsx +0 -118
- package/src/form/components/index.tsx +0 -6
- package/src/form/components/useRailVisible.tsx +0 -47
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +0 -109
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +0 -172
- package/src/form/field_bindings/BinaryFieldBinding.tsx +0 -177
- package/src/form/field_bindings/BlockFieldBinding.tsx +0 -282
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +0 -78
- package/src/form/field_bindings/GeopointFieldBinding.tsx +0 -200
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +0 -574
- package/src/form/field_bindings/MapFieldBinding.tsx +0 -120
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +0 -259
- package/src/form/field_bindings/MultiSelectFieldBinding.tsx +0 -130
- package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +0 -168
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +0 -94
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +0 -146
- package/src/form/field_bindings/RelationFieldBinding.tsx +0 -202
- package/src/form/field_bindings/RepeatFieldBinding.tsx +0 -143
- package/src/form/field_bindings/SelectFieldBinding.tsx +0 -111
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +0 -521
- package/src/form/field_bindings/SwitchFieldBinding.tsx +0 -70
- package/src/form/field_bindings/TextFieldBinding.tsx +0 -189
- package/src/form/field_bindings/UserSelectFieldBinding.tsx +0 -71
- package/src/form/field_bindings/VectorFieldBinding.tsx +0 -209
- package/src/form/form_utils.ts +0 -243
- package/src/form/index.tsx +0 -36
- package/src/form/useClearRestoreValue.tsx +0 -36
- package/src/form/useUndoableDiscard.ts +0 -39
- package/src/form/validation.ts +0 -583
- package/src/hooks/index.ts +0 -16
- package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +0 -22
- package/src/hooks/navigation/contexts/NavigationStateContext.tsx +0 -16
- package/src/hooks/navigation/contexts/UrlContext.tsx +0 -24
- package/src/hooks/navigation/contexts/index.ts +0 -14
- package/src/hooks/navigation/useAsyncResolver.ts +0 -100
- package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +0 -218
- package/src/hooks/navigation/useBuildNavigationStateController.tsx +0 -134
- package/src/hooks/navigation/useBuildUrlController.tsx +0 -66
- package/src/hooks/navigation/useNavigationResolution.ts +0 -271
- package/src/hooks/navigation/useResolvedCollections.ts +0 -102
- package/src/hooks/navigation/useResolvedViews.tsx +0 -139
- package/src/hooks/navigation/useTopLevelNavigation.ts +0 -273
- package/src/hooks/navigation/utils.ts +0 -200
- package/src/hooks/useAdminContext.tsx +0 -83
- package/src/hooks/useBreadcrumbsController.tsx +0 -17
- package/src/hooks/useBuildSideDialogsController.tsx +0 -145
- package/src/hooks/useBuildSidePanel.tsx +0 -315
- package/src/hooks/useChildViewSource.ts +0 -46
- package/src/hooks/useEntityDisplay.tsx +0 -262
- package/src/hooks/useEntityDisplayTitle.tsx +0 -49
- package/src/hooks/useHistory.ts +0 -178
- package/src/hooks/useRecordActions.tsx +0 -69
- package/src/hooks/useResolvedNavigationFrom.tsx +0 -167
- package/src/hooks/useResolvedUsers.ts +0 -148
- package/src/hooks/useSelectionDialog.tsx +0 -58
- package/src/hooks/useSideDialogsController.tsx +0 -25
- package/src/hooks/useSidePanel.tsx +0 -13
- package/src/index.ts +0 -124
- package/src/preview/PropertyPreview.tsx +0 -331
- package/src/preview/compact_text.ts +0 -68
- package/src/preview/components/ArrayEnumPreview.tsx +0 -39
- package/src/preview/components/BooleanPreview.tsx +0 -28
- package/src/preview/components/DatePreview.tsx +0 -106
- package/src/preview/components/EmptyValue.tsx +0 -10
- package/src/preview/components/EnumValuesChip.tsx +0 -39
- package/src/preview/components/ImagePreview.tsx +0 -144
- package/src/preview/components/InlineEntityListPreview.tsx +0 -42
- package/src/preview/components/ReferencePreview.tsx +0 -235
- package/src/preview/components/RelationPreview.tsx +0 -271
- package/src/preview/components/StorageThumbnail.tsx +0 -147
- package/src/preview/components/UrlComponentPreview.tsx +0 -116
- package/src/preview/components/UserPreview.tsx +0 -30
- package/src/preview/components/date_fns_locales.ts +0 -125
- package/src/preview/index.ts +0 -26
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +0 -73
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +0 -67
- package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +0 -77
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +0 -49
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -70
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +0 -79
- package/src/preview/property_previews/ArrayPropertyEnumPreview.tsx +0 -35
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +0 -79
- package/src/preview/property_previews/MapPropertyPreview.tsx +0 -198
- package/src/preview/property_previews/NumberPropertyPreview.tsx +0 -39
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +0 -276
- package/src/preview/property_previews/StringPropertyPreview.tsx +0 -70
- package/src/preview/util.ts +0 -39
- package/src/routes/CustomViewRoute.tsx +0 -33
- package/src/routes/RebaseRoute.tsx +0 -467
- package/src/routes/index.ts +0 -2
- package/src/types/components/EntityFormActionsProps.tsx +0 -20
- package/src/types/components/EntityFormProps.tsx +0 -119
- package/src/types/components/PropertyPreviewProps.tsx +0 -85
- package/src/types/components/formex.tsx +0 -2
- package/src/types/components/index.ts +0 -3
- package/src/types/fields.tsx +0 -340
- package/src/types/index.ts +0 -4
- package/src/util/dataControllerAdapter.ts +0 -88
- package/src/util/entity_actions.ts +0 -28
- package/src/util/index.ts +0 -5
- package/src/util/navigation_utils.ts +0 -89
- package/src/util/number_format.ts +0 -46
- package/src/util/previews.ts +0 -131
- package/src/util/propertyConfigMapper.ts +0 -134
- package/src/util/property_utils.tsx +0 -236
- package/src/util/resolutions.ts +0 -96
- package/src/util/view_constants.ts +0 -33
- package/src/util/view_mode.ts +0 -176
|
@@ -1,593 +0,0 @@
|
|
|
1
|
-
import type { NavigationEntry, NavigationResult } from "@rebasepro/cms-types";
|
|
2
|
-
import React, { useMemo } from "react";
|
|
3
|
-
|
|
4
|
-
import { useCollapsedGroups, buildCollapsedDefaults, useLargeLayout, useAdminModeController, useAuthController, useModeController, useTranslation, useSlot, useRebaseContext, useAnalyticsController, useRebaseRegistry, useComponentOverride } from "@rebasepro/app";
|
|
5
|
-
import { useUrlController } from "../hooks/navigation/contexts/UrlContext";
|
|
6
|
-
import { useNavigationStateController } from "../hooks/navigation/contexts/NavigationStateContext";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
import { Link, useNavigate } from "react-router";
|
|
10
|
-
import { AnalyticsEvent } from "@rebasepro/cms-types";
|
|
11
|
-
import {
|
|
12
|
-
Avatar,
|
|
13
|
-
ChevronsLeftIcon,
|
|
14
|
-
ChevronsRightIcon,
|
|
15
|
-
cls,
|
|
16
|
-
iconSize,
|
|
17
|
-
IconButton,
|
|
18
|
-
LanguagesIcon,
|
|
19
|
-
LogOutIcon,
|
|
20
|
-
Menu,
|
|
21
|
-
MenuItem,
|
|
22
|
-
MoonIcon,
|
|
23
|
-
Separator,
|
|
24
|
-
SettingsIcon,
|
|
25
|
-
Skeleton,
|
|
26
|
-
SunIcon,
|
|
27
|
-
SunMoonIcon,
|
|
28
|
-
Tooltip,
|
|
29
|
-
Typography
|
|
30
|
-
} from "@rebasepro/ui";
|
|
31
|
-
import { DrawerNavigationGroup } from "./DrawerNavigationGroup";
|
|
32
|
-
import { LanguageToggle, RebaseLogo } from "@rebasepro/app";
|
|
33
|
-
import { useApp } from "./app/useApp";
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Default drawer used in the admin.
|
|
37
|
-
*
|
|
38
|
-
* When no `children` are provided, renders the full admin navigation
|
|
39
|
-
* (collection groups, mode switch, plugin slots).
|
|
40
|
-
*
|
|
41
|
-
* When `children` **are** provided, renders the shared drawer shell
|
|
42
|
-
* (logo, scrollable area, footer actions, collapse toggle) with the
|
|
43
|
-
* custom content injected in the scrollable area. This lets consumers
|
|
44
|
-
* like the SaaS dashboard reuse the identical structural layout while
|
|
45
|
-
* supplying their own navigation items.
|
|
46
|
-
*
|
|
47
|
-
* @group Core
|
|
48
|
-
*/
|
|
49
|
-
export function DefaultDrawer({
|
|
50
|
-
title,
|
|
51
|
-
logo,
|
|
52
|
-
logoDestination,
|
|
53
|
-
children,
|
|
54
|
-
footerActions,
|
|
55
|
-
className,
|
|
56
|
-
style
|
|
57
|
-
}: {
|
|
58
|
-
title?: React.ReactNode;
|
|
59
|
-
logo?: string;
|
|
60
|
-
logoDestination?: string;
|
|
61
|
-
/**
|
|
62
|
-
* Custom navigation content for the drawer.
|
|
63
|
-
* When provided, replaces the default admin navigation (collection groups,
|
|
64
|
-
* mode switch, slots). The shared shell (logo, scroll area, footer
|
|
65
|
-
* actions, collapse toggle) is still rendered around it.
|
|
66
|
-
*/
|
|
67
|
-
children?: React.ReactNode;
|
|
68
|
-
/**
|
|
69
|
-
* Custom content for the drawer footer actions area (language, theme, user menu).
|
|
70
|
-
* - `undefined` — renders the default `DrawerFooterActions`.
|
|
71
|
-
* - `null` — renders nothing (hides the footer actions).
|
|
72
|
-
* - `ReactNode` — renders the provided custom content.
|
|
73
|
-
*/
|
|
74
|
-
footerActions?: React.ReactNode | null;
|
|
75
|
-
className?: string;
|
|
76
|
-
style?: React.CSSProperties;
|
|
77
|
-
}) {
|
|
78
|
-
|
|
79
|
-
const {
|
|
80
|
-
drawerHovered,
|
|
81
|
-
drawerOpen,
|
|
82
|
-
openDrawer,
|
|
83
|
-
closeDrawer,
|
|
84
|
-
logo: appLogo
|
|
85
|
-
} = useApp();
|
|
86
|
-
|
|
87
|
-
const resolvedLogo = logo ?? appLogo;
|
|
88
|
-
|
|
89
|
-
const scrollRef = React.useRef<HTMLDivElement>(null);
|
|
90
|
-
const [scrolled, setScrolled] = React.useState(false);
|
|
91
|
-
|
|
92
|
-
const handleScroll = () => {
|
|
93
|
-
if (scrollRef.current) {
|
|
94
|
-
setScrolled(scrollRef.current.scrollTop > 0);
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
return (
|
|
99
|
-
<div role="navigation" aria-label="Main navigation" className={cls("flex flex-col h-full relative grow w-full", className)} style={style}>
|
|
100
|
-
|
|
101
|
-
<DrawerLogo
|
|
102
|
-
logo={resolvedLogo}
|
|
103
|
-
title={title}
|
|
104
|
-
logoDestination={logoDestination}
|
|
105
|
-
drawerOpen={drawerOpen}
|
|
106
|
-
drawerHovered={drawerHovered}
|
|
107
|
-
/>
|
|
108
|
-
|
|
109
|
-
<div
|
|
110
|
-
ref={scrollRef}
|
|
111
|
-
onScroll={handleScroll}
|
|
112
|
-
className={"flex-grow min-h-0 overflow-y-auto overflow-x-hidden no-scrollbar px-2"}
|
|
113
|
-
style={{
|
|
114
|
-
maskImage: scrolled
|
|
115
|
-
? "linear-gradient(to bottom, transparent 0, black 20px, black calc(100% - 20px), transparent 100%)"
|
|
116
|
-
: "linear-gradient(to bottom, black 0, black calc(100% - 20px), transparent 100%)"
|
|
117
|
-
}}>
|
|
118
|
-
{children ?? <AdminNavigationContent />}
|
|
119
|
-
</div>
|
|
120
|
-
|
|
121
|
-
{footerActions !== null && (
|
|
122
|
-
footerActions !== undefined
|
|
123
|
-
? footerActions
|
|
124
|
-
: <DrawerFooterActions
|
|
125
|
-
drawerOpen={drawerOpen}
|
|
126
|
-
drawerHovered={drawerHovered}
|
|
127
|
-
/>
|
|
128
|
-
)}
|
|
129
|
-
|
|
130
|
-
<DrawerToggle
|
|
131
|
-
drawerOpen={drawerOpen}
|
|
132
|
-
drawerHovered={drawerHovered}
|
|
133
|
-
openDrawer={openDrawer}
|
|
134
|
-
closeDrawer={closeDrawer}
|
|
135
|
-
/>
|
|
136
|
-
</div>
|
|
137
|
-
);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Default admin navigation content — rendered inside DefaultDrawer when no
|
|
142
|
-
* custom `children` are provided. Contains the mode switch, navigation
|
|
143
|
-
* groups, and header / footer plugin slots.
|
|
144
|
-
*/
|
|
145
|
-
function AdminNavigationContent() {
|
|
146
|
-
|
|
147
|
-
const {
|
|
148
|
-
drawerHovered,
|
|
149
|
-
drawerOpen,
|
|
150
|
-
closeDrawer,
|
|
151
|
-
closeHover
|
|
152
|
-
} = useApp();
|
|
153
|
-
|
|
154
|
-
const analyticsController = useAnalyticsController();
|
|
155
|
-
const navigationState = useNavigationStateController();
|
|
156
|
-
const context = useRebaseContext();
|
|
157
|
-
|
|
158
|
-
const largeLayout = useLargeLayout();
|
|
159
|
-
const adminModeController = useAdminModeController();
|
|
160
|
-
const registry = useRebaseRegistry();
|
|
161
|
-
const ResolvedDrawerNavigationGroup = useComponentOverride("Shell.DrawerNavigationGroup", DrawerNavigationGroup);
|
|
162
|
-
|
|
163
|
-
const allNavigationEntries = navigationState.topLevelNavigation?.navigationEntries ?? [];
|
|
164
|
-
|
|
165
|
-
// Build a set of Studio-only dev view slugs so we can distinguish them from
|
|
166
|
-
// admin custom views added via <RebaseCMS views={...}> or plugins.
|
|
167
|
-
const studioViewSlugs = useMemo(() => {
|
|
168
|
-
const slugs = new Set<string>();
|
|
169
|
-
(registry.studioConfig?.devViews ?? []).forEach(v => slugs.add(v.slug));
|
|
170
|
-
// The schema view is also a Studio dev view (auto-injected when collectionEditor is enabled)
|
|
171
|
-
if (registry.studioConfig && registry.cmsConfig?.collectionEditor) slugs.add("schema");
|
|
172
|
-
return slugs;
|
|
173
|
-
}, [registry.studioConfig, registry.cmsConfig?.collectionEditor]);
|
|
174
|
-
|
|
175
|
-
// Studio mode shows Studio dev views + admin entries (Users/Roles).
|
|
176
|
-
// Content mode shows collections, admin custom views, and admin entries — but not Studio dev views.
|
|
177
|
-
const filteredEntries = adminModeController.mode === "studio"
|
|
178
|
-
? allNavigationEntries.filter(e => (e.type === "view" && studioViewSlugs.has(e.slug)) || e.type === "admin")
|
|
179
|
-
: allNavigationEntries.filter(e => e.type !== "view" || !studioViewSlugs.has(e.slug));
|
|
180
|
-
|
|
181
|
-
// Derive groups from the filtered entries, preserving the order from topLevelNavigation.groups
|
|
182
|
-
const entryGroups = new Set(filteredEntries.map(e => e.group).filter(Boolean));
|
|
183
|
-
const orderedGroups = navigationState.topLevelNavigation?.groups ?? [];
|
|
184
|
-
const groupsToRender = [
|
|
185
|
-
...orderedGroups.filter(g => entryGroups.has(g)),
|
|
186
|
-
...[...entryGroups].filter(g => !orderedGroups.includes(g))
|
|
187
|
-
];
|
|
188
|
-
|
|
189
|
-
// Group header icons, declared on `navigationGroupMappings`. Keyed by name
|
|
190
|
-
// because that is what a navigation entry's `group` holds.
|
|
191
|
-
const groupIcons = useMemo(() => {
|
|
192
|
-
const icons = new Map<string, string>();
|
|
193
|
-
(registry.cmsConfig?.navigationGroupMappings ?? []).forEach(mapping => {
|
|
194
|
-
if (mapping.icon) icons.set(mapping.name, mapping.icon);
|
|
195
|
-
});
|
|
196
|
-
return icons;
|
|
197
|
-
}, [registry.cmsConfig?.navigationGroupMappings]);
|
|
198
|
-
|
|
199
|
-
// Collapsible groups state - using "drawer" namespace for independent state from home page
|
|
200
|
-
const collapsedDefaults = useMemo(
|
|
201
|
-
() => buildCollapsedDefaults(registry.cmsConfig?.navigationGroupMappings, "drawer"),
|
|
202
|
-
[registry.cmsConfig?.navigationGroupMappings]
|
|
203
|
-
);
|
|
204
|
-
const { isGroupCollapsed, toggleGroupCollapsed } = useCollapsedGroups(groupsToRender, "drawer", collapsedDefaults);
|
|
205
|
-
|
|
206
|
-
const headerSlot = useSlot("navigation.header", { drawerOpen,
|
|
207
|
-
drawerHovered,
|
|
208
|
-
context });
|
|
209
|
-
const footerSlot = useSlot("navigation.footer", { drawerOpen,
|
|
210
|
-
drawerHovered,
|
|
211
|
-
context });
|
|
212
|
-
|
|
213
|
-
if (!navigationState.topLevelNavigation)
|
|
214
|
-
return null;
|
|
215
|
-
|
|
216
|
-
const onItemClick = (view: NavigationEntry) => {
|
|
217
|
-
const eventName: AnalyticsEvent = view.type === "collection"
|
|
218
|
-
? "drawer_navigate_to_collection"
|
|
219
|
-
: (view.type === "view" ? "drawer_navigate_to_view" : "unmapped_event");
|
|
220
|
-
analyticsController.onAnalyticsEvent?.(eventName, { url: view.url });
|
|
221
|
-
if (!largeLayout) {
|
|
222
|
-
closeDrawer();
|
|
223
|
-
} else if (!drawerOpen) {
|
|
224
|
-
closeHover();
|
|
225
|
-
}
|
|
226
|
-
};
|
|
227
|
-
|
|
228
|
-
const drawerVisuallyOpen = drawerOpen || drawerHovered;
|
|
229
|
-
|
|
230
|
-
return (
|
|
231
|
-
<>
|
|
232
|
-
{registry.studioConfig && (
|
|
233
|
-
<DrawerModeSwitch
|
|
234
|
-
drawerOpen={drawerOpen}
|
|
235
|
-
drawerHovered={drawerHovered}
|
|
236
|
-
/>
|
|
237
|
-
)}
|
|
238
|
-
|
|
239
|
-
{headerSlot}
|
|
240
|
-
|
|
241
|
-
{groupsToRender.map((group) => {
|
|
242
|
-
const entriesInGroup = filteredEntries.filter(e => e.group === group);
|
|
243
|
-
return (
|
|
244
|
-
<ResolvedDrawerNavigationGroup
|
|
245
|
-
key={`drawer_group_${group}`}
|
|
246
|
-
group={group}
|
|
247
|
-
entries={entriesInGroup}
|
|
248
|
-
collapsed={isGroupCollapsed(group)}
|
|
249
|
-
onToggleCollapsed={() => toggleGroupCollapsed(group)}
|
|
250
|
-
drawerOpen={drawerVisuallyOpen}
|
|
251
|
-
onItemClick={onItemClick}
|
|
252
|
-
icon={groupIcons.get(group)}
|
|
253
|
-
/>
|
|
254
|
-
);
|
|
255
|
-
})}
|
|
256
|
-
|
|
257
|
-
{footerSlot}
|
|
258
|
-
</>
|
|
259
|
-
);
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
export function DrawerLogo({
|
|
263
|
-
logo,
|
|
264
|
-
title,
|
|
265
|
-
logoDestination = "/",
|
|
266
|
-
drawerOpen,
|
|
267
|
-
drawerHovered
|
|
268
|
-
}: {
|
|
269
|
-
logo?: string;
|
|
270
|
-
title?: React.ReactNode;
|
|
271
|
-
logoDestination?: string;
|
|
272
|
-
drawerOpen: boolean;
|
|
273
|
-
drawerHovered: boolean;
|
|
274
|
-
}) {
|
|
275
|
-
|
|
276
|
-
const showFullContent = drawerOpen || drawerHovered;
|
|
277
|
-
const { t } = useTranslation();
|
|
278
|
-
|
|
279
|
-
return (
|
|
280
|
-
<div className="flex flex-row items-center shrink-0 pt-4 pb-0 px-2">
|
|
281
|
-
{/* Logo — always visible */}
|
|
282
|
-
{/* Named explicitly because neither branch below carries text: the
|
|
283
|
-
stock `RebaseLogo` is a bare <svg> with no <title>, and a custom
|
|
284
|
-
`logo` only ever gets the generic alt "Logo", which names the image
|
|
285
|
-
rather than saying where the link goes. The title link beside it is
|
|
286
|
-
no help either — it renders only when a `title` is set. */}
|
|
287
|
-
<Link
|
|
288
|
-
className="shrink-0 flex items-center justify-center w-[56px] h-[40px]"
|
|
289
|
-
to={logoDestination}
|
|
290
|
-
aria-label={t("home") || "Home"}
|
|
291
|
-
>
|
|
292
|
-
{logo
|
|
293
|
-
? <img src={logo} alt="Logo" className="w-[28px] h-[28px] object-contain"/>
|
|
294
|
-
: <RebaseLogo width="28px" height="28px"/>
|
|
295
|
-
}
|
|
296
|
-
</Link>
|
|
297
|
-
|
|
298
|
-
{/* Title (fades in when expanded or hovered) */}
|
|
299
|
-
<div
|
|
300
|
-
className={cls(
|
|
301
|
-
"flex flex-row items-center overflow-hidden transition-all duration-200 ease-in-out",
|
|
302
|
-
showFullContent ? "opacity-100 w-full ml-1" : "opacity-0 w-0 ml-0"
|
|
303
|
-
)}
|
|
304
|
-
>
|
|
305
|
-
{title && (
|
|
306
|
-
<Link
|
|
307
|
-
className="visited:text-inherit dark:visited:text-inherit block truncate"
|
|
308
|
-
to={logoDestination}
|
|
309
|
-
>
|
|
310
|
-
{typeof title === "string"
|
|
311
|
-
? <Typography variant="subtitle1" noWrap className="truncate">{title}</Typography>
|
|
312
|
-
: title
|
|
313
|
-
}
|
|
314
|
-
</Link>
|
|
315
|
-
)}
|
|
316
|
-
</div>
|
|
317
|
-
</div>
|
|
318
|
-
);
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
/**
|
|
322
|
-
* Toggle button at the bottom of the drawer.
|
|
323
|
-
* Uses double-chevron icons to indicate collapse/expand direction.
|
|
324
|
-
*/
|
|
325
|
-
export function DrawerToggle({
|
|
326
|
-
drawerOpen,
|
|
327
|
-
drawerHovered,
|
|
328
|
-
openDrawer,
|
|
329
|
-
closeDrawer
|
|
330
|
-
}: {
|
|
331
|
-
drawerOpen: boolean;
|
|
332
|
-
drawerHovered: boolean;
|
|
333
|
-
openDrawer: () => void;
|
|
334
|
-
closeDrawer: () => void;
|
|
335
|
-
}) {
|
|
336
|
-
const isExpanded = drawerOpen;
|
|
337
|
-
const isHovered = drawerHovered && !drawerOpen;
|
|
338
|
-
const showFullContent = isExpanded || isHovered;
|
|
339
|
-
|
|
340
|
-
const [wantsTooltip, setWantsTooltip] = React.useState(false);
|
|
341
|
-
// See {@link DrawerNavigationItem}: a masked tooltip never hears the pointer
|
|
342
|
-
// leave, so the stale state is dropped as the mask goes on.
|
|
343
|
-
if (showFullContent && wantsTooltip) setWantsTooltip(false);
|
|
344
|
-
|
|
345
|
-
const { t } = useTranslation();
|
|
346
|
-
|
|
347
|
-
return (
|
|
348
|
-
<div className="shrink-0 mt-auto px-4 pt-0.5 pb-2">
|
|
349
|
-
<Tooltip
|
|
350
|
-
title={isExpanded ? t("collapse") : t("expand")}
|
|
351
|
-
// The row spells out "Collapse"/"Expand" itself whenever it is wide
|
|
352
|
-
// enough to show the label — expanded, or floating open under the
|
|
353
|
-
// pointer. A tooltip repeating that word is noise; it earns its
|
|
354
|
-
// place only on a bare rail, where the chevron stands alone.
|
|
355
|
-
//
|
|
356
|
-
// Masked, not withheld: see {@link DrawerNavigationItem} for why
|
|
357
|
-
// this stays controlled in both states.
|
|
358
|
-
open={!showFullContent && wantsTooltip}
|
|
359
|
-
onOpenChange={setWantsTooltip}
|
|
360
|
-
side="right"
|
|
361
|
-
sideOffset={12}
|
|
362
|
-
asChild={true}
|
|
363
|
-
>
|
|
364
|
-
<button
|
|
365
|
-
type="button"
|
|
366
|
-
className={cls(
|
|
367
|
-
"flex flex-row items-center rounded-lg cursor-pointer w-full",
|
|
368
|
-
"hover:bg-surface-accent-100 dark:hover:bg-surface-800",
|
|
369
|
-
"transition-colors duration-150",
|
|
370
|
-
"py-2"
|
|
371
|
-
)}
|
|
372
|
-
aria-expanded={isExpanded}
|
|
373
|
-
aria-label={isExpanded ? t("collapse") : t("expand")}
|
|
374
|
-
onClick={() => isExpanded ? closeDrawer() : openDrawer()}
|
|
375
|
-
>
|
|
376
|
-
<div className="shrink-0 flex items-center justify-center w-[44px] h-[24px] text-surface-500 dark:text-surface-400">
|
|
377
|
-
{isExpanded
|
|
378
|
-
? <ChevronsLeftIcon size={iconSize.small}/>
|
|
379
|
-
: <ChevronsRightIcon size={iconSize.small}/>
|
|
380
|
-
}
|
|
381
|
-
</div>
|
|
382
|
-
<div className={cls(
|
|
383
|
-
"overflow-hidden transition-all duration-200 ease-in-out",
|
|
384
|
-
showFullContent ? "opacity-100 w-auto" : "opacity-0 w-0"
|
|
385
|
-
)}>
|
|
386
|
-
<Typography
|
|
387
|
-
variant="body2"
|
|
388
|
-
className="text-surface-500 dark:text-surface-400 select-none whitespace-nowrap"
|
|
389
|
-
>
|
|
390
|
-
{isExpanded ? t("collapse") : t("expand")}
|
|
391
|
-
</Typography>
|
|
392
|
-
</div>
|
|
393
|
-
</button>
|
|
394
|
-
</Tooltip>
|
|
395
|
-
</div>
|
|
396
|
-
);
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
/**
|
|
400
|
-
* Segmented Content / Studio switch rendered inside the drawer.
|
|
401
|
-
* Animates in/out with the drawer open state via opacity + max-height.
|
|
402
|
-
*/
|
|
403
|
-
function DrawerModeSwitch({
|
|
404
|
-
drawerOpen,
|
|
405
|
-
drawerHovered
|
|
406
|
-
}: {
|
|
407
|
-
drawerOpen: boolean;
|
|
408
|
-
drawerHovered: boolean;
|
|
409
|
-
}) {
|
|
410
|
-
const adminModeController = useAdminModeController();
|
|
411
|
-
const urlController = useUrlController();
|
|
412
|
-
const navigate = useNavigate();
|
|
413
|
-
const showSwitch = drawerOpen || drawerHovered;
|
|
414
|
-
|
|
415
|
-
return (
|
|
416
|
-
<div
|
|
417
|
-
className={cls(
|
|
418
|
-
"shrink-0 overflow-hidden transition-all duration-200 ease-in-out px-3",
|
|
419
|
-
showSwitch ? "opacity-100 h-7 mt-2 mb-0" : "opacity-0 pointer-events-none h-7 mt-2 mb-0"
|
|
420
|
-
)}
|
|
421
|
-
>
|
|
422
|
-
<div role="group" aria-label="Panel mode" className="flex bg-surface-100 dark:bg-surface-900 rounded-lg p-0.5 border border-surface-200 dark:border-surface-700/60">
|
|
423
|
-
<button
|
|
424
|
-
onClick={() => {
|
|
425
|
-
adminModeController.setMode("cms");
|
|
426
|
-
navigate(urlController.basePath ?? "/");
|
|
427
|
-
}}
|
|
428
|
-
aria-pressed={adminModeController.mode === "cms"}
|
|
429
|
-
className={cls(
|
|
430
|
-
"flex-1 px-3 py-0.5 text-xs font-semibold rounded-md transition-all text-center",
|
|
431
|
-
adminModeController.mode === "cms"
|
|
432
|
-
? "bg-white dark:bg-surface-800 shadow-sm text-primary dark:text-primary-400"
|
|
433
|
-
: "text-surface-500 hover:text-surface-900 dark:hover:text-white"
|
|
434
|
-
)}
|
|
435
|
-
>
|
|
436
|
-
CMS
|
|
437
|
-
</button>
|
|
438
|
-
<button
|
|
439
|
-
onClick={() => {
|
|
440
|
-
adminModeController.setMode("studio");
|
|
441
|
-
navigate(urlController.basePath === "/" ? "/s" : `${urlController.basePath ?? ""}/s`);
|
|
442
|
-
}}
|
|
443
|
-
aria-pressed={adminModeController.mode === "studio"}
|
|
444
|
-
className={cls(
|
|
445
|
-
"flex-1 px-3 py-0.5 text-xs font-semibold rounded-md transition-all text-center",
|
|
446
|
-
adminModeController.mode === "studio"
|
|
447
|
-
? "bg-white dark:bg-surface-800 shadow-sm text-primary dark:text-primary-400"
|
|
448
|
-
: "text-surface-500 hover:text-surface-900 dark:hover:text-white"
|
|
449
|
-
)}
|
|
450
|
-
>
|
|
451
|
-
Studio
|
|
452
|
-
</button>
|
|
453
|
-
</div>
|
|
454
|
-
</div>
|
|
455
|
-
);
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
/**
|
|
459
|
-
* Footer actions rendered at the bottom of the drawer, above the collapse/expand toggle.
|
|
460
|
-
* Replaces the app bar icons (language, theme, user avatar) with a drawer-native layout
|
|
461
|
-
* that adapts between collapsed (icons only) and expanded (full labels + user bar) states.
|
|
462
|
-
*
|
|
463
|
-
* @group Core
|
|
464
|
-
*/
|
|
465
|
-
export function DrawerFooterActions({
|
|
466
|
-
drawerOpen,
|
|
467
|
-
drawerHovered,
|
|
468
|
-
/**
|
|
469
|
-
* Custom content to render inside the user dropdown menu.
|
|
470
|
-
* When provided, these items are appended after the user info header
|
|
471
|
-
* and before the default Sign Out item.
|
|
472
|
-
*/
|
|
473
|
-
dropDownActions,
|
|
474
|
-
/**
|
|
475
|
-
* Override the user object displayed in the footer.
|
|
476
|
-
* When omitted, falls back to `authController.user`.
|
|
477
|
-
*/
|
|
478
|
-
user: userProp
|
|
479
|
-
}: {
|
|
480
|
-
drawerOpen: boolean;
|
|
481
|
-
drawerHovered: boolean;
|
|
482
|
-
dropDownActions?: React.ReactNode;
|
|
483
|
-
user?: import("@rebasepro/types").User;
|
|
484
|
-
}) {
|
|
485
|
-
const authController = useAuthController();
|
|
486
|
-
const {
|
|
487
|
-
mode,
|
|
488
|
-
setMode
|
|
489
|
-
} = useModeController();
|
|
490
|
-
const navigate = useNavigate();
|
|
491
|
-
const { t } = useTranslation();
|
|
492
|
-
|
|
493
|
-
const user = userProp ?? authController.user;
|
|
494
|
-
const showFullContent = drawerOpen || drawerHovered;
|
|
495
|
-
const isFloating = drawerHovered && !drawerOpen;
|
|
496
|
-
const portalRef = React.useRef<HTMLDivElement>(null);
|
|
497
|
-
|
|
498
|
-
// User avatar
|
|
499
|
-
let avatarComponent: React.ReactElement | null;
|
|
500
|
-
if (user) {
|
|
501
|
-
const initial = user?.displayName
|
|
502
|
-
? user.displayName[0].toUpperCase()
|
|
503
|
-
: (user?.email ? user.email[0].toUpperCase() : "A");
|
|
504
|
-
avatarComponent = <Avatar src={user.photoURL ?? undefined} className="w-8 h-8 text-xs">
|
|
505
|
-
{initial}
|
|
506
|
-
</Avatar>;
|
|
507
|
-
} else if (user === undefined || authController.initialLoading) {
|
|
508
|
-
avatarComponent = <Skeleton className="w-8 h-8 rounded-full"/>;
|
|
509
|
-
} else {
|
|
510
|
-
avatarComponent = null;
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
return (
|
|
514
|
-
<div className="shrink-0 pt-2 pb-0" ref={portalRef}>
|
|
515
|
-
{avatarComponent && (
|
|
516
|
-
<div className="flex items-center px-[16px] py-1">
|
|
517
|
-
<Menu
|
|
518
|
-
trigger={
|
|
519
|
-
<div
|
|
520
|
-
className={cls(
|
|
521
|
-
"shrink-0 flex items-center justify-center w-[44px] cursor-pointer",
|
|
522
|
-
"rounded-md py-1",
|
|
523
|
-
"hover:bg-surface-accent-100 dark:hover:bg-surface-800",
|
|
524
|
-
"transition-colors duration-150"
|
|
525
|
-
)}
|
|
526
|
-
role="button"
|
|
527
|
-
tabIndex={0}
|
|
528
|
-
aria-label={t("user_menu") || "User menu"}
|
|
529
|
-
>
|
|
530
|
-
{avatarComponent}
|
|
531
|
-
</div>
|
|
532
|
-
}
|
|
533
|
-
side="top"
|
|
534
|
-
align="start"
|
|
535
|
-
>
|
|
536
|
-
{user && <div className="px-4 py-2 mb-1">
|
|
537
|
-
{user.displayName && <Typography variant="body1" color="secondary">
|
|
538
|
-
{user.displayName}
|
|
539
|
-
</Typography>}
|
|
540
|
-
{user.email && <Typography variant="body2" color="secondary">
|
|
541
|
-
{user.email}
|
|
542
|
-
</Typography>}
|
|
543
|
-
</div>}
|
|
544
|
-
|
|
545
|
-
{dropDownActions}
|
|
546
|
-
|
|
547
|
-
{!dropDownActions && <>
|
|
548
|
-
<MenuItem onClick={() => navigate("/settings")}>
|
|
549
|
-
<SettingsIcon/>
|
|
550
|
-
{t("account_settings")}
|
|
551
|
-
</MenuItem>
|
|
552
|
-
<MenuItem onClick={async () => {
|
|
553
|
-
await authController.signOut();
|
|
554
|
-
navigate("/");
|
|
555
|
-
}}>
|
|
556
|
-
<LogOutIcon/>
|
|
557
|
-
{t("log_out")}
|
|
558
|
-
</MenuItem>
|
|
559
|
-
</>}
|
|
560
|
-
</Menu>
|
|
561
|
-
|
|
562
|
-
{/* Language + Theme — only when expanded */}
|
|
563
|
-
{showFullContent && (
|
|
564
|
-
<div className="flex items-center gap-0">
|
|
565
|
-
<LanguageToggle/>
|
|
566
|
-
<Menu
|
|
567
|
-
trigger={
|
|
568
|
-
<IconButton
|
|
569
|
-
color="inherit"
|
|
570
|
-
aria-label={t("toggle_theme") || "Toggle theme"}
|
|
571
|
-
className="text-surface-500 dark:text-surface-400"
|
|
572
|
-
>
|
|
573
|
-
{mode === "dark"
|
|
574
|
-
? <MoonIcon size={iconSize.small}/>
|
|
575
|
-
: mode === "light"
|
|
576
|
-
? <SunIcon size={iconSize.small}/>
|
|
577
|
-
: <SunMoonIcon size={iconSize.small}/>}
|
|
578
|
-
</IconButton>
|
|
579
|
-
}
|
|
580
|
-
portalContainer={portalRef.current}
|
|
581
|
-
side="top"
|
|
582
|
-
>
|
|
583
|
-
<MenuItem onClick={() => setMode("dark")}><MoonIcon size={iconSize.smallest}/> {t("dark_mode")}</MenuItem>
|
|
584
|
-
<MenuItem onClick={() => setMode("light")}><SunIcon size={iconSize.smallest}/> {t("light_mode")}</MenuItem>
|
|
585
|
-
<MenuItem onClick={() => setMode("system")}><SunMoonIcon size={iconSize.smallest}/> {t("system_mode")}</MenuItem>
|
|
586
|
-
</Menu>
|
|
587
|
-
</div>
|
|
588
|
-
)}
|
|
589
|
-
</div>
|
|
590
|
-
)}
|
|
591
|
-
</div>
|
|
592
|
-
);
|
|
593
|
-
}
|