@object-ui/app-shell 6.2.2 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +967 -0
- package/README.md +292 -0
- package/dist/assistant/assistantBus.d.ts +72 -0
- package/dist/assistant/assistantBus.js +133 -0
- package/dist/chrome/CommandPalette.d.ts +1 -1
- package/dist/chrome/CommandPalette.js +26 -22
- package/dist/chrome/ConditionalAuthWrapper.d.ts +1 -1
- package/dist/chrome/ConsoleToaster.d.ts +1 -1
- package/dist/chrome/ConsoleToaster.js +3 -1
- package/dist/chrome/ErrorBoundary.d.ts +1 -1
- package/dist/chrome/KeyboardShortcutsDialog.d.ts +1 -1
- package/dist/chrome/KeyboardShortcutsDialog.js +16 -5
- package/dist/chrome/LoadingScreen.d.ts +1 -1
- package/dist/chrome/LoadingScreen.js +22 -26
- package/dist/chrome/RouteFader.d.ts +1 -1
- package/dist/chrome/ThemeProvider.d.ts +1 -1
- package/dist/components/ManagedByBadge.d.ts +1 -1
- package/dist/console/AppContent.d.ts +1 -1
- package/dist/console/AppContent.js +170 -37
- package/dist/console/ConsoleShell.d.ts +7 -7
- package/dist/console/ConsoleShell.js +32 -3
- package/dist/console/ai/AiChatPage.d.ts +88 -1
- package/dist/console/ai/AiChatPage.js +743 -66
- package/dist/console/ai/ConversationsSidebar.d.ts +26 -1
- package/dist/console/ai/ConversationsSidebar.js +149 -34
- package/dist/console/ai/LiveCanvas.d.ts +22 -0
- package/dist/console/ai/LiveCanvas.js +78 -0
- package/dist/console/ai/reconcileTurn.d.ts +8 -0
- package/dist/console/ai/reconcileTurn.js +20 -0
- package/dist/console/auth/AuthPageLayout.d.ts +1 -1
- package/dist/console/auth/ForgotPasswordPage.d.ts +1 -1
- package/dist/console/auth/LoginPage.d.ts +1 -1
- package/dist/console/auth/RegisterPage.d.ts +1 -1
- package/dist/console/auth/RegisterPage.js +23 -3
- package/dist/console/cloud-connection/CloudConnectionPanel.d.ts +1 -0
- package/dist/console/cloud-connection/CloudConnectionPanel.js +169 -0
- package/dist/console/home/AppCard.d.ts +1 -1
- package/dist/console/home/AppCard.js +6 -12
- package/dist/console/home/HomeAppsStrip.d.ts +8 -0
- package/dist/console/home/HomeAppsStrip.js +61 -0
- package/dist/console/home/HomeLayout.d.ts +1 -1
- package/dist/console/home/HomeLayout.js +3 -1
- package/dist/console/home/HomePage.d.ts +1 -2
- package/dist/console/home/HomePage.js +149 -21
- package/dist/console/home/HomeRail.d.ts +22 -0
- package/dist/console/home/HomeRail.js +62 -0
- package/dist/console/home/QuickActions.d.ts +1 -1
- package/dist/console/home/QuickActions.js +3 -11
- package/dist/console/home/RecentApps.d.ts +1 -1
- package/dist/console/home/RecentApps.js +2 -2
- package/dist/console/home/StarredApps.d.ts +1 -1
- package/dist/console/home/StarredApps.js +2 -2
- package/dist/console/marketplace/InstalledListWidget.d.ts +1 -0
- package/dist/console/marketplace/InstalledListWidget.js +93 -0
- package/dist/console/marketplace/MarkdownText.d.ts +1 -1
- package/dist/console/marketplace/MarketplaceAccessDenied.d.ts +1 -1
- package/dist/console/marketplace/MarketplaceInstalledPage.d.ts +8 -14
- package/dist/console/marketplace/MarketplaceInstalledPage.js +14 -66
- package/dist/console/marketplace/MarketplacePackagePage.d.ts +1 -1
- package/dist/console/marketplace/MarketplacePackagePage.js +249 -8
- package/dist/console/marketplace/MarketplacePage.d.ts +1 -1
- package/dist/console/marketplace/MarketplacePage.js +60 -3
- package/dist/console/marketplace/PackageIcon.d.ts +1 -1
- package/dist/console/marketplace/PluginDisclosure.d.ts +14 -0
- package/dist/console/marketplace/PluginDisclosure.js +38 -0
- package/dist/console/marketplace/marketplaceApi.d.ts +123 -0
- package/dist/console/marketplace/marketplaceApi.js +254 -1
- package/dist/console/organizations/CreateWorkspaceDialog.d.ts +1 -1
- package/dist/console/organizations/OrganizationsLayout.d.ts +1 -1
- package/dist/console/organizations/OrganizationsPage.d.ts +1 -1
- package/dist/console/organizations/manage/AcceptInvitationPage.d.ts +1 -1
- package/dist/console/organizations/manage/InvitationsPage.d.ts +1 -1
- package/dist/console/organizations/manage/InviteMemberDialog.d.ts +1 -1
- package/dist/console/organizations/manage/MembersPage.d.ts +1 -1
- package/dist/console/organizations/manage/OrganizationLayout.d.ts +1 -1
- package/dist/console/organizations/manage/SettingsPage.d.ts +1 -1
- package/dist/context/CommandPaletteProvider.d.ts +44 -0
- package/dist/context/CommandPaletteProvider.js +71 -0
- package/dist/context/FavoritesProvider.d.ts +1 -1
- package/dist/context/NavigationContext.d.ts +1 -1
- package/dist/context/RecentItemsProvider.d.ts +2 -2
- package/dist/context/UserStateAdapters.d.ts +1 -1
- package/dist/context/index.d.ts +2 -0
- package/dist/context/index.js +1 -0
- package/dist/hooks/index.d.ts +5 -2
- package/dist/hooks/index.js +4 -1
- package/dist/hooks/useActionModal.d.ts +53 -0
- package/dist/hooks/useActionModal.js +111 -0
- package/dist/hooks/useChatConversation.d.ts +107 -4
- package/dist/hooks/useChatConversation.js +253 -25
- package/dist/hooks/useConsoleActionRuntime.d.ts +70 -0
- package/dist/hooks/useConsoleActionRuntime.js +560 -0
- package/dist/hooks/useConversationList.js +61 -3
- package/dist/hooks/useHomeInbox.d.ts +13 -0
- package/dist/hooks/useHomeInbox.js +142 -0
- package/dist/hooks/useNavPins.js +17 -23
- package/dist/hooks/useNavigationSync.d.ts +33 -0
- package/dist/hooks/useNavigationSync.js +98 -12
- package/dist/hooks/useReconcileOnError.d.ts +40 -0
- package/dist/hooks/useReconcileOnError.js +37 -0
- package/dist/hooks/useRecordApprovals.d.ts +18 -19
- package/dist/hooks/useRecordApprovals.js +24 -40
- package/dist/hooks/useResponsiveSidebar.js +14 -5
- package/dist/hooks/useSettleSignal.d.ts +19 -0
- package/dist/hooks/useSettleSignal.js +20 -0
- package/dist/hooks/useTrackRouteAsRecent.js +35 -0
- package/dist/hooks/useUrlOverlay.d.ts +62 -0
- package/dist/hooks/useUrlOverlay.js +88 -0
- package/dist/index.d.ts +16 -7
- package/dist/index.js +12 -4
- package/dist/layout/ActivityFeed.d.ts +1 -1
- package/dist/layout/AppHeader.d.ts +3 -2
- package/dist/layout/AppHeader.js +237 -72
- package/dist/layout/AppSidebar.d.ts +2 -1
- package/dist/layout/AppSidebar.js +26 -46
- package/dist/layout/AppSwitcher.d.ts +2 -1
- package/dist/layout/AppSwitcher.js +9 -5
- package/dist/layout/AuthPageLayout.d.ts +1 -1
- package/dist/layout/ConnectionStatus.d.ts +1 -1
- package/dist/layout/ConnectionStatus.js +9 -6
- package/dist/layout/ConsoleChatbotFab.d.ts +19 -1
- package/dist/layout/ConsoleChatbotFab.js +16 -2
- package/dist/layout/ConsoleFloatingChatbot.d.ts +32 -2
- package/dist/layout/ConsoleFloatingChatbot.js +374 -41
- package/dist/layout/ConsoleLayout.d.ts +1 -1
- package/dist/layout/ConsoleLayout.js +27 -11
- package/dist/layout/ContextSelectors.d.ts +44 -0
- package/dist/layout/ContextSelectors.js +218 -0
- package/dist/layout/InboxPopover.d.ts +6 -1
- package/dist/layout/InboxPopover.js +25 -6
- package/dist/layout/LocaleSwitcher.d.ts +1 -1
- package/dist/layout/LocalizedSidebarTrigger.d.ts +2 -0
- package/dist/layout/LocalizedSidebarTrigger.js +15 -0
- package/dist/layout/MobileViewSwitcherContext.d.ts +1 -1
- package/dist/layout/ModeToggle.d.ts +1 -1
- package/dist/layout/PageHeader.d.ts +1 -1
- package/dist/layout/UnifiedSidebar.d.ts +2 -1
- package/dist/layout/UnifiedSidebar.js +116 -15
- package/dist/observability/index.d.ts +1 -0
- package/dist/observability/index.js +1 -0
- package/dist/observability/settleSignal.d.ts +64 -0
- package/dist/observability/settleSignal.js +131 -0
- package/dist/preview/DraftChangesPanel.d.ts +19 -0
- package/dist/preview/DraftChangesPanel.js +114 -0
- package/dist/preview/DraftPreviewBar.d.ts +8 -0
- package/dist/preview/DraftPreviewBar.js +86 -0
- package/dist/preview/PreviewDraftEmptyState.d.ts +16 -0
- package/dist/preview/PreviewDraftEmptyState.js +47 -0
- package/dist/preview/PreviewModeContext.d.ts +57 -0
- package/dist/preview/PreviewModeContext.js +99 -0
- package/dist/preview/UnpublishedAppBar.d.ts +8 -0
- package/dist/preview/UnpublishedAppBar.js +79 -0
- package/dist/preview/draftStatus.d.ts +20 -0
- package/dist/preview/draftStatus.js +27 -0
- package/dist/preview/usePublishAllDrafts.d.ts +18 -0
- package/dist/preview/usePublishAllDrafts.js +106 -0
- package/dist/providers/AdapterProvider.d.ts +1 -1
- package/dist/providers/AdapterProvider.js +6 -1
- package/dist/providers/ExpressionProvider.d.ts +1 -1
- package/dist/providers/MetadataProvider.d.ts +17 -2
- package/dist/providers/MetadataProvider.js +183 -12
- package/dist/runtime-config.d.ts +46 -2
- package/dist/runtime-config.js +39 -2
- package/dist/services/builtinComponents.js +68 -59
- package/dist/skeletons/SkeletonDashboard.d.ts +1 -1
- package/dist/skeletons/SkeletonDetail.d.ts +1 -1
- package/dist/skeletons/SkeletonGrid.d.ts +1 -1
- package/dist/utils/appRoute.d.ts +21 -0
- package/dist/utils/appRoute.js +25 -0
- package/dist/utils/deriveRelatedLists.d.ts +54 -0
- package/dist/utils/deriveRelatedLists.js +91 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/managedByEmptyState.d.ts +8 -1
- package/dist/utils/managedByEmptyState.js +13 -7
- package/dist/utils/preferLocal.d.ts +18 -0
- package/dist/utils/preferLocal.js +24 -0
- package/dist/views/ActionConfirmDialog.d.ts +1 -1
- package/dist/views/ActionConfirmDialog.js +3 -1
- package/dist/views/ActionParamDialog.d.ts +6 -1
- package/dist/views/ActionParamDialog.js +9 -3
- package/dist/views/ActionResultDialog.d.ts +13 -0
- package/dist/views/ActionResultDialog.js +134 -0
- package/dist/views/ComponentNavView.d.ts +14 -1
- package/dist/views/CreateViewDialog.d.ts +1 -1
- package/dist/views/DashboardConfigPanel.d.ts +28 -0
- package/dist/views/DashboardConfigPanel.js +81 -0
- package/dist/views/DashboardView.d.ts +4 -3
- package/dist/views/DashboardView.js +38 -239
- package/dist/views/FlowRunner.d.ts +59 -0
- package/dist/views/FlowRunner.js +153 -0
- package/dist/views/InterfaceListPage.d.ts +49 -0
- package/dist/views/InterfaceListPage.js +347 -0
- package/dist/views/MetadataInspector.d.ts +2 -2
- package/dist/views/ObjectView.d.ts +1 -1
- package/dist/views/ObjectView.js +209 -532
- package/dist/views/PageView.d.ts +8 -3
- package/dist/views/PageView.js +45 -32
- package/dist/views/RecordDetailView.d.ts +1 -1
- package/dist/views/RecordDetailView.js +363 -148
- package/dist/views/RecordFormPage.d.ts +1 -1
- package/dist/views/RecordFormPage.js +26 -1
- package/dist/views/ReportConfigPanel.d.ts +37 -0
- package/dist/views/ReportConfigPanel.js +85 -0
- package/dist/views/ReportView.d.ts +1 -1
- package/dist/views/ReportView.js +116 -7
- package/dist/views/RuntimeDraftBar.d.ts +30 -0
- package/dist/views/RuntimeDraftBar.js +112 -0
- package/dist/views/SearchResultsPage.d.ts +1 -1
- package/dist/views/SearchResultsPage.js +8 -18
- package/dist/views/ViewConfigPanel.d.ts +24 -17
- package/dist/views/ViewConfigPanel.js +121 -77
- package/dist/views/index.d.ts +1 -1
- package/dist/views/index.js +1 -1
- package/dist/views/metadata-admin/AuditPanel.d.ts +28 -0
- package/dist/views/metadata-admin/AuditPanel.js +79 -0
- package/dist/views/metadata-admin/DiagnosticsPage.d.ts +20 -0
- package/dist/views/metadata-admin/DiagnosticsPage.js +69 -0
- package/dist/views/metadata-admin/DirectoryPage.d.ts +16 -1
- package/dist/views/metadata-admin/DirectoryPage.js +113 -24
- package/dist/views/metadata-admin/DraftReviewPanel.d.ts +33 -0
- package/dist/views/metadata-admin/DraftReviewPanel.js +77 -0
- package/dist/views/metadata-admin/EmbeddedItemEditor.d.ts +17 -1
- package/dist/views/metadata-admin/EmbeddedItemEditor.js +15 -8
- package/dist/views/metadata-admin/JsonSourceEditor.d.ts +37 -0
- package/dist/views/metadata-admin/JsonSourceEditor.js +178 -0
- package/dist/views/metadata-admin/LayeredDiff.d.ts +39 -1
- package/dist/views/metadata-admin/LayeredDiff.js +171 -5
- package/dist/views/metadata-admin/MetadataDetailDrawer.d.ts +15 -1
- package/dist/views/metadata-admin/MetadataTypeActions.d.ts +48 -0
- package/dist/views/metadata-admin/MetadataTypeActions.js +165 -0
- package/dist/views/metadata-admin/PackagesPage.d.ts +18 -0
- package/dist/views/metadata-admin/PackagesPage.js +395 -0
- package/dist/views/metadata-admin/PageShell.d.ts +1 -1
- package/dist/views/metadata-admin/PageShell.js +9 -4
- package/dist/views/metadata-admin/PermissionMatrixEditor.d.ts +35 -1
- package/dist/views/metadata-admin/QuickFind.d.ts +21 -1
- package/dist/views/metadata-admin/QuickFind.js +6 -3
- package/dist/views/metadata-admin/RelatedPanel.d.ts +24 -1
- package/dist/views/metadata-admin/RelatedPanel.js +20 -18
- package/dist/views/metadata-admin/ResourceEditPage.d.ts +40 -1
- package/dist/views/metadata-admin/ResourceEditPage.js +1223 -60
- package/dist/views/metadata-admin/ResourceHistoryPage.d.ts +39 -1
- package/dist/views/metadata-admin/ResourceHistoryPage.js +66 -16
- package/dist/views/metadata-admin/ResourceListPage.d.ts +13 -1
- package/dist/views/metadata-admin/ResourceListPage.js +266 -30
- package/dist/views/metadata-admin/ResourceRouter.d.ts +23 -1
- package/dist/views/metadata-admin/SchemaForm.d.ts +34 -1
- package/dist/views/metadata-admin/SchemaForm.js +559 -49
- package/dist/views/metadata-admin/StudioHomePage.d.ts +22 -0
- package/dist/views/metadata-admin/StudioHomePage.js +213 -0
- package/dist/views/metadata-admin/anchors.js +237 -24
- package/dist/views/metadata-admin/clientValidation.d.ts +50 -0
- package/dist/views/metadata-admin/clientValidation.js +169 -0
- package/dist/views/metadata-admin/color-variant-field.d.ts +30 -0
- package/dist/views/metadata-admin/color-variant-field.js +38 -0
- package/dist/views/metadata-admin/createDerive.d.ts +75 -0
- package/dist/views/metadata-admin/createDerive.js +179 -0
- package/dist/views/metadata-admin/dashboard-schema.d.ts +12 -0
- package/dist/views/metadata-admin/dashboard-schema.js +80 -0
- package/dist/views/metadata-admin/datasource/DatasourceResourcePage.d.ts +35 -0
- package/dist/views/metadata-admin/datasource/DatasourceResourcePage.js +327 -0
- package/dist/views/metadata-admin/datasource/register.d.ts +1 -0
- package/dist/views/metadata-admin/datasource/register.js +24 -0
- package/dist/views/metadata-admin/default-inspector-registry.d.ts +49 -0
- package/dist/views/metadata-admin/default-inspector-registry.js +8 -0
- package/dist/views/metadata-admin/default-schemas.js +115 -10
- package/dist/views/metadata-admin/external/ExternalDatasourcePanel.d.ts +27 -0
- package/dist/views/metadata-admin/external/ExternalDatasourcePanel.js +69 -0
- package/dist/views/metadata-admin/external/ImportObjectDialog.d.ts +27 -0
- package/dist/views/metadata-admin/external/ImportObjectDialog.js +77 -0
- package/dist/views/metadata-admin/external/SchemaBrowser.d.ts +16 -0
- package/dist/views/metadata-admin/external/SchemaBrowser.js +74 -0
- package/dist/views/metadata-admin/external/ValidationPanel.d.ts +16 -0
- package/dist/views/metadata-admin/external/ValidationPanel.js +68 -0
- package/dist/views/metadata-admin/external/api.d.ts +100 -0
- package/dist/views/metadata-admin/external/api.js +124 -0
- package/dist/views/metadata-admin/i18n.d.ts +1 -0
- package/dist/views/metadata-admin/i18n.js +1166 -2
- package/dist/views/metadata-admin/index.d.ts +8 -5
- package/dist/views/metadata-admin/index.js +12 -2
- package/dist/views/metadata-admin/inspector-registry.d.ts +51 -0
- package/dist/views/metadata-admin/inspector-registry.js +11 -0
- package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.d.ts +30 -0
- package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.js +180 -0
- package/dist/views/metadata-admin/inspectors/AppNavInspector.d.ts +16 -0
- package/dist/views/metadata-admin/inspectors/AppNavInspector.js +110 -0
- package/dist/views/metadata-admin/inspectors/ConditionBuilder.d.ts +29 -0
- package/dist/views/metadata-admin/inspectors/ConditionBuilder.js +154 -0
- package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.d.ts +28 -0
- package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.js +110 -0
- package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.d.ts +18 -0
- package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.js +139 -0
- package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.d.ts +21 -0
- package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.js +107 -0
- package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.d.ts +16 -0
- package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.js +45 -0
- package/dist/views/metadata-admin/inspectors/FlowInspector.d.ts +12 -0
- package/dist/views/metadata-admin/inspectors/FlowInspector.js +9 -0
- package/dist/views/metadata-admin/inspectors/FlowKeyValueField.d.ts +30 -0
- package/dist/views/metadata-admin/inspectors/FlowKeyValueField.js +125 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.d.ts +18 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.js +40 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeInspector.d.ts +14 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeInspector.js +140 -0
- package/dist/views/metadata-admin/inspectors/FlowObjectListField.d.ts +26 -0
- package/dist/views/metadata-admin/inspectors/FlowObjectListField.js +105 -0
- package/dist/views/metadata-admin/inspectors/FlowReferenceField.d.ts +83 -0
- package/dist/views/metadata-admin/inspectors/FlowReferenceField.js +181 -0
- package/dist/views/metadata-admin/inspectors/FlowStringListField.d.ts +21 -0
- package/dist/views/metadata-admin/inspectors/FlowStringListField.js +60 -0
- package/dist/views/metadata-admin/inspectors/InspectorComboField.d.ts +40 -0
- package/dist/views/metadata-admin/inspectors/InspectorComboField.js +61 -0
- package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.d.ts +21 -0
- package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.js +54 -0
- package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.d.ts +23 -0
- package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.js +330 -0
- package/dist/views/metadata-admin/inspectors/PageBlockInspector.d.ts +48 -0
- package/dist/views/metadata-admin/inspectors/PageBlockInspector.js +332 -0
- package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.d.ts +58 -0
- package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.js +160 -0
- package/dist/views/metadata-admin/inspectors/ViewColumnInspector.d.ts +19 -0
- package/dist/views/metadata-admin/inspectors/ViewColumnInspector.js +144 -0
- package/dist/views/metadata-admin/inspectors/ViewInspector.d.ts +19 -0
- package/dist/views/metadata-admin/inspectors/ViewInspector.js +21 -0
- package/dist/views/metadata-admin/inspectors/ViewVariantInspector.d.ts +54 -0
- package/dist/views/metadata-admin/inspectors/ViewVariantInspector.js +191 -0
- package/dist/views/metadata-admin/inspectors/_shared.d.ts +124 -0
- package/dist/views/metadata-admin/inspectors/_shared.js +113 -0
- package/dist/views/metadata-admin/inspectors/expression-validate.d.ts +26 -0
- package/dist/views/metadata-admin/inspectors/expression-validate.js +66 -0
- package/dist/views/metadata-admin/inspectors/flow-node-config.d.ts +143 -0
- package/dist/views/metadata-admin/inspectors/flow-node-config.js +461 -0
- package/dist/views/metadata-admin/inspectors/index.d.ts +1 -0
- package/dist/views/metadata-admin/inspectors/index.js +45 -0
- package/dist/views/metadata-admin/inspectors/json-schema-to-fields.d.ts +40 -0
- package/dist/views/metadata-admin/inspectors/json-schema-to-fields.js +227 -0
- package/dist/views/metadata-admin/inspectors/useDatasetFields.d.ts +72 -0
- package/dist/views/metadata-admin/inspectors/useDatasetFields.js +0 -0
- package/dist/views/metadata-admin/mergeServerFields.d.ts +65 -0
- package/dist/views/metadata-admin/mergeServerFields.js +56 -0
- package/dist/views/metadata-admin/preview-registry.d.ts +55 -0
- package/dist/views/metadata-admin/previews/ActionPreview.d.ts +25 -0
- package/dist/views/metadata-admin/previews/ActionPreview.js +238 -0
- package/dist/views/metadata-admin/previews/AddWidgetPicker.d.ts +12 -0
- package/dist/views/metadata-admin/previews/AddWidgetPicker.js +56 -0
- package/dist/views/metadata-admin/previews/AgentPreview.d.ts +24 -0
- package/dist/views/metadata-admin/previews/AgentPreview.js +100 -0
- package/dist/views/metadata-admin/previews/AppNavCanvas.d.ts +31 -0
- package/dist/views/metadata-admin/previews/AppNavCanvas.js +260 -0
- package/dist/views/metadata-admin/previews/AppPreview.d.ts +16 -1
- package/dist/views/metadata-admin/previews/AppPreview.js +23 -14
- package/dist/views/metadata-admin/previews/BookPreview.d.ts +20 -0
- package/dist/views/metadata-admin/previews/BookPreview.js +132 -0
- package/dist/views/metadata-admin/previews/DashboardPreview.d.ts +16 -1
- package/dist/views/metadata-admin/previews/DashboardPreview.js +110 -8
- package/dist/views/metadata-admin/previews/DatasetPreview.d.ts +18 -0
- package/dist/views/metadata-admin/previews/DatasetPreview.js +89 -0
- package/dist/views/metadata-admin/previews/DatasourcePreview.d.ts +23 -0
- package/dist/views/metadata-admin/previews/DatasourcePreview.js +68 -0
- package/dist/views/metadata-admin/previews/EmailTemplatePreview.d.ts +14 -1
- package/dist/views/metadata-admin/previews/FieldStub.d.ts +30 -0
- package/dist/views/metadata-admin/previews/FieldStub.js +104 -0
- package/dist/views/metadata-admin/previews/FieldsListEditor.d.ts +50 -0
- package/dist/views/metadata-admin/previews/FieldsListEditor.js +97 -0
- package/dist/views/metadata-admin/previews/FlowCanvas.d.ts +43 -0
- package/dist/views/metadata-admin/previews/FlowCanvas.js +328 -0
- package/dist/views/metadata-admin/previews/FlowPreview.d.ts +20 -0
- package/dist/views/metadata-admin/previews/FlowPreview.js +92 -0
- package/dist/views/metadata-admin/previews/FlowRunsPanel.d.ts +46 -0
- package/dist/views/metadata-admin/previews/FlowRunsPanel.js +97 -0
- package/dist/views/metadata-admin/previews/FlowSimulatorPanel.d.ts +25 -0
- package/dist/views/metadata-admin/previews/FlowSimulatorPanel.js +170 -0
- package/dist/views/metadata-admin/previews/JobPreview.d.ts +28 -0
- package/dist/views/metadata-admin/previews/JobPreview.js +290 -0
- package/dist/views/metadata-admin/previews/ObjectFormCanvas.d.ts +30 -0
- package/dist/views/metadata-admin/previews/ObjectFormCanvas.js +547 -0
- package/dist/views/metadata-admin/previews/ObjectPreview.d.ts +14 -1
- package/dist/views/metadata-admin/previews/ObjectPreview.js +5 -30
- package/dist/views/metadata-admin/previews/OutlineStrip.d.ts +32 -0
- package/dist/views/metadata-admin/previews/OutlineStrip.js +8 -0
- package/dist/views/metadata-admin/previews/PageBlockCanvas.d.ts +49 -0
- package/dist/views/metadata-admin/previews/PageBlockCanvas.js +510 -0
- package/dist/views/metadata-admin/previews/PagePreview.d.ts +10 -1
- package/dist/views/metadata-admin/previews/PagePreview.js +90 -4
- package/dist/views/metadata-admin/previews/PermissionPreview.d.ts +27 -0
- package/dist/views/metadata-admin/previews/PermissionPreview.js +115 -0
- package/dist/views/metadata-admin/previews/PreviewShell.d.ts +29 -6
- package/dist/views/metadata-admin/previews/PreviewShell.js +16 -3
- package/dist/views/metadata-admin/previews/ReportPreview.d.ts +18 -1
- package/dist/views/metadata-admin/previews/ReportPreview.js +23 -15
- package/dist/views/metadata-admin/previews/RolePreview.d.ts +19 -0
- package/dist/views/metadata-admin/previews/RolePreview.js +14 -0
- package/dist/views/metadata-admin/previews/SkillPreview.d.ts +22 -0
- package/dist/views/metadata-admin/previews/SkillPreview.js +34 -0
- package/dist/views/metadata-admin/previews/ToolPreview.d.ts +25 -0
- package/dist/views/metadata-admin/previews/ToolPreview.js +122 -0
- package/dist/views/metadata-admin/previews/TranslationPreview.d.ts +25 -0
- package/dist/views/metadata-admin/previews/TranslationPreview.js +52 -0
- package/dist/views/metadata-admin/previews/ValidationPreview.d.ts +27 -0
- package/dist/views/metadata-admin/previews/ValidationPreview.js +110 -0
- package/dist/views/metadata-admin/previews/ViewColumnPanes.d.ts +62 -0
- package/dist/views/metadata-admin/previews/ViewColumnPanes.js +140 -0
- package/dist/views/metadata-admin/previews/ViewPreview.d.ts +23 -1
- package/dist/views/metadata-admin/previews/ViewPreview.js +101 -73
- package/dist/views/metadata-admin/previews/block-config.d.ts +82 -0
- package/dist/views/metadata-admin/previews/block-config.js +324 -0
- package/dist/views/metadata-admin/previews/block-types.d.ts +40 -0
- package/dist/views/metadata-admin/previews/block-types.js +110 -0
- package/dist/views/metadata-admin/previews/field-types.d.ts +53 -0
- package/dist/views/metadata-admin/previews/field-types.js +97 -0
- package/dist/views/metadata-admin/previews/flow-canvas-layout.d.ts +88 -0
- package/dist/views/metadata-admin/previews/flow-canvas-layout.js +190 -0
- package/dist/views/metadata-admin/previews/flow-canvas-parts.d.ts +88 -0
- package/dist/views/metadata-admin/previews/flow-canvas-parts.js +358 -0
- package/dist/views/metadata-admin/previews/form-preview.d.ts +24 -0
- package/dist/views/metadata-admin/previews/form-preview.js +29 -0
- package/dist/views/metadata-admin/previews/index.js +43 -0
- package/dist/views/metadata-admin/previews/object-fields-bridge.d.ts +66 -0
- package/dist/views/metadata-admin/previews/object-fields-bridge.js +171 -0
- package/dist/views/metadata-admin/previews/object-fields-io.d.ts +109 -0
- package/dist/views/metadata-admin/previews/object-fields-io.js +208 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-types.d.ts +91 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-types.js +2 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.d.ts +8 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.js +113 -0
- package/dist/views/metadata-admin/previews/simulator/flow-simulator.d.ts +44 -0
- package/dist/views/metadata-admin/previews/simulator/flow-simulator.js +316 -0
- package/dist/views/metadata-admin/previews/useDatasetCatalog.d.ts +47 -0
- package/dist/views/metadata-admin/previews/useDatasetCatalog.js +133 -0
- package/dist/views/metadata-admin/previews/useFlowNodePalette.d.ts +44 -0
- package/dist/views/metadata-admin/previews/useFlowNodePalette.js +124 -0
- package/dist/views/metadata-admin/previews/useMetaOptions.d.ts +8 -0
- package/dist/views/metadata-admin/previews/useMetaOptions.js +50 -0
- package/dist/views/metadata-admin/previews/useObjectFields.d.ts +23 -0
- package/dist/views/metadata-admin/previews/useObjectFields.js +79 -0
- package/dist/views/metadata-admin/previews/useObjectOptions.d.ts +8 -0
- package/dist/views/metadata-admin/previews/useObjectOptions.js +43 -0
- package/dist/views/metadata-admin/previews/view-column-io.d.ts +42 -0
- package/dist/views/metadata-admin/previews/view-column-io.js +73 -0
- package/dist/views/metadata-admin/previews/widget-types.d.ts +24 -0
- package/dist/views/metadata-admin/previews/widget-types.js +40 -0
- package/dist/views/metadata-admin/registry.d.ts +140 -19
- package/dist/views/metadata-admin/report-schema.d.ts +26 -0
- package/dist/views/metadata-admin/report-schema.js +121 -0
- package/dist/views/metadata-admin/useMetadata.d.ts +100 -2
- package/dist/views/metadata-admin/useMetadata.js +155 -4
- package/dist/views/metadata-admin/view-item-normalize.d.ts +20 -0
- package/dist/views/metadata-admin/view-item-normalize.js +68 -0
- package/dist/views/metadata-admin/view-schema.d.ts +16 -0
- package/dist/views/metadata-admin/view-schema.js +107 -0
- package/dist/views/metadata-admin/view-variant-model.d.ts +23 -0
- package/dist/views/metadata-admin/view-variant-model.js +64 -0
- package/dist/views/metadata-admin/widgets.d.ts +89 -1
- package/dist/views/metadata-admin/widgets.js +491 -17
- package/dist/views/runtime-metadata-persistence.d.ts +78 -0
- package/dist/views/runtime-metadata-persistence.js +89 -0
- package/dist/views/useOpenRecordList.d.ts +18 -0
- package/dist/views/useOpenRecordList.js +36 -0
- package/dist/views/userFilterUrlState.d.ts +15 -0
- package/dist/views/userFilterUrlState.js +53 -0
- package/dist/views/view-config-adapter.d.ts +38 -0
- package/dist/views/view-config-adapter.js +80 -0
- package/package.json +52 -34
- package/dist/views/DesignDrawer.d.ts +0 -28
- package/dist/views/DesignDrawer.js +0 -51
- package/dist/views/metadata-admin/DesignerEditorWrapper.d.ts +0 -68
- package/dist/views/metadata-admin/DesignerEditorWrapper.js +0 -158
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* HomeRail
|
|
4
|
+
*
|
|
5
|
+
* Dashboard cards for the Home work-dashboard:
|
|
6
|
+
* - HomeActionCenter — "what needs me" (approvals + inbox notifications);
|
|
7
|
+
* the reason a business user opens Home, so it leads the page.
|
|
8
|
+
* - HomeContinue — recent items, compact "pick up where you left off".
|
|
9
|
+
* - HomeActivity — recent human activity feed (ambient context).
|
|
10
|
+
*
|
|
11
|
+
* Each renders a graceful empty state so a quiet workspace still looks
|
|
12
|
+
* intentional rather than broken.
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import { CheckSquare, Activity, ArrowRight, CheckCheck, Bell, Clock, FileText, Database, LayoutDashboard, File, } from 'lucide-react';
|
|
17
|
+
function timeAgo(iso) {
|
|
18
|
+
if (!iso)
|
|
19
|
+
return '';
|
|
20
|
+
const ms = new Date(iso).getTime();
|
|
21
|
+
if (Number.isNaN(ms))
|
|
22
|
+
return '';
|
|
23
|
+
const diff = (Date.now() - ms) / 1000;
|
|
24
|
+
if (diff < 60)
|
|
25
|
+
return `${Math.max(1, Math.floor(diff))}s`;
|
|
26
|
+
if (diff < 3600)
|
|
27
|
+
return `${Math.floor(diff / 60)}m`;
|
|
28
|
+
if (diff < 86400)
|
|
29
|
+
return `${Math.floor(diff / 3600)}h`;
|
|
30
|
+
return `${Math.floor(diff / 86400)}d`;
|
|
31
|
+
}
|
|
32
|
+
function Card({ icon: Icon, title, count, accent, children, }) {
|
|
33
|
+
return (_jsxs("section", { className: 'rounded-2xl bg-card/80 backdrop-blur-sm p-4 ' +
|
|
34
|
+
(accent ? 'border border-primary/30' : 'border border-border/70'), children: [_jsxs("div", { className: "mb-3 flex items-center gap-2", children: [_jsx(Icon, { className: 'h-4 w-4 ' + (accent ? 'text-primary' : 'text-muted-foreground') }), _jsx("h2", { className: "flex-1 text-sm font-semibold tracking-tight", children: title }), typeof count === 'number' && count > 0 && (_jsx("span", { className: "inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-primary px-1.5 text-[11px] font-medium text-primary-foreground tabular-nums", children: count }))] }), children] }));
|
|
35
|
+
}
|
|
36
|
+
function Row({ icon: Icon, iconClass, label, meta, trailing, onClick, testId, }) {
|
|
37
|
+
return (_jsx("li", { children: _jsxs("button", { type: "button", onClick: onClick, "data-testid": testId, className: "flex w-full items-center gap-3 rounded-lg px-2 py-2 text-left transition hover:bg-muted/60 active:scale-[0.99]", children: [_jsx("span", { className: 'inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-lg ' + iconClass, children: _jsx(Icon, { className: "h-4 w-4" }) }), _jsx("span", { className: "min-w-0 flex-1 truncate text-sm", children: label }), meta && _jsx("span", { className: "shrink-0 text-[11px] text-muted-foreground", children: meta }), trailing] }) }));
|
|
38
|
+
}
|
|
39
|
+
export function HomeActionCenter({ pendingApprovalsCount, notifications, onOpenApprovals, onOpenNotification, t, }) {
|
|
40
|
+
const total = pendingApprovalsCount + notifications.length;
|
|
41
|
+
return (_jsx(Card, { icon: CheckSquare, accent: true, count: total, title: t('home.actionCenter.title', { defaultValue: 'Needs your attention' }), children: total === 0 ? (_jsxs("div", { className: "flex items-center gap-2 py-2 text-sm text-muted-foreground", children: [_jsx(CheckCheck, { className: "h-4 w-4 text-emerald-500" }), t('home.actionCenter.empty', { defaultValue: "You're all caught up" })] })) : (_jsxs("ul", { className: "flex flex-col gap-0.5", children: [pendingApprovalsCount > 0 && (_jsx(Row, { icon: CheckSquare, iconClass: "bg-amber-500/10 text-amber-600 dark:text-amber-400", label: t('notifications.approvalsPending', { defaultValue: '{{count}} pending approvals', count: pendingApprovalsCount }), trailing: _jsx(ArrowRight, { className: "h-4 w-4 shrink-0 text-muted-foreground" }), onClick: onOpenApprovals, testId: "home-action-approvals" })), notifications.map((n) => (_jsx(Row, { icon: Bell, iconClass: "bg-primary/10 text-primary", label: n.title, meta: timeAgo(n.createdAt), onClick: () => onOpenNotification(n) }, n.id)))] })) }));
|
|
42
|
+
}
|
|
43
|
+
const RECENT_ICON = {
|
|
44
|
+
object: Database,
|
|
45
|
+
record: FileText,
|
|
46
|
+
dashboard: LayoutDashboard,
|
|
47
|
+
page: File,
|
|
48
|
+
};
|
|
49
|
+
// Soft per-type tint — gives the recent list life without competing with the
|
|
50
|
+
// vibrant app icons above it (apps stay the colourful primary layer).
|
|
51
|
+
const RECENT_TONE = {
|
|
52
|
+
object: 'bg-blue-500/10 text-blue-600 dark:text-blue-400',
|
|
53
|
+
record: 'bg-amber-500/10 text-amber-600 dark:text-amber-400',
|
|
54
|
+
dashboard: 'bg-violet-500/10 text-violet-600 dark:text-violet-400',
|
|
55
|
+
page: 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-400',
|
|
56
|
+
};
|
|
57
|
+
export function HomeContinue({ items, onOpen, t }) {
|
|
58
|
+
return (_jsx(Card, { icon: Clock, title: t('home.recentApps.title', { defaultValue: 'Recently Accessed' }), children: items.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('home.continueEmpty', { defaultValue: 'Items you open will show up here.' }) })) : (_jsx("ul", { className: "flex flex-col gap-0.5", children: items.map((it) => (_jsx(Row, { icon: RECENT_ICON[it.type] || FileText, iconClass: RECENT_TONE[it.type] || 'bg-muted text-muted-foreground', label: it.label, meta: t(`home.recentApps.itemType.${it.type}`, { defaultValue: it.type }), onClick: () => onOpen(it.href) }, it.id))) })) }));
|
|
59
|
+
}
|
|
60
|
+
export function HomeActivity({ items, onViewAll, t }) {
|
|
61
|
+
return (_jsxs(Card, { icon: Activity, title: t('sidebar.activityFeed', { defaultValue: 'Activity' }), children: [items.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('layout.activityFeed.empty', { defaultValue: 'No recent activity' }) })) : (_jsx("ul", { className: "flex flex-col gap-2.5", children: items.slice(0, 5).map((a) => (_jsxs("li", { className: "text-sm leading-snug", children: [_jsx("span", { className: "font-medium", children: a.user }), ' ', _jsx("span", { className: "text-muted-foreground", children: a.description }), _jsxs("div", { className: "mt-0.5 text-[11px] text-muted-foreground", children: [timeAgo(a.timestamp), " \u00B7 ", a.objectName] })] }, a.id))) })), _jsxs("button", { type: "button", onClick: onViewAll, className: "mt-3 inline-flex items-center gap-1 text-xs text-primary hover:underline", children: [t('layout.activityFeed.viewAll', { defaultValue: 'View all activity' }), _jsx(ArrowRight, { className: "h-3 w-3" })] })] }));
|
|
62
|
+
}
|
|
@@ -10,22 +10,14 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
10
10
|
import { useNavigate } from 'react-router-dom';
|
|
11
11
|
import { useObjectTranslation } from '@object-ui/i18n';
|
|
12
12
|
import { Card, CardContent } from '@object-ui/components';
|
|
13
|
-
import {
|
|
13
|
+
import { Settings, Database, ArrowUpRight } from 'lucide-react';
|
|
14
14
|
import { cn } from '@object-ui/components';
|
|
15
15
|
export function QuickActions() {
|
|
16
16
|
const navigate = useNavigate();
|
|
17
17
|
const { t } = useObjectTranslation();
|
|
18
|
+
// Manual "Create App" deprecated — the AI-first builder (Build with AI on
|
|
19
|
+
// /home) is the path to a new application.
|
|
18
20
|
const actions = [
|
|
19
|
-
{
|
|
20
|
-
id: 'create-app',
|
|
21
|
-
label: t('home.quickActions.createApp', { defaultValue: 'Create App' }),
|
|
22
|
-
description: t('home.quickActions.createAppDesc', { defaultValue: 'Start with a new application' }),
|
|
23
|
-
icon: Plus,
|
|
24
|
-
href: '/create-app',
|
|
25
|
-
iconBg: 'bg-gradient-to-br from-blue-500/15 to-indigo-500/10 ring-blue-500/20',
|
|
26
|
-
iconText: 'text-blue-600 dark:text-blue-400',
|
|
27
|
-
hoverBorder: 'hover:border-blue-500/40',
|
|
28
|
-
},
|
|
29
21
|
{
|
|
30
22
|
id: 'manage-objects',
|
|
31
23
|
label: t('home.quickActions.manageObjects', { defaultValue: 'Manage Objects' }),
|
|
@@ -9,5 +9,5 @@ import type { RecentItem } from '../../hooks/useRecentItems';
|
|
|
9
9
|
interface RecentAppsProps {
|
|
10
10
|
items: RecentItem[];
|
|
11
11
|
}
|
|
12
|
-
export declare function RecentApps({ items }: RecentAppsProps): import("react
|
|
12
|
+
export declare function RecentApps({ items }: RecentAppsProps): import("react").JSX.Element | null;
|
|
13
13
|
export {};
|
|
@@ -36,11 +36,11 @@ export function RecentApps({ items }) {
|
|
|
36
36
|
defaultValue: capitalizeFirst(item.type),
|
|
37
37
|
});
|
|
38
38
|
const tone = TYPE_TONES[item.type] || TYPE_TONES.object;
|
|
39
|
-
return (_jsx(Card, { className: "group cursor-pointer border border-border/70 bg-card/80 backdrop-blur-sm transition-[transform,box-shadow,border-color] duration-200 hover:-translate-y-0.5 hover:shadow-md hover:border-foreground/20 motion-reduce:transition-none motion-reduce:hover:transform-none", onClick: () => navigate(item.href), "data-testid": `recent-item-${item.id}`, role: "link", tabIndex: 0, onKeyDown: (e) => {
|
|
39
|
+
return (_jsx(Card, { className: "group cursor-pointer border border-border/70 bg-card/80 backdrop-blur-sm transition-[transform,box-shadow,border-color] duration-200 hover:-translate-y-0.5 hover:shadow-md hover:border-foreground/20 active:scale-[0.985] active:-translate-y-0 motion-reduce:transition-none motion-reduce:hover:transform-none", onClick: () => navigate(item.href), "data-testid": `recent-item-${item.id}`, role: "link", tabIndex: 0, onKeyDown: (e) => {
|
|
40
40
|
if (e.key === 'Enter' || e.key === ' ') {
|
|
41
41
|
e.preventDefault();
|
|
42
42
|
navigate(item.href);
|
|
43
43
|
}
|
|
44
|
-
}, children: _jsx(CardContent, { className: "p-3.5", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: cn('inline-flex h-10 w-10 items-center justify-center rounded-
|
|
44
|
+
}, children: _jsx(CardContent, { className: "p-3.5", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: cn('inline-flex h-10 w-10 items-center justify-center rounded-xl ring-1 shrink-0', tone), children: _jsx(Icon, { className: "h-5 w-5" }) }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("h3", { className: "font-medium text-sm truncate", children: item.label }), _jsx("p", { className: "text-xs text-muted-foreground", children: typeLabel })] }), _jsx(ArrowUpRight, { className: "h-4 w-4 text-muted-foreground opacity-0 -translate-x-1 transition-[opacity,transform] duration-200 group-hover:opacity-100 group-hover:translate-x-0" })] }) }) }, item.id));
|
|
45
45
|
}) })] }));
|
|
46
46
|
}
|
|
@@ -9,5 +9,5 @@ import type { FavoriteItem } from '../../hooks/useFavorites';
|
|
|
9
9
|
interface StarredAppsProps {
|
|
10
10
|
items: FavoriteItem[];
|
|
11
11
|
}
|
|
12
|
-
export declare function StarredApps({ items }: StarredAppsProps): import("react
|
|
12
|
+
export declare function StarredApps({ items }: StarredAppsProps): import("react").JSX.Element | null;
|
|
13
13
|
export {};
|
|
@@ -41,11 +41,11 @@ export function StarredApps({ items }) {
|
|
|
41
41
|
const typeLabel = t(`home.recentApps.itemType.${item.type}`, {
|
|
42
42
|
defaultValue: capitalizeFirst(item.type),
|
|
43
43
|
});
|
|
44
|
-
return (_jsx(Card, { className: "group cursor-pointer border border-border/70 bg-card/80 backdrop-blur-sm transition-[transform,box-shadow,border-color] duration-200 hover:-translate-y-0.5 hover:shadow-md hover:border-foreground/20 motion-reduce:transition-none motion-reduce:hover:transform-none", onClick: () => navigate(item.href), "data-testid": `starred-item-${item.id}`, role: "link", tabIndex: 0, onKeyDown: (e) => {
|
|
44
|
+
return (_jsx(Card, { className: "group cursor-pointer border border-border/70 bg-card/80 backdrop-blur-sm transition-[transform,box-shadow,border-color] duration-200 hover:-translate-y-0.5 hover:shadow-md hover:border-foreground/20 active:scale-[0.985] active:-translate-y-0 motion-reduce:transition-none motion-reduce:hover:transform-none", onClick: () => navigate(item.href), "data-testid": `starred-item-${item.id}`, role: "link", tabIndex: 0, onKeyDown: (e) => {
|
|
45
45
|
if (e.key === 'Enter' || e.key === ' ') {
|
|
46
46
|
e.preventDefault();
|
|
47
47
|
navigate(item.href);
|
|
48
48
|
}
|
|
49
|
-
}, children: _jsx(CardContent, { className: "p-3.5", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: cn('inline-flex h-10 w-10 items-center justify-center rounded-
|
|
49
|
+
}, children: _jsx(CardContent, { className: "p-3.5", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: cn('inline-flex h-10 w-10 items-center justify-center rounded-xl ring-1 shrink-0', tone), children: _jsx(Icon, { className: "h-5 w-5" }) }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("h3", { className: "font-medium text-sm truncate", children: item.label }), _jsx("p", { className: "text-xs text-muted-foreground", children: typeLabel })] }), _jsx(ArrowUpRight, { className: "h-4 w-4 text-muted-foreground opacity-0 -translate-x-1 transition-[opacity,transform] duration-200 group-hover:opacity-100 group-hover:translate-x-0" })] }) }) }, item.id));
|
|
50
50
|
}) })] }));
|
|
51
51
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function InstalledList(): import("react").JSX.Element;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
3
|
+
/**
|
|
4
|
+
* Installed-packages list — registered as the SDUI widget
|
|
5
|
+
* `marketplace:installed-list` (cloud ADR-0009 P2a).
|
|
6
|
+
*
|
|
7
|
+
* The Installed Apps page ships as METADATA with
|
|
8
|
+
* `@objectstack/cloud-connection`'s install-local plugin; this widget is
|
|
9
|
+
* the interactive body: load (control-plane list when cloud-connected,
|
|
10
|
+
* local install-local cache otherwise), refresh, uninstall. The legacy
|
|
11
|
+
* React route (`MarketplaceInstalledPage`) renders the SAME component
|
|
12
|
+
* during the ADR-0009 migration window — single implementation, two
|
|
13
|
+
* entries.
|
|
14
|
+
*/
|
|
15
|
+
import { useEffect, useState } from 'react';
|
|
16
|
+
import { useNavigate, useParams } from 'react-router-dom';
|
|
17
|
+
import { Card, CardContent, CardHeader, CardTitle, Badge, Button, Skeleton, } from '@object-ui/components';
|
|
18
|
+
import { RefreshCcw, Trash2, AlertCircle, ExternalLink } from 'lucide-react';
|
|
19
|
+
import { useIsWorkspaceAdmin } from '@object-ui/auth';
|
|
20
|
+
import { useObjectTranslation } from '@object-ui/i18n';
|
|
21
|
+
import { ComponentRegistry } from '@object-ui/core';
|
|
22
|
+
import { listLocalInstalls, listInstalledPackages, uninstallLocal, } from './marketplaceApi';
|
|
23
|
+
import { MarketplaceAccessDenied } from './MarketplaceAccessDenied';
|
|
24
|
+
export function InstalledList() {
|
|
25
|
+
const navigate = useNavigate();
|
|
26
|
+
const { appName } = useParams();
|
|
27
|
+
const isAdmin = useIsWorkspaceAdmin();
|
|
28
|
+
const { t, language } = useObjectTranslation();
|
|
29
|
+
const basePath = appName ? `/apps/${appName}` : '';
|
|
30
|
+
const [items, setItems] = useState([]);
|
|
31
|
+
// 'cloud' = list comes from the control plane (CLI/marketplace/REST installs,
|
|
32
|
+
// ADR-0007 step ①); 'local' = self-hosted install-local cache.
|
|
33
|
+
const [source, setSource] = useState('local');
|
|
34
|
+
const [loading, setLoading] = useState(true);
|
|
35
|
+
const [working, setWorking] = useState(null);
|
|
36
|
+
const [result, setResult] = useState(null);
|
|
37
|
+
const load = async () => {
|
|
38
|
+
setLoading(true);
|
|
39
|
+
try {
|
|
40
|
+
// Cloud-connected env → authoritative installed list is the control
|
|
41
|
+
// plane's. Self-hosted (not bound) → fall back to the local cache.
|
|
42
|
+
const cloud = await listInstalledPackages();
|
|
43
|
+
if (cloud.connected) {
|
|
44
|
+
setSource('cloud');
|
|
45
|
+
setItems(cloud.items);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
setSource('local');
|
|
49
|
+
setItems(await listLocalInstalls());
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
setLoading(false);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
useEffect(() => { void load(); }, []);
|
|
57
|
+
const doUninstall = async (entry) => {
|
|
58
|
+
if (!confirm(t('marketplace.uninstall.confirm', { manifestId: entry.manifestId, version: entry.version }))) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
setWorking(entry.manifestId);
|
|
62
|
+
setResult(null);
|
|
63
|
+
try {
|
|
64
|
+
await uninstallLocal(entry.manifestId);
|
|
65
|
+
setResult({
|
|
66
|
+
ok: true,
|
|
67
|
+
message: t('marketplace.uninstall.successInList', { manifestId: entry.manifestId }),
|
|
68
|
+
});
|
|
69
|
+
await load();
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
setResult({ ok: false, message: e?.message ?? String(e) });
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
setWorking(null);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
if (!isAdmin)
|
|
79
|
+
return _jsx(MarketplaceAccessDenied, {});
|
|
80
|
+
return (_jsxs("div", { className: "flex flex-col gap-4", children: [_jsx("div", { className: "flex justify-end", children: _jsxs(Button, { variant: "outline", size: "sm", onClick: () => void load(), disabled: loading, children: [_jsx(RefreshCcw, { className: "h-4 w-4 mr-1.5", "aria-hidden": "true" }), t('marketplace.refresh')] }) }), result && (_jsx("div", { className: `rounded-md border p-3 text-sm ${result.ok ? 'border-green-500/30 bg-green-500/5 text-green-700 dark:text-green-400' : 'border-destructive/30 bg-destructive/5 text-destructive'}`, children: _jsxs("div", { className: "flex items-start gap-2", children: [_jsx(AlertCircle, { className: "h-4 w-4 mt-0.5 shrink-0", "aria-hidden": "true" }), _jsx("div", { children: result.message })] }) })), loading && items.length === 0 ? (_jsx("div", { className: "grid gap-3", children: Array.from({ length: 3 }).map((_, i) => (_jsx(Skeleton, { className: "h-20 w-full" }, i))) })) : items.length === 0 ? (_jsxs("div", { className: "text-center py-12 text-sm text-muted-foreground border rounded-md", children: [_jsx("p", { children: t('marketplace.installedEmpty') }), _jsx(Button, { variant: "link", className: "mt-2", onClick: () => navigate(`${basePath}/system/marketplace`), children: t('marketplace.browseLink') })] })) : (_jsx("div", { className: "grid gap-3", children: items.map((entry) => (_jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-start justify-between gap-3 pb-2", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs(CardTitle, { className: "text-base truncate flex items-center gap-2", children: [entry.manifestId, _jsx(Badge, { variant: "outline", children: t('marketplace.versionBadge', { version: entry.version }) })] }), _jsxs("div", { className: "text-xs text-muted-foreground mt-1 flex flex-wrap gap-x-3 gap-y-1", children: [_jsx("span", { children: t('marketplace.installedAt', { when: new Date(entry.installedAt).toLocaleString(language || undefined) }) }), entry.installedBy && _jsx("span", { children: t('marketplace.installedBy', { user: entry.installedBy }) }), _jsxs("span", { children: [t('marketplace.installedPackageId'), " ", _jsx("code", { className: "font-mono", children: entry.packageId })] })] })] }), _jsxs("div", { className: "flex items-center gap-2 shrink-0", children: [_jsxs(Button, { variant: "ghost", size: "sm", onClick: () => navigate(`${basePath}/system/marketplace/${entry.packageId}`), children: [_jsx(ExternalLink, { className: "h-4 w-4 mr-1.5", "aria-hidden": "true" }), t('marketplace.action.details')] }), source === 'local' && (_jsxs(Button, { variant: "outline", size: "sm", onClick: () => void doUninstall(entry), disabled: working === entry.manifestId, children: [_jsx(Trash2, { className: "h-4 w-4 mr-1.5", "aria-hidden": "true" }), working === entry.manifestId ? t('marketplace.action.uninstalling') : t('marketplace.action.uninstall')] }))] })] }), source === 'local' && (_jsx(CardContent, { className: "pt-0 text-xs text-muted-foreground", dangerouslySetInnerHTML: {
|
|
81
|
+
__html: t('marketplace.cachedAs', {
|
|
82
|
+
path: `.objectstack/installed-packages/${entry.manifestId.replace(/[^a-zA-Z0-9._-]/g, '_')}.json`,
|
|
83
|
+
}),
|
|
84
|
+
} }))] }, entry.manifestId))) })), _jsx("p", { className: "text-xs text-muted-foreground border-t pt-4", dangerouslySetInnerHTML: { __html: t('marketplace.installedAdditiveNote') } })] }));
|
|
85
|
+
}
|
|
86
|
+
// SDUI registration — the metadata page shipped by the install-local plugin
|
|
87
|
+
// references this widget by type.
|
|
88
|
+
ComponentRegistry.register('marketplace:installed-list', () => _jsx(InstalledList, {}), {
|
|
89
|
+
namespace: 'app-shell',
|
|
90
|
+
label: 'Installed Marketplace Packages',
|
|
91
|
+
category: 'plugin',
|
|
92
|
+
inputs: [],
|
|
93
|
+
});
|
|
@@ -6,4 +6,4 @@
|
|
|
6
6
|
* there's nothing they can do with it. This component renders a
|
|
7
7
|
* minimal "no access" empty state for the marketplace surface.
|
|
8
8
|
*/
|
|
9
|
-
export declare function MarketplaceAccessDenied(): import("react
|
|
9
|
+
export declare function MarketplaceAccessDenied(): import("react").JSX.Element;
|
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Marketplace Installed Apps Page.
|
|
2
|
+
* Marketplace Installed Apps Page (legacy React route).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* (`engine.registerApp(manifest)`) — there is no `unregisterApp`. So
|
|
11
|
-
* uninstall removes the on-disk cache (preventing the package from
|
|
12
|
-
* re-loading on next boot) but the app remains live in the running
|
|
13
|
-
* kernel until the runtime is restarted. We show this in the UI so a
|
|
14
|
-
* developer doesn't get confused when the app stays visible in the
|
|
15
|
-
* switcher after clicking Uninstall.
|
|
4
|
+
* The Installed Apps surface is migrating to plugin-carried metadata
|
|
5
|
+
* (cloud ADR-0009 P2a): the page shell ships with
|
|
6
|
+
* @objectstack/cloud-connection's install-local plugin and renders the
|
|
7
|
+
* `marketplace:installed-list` widget. This route remains during the
|
|
8
|
+
* migration window (the marketplace page's "Installed (N)" button links
|
|
9
|
+
* here) and renders the SAME widget — single implementation, two entries.
|
|
16
10
|
*/
|
|
17
|
-
export declare function MarketplaceInstalledPage(): import("react
|
|
11
|
+
export declare function MarketplaceInstalledPage(): import("react").JSX.Element;
|
|
@@ -1,77 +1,25 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
|
-
* Marketplace Installed Apps Page.
|
|
3
|
+
* Marketplace Installed Apps Page (legacy React route).
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* (`engine.registerApp(manifest)`) — there is no `unregisterApp`. So
|
|
12
|
-
* uninstall removes the on-disk cache (preventing the package from
|
|
13
|
-
* re-loading on next boot) but the app remains live in the running
|
|
14
|
-
* kernel until the runtime is restarted. We show this in the UI so a
|
|
15
|
-
* developer doesn't get confused when the app stays visible in the
|
|
16
|
-
* switcher after clicking Uninstall.
|
|
5
|
+
* The Installed Apps surface is migrating to plugin-carried metadata
|
|
6
|
+
* (cloud ADR-0009 P2a): the page shell ships with
|
|
7
|
+
* @objectstack/cloud-connection's install-local plugin and renders the
|
|
8
|
+
* `marketplace:installed-list` widget. This route remains during the
|
|
9
|
+
* migration window (the marketplace page's "Installed (N)" button links
|
|
10
|
+
* here) and renders the SAME widget — single implementation, two entries.
|
|
17
11
|
*/
|
|
18
|
-
import { useEffect, useState } from 'react';
|
|
19
12
|
import { useNavigate, useParams } from 'react-router-dom';
|
|
20
|
-
import {
|
|
21
|
-
import { ArrowLeft,
|
|
22
|
-
import { useIsWorkspaceAdmin } from '@object-ui/auth';
|
|
13
|
+
import { Button } from '@object-ui/components';
|
|
14
|
+
import { ArrowLeft, Store } from 'lucide-react';
|
|
23
15
|
import { useObjectTranslation } from '@object-ui/i18n';
|
|
24
|
-
import {
|
|
25
|
-
import { MarketplaceAccessDenied } from './MarketplaceAccessDenied';
|
|
16
|
+
import { InstalledList } from './InstalledListWidget';
|
|
26
17
|
export function MarketplaceInstalledPage() {
|
|
27
18
|
const navigate = useNavigate();
|
|
28
19
|
const { appName } = useParams();
|
|
29
|
-
const
|
|
30
|
-
const { t, language } = useObjectTranslation();
|
|
20
|
+
const { t } = useObjectTranslation();
|
|
31
21
|
const basePath = appName ? `/apps/${appName}` : '';
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const [result, setResult] = useState(null);
|
|
36
|
-
const load = async () => {
|
|
37
|
-
setLoading(true);
|
|
38
|
-
try {
|
|
39
|
-
const list = await listLocalInstalls();
|
|
40
|
-
setItems(list);
|
|
41
|
-
}
|
|
42
|
-
finally {
|
|
43
|
-
setLoading(false);
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
useEffect(() => { void load(); }, []);
|
|
47
|
-
const doUninstall = async (entry) => {
|
|
48
|
-
if (!confirm(t('marketplace.uninstall.confirm', { manifestId: entry.manifestId, version: entry.version }))) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
setWorking(entry.manifestId);
|
|
52
|
-
setResult(null);
|
|
53
|
-
try {
|
|
54
|
-
await uninstallLocal(entry.manifestId);
|
|
55
|
-
setResult({
|
|
56
|
-
ok: true,
|
|
57
|
-
message: t('marketplace.uninstall.successInList', { manifestId: entry.manifestId }),
|
|
58
|
-
});
|
|
59
|
-
await load();
|
|
60
|
-
}
|
|
61
|
-
catch (e) {
|
|
62
|
-
setResult({ ok: false, message: e?.message ?? String(e) });
|
|
63
|
-
}
|
|
64
|
-
finally {
|
|
65
|
-
setWorking(null);
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
if (!isAdmin)
|
|
69
|
-
return _jsx(MarketplaceAccessDenied, {});
|
|
70
|
-
return (_jsxs("div", { className: "flex flex-col gap-6 p-4 sm:p-6 max-w-5xl", children: [_jsxs(Button, { variant: "ghost", size: "sm", className: "self-start", onClick: () => navigate(`${basePath}/system/marketplace`), children: [_jsx(ArrowLeft, { className: "h-4 w-4 mr-1.5", "aria-hidden": "true" }), t('marketplace.back')] }), _jsxs("div", { className: "flex items-start justify-between gap-4 flex-wrap", children: [_jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Store, { className: "h-6 w-6 text-primary", "aria-hidden": "true" }), _jsx("h1", { className: "text-xl sm:text-2xl font-bold tracking-tight", children: t('marketplace.installedTitle') })] }), _jsx("p", { className: "text-sm text-muted-foreground mt-1",
|
|
71
|
-
// Subtitle contains an inline <code> path; render translated HTML from our own bundle.
|
|
72
|
-
dangerouslySetInnerHTML: { __html: t('marketplace.installedSubtitle') } })] }), _jsxs(Button, { variant: "outline", size: "sm", onClick: () => void load(), disabled: loading, children: [_jsx(RefreshCcw, { className: "h-4 w-4 mr-1.5", "aria-hidden": "true" }), t('marketplace.refresh')] })] }), result && (_jsx("div", { className: `rounded-md border p-3 text-sm ${result.ok ? 'border-green-500/30 bg-green-500/5 text-green-700 dark:text-green-400' : 'border-destructive/30 bg-destructive/5 text-destructive'}`, children: _jsxs("div", { className: "flex items-start gap-2", children: [_jsx(AlertCircle, { className: "h-4 w-4 mt-0.5 shrink-0", "aria-hidden": "true" }), _jsx("div", { children: result.message })] }) })), loading && items.length === 0 ? (_jsx("div", { className: "grid gap-3", children: Array.from({ length: 3 }).map((_, i) => (_jsx(Skeleton, { className: "h-20 w-full" }, i))) })) : items.length === 0 ? (_jsxs("div", { className: "text-center py-12 text-sm text-muted-foreground border rounded-md", children: [_jsx("p", { children: t('marketplace.installedEmpty') }), _jsx(Button, { variant: "link", className: "mt-2", onClick: () => navigate(`${basePath}/system/marketplace`), children: t('marketplace.browseLink') })] })) : (_jsx("div", { className: "grid gap-3", children: items.map((entry) => (_jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-start justify-between gap-3 pb-2", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs(CardTitle, { className: "text-base truncate flex items-center gap-2", children: [entry.manifestId, _jsx(Badge, { variant: "outline", children: t('marketplace.versionBadge', { version: entry.version }) })] }), _jsxs("div", { className: "text-xs text-muted-foreground mt-1 flex flex-wrap gap-x-3 gap-y-1", children: [_jsx("span", { children: t('marketplace.installedAt', { when: new Date(entry.installedAt).toLocaleString(language || undefined) }) }), entry.installedBy && _jsx("span", { children: t('marketplace.installedBy', { user: entry.installedBy }) }), _jsxs("span", { children: [t('marketplace.installedPackageId'), " ", _jsx("code", { className: "font-mono", children: entry.packageId })] })] })] }), _jsxs("div", { className: "flex items-center gap-2 shrink-0", children: [_jsxs(Button, { variant: "ghost", size: "sm", onClick: () => navigate(`${basePath}/system/marketplace/${entry.packageId}`), children: [_jsx(ExternalLink, { className: "h-4 w-4 mr-1.5", "aria-hidden": "true" }), t('marketplace.action.details')] }), _jsxs(Button, { variant: "outline", size: "sm", onClick: () => void doUninstall(entry), disabled: working === entry.manifestId, children: [_jsx(Trash2, { className: "h-4 w-4 mr-1.5", "aria-hidden": "true" }), working === entry.manifestId ? t('marketplace.action.uninstalling') : t('marketplace.action.uninstall')] })] })] }), _jsx(CardContent, { className: "pt-0 text-xs text-muted-foreground", dangerouslySetInnerHTML: {
|
|
73
|
-
__html: t('marketplace.cachedAs', {
|
|
74
|
-
path: `.objectstack/installed-packages/${entry.manifestId.replace(/[^a-zA-Z0-9._-]/g, '_')}.json`,
|
|
75
|
-
}),
|
|
76
|
-
} })] }, entry.manifestId))) })), _jsx("p", { className: "text-xs text-muted-foreground border-t pt-4", dangerouslySetInnerHTML: { __html: t('marketplace.installedAdditiveNote') } })] }));
|
|
22
|
+
return (_jsxs("div", { className: "flex flex-col gap-6 p-4 sm:p-6 max-w-5xl", children: [_jsxs(Button, { variant: "ghost", size: "sm", className: "self-start", onClick: () => navigate(`${basePath}/system/marketplace`), children: [_jsx(ArrowLeft, { className: "h-4 w-4 mr-1.5", "aria-hidden": "true" }), t('marketplace.back')] }), _jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Store, { className: "h-6 w-6 text-primary", "aria-hidden": "true" }), _jsx("h1", { className: "text-xl sm:text-2xl font-bold tracking-tight", children: t('marketplace.installedTitle') })] }), _jsx("p", { className: "text-sm text-muted-foreground mt-1",
|
|
23
|
+
// Subtitle contains an inline <code> path; render translated HTML from our own bundle.
|
|
24
|
+
dangerouslySetInnerHTML: { __html: t('marketplace.installedSubtitle') } })] }), _jsx(InstalledList, {})] }));
|
|
77
25
|
}
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
* Shows full package metadata + readme + approved version list. Provides
|
|
5
5
|
* an "Install" button that opens a dialog with environment picker.
|
|
6
6
|
*/
|
|
7
|
-
export declare function MarketplacePackagePage(): import("react
|
|
7
|
+
export declare function MarketplacePackagePage(): import("react").JSX.Element;
|