@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
|
@@ -25,6 +25,35 @@
|
|
|
25
25
|
* `sys_metadata_history`).
|
|
26
26
|
*/
|
|
27
27
|
import type { ComponentType, ReactNode } from 'react';
|
|
28
|
+
/**
|
|
29
|
+
* Live field-to-field derivation rule used by the generic create form.
|
|
30
|
+
* See {@link MetadataResourceConfig.createDerive}.
|
|
31
|
+
*/
|
|
32
|
+
export interface CreateDeriveRule {
|
|
33
|
+
/** Source field path (top-level key in the draft). */
|
|
34
|
+
from: string;
|
|
35
|
+
/** Target field path (top-level key in the draft). */
|
|
36
|
+
to: string;
|
|
37
|
+
/**
|
|
38
|
+
* Named transform applied to `from`'s value. Closed set on purpose:
|
|
39
|
+
*
|
|
40
|
+
* - `slugify` — "Sales Order" → `sales_order`. ASCII letters,
|
|
41
|
+
* digits, and `_`; CJK / non-Latin scripts yield
|
|
42
|
+
* empty (caller must enter `name` manually).
|
|
43
|
+
* - `plural-en` — naive English plural ("Order" → "Orders",
|
|
44
|
+
* "Box" → "Boxes", "Category" → "Categories").
|
|
45
|
+
* Non-Latin inputs returned unchanged.
|
|
46
|
+
* - `titlecase` — "sales_order" → "Sales Order".
|
|
47
|
+
* - `first-token` — strip everything past the first separator.
|
|
48
|
+
*/
|
|
49
|
+
transform: 'slugify' | 'plural-en' | 'titlecase' | 'first-token';
|
|
50
|
+
/**
|
|
51
|
+
* When true (default), the rule stops firing once the user manually
|
|
52
|
+
* edits the `to` field. Lets us auto-suggest a name and then get out
|
|
53
|
+
* of the way as soon as the operator takes over.
|
|
54
|
+
*/
|
|
55
|
+
untilUserEdits?: boolean;
|
|
56
|
+
}
|
|
28
57
|
export type MetadataDomain = 'data' | 'ui' | 'automation' | 'ai' | 'system' | 'platform' | 'identity' | 'security' | 'other';
|
|
29
58
|
/**
|
|
30
59
|
* One row in the registry — describes how the generic engine should
|
|
@@ -46,6 +75,15 @@ export interface MetadataResourceConfig {
|
|
|
46
75
|
primaryKey?: string;
|
|
47
76
|
/** Fields searched by the free-text filter. Default `['name','label','description']`. */
|
|
48
77
|
searchableFields?: string[];
|
|
78
|
+
/**
|
|
79
|
+
* Optional client-side list predicate — return `false` to HIDE a row
|
|
80
|
+
* from the resource list page. Runs against the unwrapped item shape
|
|
81
|
+
* after search / source / package filters. Use this to drop back-compat
|
|
82
|
+
* or synthetic rows (e.g. `view` hides the bare aggregated container the
|
|
83
|
+
* framework keeps for runtime dual-read, since its views are listed
|
|
84
|
+
* individually as expanded ViewItems). Pure function; keep it cheap.
|
|
85
|
+
*/
|
|
86
|
+
listFilter?: (item: Record<string, unknown>) => boolean;
|
|
49
87
|
/** Columns rendered in the list page. */
|
|
50
88
|
listColumns?: Array<{
|
|
51
89
|
key: string;
|
|
@@ -66,30 +104,12 @@ export interface MetadataResourceConfig {
|
|
|
66
104
|
* Fully custom edit page. Receives `{ type, name }`.
|
|
67
105
|
*
|
|
68
106
|
* Use this when the bespoke editor replaces the JSONSchema form entirely
|
|
69
|
-
* (e.g. PermissionMatrix grid).
|
|
70
|
-
* with the generic Form/Layers/References tabs, prefer `DesignerTab`.
|
|
107
|
+
* (e.g. PermissionMatrix grid).
|
|
71
108
|
*/
|
|
72
109
|
EditPage?: ComponentType<{
|
|
73
110
|
type: string;
|
|
74
111
|
name: string;
|
|
75
112
|
}>;
|
|
76
|
-
/**
|
|
77
|
-
* Optional visual designer that renders inside its own dedicated tab on
|
|
78
|
-
* the generic edit page, alongside Form / Layers / References. Receives
|
|
79
|
-
* `{ type, name }` and should render without an outer `PageShell` — the
|
|
80
|
-
* generic engine owns the chrome.
|
|
81
|
-
*
|
|
82
|
-
* When both `EditPage` and `DesignerTab` are provided, `EditPage` wins
|
|
83
|
-
* (full takeover); the tab variant is only used when `EditPage` is unset.
|
|
84
|
-
*/
|
|
85
|
-
DesignerTab?: ComponentType<{
|
|
86
|
-
type: string;
|
|
87
|
-
name: string;
|
|
88
|
-
}>;
|
|
89
|
-
/**
|
|
90
|
-
* Optional label for the Designer tab. Defaults to "Designer".
|
|
91
|
-
*/
|
|
92
|
-
designerTabLabel?: string;
|
|
93
113
|
/**
|
|
94
114
|
* Fully custom create page. Receives `{ type }`.
|
|
95
115
|
*/
|
|
@@ -100,6 +120,107 @@ export interface MetadataResourceConfig {
|
|
|
100
120
|
hiddenFields?: string[];
|
|
101
121
|
/** Suggested form field order (top to bottom). */
|
|
102
122
|
fieldOrder?: string[];
|
|
123
|
+
/**
|
|
124
|
+
* Field paths shown in the create form. Order is preserved.
|
|
125
|
+
*
|
|
126
|
+
* - When omitted, the engine falls back to: every `required` field
|
|
127
|
+
* from the JSONSchema, plus `name` and `label` if present.
|
|
128
|
+
* - Fields not in this list are still sent on save (after
|
|
129
|
+
* `createDefaults` merge), they're just not asked for.
|
|
130
|
+
*
|
|
131
|
+
* Example: `['label', 'pluralLabel', 'name', 'description']`.
|
|
132
|
+
*/
|
|
133
|
+
createFields?: string[];
|
|
134
|
+
/**
|
|
135
|
+
* Live derivation rules — typically used to auto-fill `name` from
|
|
136
|
+
* `label` (slug) and an English plural from a singular label. Each
|
|
137
|
+
* rule transforms the value at `from` and writes it to `to`. When
|
|
138
|
+
* `untilUserEdits` is true (default) the rule stops firing once the
|
|
139
|
+
* user edits the target field directly.
|
|
140
|
+
*
|
|
141
|
+
* Transforms are intentionally a small closed set so the contract
|
|
142
|
+
* stays declarative — adding "smart" behavior should mean adding a
|
|
143
|
+
* named transform here, not embedding code in registry entries.
|
|
144
|
+
*/
|
|
145
|
+
createDerive?: CreateDeriveRule[];
|
|
146
|
+
/**
|
|
147
|
+
* Shallow-merged into the saved body before PUT. Use this for the
|
|
148
|
+
* "empty content" shape that lets the user land in the designer
|
|
149
|
+
* (e.g. `{ fields: {} }` for object, `{ sections: [] }` for page).
|
|
150
|
+
*/
|
|
151
|
+
createDefaults?: Record<string, unknown>;
|
|
152
|
+
/**
|
|
153
|
+
* Optional body builder. When present, takes precedence over
|
|
154
|
+
* `createDefaults`: receives the user's `createFields` draft and
|
|
155
|
+
* returns the full body to PUT. Use this when the wire shape isn't
|
|
156
|
+
* a flat merge — e.g. `view` nests user-picked `object` inside
|
|
157
|
+
* `{ list: { data: { object } } }`, or `validation` picks the
|
|
158
|
+
* variant's required fields based on `draft.type`.
|
|
159
|
+
*
|
|
160
|
+
* Returned body should include the `identityField` (defaults to
|
|
161
|
+
* `name`) — the engine still re-injects it from the URL slug, but
|
|
162
|
+
* having it in the body keeps things explicit.
|
|
163
|
+
*/
|
|
164
|
+
createBuildBody?: (draft: Record<string, unknown>) => Record<string, unknown>;
|
|
165
|
+
/**
|
|
166
|
+
* Async create-time body augmentation that needs runtime context the pure
|
|
167
|
+
* {@link createBuildBody} can't reach — e.g. fetching another metadata item.
|
|
168
|
+
* Its returned fields are merged into the create body AFTER `createBuildBody`
|
|
169
|
+
* / `createDefaults`. Best-effort: errors are swallowed (the create still
|
|
170
|
+
* proceeds with the un-augmented body). Used by `page` to seed a record
|
|
171
|
+
* page's `regions` from the bound object's synthesized default detail page,
|
|
172
|
+
* so authoring starts from the auto-generated layout instead of blank.
|
|
173
|
+
*/
|
|
174
|
+
createSeed?: (draft: Record<string, unknown>, ctx: {
|
|
175
|
+
client: any;
|
|
176
|
+
}) => Record<string, unknown> | Promise<Record<string, unknown>>;
|
|
177
|
+
/**
|
|
178
|
+
* Optional load-time normaliser: the wire item returned by the server
|
|
179
|
+
* (`layered.effective` / a pending draft) → the draft shape the editor
|
|
180
|
+
* (SchemaForm / inspector / preview) expects. Applied on initial load
|
|
181
|
+
* AND after every save-refresh, so the editor always sees the canonical
|
|
182
|
+
* draft shape. Must be a pure function and a no-op for shapes it does
|
|
183
|
+
* not recognise. Pair with {@link fromDraft} for the save round-trip.
|
|
184
|
+
*
|
|
185
|
+
* Example: `view` unwraps an expanded ViewItem's `config` into the
|
|
186
|
+
* `{ list | form }` family key the View inspector reads.
|
|
187
|
+
*/
|
|
188
|
+
toDraft?: (item: Record<string, unknown>) => Record<string, unknown>;
|
|
189
|
+
/**
|
|
190
|
+
* Optional save-time serialiser — the inverse of {@link toDraft}. The
|
|
191
|
+
* editor draft → the wire shape PUT back to the server. Applied to the
|
|
192
|
+
* body just before save (edit mode). Must be a pure function and a
|
|
193
|
+
* no-op for drafts it does not recognise.
|
|
194
|
+
*/
|
|
195
|
+
fromDraft?: (draft: Record<string, unknown>) => Record<string, unknown>;
|
|
196
|
+
/**
|
|
197
|
+
* Optional schema override for create mode only. When present, the
|
|
198
|
+
* engine uses this schema (instead of the server's edit schema) to
|
|
199
|
+
* render the create form and validate the draft. The saved body still
|
|
200
|
+
* goes through `createBuildBody` / `createDefaults`, so this schema
|
|
201
|
+
* just describes the simplified create-time input.
|
|
202
|
+
*
|
|
203
|
+
* Use this for wrapper types like `view` whose top-level schema has
|
|
204
|
+
* no flat identity fields (only `{list,form,listViews,formViews}`):
|
|
205
|
+
* a `createSchema` lets us ask for `{name,label,object}` up front,
|
|
206
|
+
* then `createBuildBody` wraps them into the right nested shape.
|
|
207
|
+
*/
|
|
208
|
+
createSchema?: Record<string, unknown>;
|
|
209
|
+
/**
|
|
210
|
+
* Field path used as the metadata's identity — the URL slug AND
|
|
211
|
+
* the key on the saved body. Defaults to `'name'`. Override when
|
|
212
|
+
* the spec uses a different identifier (e.g. `permission` uses `id`
|
|
213
|
+
* in 7.1+). The engine reads the identity out of the draft / body
|
|
214
|
+
* at that path and writes it back at save time, so URL routing
|
|
215
|
+
* stays stable across types.
|
|
216
|
+
*/
|
|
217
|
+
identityField?: string;
|
|
218
|
+
/**
|
|
219
|
+
* One-line copy shown above the create form. Defaults to a generic
|
|
220
|
+
* "Create a new <type>". When set to the empty string, the hint row
|
|
221
|
+
* is suppressed.
|
|
222
|
+
*/
|
|
223
|
+
createHint?: string;
|
|
103
224
|
/** Whether the type opts in to the history tab. Default true. */
|
|
104
225
|
supportsHistory?: boolean;
|
|
105
226
|
/**
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { FormViewSpec } from './SchemaForm';
|
|
2
|
+
type JsonSchema = Record<string, any>;
|
|
3
|
+
/** JSONSchema for the whole (flat) Report document. */
|
|
4
|
+
export declare function getReportSchema(): JsonSchema | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* The canonical authoring FormView, with the fields the curated inspector
|
|
7
|
+
* owns directly (dataset / values / rows / name) pruned from every section so
|
|
8
|
+
* they are not double-rendered. Everything else — including the type-
|
|
9
|
+
* conditional joined-blocks section — flows through verbatim from the spec.
|
|
10
|
+
*
|
|
11
|
+
* Two alignment passes on top of the verbatim clone:
|
|
12
|
+
*
|
|
13
|
+
* 1. Fields the form declares but the *schema* no longer carries are pruned.
|
|
14
|
+
* The 9.0 single-form cutover removed the query-form fields (`objectName` /
|
|
15
|
+
* `columns` / `groupingsDown` / `groupingsAcross` / `filter`) from
|
|
16
|
+
* `ReportSchema`, but the bundled `reportForm` may still declare them (the
|
|
17
|
+
* spec-side form fix ships separately) — rendering controls whose output
|
|
18
|
+
* the schema strips at parse time. The schema is the source of truth; the
|
|
19
|
+
* pass is a no-op once the bundled form catches up.
|
|
20
|
+
*
|
|
21
|
+
* 2. `runtimeFilter` (which replaced `filter` in 9.0) is appended when the
|
|
22
|
+
* schema carries it and no section declares it, so the render-time scope
|
|
23
|
+
* filter stays editable in the meantime.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getReportForm(): FormViewSpec | undefined;
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
/**
|
|
3
|
+
* report-schema.ts — the SINGLE source of truth for Report authoring
|
|
4
|
+
* metadata, sourced directly from `@objectstack/spec` (the protocol) rather
|
|
5
|
+
* than hand-written field lists. Mirrors {@link ./view-schema.ts}.
|
|
6
|
+
*
|
|
7
|
+
* Why: the Report inspector must render the CORRECT config fields for EVERY
|
|
8
|
+
* report type (tabular / summary / matrix / joined) without hardcoding them.
|
|
9
|
+
* The spec already describes this:
|
|
10
|
+
*
|
|
11
|
+
* • `reportForm` — the canonical authoring FormView: sections for basics,
|
|
12
|
+
* columns, groupings, joined blocks, filter & chart, and
|
|
13
|
+
* advanced. One section (joined blocks) is type-
|
|
14
|
+
* conditional via a `visibleOn` CEL predicate.
|
|
15
|
+
* • `ReportSchema` — the zod schema for the whole (flat) Report document.
|
|
16
|
+
*
|
|
17
|
+
* We convert the zod schema to JSONSchema once (memoised) via zod 4's native
|
|
18
|
+
* `z.toJSONSchema`, and feed `{ form, schema }` straight into the existing
|
|
19
|
+
* {@link SchemaForm}. Adding a new report type or config prop to the spec
|
|
20
|
+
* therefore flows through automatically — zero code changes here.
|
|
21
|
+
*/
|
|
22
|
+
import { z } from 'zod';
|
|
23
|
+
import { ReportSchema, reportForm as specReportForm } from '@objectstack/spec/ui';
|
|
24
|
+
const TO_JSON_OPTS = { io: 'input', unrepresentable: 'any' };
|
|
25
|
+
/** Fields the curated inspector owns directly, pruned from the spec form. */
|
|
26
|
+
const FORM_FIELDS_OWNED_ELSEWHERE = new Set([
|
|
27
|
+
'dataset', // dataset binding rendered as a dedicated picker
|
|
28
|
+
'values', // managed by the dedicated measures list
|
|
29
|
+
'rows', // managed by the dedicated dimensions list
|
|
30
|
+
'columns', // matrix across-dimensions — dedicated list (ADR-0021 D2)
|
|
31
|
+
'name', // record identity — not user-editable here
|
|
32
|
+
]);
|
|
33
|
+
let _reportDocSchema;
|
|
34
|
+
let _reportDocFailed = false;
|
|
35
|
+
/** JSONSchema for the whole (flat) Report document. */
|
|
36
|
+
export function getReportSchema() {
|
|
37
|
+
if (_reportDocSchema || _reportDocFailed)
|
|
38
|
+
return _reportDocSchema;
|
|
39
|
+
try {
|
|
40
|
+
_reportDocSchema = z.toJSONSchema(ReportSchema, TO_JSON_OPTS);
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
_reportDocFailed = true;
|
|
44
|
+
if (typeof console !== 'undefined') {
|
|
45
|
+
console.warn('[report-schema] failed to derive Report JSONSchema from spec', err);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return _reportDocSchema;
|
|
49
|
+
}
|
|
50
|
+
let _reportForm;
|
|
51
|
+
/**
|
|
52
|
+
* The canonical authoring FormView, with the fields the curated inspector
|
|
53
|
+
* owns directly (dataset / values / rows / name) pruned from every section so
|
|
54
|
+
* they are not double-rendered. Everything else — including the type-
|
|
55
|
+
* conditional joined-blocks section — flows through verbatim from the spec.
|
|
56
|
+
*
|
|
57
|
+
* Two alignment passes on top of the verbatim clone:
|
|
58
|
+
*
|
|
59
|
+
* 1. Fields the form declares but the *schema* no longer carries are pruned.
|
|
60
|
+
* The 9.0 single-form cutover removed the query-form fields (`objectName` /
|
|
61
|
+
* `columns` / `groupingsDown` / `groupingsAcross` / `filter`) from
|
|
62
|
+
* `ReportSchema`, but the bundled `reportForm` may still declare them (the
|
|
63
|
+
* spec-side form fix ships separately) — rendering controls whose output
|
|
64
|
+
* the schema strips at parse time. The schema is the source of truth; the
|
|
65
|
+
* pass is a no-op once the bundled form catches up.
|
|
66
|
+
*
|
|
67
|
+
* 2. `runtimeFilter` (which replaced `filter` in 9.0) is appended when the
|
|
68
|
+
* schema carries it and no section declares it, so the render-time scope
|
|
69
|
+
* filter stays editable in the meantime.
|
|
70
|
+
*/
|
|
71
|
+
export function getReportForm() {
|
|
72
|
+
if (_reportForm)
|
|
73
|
+
return _reportForm;
|
|
74
|
+
if (!specReportForm || typeof specReportForm !== 'object')
|
|
75
|
+
return undefined;
|
|
76
|
+
try {
|
|
77
|
+
const clone = JSON.parse(JSON.stringify(specReportForm));
|
|
78
|
+
const schemaProps = getReportSchema()?.properties;
|
|
79
|
+
for (const section of clone.sections ?? []) {
|
|
80
|
+
section.fields = (section.fields ?? []).filter((f) => {
|
|
81
|
+
const name = typeof f === 'string' ? f : f?.field;
|
|
82
|
+
if (FORM_FIELDS_OWNED_ELSEWHERE.has(name))
|
|
83
|
+
return false;
|
|
84
|
+
// Schema-subset pass: drop form fields the schema no longer carries.
|
|
85
|
+
if (schemaProps && !(name in schemaProps))
|
|
86
|
+
return false;
|
|
87
|
+
return true;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (schemaProps && 'runtimeFilter' in schemaProps) {
|
|
91
|
+
const declared = new Set();
|
|
92
|
+
for (const s of clone.sections ?? []) {
|
|
93
|
+
for (const f of s.fields ?? []) {
|
|
94
|
+
declared.add(typeof f === 'string' ? f : f?.field);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (!declared.has('runtimeFilter')) {
|
|
98
|
+
clone.sections = [
|
|
99
|
+
...(clone.sections ?? []),
|
|
100
|
+
{
|
|
101
|
+
label: 'Filter',
|
|
102
|
+
description: 'Render-time scope filter, ANDed at query time.',
|
|
103
|
+
collapsible: true,
|
|
104
|
+
collapsed: true,
|
|
105
|
+
fields: [{ field: 'runtimeFilter', widget: 'json' }],
|
|
106
|
+
},
|
|
107
|
+
];
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Drop now-empty sections so we don't render bare headers.
|
|
111
|
+
clone.sections = (clone.sections ?? []).filter((s) => (s.fields ?? []).length > 0);
|
|
112
|
+
_reportForm = clone;
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
if (typeof console !== 'undefined') {
|
|
116
|
+
console.warn('[report-schema] failed to prepare reportForm from spec', err);
|
|
117
|
+
}
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
return _reportForm;
|
|
121
|
+
}
|
|
@@ -1,10 +1,63 @@
|
|
|
1
|
-
import { MetadataClient } from '@object-ui/data-objectstack';
|
|
1
|
+
import { MetadataClient, type MetadataDiagnosticsSummary, type MetadataDiagnosticsEntry } from '@object-ui/data-objectstack';
|
|
2
|
+
/**
|
|
3
|
+
* A declarative **type-level** action surfaced on a metadata type by the
|
|
4
|
+
* framework's `/meta/types` endpoint (spec `ActionSchema`). Mirrors how a
|
|
5
|
+
* business object carries `actions`, but scoped to the metadata type itself
|
|
6
|
+
* (e.g. datasource → "Test connection"). The metadata-admin engine renders
|
|
7
|
+
* these with the same button mechanism objects use — see `MetadataTypeActions`.
|
|
8
|
+
*/
|
|
9
|
+
export interface MetadataTypeAction {
|
|
10
|
+
/** Machine name (lowercase snake_case) — stable key. */
|
|
11
|
+
name: string;
|
|
12
|
+
/** Display label (plain string; framework already localised it). */
|
|
13
|
+
label?: string;
|
|
14
|
+
/** Interaction type. Only `'api'` is wired in the engine today. */
|
|
15
|
+
type?: string;
|
|
16
|
+
/**
|
|
17
|
+
* URL / endpoint. Supports `${ctx.X}` and `${param.X}` interpolation —
|
|
18
|
+
* the engine resolves `${ctx.recordId}` to the current item name.
|
|
19
|
+
*/
|
|
20
|
+
target?: string;
|
|
21
|
+
/** HTTP method for `type:'api'` (defaults to POST). */
|
|
22
|
+
method?: string;
|
|
23
|
+
/** Lucide icon name. */
|
|
24
|
+
icon?: string;
|
|
25
|
+
/** Button visual variant. */
|
|
26
|
+
variant?: 'primary' | 'secondary' | 'danger' | 'ghost' | 'link';
|
|
27
|
+
/** Locations where this action is visible (list_toolbar, record_header, …). */
|
|
28
|
+
locations?: string[];
|
|
29
|
+
/** Confirmation prompt shown before execution. */
|
|
30
|
+
confirmText?: string;
|
|
31
|
+
/** Reload the view after a successful run. */
|
|
32
|
+
refreshAfter?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Inputs. Either an array of ActionParam descriptors (collected from the user
|
|
35
|
+
* in a dialog before running — same as business-object actions), or a static
|
|
36
|
+
* key→value bag forwarded as the request body.
|
|
37
|
+
*/
|
|
38
|
+
params?: Record<string, unknown> | unknown[];
|
|
39
|
+
/** Success toast message (when no resultDialog). */
|
|
40
|
+
successMessage?: string;
|
|
41
|
+
/** Error toast prefix shown when the action fails. */
|
|
42
|
+
errorMessage?: string;
|
|
43
|
+
/** Render the API response in a result dialog (spec Action.resultDialog). */
|
|
44
|
+
resultDialog?: Record<string, unknown>;
|
|
45
|
+
}
|
|
2
46
|
export interface RichMetadataTypeEntry {
|
|
3
47
|
type: string;
|
|
4
48
|
label?: string;
|
|
5
49
|
description?: string;
|
|
6
50
|
domain?: string;
|
|
7
51
|
allowOrgOverride?: boolean;
|
|
52
|
+
/** Declarative type-level actions (GAP-1). Rendered by `MetadataTypeActions`. */
|
|
53
|
+
actions?: MetadataTypeAction[];
|
|
54
|
+
/**
|
|
55
|
+
* Two-tier model (PR-10d.7): brand-new items of this type can be
|
|
56
|
+
* authored at runtime even when `allowOrgOverride` is false. UI
|
|
57
|
+
* affordances ("+ New", Save, Delete on DB-only items) should
|
|
58
|
+
* activate when either flag is true.
|
|
59
|
+
*/
|
|
60
|
+
allowRuntimeCreate?: boolean;
|
|
8
61
|
/** 'registry' = ADR opt-in; 'env' = unlocked via OBJECTSTACK_METADATA_WRITABLE. */
|
|
9
62
|
overrideSource?: 'registry' | 'env';
|
|
10
63
|
supportsOverlay?: boolean;
|
|
@@ -16,7 +69,15 @@ export interface RichMetadataTypeEntry {
|
|
|
16
69
|
/** UI hints (icon, color, etc.) the framework may include. */
|
|
17
70
|
ui?: Record<string, unknown>;
|
|
18
71
|
}
|
|
19
|
-
/**
|
|
72
|
+
/**
|
|
73
|
+
* Use a single MetadataClient for the whole admin engine.
|
|
74
|
+
*
|
|
75
|
+
* The base resolves to `VITE_SERVER_URL` so `/meta/*` writes reach the backend
|
|
76
|
+
* even when the SPA and API are served from different origins (the split-origin
|
|
77
|
+
* `pnpm dev` setup: SPA on :5180, backend on :3000). In same-origin production
|
|
78
|
+
* `VITE_SERVER_URL` is unset → falls back to `''` (relative, current origin),
|
|
79
|
+
* matching every other client in the app (see `apps/console/src/main.tsx`).
|
|
80
|
+
*/
|
|
20
81
|
export declare function useMetadataClient(environmentId?: string): MetadataClient;
|
|
21
82
|
/**
|
|
22
83
|
* Fetch and cache the rich `/meta/types` registry response. Most pages
|
|
@@ -35,3 +96,40 @@ export declare function useMetadataTypes(client: MetadataClient): {
|
|
|
35
96
|
export declare function useTypesIndex(entries: RichMetadataTypeEntry[]): Record<string, RichMetadataTypeEntry>;
|
|
36
97
|
/** Free-text filter helper used by list pages + QuickFind. */
|
|
37
98
|
export declare function matchesQuery(item: Record<string, unknown>, query: string, fields?: string[]): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Fetch the cross-type `/meta/diagnostics` sweep once and expose
|
|
101
|
+
* both the raw entry list and a per-type aggregate (used by the
|
|
102
|
+
* directory page tiles + the governance overview page).
|
|
103
|
+
*
|
|
104
|
+
* `severity` defaults to `'error'` — pass `'warning'` to include
|
|
105
|
+
* warning-only entries in the count.
|
|
106
|
+
*
|
|
107
|
+
* `packageId` (optional) scopes the whole sweep to a single software
|
|
108
|
+
* package: the server then reports per-package counts/packages, so tile
|
|
109
|
+
* numbers match the scoped list pages. Omit for a global sweep.
|
|
110
|
+
*/
|
|
111
|
+
export declare function useGlobalDiagnostics(client: MetadataClient, severity?: 'error' | 'warning', packageId?: string): {
|
|
112
|
+
loading: boolean;
|
|
113
|
+
error: string | null;
|
|
114
|
+
summary: MetadataDiagnosticsSummary;
|
|
115
|
+
byType: Record<string, number>;
|
|
116
|
+
/**
|
|
117
|
+
* Per-type warning-only count. Only populated when `severity` is
|
|
118
|
+
* `'warning'` (server omits warnings when severity is `'error'`).
|
|
119
|
+
*/
|
|
120
|
+
warnByType: Record<string, number>;
|
|
121
|
+
/** Per-type item count (from server-side sweep). Empty on older servers. */
|
|
122
|
+
countsByType: Record<string, number>;
|
|
123
|
+
/** Per-type *locked* item count (where `_lock` ≠ `none`). Empty on older servers. */
|
|
124
|
+
lockedByType: Record<string, number>;
|
|
125
|
+
/** Per-type list of contributing packages. Empty on older servers. */
|
|
126
|
+
packagesByType: Record<string, string[]>;
|
|
127
|
+
/** Sorted, deduped union of all packages seen across all types. */
|
|
128
|
+
allPackages: string[];
|
|
129
|
+
reload: () => void;
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Re-export so consumers can type their callbacks without reaching
|
|
133
|
+
* into the data-objectstack package directly.
|
|
134
|
+
*/
|
|
135
|
+
export type { MetadataDiagnosticsEntry, MetadataDiagnosticsSummary };
|
|
@@ -15,12 +15,45 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { useEffect, useMemo, useState } from 'react';
|
|
17
17
|
import { MetadataClient } from '@object-ui/data-objectstack';
|
|
18
|
-
|
|
18
|
+
import { usePreviewDrafts } from '../../preview/PreviewModeContext';
|
|
19
|
+
/**
|
|
20
|
+
* Use a single MetadataClient for the whole admin engine.
|
|
21
|
+
*
|
|
22
|
+
* The base resolves to `VITE_SERVER_URL` so `/meta/*` writes reach the backend
|
|
23
|
+
* even when the SPA and API are served from different origins (the split-origin
|
|
24
|
+
* `pnpm dev` setup: SPA on :5180, backend on :3000). In same-origin production
|
|
25
|
+
* `VITE_SERVER_URL` is unset → falls back to `''` (relative, current origin),
|
|
26
|
+
* matching every other client in the app (see `apps/console/src/main.tsx`).
|
|
27
|
+
*/
|
|
19
28
|
export function useMetadataClient(environmentId) {
|
|
29
|
+
// ADR-0037: inside a draft-preview tree (?preview=draft), reads overlay
|
|
30
|
+
// pending drafts on the active registry. Writes are unaffected.
|
|
31
|
+
const previewDrafts = usePreviewDrafts();
|
|
20
32
|
return useMemo(() => {
|
|
21
|
-
const
|
|
33
|
+
const baseUrl = (typeof import.meta !== 'undefined' &&
|
|
34
|
+
import.meta.env?.VITE_SERVER_URL) ||
|
|
35
|
+
'';
|
|
36
|
+
const c = new MetadataClient({ baseUrl, previewDrafts });
|
|
22
37
|
return environmentId ? c.withEnvironment(environmentId) : c;
|
|
23
|
-
}, [environmentId]);
|
|
38
|
+
}, [environmentId, previewDrafts]);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Drop camelCase aliases when the registry also exposes a snake_case
|
|
42
|
+
* sibling. The framework's `/meta/types` endpoint surfaces both forms
|
|
43
|
+
* for some 7.1 system types (e.g. `analytics_cube` + `analyticsCube`,
|
|
44
|
+
* `sharing_rule` + `sharingRule`) and we don't want the directory to
|
|
45
|
+
* render the same logical type twice. Keep the snake_case row because
|
|
46
|
+
* it matches our `TYPE_LABELS_*` keys and the framework's preferred
|
|
47
|
+
* file naming convention.
|
|
48
|
+
*/
|
|
49
|
+
function dedupeCamelAliases(list) {
|
|
50
|
+
const have = new Set(list.map((e) => e.type));
|
|
51
|
+
return list.filter((e) => {
|
|
52
|
+
if (!/[A-Z]/.test(e.type))
|
|
53
|
+
return true;
|
|
54
|
+
const snake = e.type.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`);
|
|
55
|
+
return !(snake !== e.type && have.has(snake));
|
|
56
|
+
});
|
|
24
57
|
}
|
|
25
58
|
/**
|
|
26
59
|
* Fetch and cache the rich `/meta/types` registry response. Most pages
|
|
@@ -52,7 +85,7 @@ export function useMetadataTypes(client) {
|
|
|
52
85
|
}
|
|
53
86
|
}
|
|
54
87
|
if (!cancelled) {
|
|
55
|
-
setEntries(list);
|
|
88
|
+
setEntries(dedupeCamelAliases(list));
|
|
56
89
|
setLoading(false);
|
|
57
90
|
}
|
|
58
91
|
}
|
|
@@ -94,3 +127,121 @@ export function matchesQuery(item, query, fields = ['name', 'label', 'descriptio
|
|
|
94
127
|
}
|
|
95
128
|
return false;
|
|
96
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Fetch the cross-type `/meta/diagnostics` sweep once and expose
|
|
132
|
+
* both the raw entry list and a per-type aggregate (used by the
|
|
133
|
+
* directory page tiles + the governance overview page).
|
|
134
|
+
*
|
|
135
|
+
* `severity` defaults to `'error'` — pass `'warning'` to include
|
|
136
|
+
* warning-only entries in the count.
|
|
137
|
+
*
|
|
138
|
+
* `packageId` (optional) scopes the whole sweep to a single software
|
|
139
|
+
* package: the server then reports per-package counts/packages, so tile
|
|
140
|
+
* numbers match the scoped list pages. Omit for a global sweep.
|
|
141
|
+
*/
|
|
142
|
+
export function useGlobalDiagnostics(client, severity = 'error', packageId) {
|
|
143
|
+
const [loading, setLoading] = useState(true);
|
|
144
|
+
const [error, setError] = useState(null);
|
|
145
|
+
const [summary, setSummary] = useState({
|
|
146
|
+
entries: [],
|
|
147
|
+
total: 0,
|
|
148
|
+
scannedTypes: 0,
|
|
149
|
+
scannedItems: 0,
|
|
150
|
+
stats: {},
|
|
151
|
+
});
|
|
152
|
+
const [tick, setTick] = useState(0);
|
|
153
|
+
useEffect(() => {
|
|
154
|
+
let cancelled = false;
|
|
155
|
+
setLoading(true);
|
|
156
|
+
setError(null);
|
|
157
|
+
(async () => {
|
|
158
|
+
try {
|
|
159
|
+
const res = await client.diagnostics(packageId ? { severity, packageId } : { severity });
|
|
160
|
+
if (cancelled)
|
|
161
|
+
return;
|
|
162
|
+
setSummary(res);
|
|
163
|
+
setLoading(false);
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
if (cancelled)
|
|
167
|
+
return;
|
|
168
|
+
// Older servers without /meta/diagnostics: surface as empty,
|
|
169
|
+
// not as a fatal error — the directory page should still load.
|
|
170
|
+
setError(err?.message ?? String(err));
|
|
171
|
+
setSummary({ entries: [], total: 0, scannedTypes: 0, scannedItems: 0, stats: {} });
|
|
172
|
+
setLoading(false);
|
|
173
|
+
}
|
|
174
|
+
})();
|
|
175
|
+
return () => {
|
|
176
|
+
cancelled = true;
|
|
177
|
+
};
|
|
178
|
+
}, [client, severity, packageId, tick]);
|
|
179
|
+
const byType = useMemo(() => {
|
|
180
|
+
const c = {};
|
|
181
|
+
for (const e of summary.entries) {
|
|
182
|
+
// Only count entries that actually have errors — when severity is
|
|
183
|
+
// 'warning' the server returns BOTH error and warning-only rows
|
|
184
|
+
// in the same list, and we want a strict error count here so
|
|
185
|
+
// headline numbers stay consistent across severity modes.
|
|
186
|
+
if ((e.diagnostics?.errors?.length ?? 0) > 0) {
|
|
187
|
+
c[e.type] = (c[e.type] ?? 0) + 1;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return c;
|
|
191
|
+
}, [summary]);
|
|
192
|
+
const warnByType = useMemo(() => {
|
|
193
|
+
const c = {};
|
|
194
|
+
for (const e of summary.entries) {
|
|
195
|
+
const errs = e.diagnostics?.errors?.length ?? 0;
|
|
196
|
+
const warns = e.diagnostics?.warnings?.length ?? 0;
|
|
197
|
+
// "Warn-only" = no errors, ≥1 warning. Items with errors are
|
|
198
|
+
// already counted in `byType` and the louder tier dominates the
|
|
199
|
+
// UI badge — surfacing them under both would be noisy.
|
|
200
|
+
if (errs === 0 && warns > 0) {
|
|
201
|
+
c[e.type] = (c[e.type] ?? 0) + 1;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return c;
|
|
205
|
+
}, [summary]);
|
|
206
|
+
const countsByType = useMemo(() => {
|
|
207
|
+
const c = {};
|
|
208
|
+
for (const [t, s] of Object.entries(summary.stats ?? {}))
|
|
209
|
+
c[t] = s.count;
|
|
210
|
+
return c;
|
|
211
|
+
}, [summary]);
|
|
212
|
+
const lockedByType = useMemo(() => {
|
|
213
|
+
const c = {};
|
|
214
|
+
for (const [t, s] of Object.entries(summary.stats ?? {})) {
|
|
215
|
+
if (typeof s.locked === 'number' && s.locked > 0) {
|
|
216
|
+
c[t] = s.locked;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return c;
|
|
220
|
+
}, [summary]);
|
|
221
|
+
const packagesByType = useMemo(() => {
|
|
222
|
+
const c = {};
|
|
223
|
+
for (const [t, s] of Object.entries(summary.stats ?? {}))
|
|
224
|
+
c[t] = s.packages ?? [];
|
|
225
|
+
return c;
|
|
226
|
+
}, [summary]);
|
|
227
|
+
const allPackages = useMemo(() => {
|
|
228
|
+
const set = new Set();
|
|
229
|
+
for (const s of Object.values(summary.stats ?? {})) {
|
|
230
|
+
for (const p of s.packages ?? [])
|
|
231
|
+
set.add(p);
|
|
232
|
+
}
|
|
233
|
+
return [...set].sort();
|
|
234
|
+
}, [summary]);
|
|
235
|
+
return {
|
|
236
|
+
loading,
|
|
237
|
+
error,
|
|
238
|
+
summary,
|
|
239
|
+
byType,
|
|
240
|
+
warnByType,
|
|
241
|
+
countsByType,
|
|
242
|
+
lockedByType,
|
|
243
|
+
packagesByType,
|
|
244
|
+
allPackages,
|
|
245
|
+
reload: () => setTick((n) => n + 1),
|
|
246
|
+
};
|
|
247
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* True when `item` is a **bare aggregated view container** — the legacy
|
|
3
|
+
* per-object `defineView({ list, form, listViews, formViews })` document
|
|
4
|
+
* the framework still registers under the bare `<object>` key for runtime
|
|
5
|
+
* back-compat (dual-read). It carries NO `viewKind` discriminant and holds
|
|
6
|
+
* at least one of the aggregate buckets.
|
|
7
|
+
*
|
|
8
|
+
* Studio expands every such container into independent `<object>.<viewKey>`
|
|
9
|
+
* ViewItems (including the defaults), so the container row is fully
|
|
10
|
+
* redundant in the metadata list and should be hidden there.
|
|
11
|
+
*/
|
|
12
|
+
export declare function isAggregatedViewContainer(item: unknown): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Derive the display "type" of a view list row. Expanded ViewItems keep
|
|
15
|
+
* their display type under `config.type` (`grid` / `calendar` / `kanban`
|
|
16
|
+
* / …) and only the list/form *family* at the top level (`viewKind`); a
|
|
17
|
+
* legacy flat view carries `type` directly. Returns `undefined` when
|
|
18
|
+
* nothing is resolvable (e.g. an aggregated container).
|
|
19
|
+
*/
|
|
20
|
+
export declare function viewDisplayType(item: unknown): string | undefined;
|