@object-ui/app-shell 6.2.3 → 7.1.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 +1229 -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 +184 -39
- 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 +747 -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 +28 -0
- package/dist/console/ai/LiveCanvas.js +80 -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 +137 -4
- package/dist/hooks/useChatConversation.js +316 -25
- package/dist/hooks/useConsoleActionRuntime.d.ts +70 -0
- package/dist/hooks/useConsoleActionRuntime.js +564 -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 +18 -8
- package/dist/index.js +17 -5
- 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 +34 -2
- package/dist/layout/ConsoleFloatingChatbot.js +391 -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 +242 -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/layout/agentPicker.d.ts +56 -0
- package/dist/layout/agentPicker.js +40 -0
- 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/CommitTimeline.d.ts +15 -0
- package/dist/preview/CommitTimeline.js +82 -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 +83 -0
- package/dist/preview/commitHistory.d.ts +28 -0
- package/dist/preview/commitHistory.js +48 -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 +192 -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 +31 -0
- package/dist/views/FlowRunner.js +121 -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/ScreenView.d.ts +70 -0
- package/dist/views/ScreenView.js +73 -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 +101 -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 +39 -0
- package/dist/views/metadata-admin/JsonSourceEditor.js +196 -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 +403 -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 +1250 -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 +258 -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 +205 -0
- package/dist/views/metadata-admin/anchors.js +255 -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 +1252 -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 +221 -0
- package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.d.ts +16 -0
- package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.js +126 -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 +205 -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 +55 -0
- package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.d.ts +23 -0
- package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.js +365 -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 +218 -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 +128 -0
- package/dist/views/metadata-admin/inspectors/_shared.js +113 -0
- package/dist/views/metadata-admin/inspectors/datasetFilterCondition.d.ts +24 -0
- package/dist/views/metadata-admin/inspectors/datasetFilterCondition.js +97 -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 +506 -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/issuePath.d.ts +22 -0
- package/dist/views/metadata-admin/issuePath.js +65 -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/package-scope.d.ts +26 -0
- package/dist/views/metadata-admin/package-scope.js +43 -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 +105 -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 +49 -0
- package/dist/views/metadata-admin/previews/FlowCanvas.js +416 -0
- package/dist/views/metadata-admin/previews/FlowPreview.d.ts +20 -0
- package/dist/views/metadata-admin/previews/FlowPreview.js +120 -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 +204 -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 +200 -5
- 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/ScreenPreview.d.ts +38 -0
- package/dist/views/metadata-admin/previews/ScreenPreview.js +61 -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 +102 -0
- package/dist/views/metadata-admin/previews/flow-canvas-layout.js +227 -0
- package/dist/views/metadata-admin/previews/flow-canvas-parts.d.ts +96 -0
- package/dist/views/metadata-admin/previews/flow-canvas-parts.js +373 -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 +130 -0
- package/dist/views/metadata-admin/previews/object-fields-io.js +243 -0
- package/dist/views/metadata-admin/previews/screen-spec.d.ts +43 -0
- package/dist/views/metadata-admin/previews/screen-spec.js +108 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-types.d.ts +102 -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 +15 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.js +185 -0
- package/dist/views/metadata-admin/previews/simulator/flow-simulator.d.ts +73 -0
- package/dist/views/metadata-admin/previews/simulator/flow-simulator.js +426 -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
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useState, useEffect, useCallback, useRef, useMemo, } from 'react';
|
|
3
|
+
import { MetadataClient } from '@object-ui/data-objectstack';
|
|
4
|
+
import { resolveInlineMode } from '@object-ui/plugin-form';
|
|
3
5
|
import { MetadataCtx, useMetadata } from '@object-ui/react';
|
|
6
|
+
import { usePreviewDrafts } from '../preview/PreviewModeContext';
|
|
7
|
+
import { subscribeCanvasInvalidate, subscribeMetadataRefresh } from '../assistant/assistantBus';
|
|
4
8
|
export { useMetadataItem } from '@object-ui/react';
|
|
5
9
|
export { useMetadata };
|
|
6
10
|
// ---------------------------------------------------------------------------
|
|
@@ -41,7 +45,15 @@ function debug(...args) {
|
|
|
41
45
|
// ---------------------------------------------------------------------------
|
|
42
46
|
// Helpers
|
|
43
47
|
// ---------------------------------------------------------------------------
|
|
44
|
-
|
|
48
|
+
/** Exported for tests — both metadata sources must normalize identically. */
|
|
49
|
+
export function extractItems(res) {
|
|
50
|
+
// Both source shapes must parse: the adapter SDK returns the wrapped
|
|
51
|
+
// `{ type, items: [...] }` envelope, while the ADR-0037 preview path's
|
|
52
|
+
// MetadataClient.list() returns the already-unwrapped array. Dropping the
|
|
53
|
+
// bare-array shape silently emptied the ENTIRE draft-preview world (every
|
|
54
|
+
// type read 0 items), stranding the Live Canvas on "No Apps Configured".
|
|
55
|
+
if (Array.isArray(res))
|
|
56
|
+
return res;
|
|
45
57
|
if (res && typeof res === 'object' && 'items' in res && Array.isArray(res.items)) {
|
|
46
58
|
return res.items;
|
|
47
59
|
}
|
|
@@ -61,14 +73,54 @@ function isNamedItem(item) {
|
|
|
61
73
|
'name' in item &&
|
|
62
74
|
typeof item.name === 'string');
|
|
63
75
|
}
|
|
64
|
-
|
|
76
|
+
/** A first-class ViewItem carries a `viewKind` discriminant + `object` binding. */
|
|
77
|
+
function isViewItem(view) {
|
|
78
|
+
return !!view && typeof view === 'object' && !!view.viewKind && !!view.object;
|
|
79
|
+
}
|
|
80
|
+
export function mergeViewsIntoObjects(objects, views) {
|
|
81
|
+
var _a;
|
|
65
82
|
if (!objects.length || !views.length)
|
|
66
83
|
return objects;
|
|
67
84
|
const byObject = {};
|
|
85
|
+
// Objects that received expanded ViewItems — their legacy aggregated
|
|
86
|
+
// container (also present in the `view` list) is superseded and skipped.
|
|
87
|
+
const hasViewItems = new Set();
|
|
88
|
+
for (const view of views) {
|
|
89
|
+
if (isViewItem(view))
|
|
90
|
+
hasViewItems.add(view.object);
|
|
91
|
+
}
|
|
68
92
|
for (const view of views) {
|
|
93
|
+
// ── New protocol: independent ViewItem ({ name, object, viewKind, config }) ──
|
|
94
|
+
if (isViewItem(view)) {
|
|
95
|
+
const bucket = (byObject[_a = view.object] || (byObject[_a] = { listViews: {}, formViews: {} }));
|
|
96
|
+
// Canonical `<object>.<key>` name doubles as the view id, so `/view/<name>`
|
|
97
|
+
// URLs resolve directly against the switcher tab ids.
|
|
98
|
+
const key = view.name || `${view.object}.${view.viewKind}`;
|
|
99
|
+
const body = view.config && typeof view.config === 'object' ? view.config : {};
|
|
100
|
+
// Flatten `config` to the legacy NamedListView/FormView shape the
|
|
101
|
+
// renderer consumes (type/data/columns/sections at top level); carry the
|
|
102
|
+
// item-level label/isDefault and stamp `name` so primary-view promotion
|
|
103
|
+
// (which matches on `list.name`) finds this entry by its listViews key.
|
|
104
|
+
const entry = { ...body, name: key, label: view.label ?? body.label, isDefault: !!view.isDefault };
|
|
105
|
+
if (view.viewKind === 'form') {
|
|
106
|
+
bucket.formViews[key] = entry;
|
|
107
|
+
if (view.isDefault || !bucket.form)
|
|
108
|
+
bucket.form = entry;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
bucket.listViews[key] = entry;
|
|
112
|
+
if (view.isDefault)
|
|
113
|
+
bucket.primary = entry;
|
|
114
|
+
}
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
// ── Legacy aggregated container ({ list, form, listViews, formViews }) ──
|
|
69
118
|
const objName = view?.name || view?.list?.data?.object || view?.form?.data?.object;
|
|
70
119
|
if (!objName)
|
|
71
120
|
continue;
|
|
121
|
+
// Expanded ViewItems supersede the bare container for this object.
|
|
122
|
+
if (hasViewItems.has(objName))
|
|
123
|
+
continue;
|
|
72
124
|
const bucket = (byObject[objName] || (byObject[objName] = { listViews: {}, formViews: {} }));
|
|
73
125
|
if (view.list) {
|
|
74
126
|
// Preserve the primary list view as `obj.list` per @objectstack/spec
|
|
@@ -115,6 +167,67 @@ function mergeViewsIntoObjects(objects, views) {
|
|
|
115
167
|
return merged;
|
|
116
168
|
});
|
|
117
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* Relationship-driven master-detail: a child object's `master_detail`/`lookup`
|
|
172
|
+
* field can carry `inlineEdit: true` to declare "edit me inline within my
|
|
173
|
+
* parent's form". This pass scans every object for such fields and merges the
|
|
174
|
+
* resulting child collections into each parent object's form view as
|
|
175
|
+
* `subforms` — so the parent's standard create/edit form renders an atomic
|
|
176
|
+
* master-detail form with NO view config and NO bespoke page. The intent lives
|
|
177
|
+
* in the data model (where it's defined once, e.g. by an AI modelling the
|
|
178
|
+
* schema); forms just follow. An explicit `form.subforms` entry for the same
|
|
179
|
+
* child overrides the model-derived one.
|
|
180
|
+
*/
|
|
181
|
+
export function attachInlineSubforms(objects) {
|
|
182
|
+
if (!objects?.length)
|
|
183
|
+
return objects;
|
|
184
|
+
const inlineByParent = {};
|
|
185
|
+
for (const child of objects) {
|
|
186
|
+
const fields = child?.fields;
|
|
187
|
+
if (!fields)
|
|
188
|
+
continue;
|
|
189
|
+
const entries = Array.isArray(fields)
|
|
190
|
+
? fields.map((f) => [f?.name, f])
|
|
191
|
+
: Object.entries(fields);
|
|
192
|
+
for (const [fname, fdef] of entries) {
|
|
193
|
+
const d = fdef;
|
|
194
|
+
if (!fname || !d?.inlineEdit)
|
|
195
|
+
continue;
|
|
196
|
+
if (d.type !== 'master_detail' && d.type !== 'lookup')
|
|
197
|
+
continue;
|
|
198
|
+
const parent = d.reference;
|
|
199
|
+
if (!parent)
|
|
200
|
+
continue;
|
|
201
|
+
(inlineByParent[parent] || (inlineByParent[parent] = [])).push({
|
|
202
|
+
childObject: child.name,
|
|
203
|
+
relationshipField: fname,
|
|
204
|
+
// Resolve the inline-edit form factor (grid vs per-row form) from the
|
|
205
|
+
// declared value, falling back to the smart default by child shape.
|
|
206
|
+
inlineMode: resolveInlineMode(child, d.inlineEdit, { relationshipField: fname }),
|
|
207
|
+
...(d.inlineTitle ? { title: d.inlineTitle } : {}),
|
|
208
|
+
...(Array.isArray(d.inlineColumns) ? { columns: d.inlineColumns } : {}),
|
|
209
|
+
...(typeof d.inlineAmountField === 'string' ? { amountField: d.inlineAmountField } : {}),
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (!Object.keys(inlineByParent).length)
|
|
214
|
+
return objects;
|
|
215
|
+
return objects.map((obj) => {
|
|
216
|
+
const derived = inlineByParent[obj.name];
|
|
217
|
+
if (!derived?.length)
|
|
218
|
+
return obj;
|
|
219
|
+
const form = { ...(obj.form || { type: 'simple' }) };
|
|
220
|
+
const explicit = Array.isArray(form.subforms) ? form.subforms : [];
|
|
221
|
+
const explicitChildren = new Set(explicit.map((s) => s.childObject));
|
|
222
|
+
// Model-derived first; an explicit view subform for the same child wins.
|
|
223
|
+
form.subforms = [...derived.filter((d) => !explicitChildren.has(d.childObject)), ...explicit];
|
|
224
|
+
const next = { ...obj, form };
|
|
225
|
+
if (obj.formViews?.default) {
|
|
226
|
+
next.formViews = { ...obj.formViews, default: { ...obj.formViews.default, subforms: form.subforms } };
|
|
227
|
+
}
|
|
228
|
+
return next;
|
|
229
|
+
});
|
|
230
|
+
}
|
|
118
231
|
function emptyEntry() {
|
|
119
232
|
return {
|
|
120
233
|
status: 'idle',
|
|
@@ -157,6 +270,20 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
|
|
|
157
270
|
const itemPromisesRef = useRef(new Map());
|
|
158
271
|
const adapterRef = useRef(adapter);
|
|
159
272
|
adapterRef.current = adapter;
|
|
273
|
+
// ADR-0037 Live Canvas: when the tree is in draft-preview mode, metadata
|
|
274
|
+
// reads come from the REST `?preview=draft` overlay (pending ADR-0033
|
|
275
|
+
// drafts win over active) instead of the adapter SDK. The MetadataClient
|
|
276
|
+
// is used because the SDK's meta API doesn't carry the preview flag; same
|
|
277
|
+
// endpoints, same cookie auth. Reads only — every write path is unchanged.
|
|
278
|
+
const previewDrafts = usePreviewDrafts();
|
|
279
|
+
const previewClient = useMemo(() => {
|
|
280
|
+
if (!previewDrafts)
|
|
281
|
+
return null;
|
|
282
|
+
const baseUrl = (typeof import.meta !== 'undefined' && import.meta.env?.VITE_SERVER_URL) || '';
|
|
283
|
+
return new MetadataClient({ baseUrl, previewDrafts: true });
|
|
284
|
+
}, [previewDrafts]);
|
|
285
|
+
const previewClientRef = useRef(previewClient);
|
|
286
|
+
previewClientRef.current = previewClient;
|
|
160
287
|
const [version, setVersion] = useState(0);
|
|
161
288
|
// Defer state bumps so they never occur synchronously during a consumer's
|
|
162
289
|
// render phase. `ensureType` may be invoked from inside `useMemo` getters
|
|
@@ -171,6 +298,14 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
|
|
|
171
298
|
Promise.resolve().then(() => setVersion(v => v + 1));
|
|
172
299
|
}
|
|
173
300
|
}, []);
|
|
301
|
+
// Entering/leaving preview swaps the entire metadata source — the published
|
|
302
|
+
// and draft-overlaid worlds must never mix in one cache. Drop everything and
|
|
303
|
+
// let consumers refetch through the new source.
|
|
304
|
+
useEffect(() => {
|
|
305
|
+
cacheRef.current.clear();
|
|
306
|
+
itemPromisesRef.current.clear();
|
|
307
|
+
bump();
|
|
308
|
+
}, [previewDrafts, bump]);
|
|
174
309
|
const getEntry = useCallback((type) => {
|
|
175
310
|
let entry = cacheRef.current.get(type);
|
|
176
311
|
if (!entry) {
|
|
@@ -190,9 +325,13 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
|
|
|
190
325
|
const started = Date.now();
|
|
191
326
|
entry.status = 'loading';
|
|
192
327
|
entry.error = null;
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
328
|
+
// Preview mode reads the draft-overlaid world (`?preview=draft`);
|
|
329
|
+
// normal mode reads the adapter SDK as before.
|
|
330
|
+
const preview = previewClientRef.current;
|
|
331
|
+
const fetchItems = preview
|
|
332
|
+
? preview.list(type)
|
|
333
|
+
: adapterRef.current.getClient().meta.getItems(type);
|
|
334
|
+
const promise = fetchItems
|
|
196
335
|
.then((res) => {
|
|
197
336
|
const items = extractItems(res);
|
|
198
337
|
entry.items = items;
|
|
@@ -206,7 +345,9 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
|
|
|
206
345
|
entry.byName.set(it.name, it);
|
|
207
346
|
}
|
|
208
347
|
}
|
|
209
|
-
|
|
348
|
+
// Never let the draft-overlaid world poison the published session
|
|
349
|
+
// cache — preview is ephemeral by design.
|
|
350
|
+
if (type === 'app' && !preview)
|
|
210
351
|
saveToSession(type, items);
|
|
211
352
|
debug(`fetched type=${type} items=${items.length} in ${Date.now() - started}ms`);
|
|
212
353
|
bump();
|
|
@@ -243,9 +384,11 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
|
|
|
243
384
|
if (existing)
|
|
244
385
|
return existing;
|
|
245
386
|
const started = Date.now();
|
|
246
|
-
const
|
|
247
|
-
const
|
|
248
|
-
.
|
|
387
|
+
const preview = previewClientRef.current;
|
|
388
|
+
const fetchItem = preview
|
|
389
|
+
? preview.get(type, name)
|
|
390
|
+
: adapterRef.current.getClient().meta.getItem(type, name);
|
|
391
|
+
const promise = fetchItem
|
|
249
392
|
.then((res) => {
|
|
250
393
|
const item = extractItem(res);
|
|
251
394
|
if (item)
|
|
@@ -297,11 +440,44 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
|
|
|
297
440
|
}
|
|
298
441
|
bump();
|
|
299
442
|
}, [bump]);
|
|
443
|
+
// ADR-0037 P2.5 — same-document live refresh: while this tree renders the
|
|
444
|
+
// draft overlay, chat hosts announce each drafted artifact on the assistant
|
|
445
|
+
// bus; drop that type's cache entry so the next read refetches the updated
|
|
446
|
+
// draft world. Published-mode trees ignore the events entirely.
|
|
447
|
+
useEffect(() => {
|
|
448
|
+
if (!previewDrafts)
|
|
449
|
+
return;
|
|
450
|
+
return subscribeCanvasInvalidate(({ type }) => {
|
|
451
|
+
invalidate(type);
|
|
452
|
+
});
|
|
453
|
+
}, [previewDrafts, invalidate]);
|
|
454
|
+
// Live-metadata-changed refresh: a publish (drafts → live) or a marketplace
|
|
455
|
+
// install changed the registry out-of-band, so the schema this tree cached
|
|
456
|
+
// is stale. Refetch every loaded type — open forms/views/nav then reflect
|
|
457
|
+
// the new live world without a manual page reload (the chat-card "Publish"
|
|
458
|
+
// and Browse-page install paths do not reload, unlike the DraftPreviewBar).
|
|
459
|
+
// NOT gated to preview-drafts mode: the live world every tree reads changed.
|
|
460
|
+
useEffect(() => {
|
|
461
|
+
return subscribeMetadataRefresh(() => {
|
|
462
|
+
// The adapter keeps its OWN object-schema cache (getObjectSchema) that the
|
|
463
|
+
// context refresh below does not touch. A publish/install just changed the
|
|
464
|
+
// live schema, so drop it too — otherwise create/edit forms (which read
|
|
465
|
+
// the adapter's getObjectSchema, NOT this context) keep showing the
|
|
466
|
+
// pre-publish field set until the adapter cache's 5-minute TTL lapses.
|
|
467
|
+
try {
|
|
468
|
+
adapterRef.current?.clearCache?.();
|
|
469
|
+
}
|
|
470
|
+
catch { /* adapter mid-swap */ }
|
|
471
|
+
void refresh();
|
|
472
|
+
});
|
|
473
|
+
}, [refresh]);
|
|
300
474
|
const [initialLoading, setInitialLoading] = useState(true);
|
|
301
475
|
const [initialError, setInitialError] = useState(null);
|
|
302
476
|
useEffect(() => {
|
|
303
477
|
let cancelled = false;
|
|
304
|
-
|
|
478
|
+
// Session-cached apps are PUBLISHED-world data — seeding them while in
|
|
479
|
+
// draft preview would flash the wrong universe before the fetch lands.
|
|
480
|
+
const cached = previewDrafts ? null : loadFromSession('app');
|
|
305
481
|
if (cached) {
|
|
306
482
|
const entry = getEntry('app');
|
|
307
483
|
entry.items = cached;
|
|
@@ -334,7 +510,7 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
|
|
|
334
510
|
return () => {
|
|
335
511
|
cancelled = true;
|
|
336
512
|
};
|
|
337
|
-
}, [adapter, ensureType, getEntry, bump]);
|
|
513
|
+
}, [adapter, ensureType, getEntry, bump, previewDrafts]);
|
|
338
514
|
const value = useMemo(() => {
|
|
339
515
|
void version;
|
|
340
516
|
const readType = (type) => {
|
|
@@ -350,7 +526,8 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
|
|
|
350
526
|
get objects() {
|
|
351
527
|
const objs = readType(TYPE_BY_STATE_KEY.objects);
|
|
352
528
|
const views = readType('view');
|
|
353
|
-
|
|
529
|
+
const merged = views.length ? mergeViewsIntoObjects(objs, views) : objs;
|
|
530
|
+
return attachInlineSubforms(merged);
|
|
354
531
|
},
|
|
355
532
|
get dashboards() {
|
|
356
533
|
return readType(TYPE_BY_STATE_KEY.dashboards);
|
|
@@ -368,6 +545,9 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
|
|
|
368
545
|
ensureType,
|
|
369
546
|
getItem,
|
|
370
547
|
getItemsByType,
|
|
548
|
+
// Pure read — must NOT kick a fetch, so render-phase status checks
|
|
549
|
+
// can't recurse into ensureType.
|
|
550
|
+
getTypeStatus: (type) => getEntry(type).status,
|
|
371
551
|
};
|
|
372
552
|
return base;
|
|
373
553
|
}, [version, initialLoading, initialError, ensureType, getItem, getEntry, refresh, invalidate]);
|
package/dist/runtime-config.d.ts
CHANGED
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
* those don't reflect the runtime the SPA is actually attached to (e.g.
|
|
10
10
|
* a tenant ObjectOS runtime pointing at a separate cloud control plane).
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
12
|
+
* The runtime-config shape lives in app-shell because the Console SPA in
|
|
13
|
+
* `apps/console` consumes app-shell code.
|
|
14
14
|
*
|
|
15
15
|
* Server-side: see
|
|
16
16
|
* cloud/packages/service-cloud/src/multi-environment-plugins.ts
|
|
@@ -22,6 +22,41 @@ export interface RuntimeFeatures {
|
|
|
22
22
|
installLocal: boolean;
|
|
23
23
|
/** `/api/v1/marketplace/*` is reachable from this runtime. */
|
|
24
24
|
marketplace: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* AI-driven metadata authoring ("online development") is offered by this
|
|
27
|
+
* runtime. Default true; the capability is still gated server-side by the
|
|
28
|
+
* presence of the metadata-authoring agent. When false, the SPA hides the
|
|
29
|
+
* AI authoring affordances (generic data-chat assistant is unaffected).
|
|
30
|
+
*/
|
|
31
|
+
aiStudio: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Auto-publish AI-built apps in the author's own environment. When true, the
|
|
34
|
+
* Studio chat fires the publish-drafts call automatically the moment the
|
|
35
|
+
* agent drafts an app, so the user refreshes and sees it live WITH its sample
|
|
36
|
+
* data — no manual "go home and publish" step. Server-derived from the plan
|
|
37
|
+
* (env-revertible via `OS_AI_AUTOPUBLISH_DISABLED`). Default true.
|
|
38
|
+
*/
|
|
39
|
+
autoPublishAiBuilds: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Branded subdomains + custom (BYO-DNS) domains are available on this
|
|
42
|
+
* environment's plan. Optional commercial flag — absent on self-hosted /
|
|
43
|
+
* vanilla runtimes (treated as off). When false the SPA hides custom-domain
|
|
44
|
+
* settings (or shows them as an upgrade affordance). Server-derived from the
|
|
45
|
+
* plan entitlements (cloud ADR-0011/0012).
|
|
46
|
+
*/
|
|
47
|
+
customDomain?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* SSO / SAML enterprise login is available on this environment's plan.
|
|
50
|
+
* Optional commercial flag — absent on self-hosted / vanilla runtimes
|
|
51
|
+
* (treated as off). Server-derived from the plan entitlements.
|
|
52
|
+
*/
|
|
53
|
+
sso?: boolean;
|
|
54
|
+
}
|
|
55
|
+
export interface RuntimeBranding {
|
|
56
|
+
/** Product name shown in browser title, splash, account chrome. */
|
|
57
|
+
productName: string;
|
|
58
|
+
/** Short variant for PWA shortName / compact spots. */
|
|
59
|
+
productShortName: string;
|
|
25
60
|
}
|
|
26
61
|
export interface RuntimeConfig {
|
|
27
62
|
/**
|
|
@@ -35,6 +70,7 @@ export interface RuntimeConfig {
|
|
|
35
70
|
defaultOrgId?: string | null;
|
|
36
71
|
defaultEnvironmentId?: string | null;
|
|
37
72
|
features: RuntimeFeatures;
|
|
73
|
+
branding: RuntimeBranding;
|
|
38
74
|
}
|
|
39
75
|
/**
|
|
40
76
|
* Fetch the server-pushed runtime config and merge it into the singleton.
|
|
@@ -49,6 +85,14 @@ export interface RuntimeConfig {
|
|
|
49
85
|
export declare function initRuntimeConfig(baseUrl?: string): Promise<void>;
|
|
50
86
|
/** Read-only accessor. Returns the current snapshot. */
|
|
51
87
|
export declare function getRuntimeConfig(): RuntimeConfig;
|
|
88
|
+
/**
|
|
89
|
+
* Product name shown in browser title, splash, account chrome.
|
|
90
|
+
* Falls back to `'ObjectOS'` when the server hasn't been contacted yet.
|
|
91
|
+
* Operators override via `OS_PRODUCT_NAME` env var or
|
|
92
|
+
* `new RuntimeConfigPlugin({ productName: 'Acme Studio' })`.
|
|
93
|
+
*/
|
|
94
|
+
export declare function getProductName(): string;
|
|
95
|
+
export declare function getProductShortName(): string;
|
|
52
96
|
/** Whether `initRuntimeConfig()` has run at least once. */
|
|
53
97
|
export declare function isRuntimeConfigInitialised(): boolean;
|
|
54
98
|
/**
|
package/dist/runtime-config.js
CHANGED
|
@@ -4,7 +4,8 @@ const defaults = {
|
|
|
4
4
|
singleEnvironment: false,
|
|
5
5
|
defaultOrgId: null,
|
|
6
6
|
defaultEnvironmentId: null,
|
|
7
|
-
features: { installLocal: false, marketplace: true },
|
|
7
|
+
features: { installLocal: false, marketplace: true, aiStudio: true, autoPublishAiBuilds: true, customDomain: false, sso: false },
|
|
8
|
+
branding: { productName: 'ObjectOS', productShortName: 'ObjectOS' },
|
|
8
9
|
};
|
|
9
10
|
let current = { ...defaults };
|
|
10
11
|
let initialised = false;
|
|
@@ -17,6 +18,10 @@ function applyUpdate(patch) {
|
|
|
17
18
|
...current.features,
|
|
18
19
|
...(patch.features ?? {}),
|
|
19
20
|
},
|
|
21
|
+
branding: {
|
|
22
|
+
...current.branding,
|
|
23
|
+
...(patch.branding ?? {}),
|
|
24
|
+
},
|
|
20
25
|
};
|
|
21
26
|
}
|
|
22
27
|
/**
|
|
@@ -50,8 +55,24 @@ export async function initRuntimeConfig(baseUrl = '') {
|
|
|
50
55
|
? {
|
|
51
56
|
installLocal: !!body.features.installLocal,
|
|
52
57
|
marketplace: body.features.marketplace !== false,
|
|
58
|
+
aiStudio: body.features.aiStudio !== false,
|
|
59
|
+
autoPublishAiBuilds: body.features.autoPublishAiBuilds !== false,
|
|
60
|
+
// Commercial flags default OFF unless the server explicitly grants
|
|
61
|
+
// them — never show a paid surface on an unknown/older runtime.
|
|
62
|
+
customDomain: body.features.customDomain === true,
|
|
63
|
+
sso: body.features.sso === true,
|
|
53
64
|
}
|
|
54
65
|
: current.features,
|
|
66
|
+
branding: body.branding
|
|
67
|
+
? {
|
|
68
|
+
productName: typeof body.branding.productName === 'string' && body.branding.productName.trim()
|
|
69
|
+
? body.branding.productName.trim()
|
|
70
|
+
: current.branding.productName,
|
|
71
|
+
productShortName: typeof body.branding.productShortName === 'string' && body.branding.productShortName.trim()
|
|
72
|
+
? body.branding.productShortName.trim()
|
|
73
|
+
: current.branding.productShortName,
|
|
74
|
+
}
|
|
75
|
+
: current.branding,
|
|
55
76
|
});
|
|
56
77
|
}
|
|
57
78
|
catch {
|
|
@@ -66,6 +87,18 @@ export async function initRuntimeConfig(baseUrl = '') {
|
|
|
66
87
|
export function getRuntimeConfig() {
|
|
67
88
|
return current;
|
|
68
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Product name shown in browser title, splash, account chrome.
|
|
92
|
+
* Falls back to `'ObjectOS'` when the server hasn't been contacted yet.
|
|
93
|
+
* Operators override via `OS_PRODUCT_NAME` env var or
|
|
94
|
+
* `new RuntimeConfigPlugin({ productName: 'Acme Studio' })`.
|
|
95
|
+
*/
|
|
96
|
+
export function getProductName() {
|
|
97
|
+
return current.branding?.productName || 'ObjectOS';
|
|
98
|
+
}
|
|
99
|
+
export function getProductShortName() {
|
|
100
|
+
return current.branding?.productShortName || getProductName();
|
|
101
|
+
}
|
|
69
102
|
/** Whether `initRuntimeConfig()` has run at least once. */
|
|
70
103
|
export function isRuntimeConfigInitialised() {
|
|
71
104
|
return initialised;
|
|
@@ -81,6 +114,10 @@ export function getCloudBase() {
|
|
|
81
114
|
}
|
|
82
115
|
/** Test/dev helper. */
|
|
83
116
|
export function resetRuntimeConfigForTesting() {
|
|
84
|
-
current = {
|
|
117
|
+
current = {
|
|
118
|
+
...defaults,
|
|
119
|
+
features: { ...defaults.features },
|
|
120
|
+
branding: { ...defaults.branding },
|
|
121
|
+
};
|
|
85
122
|
initialised = false;
|
|
86
123
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
1
|
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
3
2
|
/**
|
|
4
3
|
* Built-in component registrations — Phase 3b + 3c.
|
|
@@ -7,21 +6,18 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
7
6
|
* own admin UI is registered with the ComponentRegistry before
|
|
8
7
|
* AppContent mounts the first `<Route path="component/...">`.
|
|
9
8
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* pre-wires specialised editors for `object` and `field` so admins
|
|
17
|
-
* still get the polished ObjectManager / FieldDesigner experience
|
|
18
|
-
* inside the unified Setup-app shell.
|
|
9
|
+
* Registers the generic metadata admin engine and a specialised
|
|
10
|
+
* permission-matrix editor for `permission`. The previous View /
|
|
11
|
+
* Dashboard / Page bespoke "designer" tabs were removed: they never
|
|
12
|
+
* produced usable output and confused authors. Those types now use the
|
|
13
|
+
* same JSONSchema-driven Form + Preview experience as every other
|
|
14
|
+
* metadata type.
|
|
19
15
|
*/
|
|
20
|
-
import { lazy, Suspense } from 'react';
|
|
21
16
|
import { registerAppComponent } from './componentRegistry';
|
|
22
17
|
import { MetadataDirectoryPage, MetadataResourceRouter, registerMetadataResource, } from '../views/metadata-admin';
|
|
23
18
|
import { PermissionMatrixEditPage } from '../views/metadata-admin/PermissionMatrixEditor';
|
|
24
|
-
import {
|
|
19
|
+
import { PackagesPage } from '../views/metadata-admin/PackagesPage';
|
|
20
|
+
import { isAggregatedViewContainer, viewDisplayType, } from '../views/metadata-admin/view-item-normalize';
|
|
25
21
|
/* -------------------------------------------------------------------------- */
|
|
26
22
|
/* 1) Top-level admin pages — bound to `metadata:directory` + `metadata:resource` */
|
|
27
23
|
/* -------------------------------------------------------------------------- */
|
|
@@ -35,18 +31,16 @@ registerAppComponent({
|
|
|
35
31
|
ref: 'metadata:resource',
|
|
36
32
|
label: 'Metadata Resource',
|
|
37
33
|
source: '@object-ui/app-shell',
|
|
38
|
-
// The router switches between list / new / edit / history based on
|
|
39
|
-
// the sub-path under `/component/metadata/resource/...`.
|
|
40
34
|
component: MetadataResourceRouter,
|
|
41
35
|
});
|
|
36
|
+
registerAppComponent({
|
|
37
|
+
ref: 'developer:packages',
|
|
38
|
+
label: 'Packages',
|
|
39
|
+
source: '@object-ui/app-shell',
|
|
40
|
+
component: PackagesPage,
|
|
41
|
+
});
|
|
42
42
|
/* -------------------------------------------------------------------------- */
|
|
43
|
-
/* 2)
|
|
44
|
-
/* out for the types that already have polished bespoke surfaces. */
|
|
45
|
-
/* */
|
|
46
|
-
/* Note: `object` and `field` intentionally use the generic engine so the */
|
|
47
|
-
/* Metadata Directory has a consistent list/edit experience across every */
|
|
48
|
-
/* type (only `permission`, `view`, `dashboard`, `page` keep bespoke */
|
|
49
|
-
/* editors below — those are visual designers, not list/form pages). */
|
|
43
|
+
/* 2) Generic resources — list + JSONSchema-driven form for every type. */
|
|
50
44
|
/* -------------------------------------------------------------------------- */
|
|
51
45
|
registerMetadataResource({
|
|
52
46
|
type: 'object',
|
|
@@ -96,58 +90,42 @@ registerMetadataResource({
|
|
|
96
90
|
],
|
|
97
91
|
});
|
|
98
92
|
/* -------------------------------------------------------------------------- */
|
|
99
|
-
/* 4)
|
|
100
|
-
/*
|
|
101
|
-
/*
|
|
93
|
+
/* 4) UI metadata types — list + form. No bespoke visual designers: views, */
|
|
94
|
+
/* dashboards and pages are authored as JSON metadata; the Preview tab */
|
|
95
|
+
/* renders them live for verification. */
|
|
102
96
|
/* -------------------------------------------------------------------------- */
|
|
103
|
-
const ObjectViewConfigurator = lazy(() => import('@object-ui/plugin-designer').then((m) => ({ default: m.ObjectViewConfigurator })));
|
|
104
|
-
const DashboardEditor = lazy(() => import('@object-ui/plugin-designer').then((m) => ({ default: m.DashboardEditor })));
|
|
105
|
-
const PageCanvasEditor = lazy(() => import('@object-ui/plugin-designer').then((m) => ({ default: m.PageCanvasEditor })));
|
|
106
|
-
function ViewEditPage(props) {
|
|
107
|
-
return (_jsx(DesignerEditorBody, { ...props, fromMetadata: (raw) => {
|
|
108
|
-
// Normalize backend view metadata into the shape ObjectViewConfigurator expects.
|
|
109
|
-
// Built-in views may omit `columns` or use legacy field names.
|
|
110
|
-
const base = raw && typeof raw === 'object' ? raw : {};
|
|
111
|
-
return {
|
|
112
|
-
viewType: base.viewType ?? base.type ?? 'grid',
|
|
113
|
-
columns: Array.isArray(base.columns) ? base.columns : [],
|
|
114
|
-
filters: Array.isArray(base.filters) ? base.filters : [],
|
|
115
|
-
sorts: Array.isArray(base.sorts) ? base.sorts : [],
|
|
116
|
-
pageSize: typeof base.pageSize === 'number' ? base.pageSize : 25,
|
|
117
|
-
...base,
|
|
118
|
-
};
|
|
119
|
-
}, renderDesigner: (value, onChange, readOnly) => (_jsx(Suspense, { fallback: _jsx(DesignerFallback, { label: "view designer" }), children: _jsx(ObjectViewConfigurator, { config: value, onChange: (next) => onChange(next), readOnly: readOnly }) })) }));
|
|
120
|
-
}
|
|
121
|
-
function DashboardEditPage(props) {
|
|
122
|
-
return (_jsx(DesignerEditorBody, { ...props, renderDesigner: (value, onChange, readOnly) => (_jsx(Suspense, { fallback: _jsx(DesignerFallback, { label: "dashboard editor" }), children: _jsx(DashboardEditor, { schema: value, onChange: (next) => onChange(next), readOnly: readOnly }) })) }));
|
|
123
|
-
}
|
|
124
|
-
function PageEditPage(props) {
|
|
125
|
-
return (_jsx(DesignerEditorBody, { ...props, renderDesigner: (value, onChange, readOnly) => (_jsx(Suspense, { fallback: _jsx(DesignerFallback, { label: "page canvas" }), children: _jsx(PageCanvasEditor, { schema: value, onChange: (next) => onChange(next), readOnly: readOnly }) })) }));
|
|
126
|
-
}
|
|
127
|
-
function DesignerFallback({ label }) {
|
|
128
|
-
return (_jsxs("div", { className: "p-6 text-sm text-muted-foreground", children: ["Loading ", label, "\u2026"] }));
|
|
129
|
-
}
|
|
130
97
|
registerMetadataResource({
|
|
131
98
|
type: 'view',
|
|
132
99
|
label: 'Views',
|
|
133
100
|
description: 'Saved list / kanban / calendar / gantt configurations on top of an object.',
|
|
134
101
|
domain: 'ui',
|
|
135
|
-
DesignerTab: ViewEditPage,
|
|
136
|
-
designerTabLabel: 'View designer',
|
|
137
102
|
listColumns: [
|
|
138
103
|
{ key: 'name', label: 'Name', width: '30%' },
|
|
139
104
|
{ key: 'object', label: 'Object', width: '20%' },
|
|
140
|
-
{
|
|
105
|
+
{
|
|
106
|
+
key: 'type',
|
|
107
|
+
label: 'Type',
|
|
108
|
+
width: '15%',
|
|
109
|
+
// Expanded ViewItems keep their display type under `config.type`
|
|
110
|
+
// and only the list/form family at the top level — derive it so the
|
|
111
|
+
// column shows "calendar" / "grid" / "form" instead of "—".
|
|
112
|
+
render: (_v, item) => viewDisplayType(item) ?? '—',
|
|
113
|
+
},
|
|
141
114
|
{ key: 'label', label: 'Label' },
|
|
142
115
|
],
|
|
116
|
+
// ADR-0017 — the framework exposes each view as a canonical first-class
|
|
117
|
+
// ViewItem ({ name, object, viewKind, label, config }). The inspector and
|
|
118
|
+
// preview read that shape directly (`draft.config`), so NO toDraft/fromDraft
|
|
119
|
+
// adapter is wired here — the canonical shape round-trips untouched.
|
|
120
|
+
// Hide the bare aggregated container the framework keeps for runtime
|
|
121
|
+
// dual-read — its views are already listed as expanded ViewItems.
|
|
122
|
+
listFilter: (item) => !isAggregatedViewContainer(item),
|
|
143
123
|
});
|
|
144
124
|
registerMetadataResource({
|
|
145
125
|
type: 'dashboard',
|
|
146
126
|
label: 'Dashboards',
|
|
147
127
|
description: 'Composed dashboards with charts, KPIs, and tables.',
|
|
148
128
|
domain: 'ui',
|
|
149
|
-
DesignerTab: DashboardEditPage,
|
|
150
|
-
designerTabLabel: 'Dashboard designer',
|
|
151
129
|
listColumns: [
|
|
152
130
|
{ key: 'name', label: 'Name', width: '30%' },
|
|
153
131
|
{ key: 'label', label: 'Label', width: '30%' },
|
|
@@ -157,13 +135,44 @@ registerMetadataResource({
|
|
|
157
135
|
registerMetadataResource({
|
|
158
136
|
type: 'page',
|
|
159
137
|
label: 'Pages',
|
|
160
|
-
description: 'Visual page layouts authored
|
|
138
|
+
description: 'Visual page layouts authored as JSON metadata.',
|
|
161
139
|
domain: 'ui',
|
|
162
|
-
DesignerTab: PageEditPage,
|
|
163
|
-
designerTabLabel: 'Page canvas',
|
|
164
140
|
listColumns: [
|
|
165
141
|
{ key: 'name', label: 'Name', width: '30%' },
|
|
166
142
|
{ key: 'label', label: 'Label', width: '30%' },
|
|
167
143
|
{ key: 'route', label: 'Route' },
|
|
168
144
|
],
|
|
169
145
|
});
|
|
146
|
+
/* -------------------------------------------------------------------------- */
|
|
147
|
+
/* 5) Documentation — the `book` navigation spine (ADR-0046 §6). A book is an */
|
|
148
|
+
/* ordered set of groups whose membership over docs is DERIVED from each */
|
|
149
|
+
/* group's include rule; the Preview tab renders that spine for authoring. */
|
|
150
|
+
/* -------------------------------------------------------------------------- */
|
|
151
|
+
registerMetadataResource({
|
|
152
|
+
type: 'book',
|
|
153
|
+
label: 'Documentation Books',
|
|
154
|
+
description: 'Documentation navigation spine — ordered groups with membership derived over docs (glob/tag rules), plus an explicit pages override for curated order.',
|
|
155
|
+
domain: 'system',
|
|
156
|
+
searchableFields: ['name', 'label', 'description', 'slug'],
|
|
157
|
+
listColumns: [
|
|
158
|
+
{ key: 'name', label: 'Name', width: '25%' },
|
|
159
|
+
{ key: 'label', label: 'Label', width: '25%' },
|
|
160
|
+
{
|
|
161
|
+
key: 'audience',
|
|
162
|
+
label: 'Audience',
|
|
163
|
+
width: '12%',
|
|
164
|
+
render: (v) => v == null
|
|
165
|
+
? 'org'
|
|
166
|
+
: typeof v === 'object' && v && 'profile' in v
|
|
167
|
+
? `profile: ${v.profile}`
|
|
168
|
+
: String(v),
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
key: 'groups',
|
|
172
|
+
label: 'Groups',
|
|
173
|
+
width: '10%',
|
|
174
|
+
render: (v) => (Array.isArray(v) ? String(v.length) : '0'),
|
|
175
|
+
},
|
|
176
|
+
{ key: 'description', label: 'Description' },
|
|
177
|
+
],
|
|
178
|
+
});
|
|
@@ -9,5 +9,5 @@ interface SkeletonDashboardProps {
|
|
|
9
9
|
/** Number of widget cards to render */
|
|
10
10
|
cards?: number;
|
|
11
11
|
}
|
|
12
|
-
export declare function SkeletonDashboard({ cards }: SkeletonDashboardProps): import("react
|
|
12
|
+
export declare function SkeletonDashboard({ cards }: SkeletonDashboardProps): import("react").JSX.Element;
|
|
13
13
|
export {};
|
|
@@ -11,5 +11,5 @@ interface SkeletonDetailProps {
|
|
|
11
11
|
/** Number of columns */
|
|
12
12
|
columns?: number;
|
|
13
13
|
}
|
|
14
|
-
export declare function SkeletonDetail({ fields, columns }: SkeletonDetailProps): import("react
|
|
14
|
+
export declare function SkeletonDetail({ fields, columns }: SkeletonDetailProps): import("react").JSX.Element;
|
|
15
15
|
export {};
|
|
@@ -11,5 +11,5 @@ interface SkeletonGridProps {
|
|
|
11
11
|
/** Number of columns to render */
|
|
12
12
|
columns?: number;
|
|
13
13
|
}
|
|
14
|
-
export declare function SkeletonGrid({ rows, columns }: SkeletonGridProps): import("react
|
|
14
|
+
export declare function SkeletonGrid({ rows, columns }: SkeletonGridProps): import("react").JSX.Element;
|
|
15
15
|
export {};
|