@object-ui/app-shell 6.2.3 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +948 -0
- package/README.md +292 -0
- package/dist/assistant/assistantBus.d.ts +72 -0
- package/dist/assistant/assistantBus.js +133 -0
- package/dist/chrome/CommandPalette.d.ts +1 -1
- package/dist/chrome/CommandPalette.js +26 -22
- package/dist/chrome/ConditionalAuthWrapper.d.ts +1 -1
- package/dist/chrome/ConsoleToaster.d.ts +1 -1
- package/dist/chrome/ConsoleToaster.js +3 -1
- package/dist/chrome/ErrorBoundary.d.ts +1 -1
- package/dist/chrome/KeyboardShortcutsDialog.d.ts +1 -1
- package/dist/chrome/KeyboardShortcutsDialog.js +16 -5
- package/dist/chrome/LoadingScreen.d.ts +1 -1
- package/dist/chrome/LoadingScreen.js +22 -26
- package/dist/chrome/RouteFader.d.ts +1 -1
- package/dist/chrome/ThemeProvider.d.ts +1 -1
- package/dist/components/ManagedByBadge.d.ts +1 -1
- package/dist/console/AppContent.d.ts +1 -1
- package/dist/console/AppContent.js +170 -37
- package/dist/console/ConsoleShell.d.ts +7 -7
- package/dist/console/ConsoleShell.js +32 -3
- package/dist/console/ai/AiChatPage.d.ts +88 -1
- package/dist/console/ai/AiChatPage.js +743 -66
- package/dist/console/ai/ConversationsSidebar.d.ts +26 -1
- package/dist/console/ai/ConversationsSidebar.js +149 -34
- package/dist/console/ai/LiveCanvas.d.ts +22 -0
- package/dist/console/ai/LiveCanvas.js +78 -0
- package/dist/console/ai/reconcileTurn.d.ts +8 -0
- package/dist/console/ai/reconcileTurn.js +20 -0
- package/dist/console/auth/AuthPageLayout.d.ts +1 -1
- package/dist/console/auth/ForgotPasswordPage.d.ts +1 -1
- package/dist/console/auth/LoginPage.d.ts +1 -1
- package/dist/console/auth/RegisterPage.d.ts +1 -1
- package/dist/console/auth/RegisterPage.js +23 -3
- package/dist/console/cloud-connection/CloudConnectionPanel.d.ts +1 -0
- package/dist/console/cloud-connection/CloudConnectionPanel.js +169 -0
- package/dist/console/home/AppCard.d.ts +1 -1
- package/dist/console/home/AppCard.js +6 -12
- package/dist/console/home/HomeAppsStrip.d.ts +8 -0
- package/dist/console/home/HomeAppsStrip.js +61 -0
- package/dist/console/home/HomeLayout.d.ts +1 -1
- package/dist/console/home/HomeLayout.js +3 -1
- package/dist/console/home/HomePage.d.ts +1 -2
- package/dist/console/home/HomePage.js +149 -21
- package/dist/console/home/HomeRail.d.ts +22 -0
- package/dist/console/home/HomeRail.js +62 -0
- package/dist/console/home/QuickActions.d.ts +1 -1
- package/dist/console/home/QuickActions.js +3 -11
- package/dist/console/home/RecentApps.d.ts +1 -1
- package/dist/console/home/RecentApps.js +2 -2
- package/dist/console/home/StarredApps.d.ts +1 -1
- package/dist/console/home/StarredApps.js +2 -2
- package/dist/console/marketplace/InstalledListWidget.d.ts +1 -0
- package/dist/console/marketplace/InstalledListWidget.js +93 -0
- package/dist/console/marketplace/MarkdownText.d.ts +1 -1
- package/dist/console/marketplace/MarketplaceAccessDenied.d.ts +1 -1
- package/dist/console/marketplace/MarketplaceInstalledPage.d.ts +8 -14
- package/dist/console/marketplace/MarketplaceInstalledPage.js +14 -66
- package/dist/console/marketplace/MarketplacePackagePage.d.ts +1 -1
- package/dist/console/marketplace/MarketplacePackagePage.js +249 -8
- package/dist/console/marketplace/MarketplacePage.d.ts +1 -1
- package/dist/console/marketplace/MarketplacePage.js +60 -3
- package/dist/console/marketplace/PackageIcon.d.ts +1 -1
- package/dist/console/marketplace/PluginDisclosure.d.ts +14 -0
- package/dist/console/marketplace/PluginDisclosure.js +38 -0
- package/dist/console/marketplace/marketplaceApi.d.ts +123 -0
- package/dist/console/marketplace/marketplaceApi.js +254 -1
- package/dist/console/organizations/CreateWorkspaceDialog.d.ts +1 -1
- package/dist/console/organizations/OrganizationsLayout.d.ts +1 -1
- package/dist/console/organizations/OrganizationsPage.d.ts +1 -1
- package/dist/console/organizations/manage/AcceptInvitationPage.d.ts +1 -1
- package/dist/console/organizations/manage/InvitationsPage.d.ts +1 -1
- package/dist/console/organizations/manage/InviteMemberDialog.d.ts +1 -1
- package/dist/console/organizations/manage/MembersPage.d.ts +1 -1
- package/dist/console/organizations/manage/OrganizationLayout.d.ts +1 -1
- package/dist/console/organizations/manage/SettingsPage.d.ts +1 -1
- package/dist/context/CommandPaletteProvider.d.ts +44 -0
- package/dist/context/CommandPaletteProvider.js +71 -0
- package/dist/context/FavoritesProvider.d.ts +1 -1
- package/dist/context/NavigationContext.d.ts +1 -1
- package/dist/context/RecentItemsProvider.d.ts +2 -2
- package/dist/context/UserStateAdapters.d.ts +1 -1
- package/dist/context/index.d.ts +2 -0
- package/dist/context/index.js +1 -0
- package/dist/hooks/index.d.ts +5 -2
- package/dist/hooks/index.js +4 -1
- package/dist/hooks/useActionModal.d.ts +53 -0
- package/dist/hooks/useActionModal.js +111 -0
- package/dist/hooks/useChatConversation.d.ts +107 -4
- package/dist/hooks/useChatConversation.js +253 -25
- package/dist/hooks/useConsoleActionRuntime.d.ts +70 -0
- package/dist/hooks/useConsoleActionRuntime.js +560 -0
- package/dist/hooks/useConversationList.js +61 -3
- package/dist/hooks/useHomeInbox.d.ts +13 -0
- package/dist/hooks/useHomeInbox.js +142 -0
- package/dist/hooks/useNavPins.js +17 -23
- package/dist/hooks/useNavigationSync.d.ts +33 -0
- package/dist/hooks/useNavigationSync.js +98 -12
- package/dist/hooks/useReconcileOnError.d.ts +40 -0
- package/dist/hooks/useReconcileOnError.js +37 -0
- package/dist/hooks/useRecordApprovals.d.ts +18 -19
- package/dist/hooks/useRecordApprovals.js +24 -40
- package/dist/hooks/useResponsiveSidebar.js +14 -5
- package/dist/hooks/useSettleSignal.d.ts +19 -0
- package/dist/hooks/useSettleSignal.js +20 -0
- package/dist/hooks/useTrackRouteAsRecent.js +35 -0
- package/dist/hooks/useUrlOverlay.d.ts +62 -0
- package/dist/hooks/useUrlOverlay.js +88 -0
- package/dist/index.d.ts +16 -7
- package/dist/index.js +12 -4
- package/dist/layout/ActivityFeed.d.ts +1 -1
- package/dist/layout/AppHeader.d.ts +3 -2
- package/dist/layout/AppHeader.js +237 -72
- package/dist/layout/AppSidebar.d.ts +2 -1
- package/dist/layout/AppSidebar.js +26 -46
- package/dist/layout/AppSwitcher.d.ts +2 -1
- package/dist/layout/AppSwitcher.js +9 -5
- package/dist/layout/AuthPageLayout.d.ts +1 -1
- package/dist/layout/ConnectionStatus.d.ts +1 -1
- package/dist/layout/ConnectionStatus.js +9 -6
- package/dist/layout/ConsoleChatbotFab.d.ts +19 -1
- package/dist/layout/ConsoleChatbotFab.js +16 -2
- package/dist/layout/ConsoleFloatingChatbot.d.ts +32 -2
- package/dist/layout/ConsoleFloatingChatbot.js +374 -41
- package/dist/layout/ConsoleLayout.d.ts +1 -1
- package/dist/layout/ConsoleLayout.js +27 -11
- package/dist/layout/ContextSelectors.d.ts +44 -0
- package/dist/layout/ContextSelectors.js +218 -0
- package/dist/layout/InboxPopover.d.ts +6 -1
- package/dist/layout/InboxPopover.js +25 -6
- package/dist/layout/LocaleSwitcher.d.ts +1 -1
- package/dist/layout/LocalizedSidebarTrigger.d.ts +2 -0
- package/dist/layout/LocalizedSidebarTrigger.js +15 -0
- package/dist/layout/MobileViewSwitcherContext.d.ts +1 -1
- package/dist/layout/ModeToggle.d.ts +1 -1
- package/dist/layout/PageHeader.d.ts +1 -1
- package/dist/layout/UnifiedSidebar.d.ts +2 -1
- package/dist/layout/UnifiedSidebar.js +116 -15
- package/dist/observability/index.d.ts +1 -0
- package/dist/observability/index.js +1 -0
- package/dist/observability/settleSignal.d.ts +64 -0
- package/dist/observability/settleSignal.js +131 -0
- package/dist/preview/DraftChangesPanel.d.ts +19 -0
- package/dist/preview/DraftChangesPanel.js +114 -0
- package/dist/preview/DraftPreviewBar.d.ts +8 -0
- package/dist/preview/DraftPreviewBar.js +86 -0
- package/dist/preview/PreviewDraftEmptyState.d.ts +16 -0
- package/dist/preview/PreviewDraftEmptyState.js +47 -0
- package/dist/preview/PreviewModeContext.d.ts +57 -0
- package/dist/preview/PreviewModeContext.js +99 -0
- package/dist/preview/UnpublishedAppBar.d.ts +8 -0
- package/dist/preview/UnpublishedAppBar.js +79 -0
- package/dist/preview/draftStatus.d.ts +20 -0
- package/dist/preview/draftStatus.js +27 -0
- package/dist/preview/usePublishAllDrafts.d.ts +18 -0
- package/dist/preview/usePublishAllDrafts.js +106 -0
- package/dist/providers/AdapterProvider.d.ts +1 -1
- package/dist/providers/AdapterProvider.js +6 -1
- package/dist/providers/ExpressionProvider.d.ts +1 -1
- package/dist/providers/MetadataProvider.d.ts +17 -2
- package/dist/providers/MetadataProvider.js +183 -12
- package/dist/runtime-config.d.ts +46 -2
- package/dist/runtime-config.js +39 -2
- package/dist/services/builtinComponents.js +68 -59
- package/dist/skeletons/SkeletonDashboard.d.ts +1 -1
- package/dist/skeletons/SkeletonDetail.d.ts +1 -1
- package/dist/skeletons/SkeletonGrid.d.ts +1 -1
- package/dist/utils/appRoute.d.ts +21 -0
- package/dist/utils/appRoute.js +25 -0
- package/dist/utils/deriveRelatedLists.d.ts +54 -0
- package/dist/utils/deriveRelatedLists.js +91 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/managedByEmptyState.d.ts +8 -1
- package/dist/utils/managedByEmptyState.js +13 -7
- package/dist/utils/preferLocal.d.ts +18 -0
- package/dist/utils/preferLocal.js +24 -0
- package/dist/views/ActionConfirmDialog.d.ts +1 -1
- package/dist/views/ActionConfirmDialog.js +3 -1
- package/dist/views/ActionParamDialog.d.ts +6 -1
- package/dist/views/ActionParamDialog.js +9 -3
- package/dist/views/ActionResultDialog.d.ts +13 -0
- package/dist/views/ActionResultDialog.js +134 -0
- package/dist/views/ComponentNavView.d.ts +14 -1
- package/dist/views/CreateViewDialog.d.ts +1 -1
- package/dist/views/DashboardConfigPanel.d.ts +28 -0
- package/dist/views/DashboardConfigPanel.js +81 -0
- package/dist/views/DashboardView.d.ts +4 -3
- package/dist/views/DashboardView.js +38 -239
- package/dist/views/FlowRunner.d.ts +59 -0
- package/dist/views/FlowRunner.js +153 -0
- package/dist/views/InterfaceListPage.d.ts +49 -0
- package/dist/views/InterfaceListPage.js +347 -0
- package/dist/views/MetadataInspector.d.ts +2 -2
- package/dist/views/ObjectView.d.ts +1 -1
- package/dist/views/ObjectView.js +209 -532
- package/dist/views/PageView.d.ts +8 -3
- package/dist/views/PageView.js +45 -32
- package/dist/views/RecordDetailView.d.ts +1 -1
- package/dist/views/RecordDetailView.js +363 -148
- package/dist/views/RecordFormPage.d.ts +1 -1
- package/dist/views/RecordFormPage.js +26 -1
- package/dist/views/ReportConfigPanel.d.ts +37 -0
- package/dist/views/ReportConfigPanel.js +85 -0
- package/dist/views/ReportView.d.ts +1 -1
- package/dist/views/ReportView.js +116 -7
- package/dist/views/RuntimeDraftBar.d.ts +30 -0
- package/dist/views/RuntimeDraftBar.js +112 -0
- package/dist/views/SearchResultsPage.d.ts +1 -1
- package/dist/views/SearchResultsPage.js +8 -18
- package/dist/views/ViewConfigPanel.d.ts +24 -17
- package/dist/views/ViewConfigPanel.js +121 -77
- package/dist/views/index.d.ts +1 -1
- package/dist/views/index.js +1 -1
- package/dist/views/metadata-admin/AuditPanel.d.ts +28 -0
- package/dist/views/metadata-admin/AuditPanel.js +79 -0
- package/dist/views/metadata-admin/DiagnosticsPage.d.ts +20 -0
- package/dist/views/metadata-admin/DiagnosticsPage.js +69 -0
- package/dist/views/metadata-admin/DirectoryPage.d.ts +16 -1
- package/dist/views/metadata-admin/DirectoryPage.js +113 -24
- package/dist/views/metadata-admin/DraftReviewPanel.d.ts +33 -0
- package/dist/views/metadata-admin/DraftReviewPanel.js +77 -0
- package/dist/views/metadata-admin/EmbeddedItemEditor.d.ts +17 -1
- package/dist/views/metadata-admin/EmbeddedItemEditor.js +15 -8
- package/dist/views/metadata-admin/JsonSourceEditor.d.ts +37 -0
- package/dist/views/metadata-admin/JsonSourceEditor.js +178 -0
- package/dist/views/metadata-admin/LayeredDiff.d.ts +39 -1
- package/dist/views/metadata-admin/LayeredDiff.js +171 -5
- package/dist/views/metadata-admin/MetadataDetailDrawer.d.ts +15 -1
- package/dist/views/metadata-admin/MetadataTypeActions.d.ts +48 -0
- package/dist/views/metadata-admin/MetadataTypeActions.js +165 -0
- package/dist/views/metadata-admin/PackagesPage.d.ts +18 -0
- package/dist/views/metadata-admin/PackagesPage.js +395 -0
- package/dist/views/metadata-admin/PageShell.d.ts +1 -1
- package/dist/views/metadata-admin/PageShell.js +9 -4
- package/dist/views/metadata-admin/PermissionMatrixEditor.d.ts +35 -1
- package/dist/views/metadata-admin/QuickFind.d.ts +21 -1
- package/dist/views/metadata-admin/QuickFind.js +6 -3
- package/dist/views/metadata-admin/RelatedPanel.d.ts +24 -1
- package/dist/views/metadata-admin/RelatedPanel.js +20 -18
- package/dist/views/metadata-admin/ResourceEditPage.d.ts +40 -1
- package/dist/views/metadata-admin/ResourceEditPage.js +1223 -60
- package/dist/views/metadata-admin/ResourceHistoryPage.d.ts +39 -1
- package/dist/views/metadata-admin/ResourceHistoryPage.js +66 -16
- package/dist/views/metadata-admin/ResourceListPage.d.ts +13 -1
- package/dist/views/metadata-admin/ResourceListPage.js +266 -30
- package/dist/views/metadata-admin/ResourceRouter.d.ts +23 -1
- package/dist/views/metadata-admin/SchemaForm.d.ts +34 -1
- package/dist/views/metadata-admin/SchemaForm.js +559 -49
- package/dist/views/metadata-admin/StudioHomePage.d.ts +22 -0
- package/dist/views/metadata-admin/StudioHomePage.js +213 -0
- package/dist/views/metadata-admin/anchors.js +237 -24
- package/dist/views/metadata-admin/clientValidation.d.ts +50 -0
- package/dist/views/metadata-admin/clientValidation.js +169 -0
- package/dist/views/metadata-admin/color-variant-field.d.ts +30 -0
- package/dist/views/metadata-admin/color-variant-field.js +38 -0
- package/dist/views/metadata-admin/createDerive.d.ts +75 -0
- package/dist/views/metadata-admin/createDerive.js +179 -0
- package/dist/views/metadata-admin/dashboard-schema.d.ts +12 -0
- package/dist/views/metadata-admin/dashboard-schema.js +80 -0
- package/dist/views/metadata-admin/datasource/DatasourceResourcePage.d.ts +35 -0
- package/dist/views/metadata-admin/datasource/DatasourceResourcePage.js +327 -0
- package/dist/views/metadata-admin/datasource/register.d.ts +1 -0
- package/dist/views/metadata-admin/datasource/register.js +24 -0
- package/dist/views/metadata-admin/default-inspector-registry.d.ts +49 -0
- package/dist/views/metadata-admin/default-inspector-registry.js +8 -0
- package/dist/views/metadata-admin/default-schemas.js +115 -10
- package/dist/views/metadata-admin/external/ExternalDatasourcePanel.d.ts +27 -0
- package/dist/views/metadata-admin/external/ExternalDatasourcePanel.js +69 -0
- package/dist/views/metadata-admin/external/ImportObjectDialog.d.ts +27 -0
- package/dist/views/metadata-admin/external/ImportObjectDialog.js +77 -0
- package/dist/views/metadata-admin/external/SchemaBrowser.d.ts +16 -0
- package/dist/views/metadata-admin/external/SchemaBrowser.js +74 -0
- package/dist/views/metadata-admin/external/ValidationPanel.d.ts +16 -0
- package/dist/views/metadata-admin/external/ValidationPanel.js +68 -0
- package/dist/views/metadata-admin/external/api.d.ts +100 -0
- package/dist/views/metadata-admin/external/api.js +124 -0
- package/dist/views/metadata-admin/i18n.d.ts +1 -0
- package/dist/views/metadata-admin/i18n.js +1166 -2
- package/dist/views/metadata-admin/index.d.ts +8 -5
- package/dist/views/metadata-admin/index.js +12 -2
- package/dist/views/metadata-admin/inspector-registry.d.ts +51 -0
- package/dist/views/metadata-admin/inspector-registry.js +11 -0
- package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.d.ts +30 -0
- package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.js +180 -0
- package/dist/views/metadata-admin/inspectors/AppNavInspector.d.ts +16 -0
- package/dist/views/metadata-admin/inspectors/AppNavInspector.js +110 -0
- package/dist/views/metadata-admin/inspectors/ConditionBuilder.d.ts +29 -0
- package/dist/views/metadata-admin/inspectors/ConditionBuilder.js +154 -0
- package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.d.ts +28 -0
- package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.js +110 -0
- package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.d.ts +18 -0
- package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.js +139 -0
- package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.d.ts +21 -0
- package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.js +107 -0
- package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.d.ts +16 -0
- package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.js +45 -0
- package/dist/views/metadata-admin/inspectors/FlowInspector.d.ts +12 -0
- package/dist/views/metadata-admin/inspectors/FlowInspector.js +9 -0
- package/dist/views/metadata-admin/inspectors/FlowKeyValueField.d.ts +30 -0
- package/dist/views/metadata-admin/inspectors/FlowKeyValueField.js +125 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.d.ts +18 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.js +40 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeInspector.d.ts +14 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeInspector.js +140 -0
- package/dist/views/metadata-admin/inspectors/FlowObjectListField.d.ts +26 -0
- package/dist/views/metadata-admin/inspectors/FlowObjectListField.js +105 -0
- package/dist/views/metadata-admin/inspectors/FlowReferenceField.d.ts +83 -0
- package/dist/views/metadata-admin/inspectors/FlowReferenceField.js +181 -0
- package/dist/views/metadata-admin/inspectors/FlowStringListField.d.ts +21 -0
- package/dist/views/metadata-admin/inspectors/FlowStringListField.js +60 -0
- package/dist/views/metadata-admin/inspectors/InspectorComboField.d.ts +40 -0
- package/dist/views/metadata-admin/inspectors/InspectorComboField.js +61 -0
- package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.d.ts +21 -0
- package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.js +54 -0
- package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.d.ts +23 -0
- package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.js +330 -0
- package/dist/views/metadata-admin/inspectors/PageBlockInspector.d.ts +48 -0
- package/dist/views/metadata-admin/inspectors/PageBlockInspector.js +332 -0
- package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.d.ts +58 -0
- package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.js +160 -0
- package/dist/views/metadata-admin/inspectors/ViewColumnInspector.d.ts +19 -0
- package/dist/views/metadata-admin/inspectors/ViewColumnInspector.js +144 -0
- package/dist/views/metadata-admin/inspectors/ViewInspector.d.ts +19 -0
- package/dist/views/metadata-admin/inspectors/ViewInspector.js +21 -0
- package/dist/views/metadata-admin/inspectors/ViewVariantInspector.d.ts +54 -0
- package/dist/views/metadata-admin/inspectors/ViewVariantInspector.js +191 -0
- package/dist/views/metadata-admin/inspectors/_shared.d.ts +124 -0
- package/dist/views/metadata-admin/inspectors/_shared.js +113 -0
- package/dist/views/metadata-admin/inspectors/expression-validate.d.ts +26 -0
- package/dist/views/metadata-admin/inspectors/expression-validate.js +66 -0
- package/dist/views/metadata-admin/inspectors/flow-node-config.d.ts +143 -0
- package/dist/views/metadata-admin/inspectors/flow-node-config.js +461 -0
- package/dist/views/metadata-admin/inspectors/index.d.ts +1 -0
- package/dist/views/metadata-admin/inspectors/index.js +45 -0
- package/dist/views/metadata-admin/inspectors/json-schema-to-fields.d.ts +40 -0
- package/dist/views/metadata-admin/inspectors/json-schema-to-fields.js +227 -0
- package/dist/views/metadata-admin/inspectors/useDatasetFields.d.ts +72 -0
- package/dist/views/metadata-admin/inspectors/useDatasetFields.js +0 -0
- package/dist/views/metadata-admin/mergeServerFields.d.ts +65 -0
- package/dist/views/metadata-admin/mergeServerFields.js +56 -0
- package/dist/views/metadata-admin/preview-registry.d.ts +55 -0
- package/dist/views/metadata-admin/previews/ActionPreview.d.ts +25 -0
- package/dist/views/metadata-admin/previews/ActionPreview.js +238 -0
- package/dist/views/metadata-admin/previews/AddWidgetPicker.d.ts +12 -0
- package/dist/views/metadata-admin/previews/AddWidgetPicker.js +56 -0
- package/dist/views/metadata-admin/previews/AgentPreview.d.ts +24 -0
- package/dist/views/metadata-admin/previews/AgentPreview.js +100 -0
- package/dist/views/metadata-admin/previews/AppNavCanvas.d.ts +31 -0
- package/dist/views/metadata-admin/previews/AppNavCanvas.js +260 -0
- package/dist/views/metadata-admin/previews/AppPreview.d.ts +16 -1
- package/dist/views/metadata-admin/previews/AppPreview.js +23 -14
- package/dist/views/metadata-admin/previews/BookPreview.d.ts +20 -0
- package/dist/views/metadata-admin/previews/BookPreview.js +132 -0
- package/dist/views/metadata-admin/previews/DashboardPreview.d.ts +16 -1
- package/dist/views/metadata-admin/previews/DashboardPreview.js +110 -8
- package/dist/views/metadata-admin/previews/DatasetPreview.d.ts +18 -0
- package/dist/views/metadata-admin/previews/DatasetPreview.js +89 -0
- package/dist/views/metadata-admin/previews/DatasourcePreview.d.ts +23 -0
- package/dist/views/metadata-admin/previews/DatasourcePreview.js +68 -0
- package/dist/views/metadata-admin/previews/EmailTemplatePreview.d.ts +14 -1
- package/dist/views/metadata-admin/previews/FieldStub.d.ts +30 -0
- package/dist/views/metadata-admin/previews/FieldStub.js +104 -0
- package/dist/views/metadata-admin/previews/FieldsListEditor.d.ts +50 -0
- package/dist/views/metadata-admin/previews/FieldsListEditor.js +97 -0
- package/dist/views/metadata-admin/previews/FlowCanvas.d.ts +43 -0
- package/dist/views/metadata-admin/previews/FlowCanvas.js +328 -0
- package/dist/views/metadata-admin/previews/FlowPreview.d.ts +20 -0
- package/dist/views/metadata-admin/previews/FlowPreview.js +92 -0
- package/dist/views/metadata-admin/previews/FlowRunsPanel.d.ts +46 -0
- package/dist/views/metadata-admin/previews/FlowRunsPanel.js +97 -0
- package/dist/views/metadata-admin/previews/FlowSimulatorPanel.d.ts +25 -0
- package/dist/views/metadata-admin/previews/FlowSimulatorPanel.js +170 -0
- package/dist/views/metadata-admin/previews/JobPreview.d.ts +28 -0
- package/dist/views/metadata-admin/previews/JobPreview.js +290 -0
- package/dist/views/metadata-admin/previews/ObjectFormCanvas.d.ts +30 -0
- package/dist/views/metadata-admin/previews/ObjectFormCanvas.js +547 -0
- package/dist/views/metadata-admin/previews/ObjectPreview.d.ts +14 -1
- package/dist/views/metadata-admin/previews/ObjectPreview.js +5 -30
- package/dist/views/metadata-admin/previews/OutlineStrip.d.ts +32 -0
- package/dist/views/metadata-admin/previews/OutlineStrip.js +8 -0
- package/dist/views/metadata-admin/previews/PageBlockCanvas.d.ts +49 -0
- package/dist/views/metadata-admin/previews/PageBlockCanvas.js +510 -0
- package/dist/views/metadata-admin/previews/PagePreview.d.ts +10 -1
- package/dist/views/metadata-admin/previews/PagePreview.js +90 -4
- package/dist/views/metadata-admin/previews/PermissionPreview.d.ts +27 -0
- package/dist/views/metadata-admin/previews/PermissionPreview.js +115 -0
- package/dist/views/metadata-admin/previews/PreviewShell.d.ts +29 -6
- package/dist/views/metadata-admin/previews/PreviewShell.js +16 -3
- package/dist/views/metadata-admin/previews/ReportPreview.d.ts +18 -1
- package/dist/views/metadata-admin/previews/ReportPreview.js +23 -15
- package/dist/views/metadata-admin/previews/RolePreview.d.ts +19 -0
- package/dist/views/metadata-admin/previews/RolePreview.js +14 -0
- package/dist/views/metadata-admin/previews/SkillPreview.d.ts +22 -0
- package/dist/views/metadata-admin/previews/SkillPreview.js +34 -0
- package/dist/views/metadata-admin/previews/ToolPreview.d.ts +25 -0
- package/dist/views/metadata-admin/previews/ToolPreview.js +122 -0
- package/dist/views/metadata-admin/previews/TranslationPreview.d.ts +25 -0
- package/dist/views/metadata-admin/previews/TranslationPreview.js +52 -0
- package/dist/views/metadata-admin/previews/ValidationPreview.d.ts +27 -0
- package/dist/views/metadata-admin/previews/ValidationPreview.js +110 -0
- package/dist/views/metadata-admin/previews/ViewColumnPanes.d.ts +62 -0
- package/dist/views/metadata-admin/previews/ViewColumnPanes.js +140 -0
- package/dist/views/metadata-admin/previews/ViewPreview.d.ts +23 -1
- package/dist/views/metadata-admin/previews/ViewPreview.js +101 -73
- package/dist/views/metadata-admin/previews/block-config.d.ts +82 -0
- package/dist/views/metadata-admin/previews/block-config.js +324 -0
- package/dist/views/metadata-admin/previews/block-types.d.ts +40 -0
- package/dist/views/metadata-admin/previews/block-types.js +110 -0
- package/dist/views/metadata-admin/previews/field-types.d.ts +53 -0
- package/dist/views/metadata-admin/previews/field-types.js +97 -0
- package/dist/views/metadata-admin/previews/flow-canvas-layout.d.ts +88 -0
- package/dist/views/metadata-admin/previews/flow-canvas-layout.js +190 -0
- package/dist/views/metadata-admin/previews/flow-canvas-parts.d.ts +88 -0
- package/dist/views/metadata-admin/previews/flow-canvas-parts.js +358 -0
- package/dist/views/metadata-admin/previews/form-preview.d.ts +24 -0
- package/dist/views/metadata-admin/previews/form-preview.js +29 -0
- package/dist/views/metadata-admin/previews/index.js +43 -0
- package/dist/views/metadata-admin/previews/object-fields-bridge.d.ts +66 -0
- package/dist/views/metadata-admin/previews/object-fields-bridge.js +171 -0
- package/dist/views/metadata-admin/previews/object-fields-io.d.ts +109 -0
- package/dist/views/metadata-admin/previews/object-fields-io.js +208 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-types.d.ts +91 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-types.js +2 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.d.ts +8 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.js +113 -0
- package/dist/views/metadata-admin/previews/simulator/flow-simulator.d.ts +44 -0
- package/dist/views/metadata-admin/previews/simulator/flow-simulator.js +316 -0
- package/dist/views/metadata-admin/previews/useDatasetCatalog.d.ts +47 -0
- package/dist/views/metadata-admin/previews/useDatasetCatalog.js +133 -0
- package/dist/views/metadata-admin/previews/useFlowNodePalette.d.ts +44 -0
- package/dist/views/metadata-admin/previews/useFlowNodePalette.js +124 -0
- package/dist/views/metadata-admin/previews/useMetaOptions.d.ts +8 -0
- package/dist/views/metadata-admin/previews/useMetaOptions.js +50 -0
- package/dist/views/metadata-admin/previews/useObjectFields.d.ts +23 -0
- package/dist/views/metadata-admin/previews/useObjectFields.js +79 -0
- package/dist/views/metadata-admin/previews/useObjectOptions.d.ts +8 -0
- package/dist/views/metadata-admin/previews/useObjectOptions.js +43 -0
- package/dist/views/metadata-admin/previews/view-column-io.d.ts +42 -0
- package/dist/views/metadata-admin/previews/view-column-io.js +73 -0
- package/dist/views/metadata-admin/previews/widget-types.d.ts +24 -0
- package/dist/views/metadata-admin/previews/widget-types.js +40 -0
- package/dist/views/metadata-admin/registry.d.ts +140 -19
- package/dist/views/metadata-admin/report-schema.d.ts +26 -0
- package/dist/views/metadata-admin/report-schema.js +121 -0
- package/dist/views/metadata-admin/useMetadata.d.ts +100 -2
- package/dist/views/metadata-admin/useMetadata.js +155 -4
- package/dist/views/metadata-admin/view-item-normalize.d.ts +20 -0
- package/dist/views/metadata-admin/view-item-normalize.js +68 -0
- package/dist/views/metadata-admin/view-schema.d.ts +16 -0
- package/dist/views/metadata-admin/view-schema.js +107 -0
- package/dist/views/metadata-admin/view-variant-model.d.ts +23 -0
- package/dist/views/metadata-admin/view-variant-model.js +64 -0
- package/dist/views/metadata-admin/widgets.d.ts +89 -1
- package/dist/views/metadata-admin/widgets.js +491 -17
- package/dist/views/runtime-metadata-persistence.d.ts +78 -0
- package/dist/views/runtime-metadata-persistence.js +89 -0
- package/dist/views/useOpenRecordList.d.ts +18 -0
- package/dist/views/useOpenRecordList.js +36 -0
- package/dist/views/userFilterUrlState.d.ts +15 -0
- package/dist/views/userFilterUrlState.js +53 -0
- package/dist/views/view-config-adapter.d.ts +38 -0
- package/dist/views/view-config-adapter.js +80 -0
- package/package.json +52 -34
- package/dist/views/DesignDrawer.d.ts +0 -28
- package/dist/views/DesignDrawer.js +0 -51
- package/dist/views/metadata-admin/DesignerEditorWrapper.d.ts +0 -68
- package/dist/views/metadata-admin/DesignerEditorWrapper.js +0 -158
package/dist/runtime-config.d.ts
CHANGED
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
* those don't reflect the runtime the SPA is actually attached to (e.g.
|
|
10
10
|
* a tenant ObjectOS runtime pointing at a separate cloud control plane).
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
12
|
+
* The runtime-config shape lives in app-shell because the Console SPA in
|
|
13
|
+
* `apps/console` consumes app-shell code.
|
|
14
14
|
*
|
|
15
15
|
* Server-side: see
|
|
16
16
|
* cloud/packages/service-cloud/src/multi-environment-plugins.ts
|
|
@@ -22,6 +22,41 @@ export interface RuntimeFeatures {
|
|
|
22
22
|
installLocal: boolean;
|
|
23
23
|
/** `/api/v1/marketplace/*` is reachable from this runtime. */
|
|
24
24
|
marketplace: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* AI-driven metadata authoring ("online development") is offered by this
|
|
27
|
+
* runtime. Default true; the capability is still gated server-side by the
|
|
28
|
+
* presence of the metadata-authoring agent. When false, the SPA hides the
|
|
29
|
+
* AI authoring affordances (generic data-chat assistant is unaffected).
|
|
30
|
+
*/
|
|
31
|
+
aiStudio: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Auto-publish AI-built apps in the author's own environment. When true, the
|
|
34
|
+
* Studio chat fires the publish-drafts call automatically the moment the
|
|
35
|
+
* agent drafts an app, so the user refreshes and sees it live WITH its sample
|
|
36
|
+
* data — no manual "go home and publish" step. Server-derived from the plan
|
|
37
|
+
* (env-revertible via `OS_AI_AUTOPUBLISH_DISABLED`). Default true.
|
|
38
|
+
*/
|
|
39
|
+
autoPublishAiBuilds: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Branded subdomains + custom (BYO-DNS) domains are available on this
|
|
42
|
+
* environment's plan. Optional commercial flag — absent on self-hosted /
|
|
43
|
+
* vanilla runtimes (treated as off). When false the SPA hides custom-domain
|
|
44
|
+
* settings (or shows them as an upgrade affordance). Server-derived from the
|
|
45
|
+
* plan entitlements (cloud ADR-0011/0012).
|
|
46
|
+
*/
|
|
47
|
+
customDomain?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* SSO / SAML enterprise login is available on this environment's plan.
|
|
50
|
+
* Optional commercial flag — absent on self-hosted / vanilla runtimes
|
|
51
|
+
* (treated as off). Server-derived from the plan entitlements.
|
|
52
|
+
*/
|
|
53
|
+
sso?: boolean;
|
|
54
|
+
}
|
|
55
|
+
export interface RuntimeBranding {
|
|
56
|
+
/** Product name shown in browser title, splash, account chrome. */
|
|
57
|
+
productName: string;
|
|
58
|
+
/** Short variant for PWA shortName / compact spots. */
|
|
59
|
+
productShortName: string;
|
|
25
60
|
}
|
|
26
61
|
export interface RuntimeConfig {
|
|
27
62
|
/**
|
|
@@ -35,6 +70,7 @@ export interface RuntimeConfig {
|
|
|
35
70
|
defaultOrgId?: string | null;
|
|
36
71
|
defaultEnvironmentId?: string | null;
|
|
37
72
|
features: RuntimeFeatures;
|
|
73
|
+
branding: RuntimeBranding;
|
|
38
74
|
}
|
|
39
75
|
/**
|
|
40
76
|
* Fetch the server-pushed runtime config and merge it into the singleton.
|
|
@@ -49,6 +85,14 @@ export interface RuntimeConfig {
|
|
|
49
85
|
export declare function initRuntimeConfig(baseUrl?: string): Promise<void>;
|
|
50
86
|
/** Read-only accessor. Returns the current snapshot. */
|
|
51
87
|
export declare function getRuntimeConfig(): RuntimeConfig;
|
|
88
|
+
/**
|
|
89
|
+
* Product name shown in browser title, splash, account chrome.
|
|
90
|
+
* Falls back to `'ObjectOS'` when the server hasn't been contacted yet.
|
|
91
|
+
* Operators override via `OS_PRODUCT_NAME` env var or
|
|
92
|
+
* `new RuntimeConfigPlugin({ productName: 'Acme Studio' })`.
|
|
93
|
+
*/
|
|
94
|
+
export declare function getProductName(): string;
|
|
95
|
+
export declare function getProductShortName(): string;
|
|
52
96
|
/** Whether `initRuntimeConfig()` has run at least once. */
|
|
53
97
|
export declare function isRuntimeConfigInitialised(): boolean;
|
|
54
98
|
/**
|
package/dist/runtime-config.js
CHANGED
|
@@ -4,7 +4,8 @@ const defaults = {
|
|
|
4
4
|
singleEnvironment: false,
|
|
5
5
|
defaultOrgId: null,
|
|
6
6
|
defaultEnvironmentId: null,
|
|
7
|
-
features: { installLocal: false, marketplace: true },
|
|
7
|
+
features: { installLocal: false, marketplace: true, aiStudio: true, autoPublishAiBuilds: true, customDomain: false, sso: false },
|
|
8
|
+
branding: { productName: 'ObjectOS', productShortName: 'ObjectOS' },
|
|
8
9
|
};
|
|
9
10
|
let current = { ...defaults };
|
|
10
11
|
let initialised = false;
|
|
@@ -17,6 +18,10 @@ function applyUpdate(patch) {
|
|
|
17
18
|
...current.features,
|
|
18
19
|
...(patch.features ?? {}),
|
|
19
20
|
},
|
|
21
|
+
branding: {
|
|
22
|
+
...current.branding,
|
|
23
|
+
...(patch.branding ?? {}),
|
|
24
|
+
},
|
|
20
25
|
};
|
|
21
26
|
}
|
|
22
27
|
/**
|
|
@@ -50,8 +55,24 @@ export async function initRuntimeConfig(baseUrl = '') {
|
|
|
50
55
|
? {
|
|
51
56
|
installLocal: !!body.features.installLocal,
|
|
52
57
|
marketplace: body.features.marketplace !== false,
|
|
58
|
+
aiStudio: body.features.aiStudio !== false,
|
|
59
|
+
autoPublishAiBuilds: body.features.autoPublishAiBuilds !== false,
|
|
60
|
+
// Commercial flags default OFF unless the server explicitly grants
|
|
61
|
+
// them — never show a paid surface on an unknown/older runtime.
|
|
62
|
+
customDomain: body.features.customDomain === true,
|
|
63
|
+
sso: body.features.sso === true,
|
|
53
64
|
}
|
|
54
65
|
: current.features,
|
|
66
|
+
branding: body.branding
|
|
67
|
+
? {
|
|
68
|
+
productName: typeof body.branding.productName === 'string' && body.branding.productName.trim()
|
|
69
|
+
? body.branding.productName.trim()
|
|
70
|
+
: current.branding.productName,
|
|
71
|
+
productShortName: typeof body.branding.productShortName === 'string' && body.branding.productShortName.trim()
|
|
72
|
+
? body.branding.productShortName.trim()
|
|
73
|
+
: current.branding.productShortName,
|
|
74
|
+
}
|
|
75
|
+
: current.branding,
|
|
55
76
|
});
|
|
56
77
|
}
|
|
57
78
|
catch {
|
|
@@ -66,6 +87,18 @@ export async function initRuntimeConfig(baseUrl = '') {
|
|
|
66
87
|
export function getRuntimeConfig() {
|
|
67
88
|
return current;
|
|
68
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Product name shown in browser title, splash, account chrome.
|
|
92
|
+
* Falls back to `'ObjectOS'` when the server hasn't been contacted yet.
|
|
93
|
+
* Operators override via `OS_PRODUCT_NAME` env var or
|
|
94
|
+
* `new RuntimeConfigPlugin({ productName: 'Acme Studio' })`.
|
|
95
|
+
*/
|
|
96
|
+
export function getProductName() {
|
|
97
|
+
return current.branding?.productName || 'ObjectOS';
|
|
98
|
+
}
|
|
99
|
+
export function getProductShortName() {
|
|
100
|
+
return current.branding?.productShortName || getProductName();
|
|
101
|
+
}
|
|
69
102
|
/** Whether `initRuntimeConfig()` has run at least once. */
|
|
70
103
|
export function isRuntimeConfigInitialised() {
|
|
71
104
|
return initialised;
|
|
@@ -81,6 +114,10 @@ export function getCloudBase() {
|
|
|
81
114
|
}
|
|
82
115
|
/** Test/dev helper. */
|
|
83
116
|
export function resetRuntimeConfigForTesting() {
|
|
84
|
-
current = {
|
|
117
|
+
current = {
|
|
118
|
+
...defaults,
|
|
119
|
+
features: { ...defaults.features },
|
|
120
|
+
branding: { ...defaults.branding },
|
|
121
|
+
};
|
|
85
122
|
initialised = false;
|
|
86
123
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
1
|
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
3
2
|
/**
|
|
4
3
|
* Built-in component registrations — Phase 3b + 3c.
|
|
@@ -7,21 +6,18 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
7
6
|
* own admin UI is registered with the ComponentRegistry before
|
|
8
7
|
* AppContent mounts the first `<Route path="component/...">`.
|
|
9
8
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* pre-wires specialised editors for `object` and `field` so admins
|
|
17
|
-
* still get the polished ObjectManager / FieldDesigner experience
|
|
18
|
-
* inside the unified Setup-app shell.
|
|
9
|
+
* Registers the generic metadata admin engine and a specialised
|
|
10
|
+
* permission-matrix editor for `permission`. The previous View /
|
|
11
|
+
* Dashboard / Page bespoke "designer" tabs were removed: they never
|
|
12
|
+
* produced usable output and confused authors. Those types now use the
|
|
13
|
+
* same JSONSchema-driven Form + Preview experience as every other
|
|
14
|
+
* metadata type.
|
|
19
15
|
*/
|
|
20
|
-
import { lazy, Suspense } from 'react';
|
|
21
16
|
import { registerAppComponent } from './componentRegistry';
|
|
22
17
|
import { MetadataDirectoryPage, MetadataResourceRouter, registerMetadataResource, } from '../views/metadata-admin';
|
|
23
18
|
import { PermissionMatrixEditPage } from '../views/metadata-admin/PermissionMatrixEditor';
|
|
24
|
-
import {
|
|
19
|
+
import { PackagesPage } from '../views/metadata-admin/PackagesPage';
|
|
20
|
+
import { isAggregatedViewContainer, viewDisplayType, } from '../views/metadata-admin/view-item-normalize';
|
|
25
21
|
/* -------------------------------------------------------------------------- */
|
|
26
22
|
/* 1) Top-level admin pages — bound to `metadata:directory` + `metadata:resource` */
|
|
27
23
|
/* -------------------------------------------------------------------------- */
|
|
@@ -35,18 +31,16 @@ registerAppComponent({
|
|
|
35
31
|
ref: 'metadata:resource',
|
|
36
32
|
label: 'Metadata Resource',
|
|
37
33
|
source: '@object-ui/app-shell',
|
|
38
|
-
// The router switches between list / new / edit / history based on
|
|
39
|
-
// the sub-path under `/component/metadata/resource/...`.
|
|
40
34
|
component: MetadataResourceRouter,
|
|
41
35
|
});
|
|
36
|
+
registerAppComponent({
|
|
37
|
+
ref: 'developer:packages',
|
|
38
|
+
label: 'Packages',
|
|
39
|
+
source: '@object-ui/app-shell',
|
|
40
|
+
component: PackagesPage,
|
|
41
|
+
});
|
|
42
42
|
/* -------------------------------------------------------------------------- */
|
|
43
|
-
/* 2)
|
|
44
|
-
/* out for the types that already have polished bespoke surfaces. */
|
|
45
|
-
/* */
|
|
46
|
-
/* Note: `object` and `field` intentionally use the generic engine so the */
|
|
47
|
-
/* Metadata Directory has a consistent list/edit experience across every */
|
|
48
|
-
/* type (only `permission`, `view`, `dashboard`, `page` keep bespoke */
|
|
49
|
-
/* editors below — those are visual designers, not list/form pages). */
|
|
43
|
+
/* 2) Generic resources — list + JSONSchema-driven form for every type. */
|
|
50
44
|
/* -------------------------------------------------------------------------- */
|
|
51
45
|
registerMetadataResource({
|
|
52
46
|
type: 'object',
|
|
@@ -96,58 +90,42 @@ registerMetadataResource({
|
|
|
96
90
|
],
|
|
97
91
|
});
|
|
98
92
|
/* -------------------------------------------------------------------------- */
|
|
99
|
-
/* 4)
|
|
100
|
-
/*
|
|
101
|
-
/*
|
|
93
|
+
/* 4) UI metadata types — list + form. No bespoke visual designers: views, */
|
|
94
|
+
/* dashboards and pages are authored as JSON metadata; the Preview tab */
|
|
95
|
+
/* renders them live for verification. */
|
|
102
96
|
/* -------------------------------------------------------------------------- */
|
|
103
|
-
const ObjectViewConfigurator = lazy(() => import('@object-ui/plugin-designer').then((m) => ({ default: m.ObjectViewConfigurator })));
|
|
104
|
-
const DashboardEditor = lazy(() => import('@object-ui/plugin-designer').then((m) => ({ default: m.DashboardEditor })));
|
|
105
|
-
const PageCanvasEditor = lazy(() => import('@object-ui/plugin-designer').then((m) => ({ default: m.PageCanvasEditor })));
|
|
106
|
-
function ViewEditPage(props) {
|
|
107
|
-
return (_jsx(DesignerEditorBody, { ...props, fromMetadata: (raw) => {
|
|
108
|
-
// Normalize backend view metadata into the shape ObjectViewConfigurator expects.
|
|
109
|
-
// Built-in views may omit `columns` or use legacy field names.
|
|
110
|
-
const base = raw && typeof raw === 'object' ? raw : {};
|
|
111
|
-
return {
|
|
112
|
-
viewType: base.viewType ?? base.type ?? 'grid',
|
|
113
|
-
columns: Array.isArray(base.columns) ? base.columns : [],
|
|
114
|
-
filters: Array.isArray(base.filters) ? base.filters : [],
|
|
115
|
-
sorts: Array.isArray(base.sorts) ? base.sorts : [],
|
|
116
|
-
pageSize: typeof base.pageSize === 'number' ? base.pageSize : 25,
|
|
117
|
-
...base,
|
|
118
|
-
};
|
|
119
|
-
}, renderDesigner: (value, onChange, readOnly) => (_jsx(Suspense, { fallback: _jsx(DesignerFallback, { label: "view designer" }), children: _jsx(ObjectViewConfigurator, { config: value, onChange: (next) => onChange(next), readOnly: readOnly }) })) }));
|
|
120
|
-
}
|
|
121
|
-
function DashboardEditPage(props) {
|
|
122
|
-
return (_jsx(DesignerEditorBody, { ...props, renderDesigner: (value, onChange, readOnly) => (_jsx(Suspense, { fallback: _jsx(DesignerFallback, { label: "dashboard editor" }), children: _jsx(DashboardEditor, { schema: value, onChange: (next) => onChange(next), readOnly: readOnly }) })) }));
|
|
123
|
-
}
|
|
124
|
-
function PageEditPage(props) {
|
|
125
|
-
return (_jsx(DesignerEditorBody, { ...props, renderDesigner: (value, onChange, readOnly) => (_jsx(Suspense, { fallback: _jsx(DesignerFallback, { label: "page canvas" }), children: _jsx(PageCanvasEditor, { schema: value, onChange: (next) => onChange(next), readOnly: readOnly }) })) }));
|
|
126
|
-
}
|
|
127
|
-
function DesignerFallback({ label }) {
|
|
128
|
-
return (_jsxs("div", { className: "p-6 text-sm text-muted-foreground", children: ["Loading ", label, "\u2026"] }));
|
|
129
|
-
}
|
|
130
97
|
registerMetadataResource({
|
|
131
98
|
type: 'view',
|
|
132
99
|
label: 'Views',
|
|
133
100
|
description: 'Saved list / kanban / calendar / gantt configurations on top of an object.',
|
|
134
101
|
domain: 'ui',
|
|
135
|
-
DesignerTab: ViewEditPage,
|
|
136
|
-
designerTabLabel: 'View designer',
|
|
137
102
|
listColumns: [
|
|
138
103
|
{ key: 'name', label: 'Name', width: '30%' },
|
|
139
104
|
{ key: 'object', label: 'Object', width: '20%' },
|
|
140
|
-
{
|
|
105
|
+
{
|
|
106
|
+
key: 'type',
|
|
107
|
+
label: 'Type',
|
|
108
|
+
width: '15%',
|
|
109
|
+
// Expanded ViewItems keep their display type under `config.type`
|
|
110
|
+
// and only the list/form family at the top level — derive it so the
|
|
111
|
+
// column shows "calendar" / "grid" / "form" instead of "—".
|
|
112
|
+
render: (_v, item) => viewDisplayType(item) ?? '—',
|
|
113
|
+
},
|
|
141
114
|
{ key: 'label', label: 'Label' },
|
|
142
115
|
],
|
|
116
|
+
// ADR-0017 — the framework exposes each view as a canonical first-class
|
|
117
|
+
// ViewItem ({ name, object, viewKind, label, config }). The inspector and
|
|
118
|
+
// preview read that shape directly (`draft.config`), so NO toDraft/fromDraft
|
|
119
|
+
// adapter is wired here — the canonical shape round-trips untouched.
|
|
120
|
+
// Hide the bare aggregated container the framework keeps for runtime
|
|
121
|
+
// dual-read — its views are already listed as expanded ViewItems.
|
|
122
|
+
listFilter: (item) => !isAggregatedViewContainer(item),
|
|
143
123
|
});
|
|
144
124
|
registerMetadataResource({
|
|
145
125
|
type: 'dashboard',
|
|
146
126
|
label: 'Dashboards',
|
|
147
127
|
description: 'Composed dashboards with charts, KPIs, and tables.',
|
|
148
128
|
domain: 'ui',
|
|
149
|
-
DesignerTab: DashboardEditPage,
|
|
150
|
-
designerTabLabel: 'Dashboard designer',
|
|
151
129
|
listColumns: [
|
|
152
130
|
{ key: 'name', label: 'Name', width: '30%' },
|
|
153
131
|
{ key: 'label', label: 'Label', width: '30%' },
|
|
@@ -157,13 +135,44 @@ registerMetadataResource({
|
|
|
157
135
|
registerMetadataResource({
|
|
158
136
|
type: 'page',
|
|
159
137
|
label: 'Pages',
|
|
160
|
-
description: 'Visual page layouts authored
|
|
138
|
+
description: 'Visual page layouts authored as JSON metadata.',
|
|
161
139
|
domain: 'ui',
|
|
162
|
-
DesignerTab: PageEditPage,
|
|
163
|
-
designerTabLabel: 'Page canvas',
|
|
164
140
|
listColumns: [
|
|
165
141
|
{ key: 'name', label: 'Name', width: '30%' },
|
|
166
142
|
{ key: 'label', label: 'Label', width: '30%' },
|
|
167
143
|
{ key: 'route', label: 'Route' },
|
|
168
144
|
],
|
|
169
145
|
});
|
|
146
|
+
/* -------------------------------------------------------------------------- */
|
|
147
|
+
/* 5) Documentation — the `book` navigation spine (ADR-0046 §6). A book is an */
|
|
148
|
+
/* ordered set of groups whose membership over docs is DERIVED from each */
|
|
149
|
+
/* group's include rule; the Preview tab renders that spine for authoring. */
|
|
150
|
+
/* -------------------------------------------------------------------------- */
|
|
151
|
+
registerMetadataResource({
|
|
152
|
+
type: 'book',
|
|
153
|
+
label: 'Documentation Books',
|
|
154
|
+
description: 'Documentation navigation spine — ordered groups with membership derived over docs (glob/tag rules), plus an explicit pages override for curated order.',
|
|
155
|
+
domain: 'system',
|
|
156
|
+
searchableFields: ['name', 'label', 'description', 'slug'],
|
|
157
|
+
listColumns: [
|
|
158
|
+
{ key: 'name', label: 'Name', width: '25%' },
|
|
159
|
+
{ key: 'label', label: 'Label', width: '25%' },
|
|
160
|
+
{
|
|
161
|
+
key: 'audience',
|
|
162
|
+
label: 'Audience',
|
|
163
|
+
width: '12%',
|
|
164
|
+
render: (v) => v == null
|
|
165
|
+
? 'org'
|
|
166
|
+
: typeof v === 'object' && v && 'profile' in v
|
|
167
|
+
? `profile: ${v.profile}`
|
|
168
|
+
: String(v),
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
key: 'groups',
|
|
172
|
+
label: 'Groups',
|
|
173
|
+
width: '10%',
|
|
174
|
+
render: (v) => (Array.isArray(v) ? String(v.length) : '0'),
|
|
175
|
+
},
|
|
176
|
+
{ key: 'description', label: 'Description' },
|
|
177
|
+
],
|
|
178
|
+
});
|
|
@@ -9,5 +9,5 @@ interface SkeletonDashboardProps {
|
|
|
9
9
|
/** Number of widget cards to render */
|
|
10
10
|
cards?: number;
|
|
11
11
|
}
|
|
12
|
-
export declare function SkeletonDashboard({ cards }: SkeletonDashboardProps): import("react
|
|
12
|
+
export declare function SkeletonDashboard({ cards }: SkeletonDashboardProps): import("react").JSX.Element;
|
|
13
13
|
export {};
|
|
@@ -11,5 +11,5 @@ interface SkeletonDetailProps {
|
|
|
11
11
|
/** Number of columns */
|
|
12
12
|
columns?: number;
|
|
13
13
|
}
|
|
14
|
-
export declare function SkeletonDetail({ fields, columns }: SkeletonDetailProps): import("react
|
|
14
|
+
export declare function SkeletonDetail({ fields, columns }: SkeletonDetailProps): import("react").JSX.Element;
|
|
15
15
|
export {};
|
|
@@ -11,5 +11,5 @@ interface SkeletonGridProps {
|
|
|
11
11
|
/** Number of columns to render */
|
|
12
12
|
columns?: number;
|
|
13
13
|
}
|
|
14
|
-
export declare function SkeletonGrid({ rows, columns }: SkeletonGridProps): import("react
|
|
14
|
+
export declare function SkeletonGrid({ rows, columns }: SkeletonGridProps): import("react").JSX.Element;
|
|
15
15
|
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADR-0048 (option A) — the `/apps/<segment>` route is keyed on the **package
|
|
3
|
+
* id** (reverse-domain, globally unique), not the app's display name. This makes
|
|
4
|
+
* two vendors' same-named apps unambiguous and self-describing in the URL.
|
|
5
|
+
*
|
|
6
|
+
* - `appRouteSegment(app)` — the canonical route segment for linking TO an app
|
|
7
|
+
* (its package id; falls back to `name` for runtime/DB apps with no
|
|
8
|
+
* `_packageId`).
|
|
9
|
+
* - `matchAppBySegment(apps, seg)` — resolve a route segment back to its app,
|
|
10
|
+
* preferring the package id and falling back to the app name. The name
|
|
11
|
+
* fallback doubles as a per-tenant friendly alias and keeps legacy
|
|
12
|
+
* name-based URLs/bookmarks working. Callers keep their own
|
|
13
|
+
* default/first-app fallback around this match.
|
|
14
|
+
*/
|
|
15
|
+
type AppLike = {
|
|
16
|
+
name?: unknown;
|
|
17
|
+
_packageId?: unknown;
|
|
18
|
+
} & Record<string, unknown>;
|
|
19
|
+
export declare function appRouteSegment(app: AppLike | null | undefined): string | undefined;
|
|
20
|
+
export declare function matchAppBySegment<T extends AppLike>(apps: readonly T[] | null | undefined, seg: string | null | undefined): T | undefined;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADR-0048 (option A) — the `/apps/<segment>` route is keyed on the **package
|
|
3
|
+
* id** (reverse-domain, globally unique), not the app's display name. This makes
|
|
4
|
+
* two vendors' same-named apps unambiguous and self-describing in the URL.
|
|
5
|
+
*
|
|
6
|
+
* - `appRouteSegment(app)` — the canonical route segment for linking TO an app
|
|
7
|
+
* (its package id; falls back to `name` for runtime/DB apps with no
|
|
8
|
+
* `_packageId`).
|
|
9
|
+
* - `matchAppBySegment(apps, seg)` — resolve a route segment back to its app,
|
|
10
|
+
* preferring the package id and falling back to the app name. The name
|
|
11
|
+
* fallback doubles as a per-tenant friendly alias and keeps legacy
|
|
12
|
+
* name-based URLs/bookmarks working. Callers keep their own
|
|
13
|
+
* default/first-app fallback around this match.
|
|
14
|
+
*/
|
|
15
|
+
export function appRouteSegment(app) {
|
|
16
|
+
if (!app)
|
|
17
|
+
return undefined;
|
|
18
|
+
const seg = app._packageId ?? app.name;
|
|
19
|
+
return seg ?? undefined;
|
|
20
|
+
}
|
|
21
|
+
export function matchAppBySegment(apps, seg) {
|
|
22
|
+
if (!apps || seg == null)
|
|
23
|
+
return undefined;
|
|
24
|
+
return apps.find((a) => a?._packageId === seg) ?? apps.find((a) => a?.name === seg);
|
|
25
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* deriveRelatedLists — the read-side mirror of `attachInlineSubforms`.
|
|
3
|
+
*
|
|
4
|
+
* Where `inlineEdit: true` on a child's `master_detail`/`lookup` field pulls
|
|
5
|
+
* that child INTO the parent's entry form (write side), the detail-page
|
|
6
|
+
* RELATED LIST is the read-side counterpart: a child collection surfaced on the
|
|
7
|
+
* parent's record DETAIL page. Both intents live on the relationship in the
|
|
8
|
+
* data model — not in a hand-authored page.
|
|
9
|
+
*
|
|
10
|
+
* This helper scans every object for fields whose `reference`/`reference_to`
|
|
11
|
+
* points back at the parent object and produces one related-list descriptor per
|
|
12
|
+
* child collection. The detail page (`RecordDetailView`) feeds these into the
|
|
13
|
+
* `record:related_list` renderers (and the legacy `DetailView.related`).
|
|
14
|
+
*
|
|
15
|
+
* Rules (kept in lockstep with the relationship-level `relatedList` spec flag):
|
|
16
|
+
* - Owned children (`master_detail`) and `lookup` children are SHOWN by
|
|
17
|
+
* default. Set `relatedList: false` on the FK field to suppress a noisy
|
|
18
|
+
* association/audit link.
|
|
19
|
+
* - `relatedListTitle` / `relatedListColumns` on the FK field override the
|
|
20
|
+
* derived title / columns.
|
|
21
|
+
* - Audit FKs (`created_by` / `updated_by` / `owner_id`) are skipped — they
|
|
22
|
+
* exist on virtually every object and would balloon the detail page into
|
|
23
|
+
* dozens of duplicate cards.
|
|
24
|
+
* - One related list per child object (deduped by child object name): the
|
|
25
|
+
* first non-audit, non-suppressed FK wins.
|
|
26
|
+
* - Owned (`master_detail`) children are ordered before plain `lookup`
|
|
27
|
+
* children, preserving discovery order within each group.
|
|
28
|
+
*/
|
|
29
|
+
export interface DerivedRelatedList {
|
|
30
|
+
/** Child object name (the `api` for the related list query). */
|
|
31
|
+
childObject: string;
|
|
32
|
+
/** Best-effort human label for the child object. */
|
|
33
|
+
childLabel: string;
|
|
34
|
+
/** FK field on the child pointing back at this parent. */
|
|
35
|
+
referenceField: string;
|
|
36
|
+
/** Title override from `relatedListTitle` (else derive from the object label). */
|
|
37
|
+
title?: string;
|
|
38
|
+
/** Explicit columns override from `relatedListColumns` (else auto-derived by the renderer). */
|
|
39
|
+
columns?: any[];
|
|
40
|
+
/** True when the child→parent link is a `master_detail` (owned) relationship. */
|
|
41
|
+
isOwned: boolean;
|
|
42
|
+
}
|
|
43
|
+
interface ObjectLike {
|
|
44
|
+
name?: string;
|
|
45
|
+
label?: string;
|
|
46
|
+
fields?: Record<string, any> | any[];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Derive the detail-page related lists for `objectDef` from the full object
|
|
50
|
+
* registry. Returns owned (`master_detail`) children first, then `lookup`
|
|
51
|
+
* children; deterministic and side-effect free (safe to memoize).
|
|
52
|
+
*/
|
|
53
|
+
export declare function deriveRelatedLists(objectDef: ObjectLike | null | undefined, objects: ObjectLike[] | null | undefined): DerivedRelatedList[];
|
|
54
|
+
export {};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* deriveRelatedLists — the read-side mirror of `attachInlineSubforms`.
|
|
3
|
+
*
|
|
4
|
+
* Where `inlineEdit: true` on a child's `master_detail`/`lookup` field pulls
|
|
5
|
+
* that child INTO the parent's entry form (write side), the detail-page
|
|
6
|
+
* RELATED LIST is the read-side counterpart: a child collection surfaced on the
|
|
7
|
+
* parent's record DETAIL page. Both intents live on the relationship in the
|
|
8
|
+
* data model — not in a hand-authored page.
|
|
9
|
+
*
|
|
10
|
+
* This helper scans every object for fields whose `reference`/`reference_to`
|
|
11
|
+
* points back at the parent object and produces one related-list descriptor per
|
|
12
|
+
* child collection. The detail page (`RecordDetailView`) feeds these into the
|
|
13
|
+
* `record:related_list` renderers (and the legacy `DetailView.related`).
|
|
14
|
+
*
|
|
15
|
+
* Rules (kept in lockstep with the relationship-level `relatedList` spec flag):
|
|
16
|
+
* - Owned children (`master_detail`) and `lookup` children are SHOWN by
|
|
17
|
+
* default. Set `relatedList: false` on the FK field to suppress a noisy
|
|
18
|
+
* association/audit link.
|
|
19
|
+
* - `relatedListTitle` / `relatedListColumns` on the FK field override the
|
|
20
|
+
* derived title / columns.
|
|
21
|
+
* - Audit FKs (`created_by` / `updated_by` / `owner_id`) are skipped — they
|
|
22
|
+
* exist on virtually every object and would balloon the detail page into
|
|
23
|
+
* dozens of duplicate cards.
|
|
24
|
+
* - One related list per child object (deduped by child object name): the
|
|
25
|
+
* first non-audit, non-suppressed FK wins.
|
|
26
|
+
* - Owned (`master_detail`) children are ordered before plain `lookup`
|
|
27
|
+
* children, preserving discovery order within each group.
|
|
28
|
+
*/
|
|
29
|
+
/** Audit/ownership FKs that exist on nearly every object — never related lists. */
|
|
30
|
+
const AUDIT_FK_FIELDS = new Set(['created_by', 'updated_by', 'owner_id']);
|
|
31
|
+
/** Normalize an object's `fields` (record or array) into `[name, def]` pairs. */
|
|
32
|
+
function fieldEntries(fields) {
|
|
33
|
+
if (!fields)
|
|
34
|
+
return [];
|
|
35
|
+
if (Array.isArray(fields)) {
|
|
36
|
+
return fields
|
|
37
|
+
.filter((f) => f && (f.name != null))
|
|
38
|
+
.map((f) => [String(f.name), f]);
|
|
39
|
+
}
|
|
40
|
+
return Object.entries(fields);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Derive the detail-page related lists for `objectDef` from the full object
|
|
44
|
+
* registry. Returns owned (`master_detail`) children first, then `lookup`
|
|
45
|
+
* children; deterministic and side-effect free (safe to memoize).
|
|
46
|
+
*/
|
|
47
|
+
export function deriveRelatedLists(objectDef, objects) {
|
|
48
|
+
if (!objectDef?.name || !Array.isArray(objects) || objects.length === 0)
|
|
49
|
+
return [];
|
|
50
|
+
const parentName = objectDef.name;
|
|
51
|
+
const owned = [];
|
|
52
|
+
const referenced = [];
|
|
53
|
+
const seenChild = new Set();
|
|
54
|
+
for (const child of objects) {
|
|
55
|
+
if (!child?.name || child.name === parentName)
|
|
56
|
+
continue;
|
|
57
|
+
for (const [fieldName, fieldDef] of fieldEntries(child.fields)) {
|
|
58
|
+
if (!fieldDef)
|
|
59
|
+
continue;
|
|
60
|
+
const type = fieldDef.type;
|
|
61
|
+
if (type !== 'lookup' && type !== 'master_detail')
|
|
62
|
+
continue;
|
|
63
|
+
if ((fieldDef.reference_to || fieldDef.reference) !== parentName)
|
|
64
|
+
continue;
|
|
65
|
+
if (AUDIT_FK_FIELDS.has(fieldName))
|
|
66
|
+
continue;
|
|
67
|
+
// Explicit opt-out lives on the relationship.
|
|
68
|
+
if (fieldDef.relatedList === false)
|
|
69
|
+
continue;
|
|
70
|
+
// One related list per child object — the first eligible FK wins.
|
|
71
|
+
if (seenChild.has(child.name))
|
|
72
|
+
continue;
|
|
73
|
+
seenChild.add(child.name);
|
|
74
|
+
const entry = {
|
|
75
|
+
childObject: child.name,
|
|
76
|
+
childLabel: child.label || child.name,
|
|
77
|
+
referenceField: fieldName,
|
|
78
|
+
isOwned: type === 'master_detail',
|
|
79
|
+
...(typeof fieldDef.relatedListTitle === 'string' && fieldDef.relatedListTitle
|
|
80
|
+
? { title: fieldDef.relatedListTitle }
|
|
81
|
+
: {}),
|
|
82
|
+
...(Array.isArray(fieldDef.relatedListColumns) && fieldDef.relatedListColumns.length > 0
|
|
83
|
+
? { columns: fieldDef.relatedListColumns }
|
|
84
|
+
: {}),
|
|
85
|
+
};
|
|
86
|
+
(entry.isOwned ? owned : referenced).push(entry);
|
|
87
|
+
break; // move on to the next child object
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return [...owned, ...referenced];
|
|
91
|
+
}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { resolveRecordFormTarget, } from './recordFormNavigation';
|
|
5
5
|
export type { ObjectDefinitionForNavigation, RecordFormTarget, } from './recordFormNavigation';
|
|
6
|
+
export { deriveRelatedLists } from './deriveRelatedLists';
|
|
7
|
+
export type { DerivedRelatedList } from './deriveRelatedLists';
|
|
8
|
+
export { preferLocal } from './preferLocal';
|
|
9
|
+
export { appRouteSegment, matchAppBySegment } from './appRoute';
|
|
6
10
|
/**
|
|
7
11
|
* Resolves an I18nLabel to a plain string.
|
|
8
12
|
* I18nLabel can be either a string or an object { key, defaultValue?, params? }.
|
package/dist/utils/index.js
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
* Utility functions for ObjectStack Console
|
|
3
3
|
*/
|
|
4
4
|
export { resolveRecordFormTarget, } from './recordFormNavigation';
|
|
5
|
+
export { deriveRelatedLists } from './deriveRelatedLists';
|
|
6
|
+
export { preferLocal } from './preferLocal';
|
|
7
|
+
export { appRouteSegment, matchAppBySegment } from './appRoute';
|
|
5
8
|
/**
|
|
6
9
|
* Resolves an I18nLabel to a plain string.
|
|
7
10
|
* I18nLabel can be either a string or an object { key, defaultValue?, params? }.
|
|
@@ -26,4 +26,11 @@ export interface ManagedByEmptyState {
|
|
|
26
26
|
message: string;
|
|
27
27
|
icon: string;
|
|
28
28
|
}
|
|
29
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Translator function, structurally compatible with the `t` returned by
|
|
31
|
+
* `useObjectTranslation()`. Accepts a key and optional options (including a
|
|
32
|
+
* `defaultValue` used as the English fallback when a locale lacks the key).
|
|
33
|
+
*/
|
|
34
|
+
type TranslateFn = (key: string, options?: Record<string, unknown>) => string;
|
|
35
|
+
export declare function resolveManagedByEmptyState(managedBy: string | undefined | null, t: TranslateFn): ManagedByEmptyState | undefined;
|
|
36
|
+
export {};
|
|
@@ -1,22 +1,28 @@
|
|
|
1
|
-
export function resolveManagedByEmptyState(managedBy) {
|
|
1
|
+
export function resolveManagedByEmptyState(managedBy, t) {
|
|
2
2
|
switch (managedBy) {
|
|
3
3
|
case 'system':
|
|
4
4
|
return {
|
|
5
5
|
icon: 'Lock',
|
|
6
|
-
title: 'Nothing here yet',
|
|
7
|
-
message: '
|
|
6
|
+
title: t('list.managedBy.system.title', { defaultValue: 'Nothing here yet' }),
|
|
7
|
+
message: t('list.managedBy.system.message', {
|
|
8
|
+
defaultValue: 'Entries appear automatically when their source action runs (e.g. Submit for Approval, Share, Invite). Trigger one of those on a source record to create a row.',
|
|
9
|
+
}),
|
|
8
10
|
};
|
|
9
11
|
case 'append-only':
|
|
10
12
|
return {
|
|
11
13
|
icon: 'Archive',
|
|
12
|
-
title: 'No events recorded',
|
|
13
|
-
message: '
|
|
14
|
+
title: t('list.managedBy.appendOnly.title', { defaultValue: 'No events recorded' }),
|
|
15
|
+
message: t('list.managedBy.appendOnly.message', {
|
|
16
|
+
defaultValue: 'This is an immutable audit log. Rows are written by the platform when events occur — you can export the history but cannot create entries from here.',
|
|
17
|
+
}),
|
|
14
18
|
};
|
|
15
19
|
case 'better-auth':
|
|
16
20
|
return {
|
|
17
21
|
icon: 'ShieldAlert',
|
|
18
|
-
title: 'No identity records',
|
|
19
|
-
message: '
|
|
22
|
+
title: t('list.managedBy.betterAuth.title', { defaultValue: 'No identity records' }),
|
|
23
|
+
message: t('list.managedBy.betterAuth.message', {
|
|
24
|
+
defaultValue: 'Identity rows are managed by the authentication provider. Use the dedicated identity workflows (Invite User, Reset Password, …) to create new entries.',
|
|
25
|
+
}),
|
|
20
26
|
};
|
|
21
27
|
default:
|
|
22
28
|
return undefined;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADR-0048 Phase 2 — prefer-local (container-scoped) metadata resolution.
|
|
3
|
+
*
|
|
4
|
+
* Two installed packages may legitimately ship the same bare name (e.g. a
|
|
5
|
+
* `page` named `home`) — the install-time namespace gate keeps their namespaces
|
|
6
|
+
* distinct, and resolution disambiguates them by container. When resolving a
|
|
7
|
+
* bare name we prefer the item owned by the *current* container (the active
|
|
8
|
+
* app's package), so a user inside `/apps/crm` sees crm's `home`, not whichever
|
|
9
|
+
* package's `home` happened to load first.
|
|
10
|
+
*
|
|
11
|
+
* Falls back to the first name match when the container owns no such item or
|
|
12
|
+
* its owning package is unknown (runtime/DB apps with no `_packageId`), so this
|
|
13
|
+
* never regresses the prior first-match behaviour.
|
|
14
|
+
*/
|
|
15
|
+
export declare function preferLocal<T extends {
|
|
16
|
+
name?: unknown;
|
|
17
|
+
_packageId?: unknown;
|
|
18
|
+
}>(list: readonly T[] | undefined | null, name: string | undefined | null, ownerPackageId?: unknown): T | undefined;
|