@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
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
3
|
+
/**
|
|
4
|
+
* ScreenView — the presentational body of a flow `screen` (framework
|
|
5
|
+
* screen-flow runtime, ADR-0019): the flat input-field list OR the named
|
|
6
|
+
* object's full create/edit form.
|
|
7
|
+
*
|
|
8
|
+
* Extracted from {@link FlowRunner} so the exact same renderer drives both the
|
|
9
|
+
* runtime (paused screen-flow → collect input → resume) and the Studio design
|
|
10
|
+
* preview ({@link ScreenPreview}). Keeping ONE renderer is deliberate: a
|
|
11
|
+
* separate preview reimplementation would drift from runtime — the
|
|
12
|
+
* simulator-vs-engine divergence fixed in #1927.
|
|
13
|
+
*
|
|
14
|
+
* It owns no submit/resume behaviour and no Dialog chrome — the caller frames
|
|
15
|
+
* it (the runtime wraps it in a Dialog + footer and resumes the run; the
|
|
16
|
+
* preview wraps it in a card and hides the persist bar).
|
|
17
|
+
*/
|
|
18
|
+
import { Input, Label, Textarea, Checkbox, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, cn, } from '@object-ui/components';
|
|
19
|
+
import { ObjectForm } from '@object-ui/plugin-form';
|
|
20
|
+
/** Whether a screen renders the object-form body rather than the flat fields. */
|
|
21
|
+
export function isObjectFormScreen(screen) {
|
|
22
|
+
return screen.kind === 'object-form' && !!screen.objectName;
|
|
23
|
+
}
|
|
24
|
+
/** Seed flat-field values from each field's `defaultValue`. */
|
|
25
|
+
export function initialScreenValues(screen) {
|
|
26
|
+
const v = {};
|
|
27
|
+
for (const f of screen.fields)
|
|
28
|
+
if (f.defaultValue !== undefined)
|
|
29
|
+
v[f.name] = f.defaultValue;
|
|
30
|
+
return v;
|
|
31
|
+
}
|
|
32
|
+
export function ScreenView({ screen, values, onValueChange, dataSource, objects, objectForm, className }) {
|
|
33
|
+
if (isObjectFormScreen(screen)) {
|
|
34
|
+
const objectDef = Array.isArray(objects) ? objects.find((o) => o?.name === screen.objectName) : undefined;
|
|
35
|
+
const subforms = objectDef
|
|
36
|
+
? (objectDef.form?.subforms ?? objectDef.formViews?.default?.subforms)
|
|
37
|
+
: undefined;
|
|
38
|
+
// Full object create/edit form (with inline master-detail grids). At runtime
|
|
39
|
+
// the form owns its own Save/Cancel bar; the preview hides it.
|
|
40
|
+
return (_jsx("div", { className: cn('py-2', className), children: dataSource ? (_jsx(ObjectForm, { schema: {
|
|
41
|
+
type: 'object-form',
|
|
42
|
+
formType: 'simple',
|
|
43
|
+
objectName: screen.objectName,
|
|
44
|
+
mode: screen.mode === 'edit' ? 'edit' : 'create',
|
|
45
|
+
recordId: screen.mode === 'edit' ? screen.recordId : undefined,
|
|
46
|
+
...(screen.defaults ? { initialValues: screen.defaults } : {}),
|
|
47
|
+
layout: 'vertical',
|
|
48
|
+
subforms,
|
|
49
|
+
onSuccess: objectForm?.onSuccess,
|
|
50
|
+
onCancel: objectForm?.onCancel,
|
|
51
|
+
showSubmit: objectForm?.showSubmit ?? true,
|
|
52
|
+
showCancel: objectForm?.showCancel ?? true,
|
|
53
|
+
submitText: objectForm?.submitText ?? 'Save & Continue',
|
|
54
|
+
cancelText: objectForm?.cancelText ?? 'Cancel',
|
|
55
|
+
}, dataSource: dataSource }, screen.nodeId)) : (_jsx("div", { className: "text-sm text-destructive py-4", children: objectForm?.noDataSourceMessage ?? 'This step renders an object form but no data source is available.' })) }));
|
|
56
|
+
}
|
|
57
|
+
return (_jsx("div", { className: cn('space-y-4 py-2', className), children: screen.fields.map((f) => (_jsxs("div", { className: "space-y-1.5", children: [_jsxs(Label, { htmlFor: `ff-${f.name}`, className: "text-sm", children: [f.label || f.name, f.required && _jsx("span", { className: "text-destructive", children: " *" })] }), _jsx(FieldInput, { field: f, value: values[f.name], onChange: (v) => onValueChange(f.name, v) })] }, f.name))) }));
|
|
58
|
+
}
|
|
59
|
+
export function FieldInput({ field, value, onChange }) {
|
|
60
|
+
const id = `ff-${field.name}`;
|
|
61
|
+
const t = (field.type || 'text').toLowerCase();
|
|
62
|
+
if (Array.isArray(field.options) && field.options.length > 0) {
|
|
63
|
+
return (_jsxs(Select, { value: value != null ? String(value) : undefined, onValueChange: (v) => onChange(v), children: [_jsx(SelectTrigger, { id: id, children: _jsx(SelectValue, { placeholder: field.placeholder || 'Select…' }) }), _jsx(SelectContent, { children: field.options.map((o, i) => (_jsx(SelectItem, { value: String(o.value), children: o.label }, i))) })] }));
|
|
64
|
+
}
|
|
65
|
+
if (t === 'boolean' || t === 'checkbox') {
|
|
66
|
+
return _jsx(Checkbox, { id: id, checked: value === true, onCheckedChange: (c) => onChange(c === true) });
|
|
67
|
+
}
|
|
68
|
+
if (t === 'textarea' || t === 'markdown') {
|
|
69
|
+
return _jsx(Textarea, { id: id, value: value ?? '', placeholder: field.placeholder, onChange: (e) => onChange(e.target.value) });
|
|
70
|
+
}
|
|
71
|
+
const htmlType = t === 'number' || t === 'currency' ? 'number' : t === 'email' ? 'email' : t === 'date' ? 'date' : 'text';
|
|
72
|
+
return (_jsx(Input, { id: id, type: htmlType, value: value ?? '', placeholder: field.placeholder, onChange: (e) => onChange(htmlType === 'number' ? (e.target.value === '' ? undefined : Number(e.target.value)) : e.target.value) }));
|
|
73
|
+
}
|
|
@@ -13,6 +13,9 @@ import { Input, Card, CardContent, Badge, } from '@object-ui/components';
|
|
|
13
13
|
import { Search, Database, LayoutDashboard, FileText, BarChart3, ArrowLeft, } from 'lucide-react';
|
|
14
14
|
import { useObjectTranslation } from '@object-ui/i18n';
|
|
15
15
|
import { useMetadata } from '../providers/MetadataProvider';
|
|
16
|
+
import { matchAppBySegment } from '../utils/appRoute';
|
|
17
|
+
import { resolveHref } from '@object-ui/layout';
|
|
18
|
+
import { useAuth } from '@object-ui/auth';
|
|
16
19
|
/** Flatten nested navigation groups into a flat list of leaf items */
|
|
17
20
|
function flattenNavigation(items) {
|
|
18
21
|
const result = [];
|
|
@@ -46,30 +49,17 @@ export function SearchResultsPage() {
|
|
|
46
49
|
const [query, setQuery] = useState(queryParam);
|
|
47
50
|
const { apps: metadataApps } = useMetadata();
|
|
48
51
|
const apps = metadataApps || [];
|
|
49
|
-
const activeApp = apps
|
|
52
|
+
const activeApp = matchAppBySegment(apps, appName) || apps[0];
|
|
50
53
|
const baseUrl = `/apps/${appName}`;
|
|
54
|
+
const { user } = useAuth();
|
|
51
55
|
// Build searchable items from navigation
|
|
52
56
|
const allItems = useMemo(() => {
|
|
53
57
|
if (!activeApp)
|
|
54
58
|
return [];
|
|
55
59
|
const navItems = flattenNavigation(activeApp.navigation || []);
|
|
60
|
+
const templateContext = { currentUserId: user?.id ?? null };
|
|
56
61
|
return navItems.map((item) => {
|
|
57
|
-
|
|
58
|
-
if (item.type === 'object') {
|
|
59
|
-
href = `${baseUrl}/${item.objectName}`;
|
|
60
|
-
if (item.viewName)
|
|
61
|
-
href += `/view/${item.viewName}`;
|
|
62
|
-
}
|
|
63
|
-
else if (item.type === 'dashboard')
|
|
64
|
-
href = `${baseUrl}/dashboard/${item.dashboardName}`;
|
|
65
|
-
else if (item.type === 'page')
|
|
66
|
-
href = `${baseUrl}/page/${item.pageName}`;
|
|
67
|
-
else if (item.type === 'report')
|
|
68
|
-
href = `${baseUrl}/report/${item.reportName}`;
|
|
69
|
-
else if (item.type === 'component' && item.componentRef) {
|
|
70
|
-
const segs = String(item.componentRef).split(':').filter(Boolean);
|
|
71
|
-
href = `${baseUrl}/component/${segs.join('/')}`;
|
|
72
|
-
}
|
|
62
|
+
const { href } = resolveHref(item, baseUrl, templateContext);
|
|
73
63
|
return {
|
|
74
64
|
id: item.id,
|
|
75
65
|
label: item.label || item.objectName || item.dashboardName || item.pageName || item.reportName || '',
|
|
@@ -78,7 +68,7 @@ export function SearchResultsPage() {
|
|
|
78
68
|
description: item.description,
|
|
79
69
|
};
|
|
80
70
|
}).filter((item) => item.href !== '#');
|
|
81
|
-
}, [activeApp, baseUrl]);
|
|
71
|
+
}, [activeApp, baseUrl, user?.id]);
|
|
82
72
|
// Filter results
|
|
83
73
|
const results = useMemo(() => {
|
|
84
74
|
if (!query.trim())
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ViewConfigPanel —
|
|
2
|
+
* ViewConfigPanel — the runtime ObjectView's right-rail "view editor".
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
4
|
+
* MIGRATED: this panel now hosts the studio's spec-driven
|
|
5
|
+
* {@link ViewVariantInspector} instead of the legacy `buildViewConfigSchema`
|
|
6
|
+
* engine, so the runtime and the metadata studio share ONE inspector. The
|
|
7
|
+
* inspector renders the per-view-type config fields straight from
|
|
8
|
+
* `@objectstack/spec` (grid / kanban / calendar / gallery / …) plus the
|
|
9
|
+
* shared column / filter / sort / toolbar sections.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* The runtime ObjectView keeps the active view as a FLAT NamedListView; the
|
|
12
|
+
* inspector authors a canonical ViewItem draft. {@link view-config-adapter}
|
|
13
|
+
* bridges the two shapes so the `sys_view` persistence path is untouched:
|
|
14
|
+
* edits live as a ViewItem draft while the panel is open, then flatten back
|
|
15
|
+
* to the runtime view shape on update / save / create.
|
|
16
|
+
*
|
|
17
|
+
* Field loading is network-free: `objectDef.fields` is mapped into the
|
|
18
|
+
* inspector's `objectFieldsOverride` so neither the inspector nor its
|
|
19
|
+
* column editor issue a `client.get('object', …)` request.
|
|
13
20
|
*/
|
|
14
21
|
/** Editor panel types that can be opened from clickable rows */
|
|
15
22
|
export type EditorPanelType = 'columns' | 'filter' | 'sort';
|
|
@@ -29,13 +36,6 @@ export interface ViewConfigPanelProps {
|
|
|
29
36
|
filter?: any[];
|
|
30
37
|
sort?: any[];
|
|
31
38
|
description?: string;
|
|
32
|
-
showSearch?: boolean;
|
|
33
|
-
showFilters?: boolean;
|
|
34
|
-
showSort?: boolean;
|
|
35
|
-
allowExport?: boolean;
|
|
36
|
-
showDescription?: boolean;
|
|
37
|
-
addRecordViaForm?: boolean;
|
|
38
|
-
exportOptions?: any;
|
|
39
39
|
[key: string]: any;
|
|
40
40
|
};
|
|
41
41
|
/** The object definition */
|
|
@@ -54,5 +54,12 @@ export interface ViewConfigPanelProps {
|
|
|
54
54
|
onSave?: (draft: Record<string, any>) => void;
|
|
55
55
|
/** Called when create-mode view is created */
|
|
56
56
|
onCreate?: (config: Record<string, any>) => void;
|
|
57
|
+
/**
|
|
58
|
+
* Studio metadata client — drives saves and the ADR-0034 draft/publish
|
|
59
|
+
* chrome ({@link RuntimeDraftBar}).
|
|
60
|
+
*/
|
|
61
|
+
metadataClient?: any;
|
|
62
|
+
/** Called after a publish / discard so the host can refresh its read. */
|
|
63
|
+
onAfterChange?: () => void;
|
|
57
64
|
}
|
|
58
|
-
export declare function ViewConfigPanel({ open, onClose, mode, activeView, objectDef, onViewUpdate, onSave, onCreate }: ViewConfigPanelProps): import("react
|
|
65
|
+
export declare function ViewConfigPanel({ open, onClose, mode, activeView, objectDef, onViewUpdate, onSave, onCreate, metadataClient, onAfterChange }: ViewConfigPanelProps): import("react").JSX.Element;
|
|
@@ -1,112 +1,156 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
|
-
* ViewConfigPanel —
|
|
3
|
+
* ViewConfigPanel — the runtime ObjectView's right-rail "view editor".
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
5
|
+
* MIGRATED: this panel now hosts the studio's spec-driven
|
|
6
|
+
* {@link ViewVariantInspector} instead of the legacy `buildViewConfigSchema`
|
|
7
|
+
* engine, so the runtime and the metadata studio share ONE inspector. The
|
|
8
|
+
* inspector renders the per-view-type config fields straight from
|
|
9
|
+
* `@objectstack/spec` (grid / kanban / calendar / gallery / …) plus the
|
|
10
|
+
* shared column / filter / sort / toolbar sections.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
12
|
+
* The runtime ObjectView keeps the active view as a FLAT NamedListView; the
|
|
13
|
+
* inspector authors a canonical ViewItem draft. {@link view-config-adapter}
|
|
14
|
+
* bridges the two shapes so the `sys_view` persistence path is untouched:
|
|
15
|
+
* edits live as a ViewItem draft while the panel is open, then flatten back
|
|
16
|
+
* to the runtime view shape on update / save / create.
|
|
17
|
+
*
|
|
18
|
+
* Field loading is network-free: `objectDef.fields` is mapped into the
|
|
19
|
+
* inspector's `objectFieldsOverride` so neither the inspector nor its
|
|
20
|
+
* column editor issue a `client.get('object', …)` request.
|
|
14
21
|
*/
|
|
15
22
|
import { useMemo, useEffect, useRef, useCallback, useState } from 'react';
|
|
16
|
-
import {
|
|
17
|
-
import { Settings2 } from 'lucide-react';
|
|
23
|
+
import { Button } from '@object-ui/components';
|
|
18
24
|
import { useObjectTranslation } from '@object-ui/i18n';
|
|
19
|
-
import {
|
|
20
|
-
|
|
25
|
+
import { ViewVariantInspector } from './metadata-admin/inspectors/ViewVariantInspector';
|
|
26
|
+
import { RuntimeDraftBar } from './RuntimeDraftBar';
|
|
27
|
+
import { isFormFamilyKey } from './metadata-admin/view-variant-model';
|
|
28
|
+
import { detectLocale } from './metadata-admin/i18n';
|
|
29
|
+
import { runtimeViewToInspectorDraft, inspectorDraftToRuntimeView, } from './view-config-adapter';
|
|
30
|
+
/**
|
|
31
|
+
* Map an Object definition's `fields` record into the inspector's flat field
|
|
32
|
+
* catalog so it can render field-reference pickers (columns, groupByField, …)
|
|
33
|
+
* without a network fetch.
|
|
34
|
+
*/
|
|
35
|
+
function mapObjectFields(objectDef) {
|
|
36
|
+
const fields = objectDef.fields;
|
|
37
|
+
if (!fields || typeof fields !== 'object')
|
|
38
|
+
return [];
|
|
39
|
+
return Object.entries(fields).map(([name, def]) => {
|
|
40
|
+
const f = (def ?? {});
|
|
41
|
+
return {
|
|
42
|
+
name,
|
|
43
|
+
label: typeof f.label === 'string' && f.label ? f.label : name,
|
|
44
|
+
type: typeof f.type === 'string' ? f.type : 'text',
|
|
45
|
+
hidden: f.hidden === true,
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
export function ViewConfigPanel({ open, onClose, mode = 'edit', activeView, objectDef, onViewUpdate, onSave, onCreate, metadataClient, onAfterChange }) {
|
|
21
50
|
const { t } = useObjectTranslation();
|
|
22
51
|
const panelRef = useRef(null);
|
|
23
|
-
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
setShowAdvanced(false);
|
|
31
|
-
}, [open]);
|
|
32
|
-
// Default empty view for create mode
|
|
52
|
+
const locale = useMemo(() => detectLocale(), []);
|
|
53
|
+
// Provisional id for a create-mode view. A lazy useState initializer runs
|
|
54
|
+
// exactly once, keeping the impure `Date.now()` out of render; the backend
|
|
55
|
+
// assigns the real `name` on create, so this only needs to be unique
|
|
56
|
+
// within the draft.
|
|
57
|
+
const [newViewId] = useState(() => `view_${Date.now()}`);
|
|
58
|
+
// Default empty view used to seed create mode.
|
|
33
59
|
const defaultNewView = useMemo(() => ({
|
|
34
|
-
id:
|
|
60
|
+
id: newViewId,
|
|
35
61
|
label: t('console.objectView.newView'),
|
|
36
62
|
type: 'grid',
|
|
37
63
|
columns: [],
|
|
38
64
|
filter: [],
|
|
39
65
|
sort: [],
|
|
40
|
-
showSearch: true,
|
|
41
|
-
showFilters: true,
|
|
42
|
-
showSort: true,
|
|
43
66
|
}), []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
// (same
|
|
67
|
+
// Inspector draft state. Rebuilt only when the source view ID (or create
|
|
68
|
+
// mode) changes — not on every parent re-render — so in-flight edits are
|
|
69
|
+
// not clobbered (same stabilization the legacy panel used with stableKey).
|
|
47
70
|
const stableKey = mode === 'create' ? 'create' : activeView.id;
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
//
|
|
71
|
+
const initialDraft = useMemo(() => runtimeViewToInspectorDraft(mode === 'create' ? defaultNewView : activeView, objectDef.name), [stableKey, objectDef.name]);
|
|
72
|
+
const [draft, setDraft] = useState(initialDraft);
|
|
73
|
+
const [isDirty, setIsDirty] = useState(false);
|
|
74
|
+
// Bumped on each edit-mode save so the draft/publish chrome surfaces the
|
|
75
|
+
// "unpublished changes" indicator immediately (the save writes a draft).
|
|
76
|
+
const [savedSignal, setSavedSignal] = useState(0);
|
|
77
|
+
// Mirror the committed draft into a ref so `handlePatch` can compute the
|
|
78
|
+
// next draft synchronously without a side-effecting state updater.
|
|
79
|
+
const draftRef = useRef(draft);
|
|
80
|
+
// Reset the draft when the source view changes — derived from `initialDraft`
|
|
81
|
+
// during render (React's "adjust state on prop change" pattern) rather than
|
|
82
|
+
// in an effect, so there's no extra render pass.
|
|
83
|
+
const lastDraftRef = useRef(initialDraft);
|
|
84
|
+
if (lastDraftRef.current !== initialDraft) {
|
|
85
|
+
lastDraftRef.current = initialDraft;
|
|
86
|
+
draftRef.current = initialDraft;
|
|
87
|
+
setDraft(initialDraft);
|
|
88
|
+
setIsDirty(false);
|
|
89
|
+
}
|
|
90
|
+
useEffect(() => { draftRef.current = draft; }, [draft]);
|
|
91
|
+
// Focus the panel when it opens for keyboard accessibility.
|
|
56
92
|
useEffect(() => {
|
|
57
93
|
if (open && panelRef.current) {
|
|
58
94
|
panelRef.current.focus();
|
|
59
95
|
}
|
|
60
96
|
}, [open]);
|
|
61
|
-
//
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
//
|
|
67
|
-
//
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}), [schema, t, viewType]);
|
|
83
|
-
// Save/discard handlers with create mode support
|
|
97
|
+
// Network-free field catalog sourced from the object definition the host
|
|
98
|
+
// already holds.
|
|
99
|
+
const objectFields = useMemo(() => mapObjectFields(objectDef), [objectDef.fields]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
100
|
+
const familyKey = isFormFamilyKey(draft.viewKind) ? 'form' : 'list';
|
|
101
|
+
// Shallow-merge an inspector patch into the draft, then mirror the
|
|
102
|
+
// flattened runtime view back to the host field-by-field (matching the
|
|
103
|
+
// legacy onViewUpdate(field, value) contract ObjectView expects).
|
|
104
|
+
const handlePatch = useCallback((patch) => {
|
|
105
|
+
const next = { ...draftRef.current, ...patch };
|
|
106
|
+
draftRef.current = next;
|
|
107
|
+
setDraft(next);
|
|
108
|
+
setIsDirty(true);
|
|
109
|
+
if (onViewUpdate) {
|
|
110
|
+
const flat = inspectorDraftToRuntimeView(next);
|
|
111
|
+
for (const [field, value] of Object.entries(flat)) {
|
|
112
|
+
if (field === 'id')
|
|
113
|
+
continue;
|
|
114
|
+
onViewUpdate(field, value);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}, [onViewUpdate]);
|
|
84
118
|
const handleSave = useCallback(() => {
|
|
119
|
+
const flat = inspectorDraftToRuntimeView(draft);
|
|
85
120
|
if (mode === 'create') {
|
|
86
|
-
onCreate?.(
|
|
121
|
+
onCreate?.(flat);
|
|
87
122
|
}
|
|
88
123
|
else {
|
|
89
|
-
onSave?.(
|
|
124
|
+
onSave?.(flat);
|
|
125
|
+
setSavedSignal((s) => s + 1);
|
|
90
126
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}, [draft, onSave, onCreate, mode, discard]);
|
|
127
|
+
setIsDirty(false);
|
|
128
|
+
}, [draft, onSave, onCreate, mode]);
|
|
94
129
|
const handleDiscard = useCallback(() => {
|
|
95
130
|
if (mode === 'create') {
|
|
96
131
|
onClose();
|
|
97
132
|
return;
|
|
98
133
|
}
|
|
99
|
-
|
|
100
|
-
|
|
134
|
+
setDraft(initialDraft);
|
|
135
|
+
setIsDirty(false);
|
|
136
|
+
}, [initialDraft, mode, onClose]);
|
|
137
|
+
// ADR-0034 (#1515): resume a pending draft into the inspector when the
|
|
138
|
+
// panel reopens (flag-ON only; the bar never fires this when the flag is
|
|
139
|
+
// off). The stored body is the flat runtime view, so adapt it back to the
|
|
140
|
+
// inspector draft shape before seeding.
|
|
141
|
+
const handleResumeDraft = useCallback((body) => {
|
|
142
|
+
const resumed = runtimeViewToInspectorDraft(body, objectDef.name);
|
|
143
|
+
draftRef.current = resumed;
|
|
144
|
+
setDraft(resumed);
|
|
145
|
+
setIsDirty(false);
|
|
146
|
+
}, [objectDef.name]);
|
|
101
147
|
const panelTitle = mode === 'create'
|
|
102
148
|
? t('console.objectView.createView')
|
|
103
149
|
: t('console.objectView.configureView');
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
: t('console.objectView.showAdvancedSettings', { defaultValue: 'Show advanced settings' }), children: _jsx(Settings2, { className: "h-3.5 w-3.5" }) }));
|
|
111
|
-
return (_jsx(ConfigPanelRenderer, { open: open, onClose: onClose, schema: dynamicSchema, draft: draft, isDirty: isDirty, onFieldChange: updateField, onSave: handleSave, onDiscard: handleDiscard, onUndo: undo, onRedo: redo, canUndo: canUndo, canRedo: canRedo, undoLabel: t('designer.undo'), redoLabel: t('designer.redo'), objectDef: objectDef, saveLabel: t('console.objectView.save'), discardLabel: t('console.objectView.discard'), panelRef: panelRef, role: "complementary", ariaLabel: panelTitle, tabIndex: -1, testId: "view-config-panel", closeTitle: t('console.objectView.closePanel'), footerTestId: "view-config-footer", saveTestId: "view-config-save", discardTestId: "view-config-discard", headerExtra: advancedToggle, className: "transition-all overflow-hidden" }));
|
|
150
|
+
if (!open) {
|
|
151
|
+
// Keep the slide container (owned by ObjectView) able to collapse to
|
|
152
|
+
// zero width without rendering inspector internals while hidden.
|
|
153
|
+
return _jsx("div", { ref: panelRef, tabIndex: -1, "data-testid": "view-config-panel", "aria-hidden": true });
|
|
154
|
+
}
|
|
155
|
+
return (_jsxs("div", { ref: panelRef, tabIndex: -1, role: "complementary", "aria-label": panelTitle, "data-testid": "view-config-panel", className: "flex h-full flex-col", children: [_jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: _jsx(ViewVariantInspector, { type: "view", name: draft.name, draft: draft, variantKey: "config", familyKey: familyKey, isHome: true, readOnly: false, locale: locale, objectFieldsOverride: objectFields, onPatch: handlePatch }) }), _jsxs("div", { "data-testid": "view-config-footer", className: "flex items-center justify-end gap-2 border-t px-4 py-2.5", children: [mode === 'edit' && (_jsx(RuntimeDraftBar, { type: "view", name: activeView.id, metadataClient: metadataClient, dirty: isDirty, onResume: handleResumeDraft, savedSignal: savedSignal, onAfterChange: onAfterChange })), _jsx(Button, { variant: "ghost", size: "sm", onClick: handleDiscard, "data-testid": "view-config-discard", children: t('console.objectView.discard') }), _jsx(Button, { size: "sm", onClick: handleSave, disabled: mode === 'edit' && !isDirty, "data-testid": "view-config-save", children: t('console.objectView.save') })] })] }));
|
|
112
156
|
}
|
package/dist/views/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export { ReportView } from './ReportView';
|
|
|
8
8
|
export { SearchResultsPage } from './SearchResultsPage';
|
|
9
9
|
export { ActionConfirmDialog } from './ActionConfirmDialog';
|
|
10
10
|
export { ActionParamDialog } from './ActionParamDialog';
|
|
11
|
+
export { ActionResultDialog, type ResultDialogState } from './ActionResultDialog';
|
|
11
12
|
export { MetadataToggle, MetadataPanel } from './MetadataInspector';
|
|
12
13
|
export { ViewConfigPanel } from './ViewConfigPanel';
|
|
13
14
|
export { CreateViewDialog } from './CreateViewDialog';
|
|
14
|
-
export { DesignDrawer } from './DesignDrawer';
|
package/dist/views/index.js
CHANGED
|
@@ -7,7 +7,7 @@ export { ReportView } from './ReportView';
|
|
|
7
7
|
export { SearchResultsPage } from './SearchResultsPage';
|
|
8
8
|
export { ActionConfirmDialog } from './ActionConfirmDialog';
|
|
9
9
|
export { ActionParamDialog } from './ActionParamDialog';
|
|
10
|
+
export { ActionResultDialog } from './ActionResultDialog';
|
|
10
11
|
export { MetadataToggle, MetadataPanel } from './MetadataInspector';
|
|
11
12
|
export { ViewConfigPanel } from './ViewConfigPanel';
|
|
12
13
|
export { CreateViewDialog } from './CreateViewDialog';
|
|
13
|
-
export { DesignDrawer } from './DesignDrawer';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AuditPanel — ADR-0010 §3.6 / Phase 4.1 protection-audit trail.
|
|
3
|
+
*
|
|
4
|
+
* Renders the rows in `sys_metadata_audit` for a single metadata
|
|
5
|
+
* item (type + name): every save/publish/rollback/delete/reset
|
|
6
|
+
* attempt, with the lock state at the moment of the call and the
|
|
7
|
+
* decision (`allowed` / `denied` / `forced`). This is the compliance
|
|
8
|
+
* surface promised by the metadata-protection ADR — denied attempts
|
|
9
|
+
* never reach the regular history log, so this is the only place
|
|
10
|
+
* where blocked writes are visible.
|
|
11
|
+
*
|
|
12
|
+
* Data source: `client.audit(type, name)` →
|
|
13
|
+
* `GET /api/v1/meta/:type/:name/audit`.
|
|
14
|
+
*
|
|
15
|
+
* Empty state is friendly: a fresh install has no rows because the
|
|
16
|
+
* audit writer only fires on actual write attempts, so "no events"
|
|
17
|
+
* just means nobody has tried to change this item.
|
|
18
|
+
*/
|
|
19
|
+
import * as React from 'react';
|
|
20
|
+
import type { MetadataClient } from '@object-ui/data-objectstack';
|
|
21
|
+
import { type SupportedLocale } from './i18n';
|
|
22
|
+
export interface AuditPanelProps {
|
|
23
|
+
type: string;
|
|
24
|
+
name: string;
|
|
25
|
+
client: MetadataClient;
|
|
26
|
+
locale?: SupportedLocale | string;
|
|
27
|
+
}
|
|
28
|
+
export declare function AuditPanel({ type, name, client, locale, }: AuditPanelProps): React.JSX.Element;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.
|
|
3
|
+
/**
|
|
4
|
+
* AuditPanel — ADR-0010 §3.6 / Phase 4.1 protection-audit trail.
|
|
5
|
+
*
|
|
6
|
+
* Renders the rows in `sys_metadata_audit` for a single metadata
|
|
7
|
+
* item (type + name): every save/publish/rollback/delete/reset
|
|
8
|
+
* attempt, with the lock state at the moment of the call and the
|
|
9
|
+
* decision (`allowed` / `denied` / `forced`). This is the compliance
|
|
10
|
+
* surface promised by the metadata-protection ADR — denied attempts
|
|
11
|
+
* never reach the regular history log, so this is the only place
|
|
12
|
+
* where blocked writes are visible.
|
|
13
|
+
*
|
|
14
|
+
* Data source: `client.audit(type, name)` →
|
|
15
|
+
* `GET /api/v1/meta/:type/:name/audit`.
|
|
16
|
+
*
|
|
17
|
+
* Empty state is friendly: a fresh install has no rows because the
|
|
18
|
+
* audit writer only fires on actual write attempts, so "no events"
|
|
19
|
+
* just means nobody has tried to change this item.
|
|
20
|
+
*/
|
|
21
|
+
import * as React from 'react';
|
|
22
|
+
import { RefreshCw, Loader2, ShieldCheck, ShieldAlert, ShieldX } from 'lucide-react';
|
|
23
|
+
import { Button } from '@object-ui/components';
|
|
24
|
+
import { Badge } from '@object-ui/components';
|
|
25
|
+
import { Empty, EmptyTitle, EmptyDescription } from '@object-ui/components';
|
|
26
|
+
import { t } from './i18n';
|
|
27
|
+
function fmtTime(iso) {
|
|
28
|
+
if (!iso)
|
|
29
|
+
return '';
|
|
30
|
+
const d = new Date(iso);
|
|
31
|
+
if (Number.isNaN(d.getTime()))
|
|
32
|
+
return iso;
|
|
33
|
+
return d.toLocaleString();
|
|
34
|
+
}
|
|
35
|
+
function outcomeBadge(outcome) {
|
|
36
|
+
const map = {
|
|
37
|
+
allowed: {
|
|
38
|
+
label: 'allowed',
|
|
39
|
+
cls: 'bg-emerald-50 text-emerald-700 border-emerald-200',
|
|
40
|
+
Icon: ShieldCheck,
|
|
41
|
+
},
|
|
42
|
+
denied: {
|
|
43
|
+
label: 'denied',
|
|
44
|
+
cls: 'bg-rose-50 text-rose-700 border-rose-200',
|
|
45
|
+
Icon: ShieldX,
|
|
46
|
+
},
|
|
47
|
+
forced: {
|
|
48
|
+
label: 'forced',
|
|
49
|
+
cls: 'bg-amber-50 text-amber-700 border-amber-200',
|
|
50
|
+
Icon: ShieldAlert,
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
const v = map[outcome] ?? map.allowed;
|
|
54
|
+
return (_jsxs("span", { className: `inline-flex items-center gap-1 rounded border px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide ${v.cls}`, children: [_jsx(v.Icon, { className: "h-3 w-3" }), v.label] }));
|
|
55
|
+
}
|
|
56
|
+
export function AuditPanel({ type, name, client, locale = 'en-US', }) {
|
|
57
|
+
const [loading, setLoading] = React.useState(false);
|
|
58
|
+
const [error, setError] = React.useState(null);
|
|
59
|
+
const [events, setEvents] = React.useState(null);
|
|
60
|
+
const load = React.useCallback(async () => {
|
|
61
|
+
setLoading(true);
|
|
62
|
+
setError(null);
|
|
63
|
+
try {
|
|
64
|
+
const res = await client.audit(type, name, { limit: 100 });
|
|
65
|
+
setEvents(res.events ?? []);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
setError(String(err?.message ?? err));
|
|
69
|
+
setEvents([]);
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
setLoading(false);
|
|
73
|
+
}
|
|
74
|
+
}, [client, type, name]);
|
|
75
|
+
React.useEffect(() => {
|
|
76
|
+
void load();
|
|
77
|
+
}, [load]);
|
|
78
|
+
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsxs("div", { className: "flex items-center justify-between border-b px-1 pb-2", children: [_jsxs("div", { className: "text-xs text-muted-foreground", children: [events?.length ?? 0, " ", t('engine.edit.auditCount', locale)] }), _jsxs(Button, { variant: "ghost", size: "sm", onClick: () => void load(), disabled: loading, className: "h-7 gap-1 text-xs", title: t('engine.edit.refresh', locale), children: [loading ? (_jsx(Loader2, { className: "h-3 w-3 animate-spin" })) : (_jsx(RefreshCw, { className: "h-3 w-3" })), t('engine.edit.refresh', locale)] })] }), error && (_jsx("div", { className: "m-2 rounded border border-rose-200 bg-rose-50 p-2 text-xs text-rose-700", children: error })), _jsx("div", { className: "flex-1 overflow-auto", children: loading && (!events || events.length === 0) ? (_jsxs("div", { className: "flex h-32 items-center justify-center text-xs text-muted-foreground", children: [_jsx(Loader2, { className: "mr-2 h-3 w-3 animate-spin" }), t('engine.edit.loading', locale)] })) : !events || events.length === 0 ? (_jsxs(Empty, { className: "py-10", children: [_jsx(EmptyTitle, { children: t('engine.edit.auditEmptyTitle', locale) }), _jsx(EmptyDescription, { children: t('engine.edit.auditEmptyDescription', locale) })] })) : (_jsxs("table", { className: "w-full text-xs", children: [_jsx("thead", { className: "sticky top-0 bg-muted/40 text-left text-[10px] uppercase tracking-wide text-muted-foreground", children: _jsxs("tr", { children: [_jsx("th", { className: "px-2 py-1.5 font-medium", children: t('engine.edit.auditColTime', locale) }), _jsx("th", { className: "px-2 py-1.5 font-medium", children: t('engine.edit.auditColActor', locale) }), _jsx("th", { className: "px-2 py-1.5 font-medium", children: t('engine.edit.auditColOperation', locale) }), _jsx("th", { className: "px-2 py-1.5 font-medium", children: t('engine.edit.auditColOutcome', locale) }), _jsx("th", { className: "px-2 py-1.5 font-medium", children: t('engine.edit.auditColLock', locale) }), _jsx("th", { className: "px-2 py-1.5 font-medium", children: t('engine.edit.auditColNote', locale) })] }) }), _jsx("tbody", { children: events.map((ev) => (_jsxs("tr", { className: "border-t border-border/50 align-top hover:bg-muted/20", children: [_jsx("td", { className: "whitespace-nowrap px-2 py-1.5 font-mono text-[11px]", children: fmtTime(ev.occurredAt) }), _jsx("td", { className: "px-2 py-1.5", children: ev.actor }), _jsx("td", { className: "px-2 py-1.5", children: _jsx(Badge, { variant: "outline", className: "text-[10px]", children: ev.operation }) }), _jsx("td", { className: "px-2 py-1.5", children: outcomeBadge(ev.outcome) }), _jsx("td", { className: "px-2 py-1.5", children: ev.lockState && ev.lockState !== 'none' ? (_jsxs("span", { className: "font-mono text-[11px]", children: [ev.lockState, ev.lockOverridden ? ' *' : ''] })) : (_jsx("span", { className: "text-muted-foreground", children: "\u2014" })) }), _jsx("td", { className: "max-w-[28ch] truncate px-2 py-1.5 text-muted-foreground", title: ev.note ?? ev.code, children: ev.note ?? ev.code })] }, String(ev.id)))) })] })) })] }));
|
|
79
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MetadataDiagnosticsPage — governance overview.
|
|
3
|
+
*
|
|
4
|
+
* Renders the cross-type `/meta/diagnostics` sweep: every metadata
|
|
5
|
+
* item that fails load-time Zod validation, grouped by type, with a
|
|
6
|
+
* deep-link to its edit page. The framework computes this server-side
|
|
7
|
+
* (see `protocol.getMetaDiagnostics`); the client just paints it.
|
|
8
|
+
*
|
|
9
|
+
* Counterpart surfaces:
|
|
10
|
+
* • DirectoryPage tile badges — per-type aggregate
|
|
11
|
+
* • ResourceListPage row badges — per-item flag inside one type
|
|
12
|
+
* • ResourceEditPage banner + inline SchemaForm errors — full
|
|
13
|
+
* drill-down for a single item
|
|
14
|
+
*
|
|
15
|
+
* This page is the only one that shows everything in one view, so
|
|
16
|
+
* ops can answer "what's broken across the whole app?" without
|
|
17
|
+
* clicking into 27 type pages.
|
|
18
|
+
*/
|
|
19
|
+
import * as React from 'react';
|
|
20
|
+
export declare function MetadataDiagnosticsPage(): React.JSX.Element;
|