@object-ui/app-shell 6.2.2 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +967 -0
- package/README.md +292 -0
- package/dist/assistant/assistantBus.d.ts +72 -0
- package/dist/assistant/assistantBus.js +133 -0
- package/dist/chrome/CommandPalette.d.ts +1 -1
- package/dist/chrome/CommandPalette.js +26 -22
- package/dist/chrome/ConditionalAuthWrapper.d.ts +1 -1
- package/dist/chrome/ConsoleToaster.d.ts +1 -1
- package/dist/chrome/ConsoleToaster.js +3 -1
- package/dist/chrome/ErrorBoundary.d.ts +1 -1
- package/dist/chrome/KeyboardShortcutsDialog.d.ts +1 -1
- package/dist/chrome/KeyboardShortcutsDialog.js +16 -5
- package/dist/chrome/LoadingScreen.d.ts +1 -1
- package/dist/chrome/LoadingScreen.js +22 -26
- package/dist/chrome/RouteFader.d.ts +1 -1
- package/dist/chrome/ThemeProvider.d.ts +1 -1
- package/dist/components/ManagedByBadge.d.ts +1 -1
- package/dist/console/AppContent.d.ts +1 -1
- package/dist/console/AppContent.js +170 -37
- package/dist/console/ConsoleShell.d.ts +7 -7
- package/dist/console/ConsoleShell.js +32 -3
- package/dist/console/ai/AiChatPage.d.ts +88 -1
- package/dist/console/ai/AiChatPage.js +743 -66
- package/dist/console/ai/ConversationsSidebar.d.ts +26 -1
- package/dist/console/ai/ConversationsSidebar.js +149 -34
- package/dist/console/ai/LiveCanvas.d.ts +22 -0
- package/dist/console/ai/LiveCanvas.js +78 -0
- package/dist/console/ai/reconcileTurn.d.ts +8 -0
- package/dist/console/ai/reconcileTurn.js +20 -0
- package/dist/console/auth/AuthPageLayout.d.ts +1 -1
- package/dist/console/auth/ForgotPasswordPage.d.ts +1 -1
- package/dist/console/auth/LoginPage.d.ts +1 -1
- package/dist/console/auth/RegisterPage.d.ts +1 -1
- package/dist/console/auth/RegisterPage.js +23 -3
- package/dist/console/cloud-connection/CloudConnectionPanel.d.ts +1 -0
- package/dist/console/cloud-connection/CloudConnectionPanel.js +169 -0
- package/dist/console/home/AppCard.d.ts +1 -1
- package/dist/console/home/AppCard.js +6 -12
- package/dist/console/home/HomeAppsStrip.d.ts +8 -0
- package/dist/console/home/HomeAppsStrip.js +61 -0
- package/dist/console/home/HomeLayout.d.ts +1 -1
- package/dist/console/home/HomeLayout.js +3 -1
- package/dist/console/home/HomePage.d.ts +1 -2
- package/dist/console/home/HomePage.js +149 -21
- package/dist/console/home/HomeRail.d.ts +22 -0
- package/dist/console/home/HomeRail.js +62 -0
- package/dist/console/home/QuickActions.d.ts +1 -1
- package/dist/console/home/QuickActions.js +3 -11
- package/dist/console/home/RecentApps.d.ts +1 -1
- package/dist/console/home/RecentApps.js +2 -2
- package/dist/console/home/StarredApps.d.ts +1 -1
- package/dist/console/home/StarredApps.js +2 -2
- package/dist/console/marketplace/InstalledListWidget.d.ts +1 -0
- package/dist/console/marketplace/InstalledListWidget.js +93 -0
- package/dist/console/marketplace/MarkdownText.d.ts +1 -1
- package/dist/console/marketplace/MarketplaceAccessDenied.d.ts +1 -1
- package/dist/console/marketplace/MarketplaceInstalledPage.d.ts +8 -14
- package/dist/console/marketplace/MarketplaceInstalledPage.js +14 -66
- package/dist/console/marketplace/MarketplacePackagePage.d.ts +1 -1
- package/dist/console/marketplace/MarketplacePackagePage.js +249 -8
- package/dist/console/marketplace/MarketplacePage.d.ts +1 -1
- package/dist/console/marketplace/MarketplacePage.js +60 -3
- package/dist/console/marketplace/PackageIcon.d.ts +1 -1
- package/dist/console/marketplace/PluginDisclosure.d.ts +14 -0
- package/dist/console/marketplace/PluginDisclosure.js +38 -0
- package/dist/console/marketplace/marketplaceApi.d.ts +123 -0
- package/dist/console/marketplace/marketplaceApi.js +254 -1
- package/dist/console/organizations/CreateWorkspaceDialog.d.ts +1 -1
- package/dist/console/organizations/OrganizationsLayout.d.ts +1 -1
- package/dist/console/organizations/OrganizationsPage.d.ts +1 -1
- package/dist/console/organizations/manage/AcceptInvitationPage.d.ts +1 -1
- package/dist/console/organizations/manage/InvitationsPage.d.ts +1 -1
- package/dist/console/organizations/manage/InviteMemberDialog.d.ts +1 -1
- package/dist/console/organizations/manage/MembersPage.d.ts +1 -1
- package/dist/console/organizations/manage/OrganizationLayout.d.ts +1 -1
- package/dist/console/organizations/manage/SettingsPage.d.ts +1 -1
- package/dist/context/CommandPaletteProvider.d.ts +44 -0
- package/dist/context/CommandPaletteProvider.js +71 -0
- package/dist/context/FavoritesProvider.d.ts +1 -1
- package/dist/context/NavigationContext.d.ts +1 -1
- package/dist/context/RecentItemsProvider.d.ts +2 -2
- package/dist/context/UserStateAdapters.d.ts +1 -1
- package/dist/context/index.d.ts +2 -0
- package/dist/context/index.js +1 -0
- package/dist/hooks/index.d.ts +5 -2
- package/dist/hooks/index.js +4 -1
- package/dist/hooks/useActionModal.d.ts +53 -0
- package/dist/hooks/useActionModal.js +111 -0
- package/dist/hooks/useChatConversation.d.ts +107 -4
- package/dist/hooks/useChatConversation.js +253 -25
- package/dist/hooks/useConsoleActionRuntime.d.ts +70 -0
- package/dist/hooks/useConsoleActionRuntime.js +560 -0
- package/dist/hooks/useConversationList.js +61 -3
- package/dist/hooks/useHomeInbox.d.ts +13 -0
- package/dist/hooks/useHomeInbox.js +142 -0
- package/dist/hooks/useNavPins.js +17 -23
- package/dist/hooks/useNavigationSync.d.ts +33 -0
- package/dist/hooks/useNavigationSync.js +98 -12
- package/dist/hooks/useReconcileOnError.d.ts +40 -0
- package/dist/hooks/useReconcileOnError.js +37 -0
- package/dist/hooks/useRecordApprovals.d.ts +18 -19
- package/dist/hooks/useRecordApprovals.js +24 -40
- package/dist/hooks/useResponsiveSidebar.js +14 -5
- package/dist/hooks/useSettleSignal.d.ts +19 -0
- package/dist/hooks/useSettleSignal.js +20 -0
- package/dist/hooks/useTrackRouteAsRecent.js +35 -0
- package/dist/hooks/useUrlOverlay.d.ts +62 -0
- package/dist/hooks/useUrlOverlay.js +88 -0
- package/dist/index.d.ts +16 -7
- package/dist/index.js +12 -4
- package/dist/layout/ActivityFeed.d.ts +1 -1
- package/dist/layout/AppHeader.d.ts +3 -2
- package/dist/layout/AppHeader.js +237 -72
- package/dist/layout/AppSidebar.d.ts +2 -1
- package/dist/layout/AppSidebar.js +26 -46
- package/dist/layout/AppSwitcher.d.ts +2 -1
- package/dist/layout/AppSwitcher.js +9 -5
- package/dist/layout/AuthPageLayout.d.ts +1 -1
- package/dist/layout/ConnectionStatus.d.ts +1 -1
- package/dist/layout/ConnectionStatus.js +9 -6
- package/dist/layout/ConsoleChatbotFab.d.ts +19 -1
- package/dist/layout/ConsoleChatbotFab.js +16 -2
- package/dist/layout/ConsoleFloatingChatbot.d.ts +32 -2
- package/dist/layout/ConsoleFloatingChatbot.js +374 -41
- package/dist/layout/ConsoleLayout.d.ts +1 -1
- package/dist/layout/ConsoleLayout.js +27 -11
- package/dist/layout/ContextSelectors.d.ts +44 -0
- package/dist/layout/ContextSelectors.js +218 -0
- package/dist/layout/InboxPopover.d.ts +6 -1
- package/dist/layout/InboxPopover.js +25 -6
- package/dist/layout/LocaleSwitcher.d.ts +1 -1
- package/dist/layout/LocalizedSidebarTrigger.d.ts +2 -0
- package/dist/layout/LocalizedSidebarTrigger.js +15 -0
- package/dist/layout/MobileViewSwitcherContext.d.ts +1 -1
- package/dist/layout/ModeToggle.d.ts +1 -1
- package/dist/layout/PageHeader.d.ts +1 -1
- package/dist/layout/UnifiedSidebar.d.ts +2 -1
- package/dist/layout/UnifiedSidebar.js +116 -15
- package/dist/observability/index.d.ts +1 -0
- package/dist/observability/index.js +1 -0
- package/dist/observability/settleSignal.d.ts +64 -0
- package/dist/observability/settleSignal.js +131 -0
- package/dist/preview/DraftChangesPanel.d.ts +19 -0
- package/dist/preview/DraftChangesPanel.js +114 -0
- package/dist/preview/DraftPreviewBar.d.ts +8 -0
- package/dist/preview/DraftPreviewBar.js +86 -0
- package/dist/preview/PreviewDraftEmptyState.d.ts +16 -0
- package/dist/preview/PreviewDraftEmptyState.js +47 -0
- package/dist/preview/PreviewModeContext.d.ts +57 -0
- package/dist/preview/PreviewModeContext.js +99 -0
- package/dist/preview/UnpublishedAppBar.d.ts +8 -0
- package/dist/preview/UnpublishedAppBar.js +79 -0
- package/dist/preview/draftStatus.d.ts +20 -0
- package/dist/preview/draftStatus.js +27 -0
- package/dist/preview/usePublishAllDrafts.d.ts +18 -0
- package/dist/preview/usePublishAllDrafts.js +106 -0
- package/dist/providers/AdapterProvider.d.ts +1 -1
- package/dist/providers/AdapterProvider.js +6 -1
- package/dist/providers/ExpressionProvider.d.ts +1 -1
- package/dist/providers/MetadataProvider.d.ts +17 -2
- package/dist/providers/MetadataProvider.js +183 -12
- package/dist/runtime-config.d.ts +46 -2
- package/dist/runtime-config.js +39 -2
- package/dist/services/builtinComponents.js +68 -59
- package/dist/skeletons/SkeletonDashboard.d.ts +1 -1
- package/dist/skeletons/SkeletonDetail.d.ts +1 -1
- package/dist/skeletons/SkeletonGrid.d.ts +1 -1
- package/dist/utils/appRoute.d.ts +21 -0
- package/dist/utils/appRoute.js +25 -0
- package/dist/utils/deriveRelatedLists.d.ts +54 -0
- package/dist/utils/deriveRelatedLists.js +91 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/managedByEmptyState.d.ts +8 -1
- package/dist/utils/managedByEmptyState.js +13 -7
- package/dist/utils/preferLocal.d.ts +18 -0
- package/dist/utils/preferLocal.js +24 -0
- package/dist/views/ActionConfirmDialog.d.ts +1 -1
- package/dist/views/ActionConfirmDialog.js +3 -1
- package/dist/views/ActionParamDialog.d.ts +6 -1
- package/dist/views/ActionParamDialog.js +9 -3
- package/dist/views/ActionResultDialog.d.ts +13 -0
- package/dist/views/ActionResultDialog.js +134 -0
- package/dist/views/ComponentNavView.d.ts +14 -1
- package/dist/views/CreateViewDialog.d.ts +1 -1
- package/dist/views/DashboardConfigPanel.d.ts +28 -0
- package/dist/views/DashboardConfigPanel.js +81 -0
- package/dist/views/DashboardView.d.ts +4 -3
- package/dist/views/DashboardView.js +38 -239
- package/dist/views/FlowRunner.d.ts +59 -0
- package/dist/views/FlowRunner.js +153 -0
- package/dist/views/InterfaceListPage.d.ts +49 -0
- package/dist/views/InterfaceListPage.js +347 -0
- package/dist/views/MetadataInspector.d.ts +2 -2
- package/dist/views/ObjectView.d.ts +1 -1
- package/dist/views/ObjectView.js +209 -532
- package/dist/views/PageView.d.ts +8 -3
- package/dist/views/PageView.js +45 -32
- package/dist/views/RecordDetailView.d.ts +1 -1
- package/dist/views/RecordDetailView.js +363 -148
- package/dist/views/RecordFormPage.d.ts +1 -1
- package/dist/views/RecordFormPage.js +26 -1
- package/dist/views/ReportConfigPanel.d.ts +37 -0
- package/dist/views/ReportConfigPanel.js +85 -0
- package/dist/views/ReportView.d.ts +1 -1
- package/dist/views/ReportView.js +116 -7
- package/dist/views/RuntimeDraftBar.d.ts +30 -0
- package/dist/views/RuntimeDraftBar.js +112 -0
- package/dist/views/SearchResultsPage.d.ts +1 -1
- package/dist/views/SearchResultsPage.js +8 -18
- package/dist/views/ViewConfigPanel.d.ts +24 -17
- package/dist/views/ViewConfigPanel.js +121 -77
- package/dist/views/index.d.ts +1 -1
- package/dist/views/index.js +1 -1
- package/dist/views/metadata-admin/AuditPanel.d.ts +28 -0
- package/dist/views/metadata-admin/AuditPanel.js +79 -0
- package/dist/views/metadata-admin/DiagnosticsPage.d.ts +20 -0
- package/dist/views/metadata-admin/DiagnosticsPage.js +69 -0
- package/dist/views/metadata-admin/DirectoryPage.d.ts +16 -1
- package/dist/views/metadata-admin/DirectoryPage.js +113 -24
- package/dist/views/metadata-admin/DraftReviewPanel.d.ts +33 -0
- package/dist/views/metadata-admin/DraftReviewPanel.js +77 -0
- package/dist/views/metadata-admin/EmbeddedItemEditor.d.ts +17 -1
- package/dist/views/metadata-admin/EmbeddedItemEditor.js +15 -8
- package/dist/views/metadata-admin/JsonSourceEditor.d.ts +37 -0
- package/dist/views/metadata-admin/JsonSourceEditor.js +178 -0
- package/dist/views/metadata-admin/LayeredDiff.d.ts +39 -1
- package/dist/views/metadata-admin/LayeredDiff.js +171 -5
- package/dist/views/metadata-admin/MetadataDetailDrawer.d.ts +15 -1
- package/dist/views/metadata-admin/MetadataTypeActions.d.ts +48 -0
- package/dist/views/metadata-admin/MetadataTypeActions.js +165 -0
- package/dist/views/metadata-admin/PackagesPage.d.ts +18 -0
- package/dist/views/metadata-admin/PackagesPage.js +395 -0
- package/dist/views/metadata-admin/PageShell.d.ts +1 -1
- package/dist/views/metadata-admin/PageShell.js +9 -4
- package/dist/views/metadata-admin/PermissionMatrixEditor.d.ts +35 -1
- package/dist/views/metadata-admin/QuickFind.d.ts +21 -1
- package/dist/views/metadata-admin/QuickFind.js +6 -3
- package/dist/views/metadata-admin/RelatedPanel.d.ts +24 -1
- package/dist/views/metadata-admin/RelatedPanel.js +20 -18
- package/dist/views/metadata-admin/ResourceEditPage.d.ts +40 -1
- package/dist/views/metadata-admin/ResourceEditPage.js +1223 -60
- package/dist/views/metadata-admin/ResourceHistoryPage.d.ts +39 -1
- package/dist/views/metadata-admin/ResourceHistoryPage.js +66 -16
- package/dist/views/metadata-admin/ResourceListPage.d.ts +13 -1
- package/dist/views/metadata-admin/ResourceListPage.js +266 -30
- package/dist/views/metadata-admin/ResourceRouter.d.ts +23 -1
- package/dist/views/metadata-admin/SchemaForm.d.ts +34 -1
- package/dist/views/metadata-admin/SchemaForm.js +559 -49
- package/dist/views/metadata-admin/StudioHomePage.d.ts +22 -0
- package/dist/views/metadata-admin/StudioHomePage.js +213 -0
- package/dist/views/metadata-admin/anchors.js +237 -24
- package/dist/views/metadata-admin/clientValidation.d.ts +50 -0
- package/dist/views/metadata-admin/clientValidation.js +169 -0
- package/dist/views/metadata-admin/color-variant-field.d.ts +30 -0
- package/dist/views/metadata-admin/color-variant-field.js +38 -0
- package/dist/views/metadata-admin/createDerive.d.ts +75 -0
- package/dist/views/metadata-admin/createDerive.js +179 -0
- package/dist/views/metadata-admin/dashboard-schema.d.ts +12 -0
- package/dist/views/metadata-admin/dashboard-schema.js +80 -0
- package/dist/views/metadata-admin/datasource/DatasourceResourcePage.d.ts +35 -0
- package/dist/views/metadata-admin/datasource/DatasourceResourcePage.js +327 -0
- package/dist/views/metadata-admin/datasource/register.d.ts +1 -0
- package/dist/views/metadata-admin/datasource/register.js +24 -0
- package/dist/views/metadata-admin/default-inspector-registry.d.ts +49 -0
- package/dist/views/metadata-admin/default-inspector-registry.js +8 -0
- package/dist/views/metadata-admin/default-schemas.js +115 -10
- package/dist/views/metadata-admin/external/ExternalDatasourcePanel.d.ts +27 -0
- package/dist/views/metadata-admin/external/ExternalDatasourcePanel.js +69 -0
- package/dist/views/metadata-admin/external/ImportObjectDialog.d.ts +27 -0
- package/dist/views/metadata-admin/external/ImportObjectDialog.js +77 -0
- package/dist/views/metadata-admin/external/SchemaBrowser.d.ts +16 -0
- package/dist/views/metadata-admin/external/SchemaBrowser.js +74 -0
- package/dist/views/metadata-admin/external/ValidationPanel.d.ts +16 -0
- package/dist/views/metadata-admin/external/ValidationPanel.js +68 -0
- package/dist/views/metadata-admin/external/api.d.ts +100 -0
- package/dist/views/metadata-admin/external/api.js +124 -0
- package/dist/views/metadata-admin/i18n.d.ts +1 -0
- package/dist/views/metadata-admin/i18n.js +1166 -2
- package/dist/views/metadata-admin/index.d.ts +8 -5
- package/dist/views/metadata-admin/index.js +12 -2
- package/dist/views/metadata-admin/inspector-registry.d.ts +51 -0
- package/dist/views/metadata-admin/inspector-registry.js +11 -0
- package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.d.ts +30 -0
- package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.js +180 -0
- package/dist/views/metadata-admin/inspectors/AppNavInspector.d.ts +16 -0
- package/dist/views/metadata-admin/inspectors/AppNavInspector.js +110 -0
- package/dist/views/metadata-admin/inspectors/ConditionBuilder.d.ts +29 -0
- package/dist/views/metadata-admin/inspectors/ConditionBuilder.js +154 -0
- package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.d.ts +28 -0
- package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.js +110 -0
- package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.d.ts +18 -0
- package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.js +139 -0
- package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.d.ts +21 -0
- package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.js +107 -0
- package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.d.ts +16 -0
- package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.js +45 -0
- package/dist/views/metadata-admin/inspectors/FlowInspector.d.ts +12 -0
- package/dist/views/metadata-admin/inspectors/FlowInspector.js +9 -0
- package/dist/views/metadata-admin/inspectors/FlowKeyValueField.d.ts +30 -0
- package/dist/views/metadata-admin/inspectors/FlowKeyValueField.js +125 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.d.ts +18 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.js +40 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeInspector.d.ts +14 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeInspector.js +140 -0
- package/dist/views/metadata-admin/inspectors/FlowObjectListField.d.ts +26 -0
- package/dist/views/metadata-admin/inspectors/FlowObjectListField.js +105 -0
- package/dist/views/metadata-admin/inspectors/FlowReferenceField.d.ts +83 -0
- package/dist/views/metadata-admin/inspectors/FlowReferenceField.js +181 -0
- package/dist/views/metadata-admin/inspectors/FlowStringListField.d.ts +21 -0
- package/dist/views/metadata-admin/inspectors/FlowStringListField.js +60 -0
- package/dist/views/metadata-admin/inspectors/InspectorComboField.d.ts +40 -0
- package/dist/views/metadata-admin/inspectors/InspectorComboField.js +61 -0
- package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.d.ts +21 -0
- package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.js +54 -0
- package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.d.ts +23 -0
- package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.js +330 -0
- package/dist/views/metadata-admin/inspectors/PageBlockInspector.d.ts +48 -0
- package/dist/views/metadata-admin/inspectors/PageBlockInspector.js +332 -0
- package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.d.ts +58 -0
- package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.js +160 -0
- package/dist/views/metadata-admin/inspectors/ViewColumnInspector.d.ts +19 -0
- package/dist/views/metadata-admin/inspectors/ViewColumnInspector.js +144 -0
- package/dist/views/metadata-admin/inspectors/ViewInspector.d.ts +19 -0
- package/dist/views/metadata-admin/inspectors/ViewInspector.js +21 -0
- package/dist/views/metadata-admin/inspectors/ViewVariantInspector.d.ts +54 -0
- package/dist/views/metadata-admin/inspectors/ViewVariantInspector.js +191 -0
- package/dist/views/metadata-admin/inspectors/_shared.d.ts +124 -0
- package/dist/views/metadata-admin/inspectors/_shared.js +113 -0
- package/dist/views/metadata-admin/inspectors/expression-validate.d.ts +26 -0
- package/dist/views/metadata-admin/inspectors/expression-validate.js +66 -0
- package/dist/views/metadata-admin/inspectors/flow-node-config.d.ts +143 -0
- package/dist/views/metadata-admin/inspectors/flow-node-config.js +461 -0
- package/dist/views/metadata-admin/inspectors/index.d.ts +1 -0
- package/dist/views/metadata-admin/inspectors/index.js +45 -0
- package/dist/views/metadata-admin/inspectors/json-schema-to-fields.d.ts +40 -0
- package/dist/views/metadata-admin/inspectors/json-schema-to-fields.js +227 -0
- package/dist/views/metadata-admin/inspectors/useDatasetFields.d.ts +72 -0
- package/dist/views/metadata-admin/inspectors/useDatasetFields.js +0 -0
- package/dist/views/metadata-admin/mergeServerFields.d.ts +65 -0
- package/dist/views/metadata-admin/mergeServerFields.js +56 -0
- package/dist/views/metadata-admin/preview-registry.d.ts +55 -0
- package/dist/views/metadata-admin/previews/ActionPreview.d.ts +25 -0
- package/dist/views/metadata-admin/previews/ActionPreview.js +238 -0
- package/dist/views/metadata-admin/previews/AddWidgetPicker.d.ts +12 -0
- package/dist/views/metadata-admin/previews/AddWidgetPicker.js +56 -0
- package/dist/views/metadata-admin/previews/AgentPreview.d.ts +24 -0
- package/dist/views/metadata-admin/previews/AgentPreview.js +100 -0
- package/dist/views/metadata-admin/previews/AppNavCanvas.d.ts +31 -0
- package/dist/views/metadata-admin/previews/AppNavCanvas.js +260 -0
- package/dist/views/metadata-admin/previews/AppPreview.d.ts +16 -1
- package/dist/views/metadata-admin/previews/AppPreview.js +23 -14
- package/dist/views/metadata-admin/previews/BookPreview.d.ts +20 -0
- package/dist/views/metadata-admin/previews/BookPreview.js +132 -0
- package/dist/views/metadata-admin/previews/DashboardPreview.d.ts +16 -1
- package/dist/views/metadata-admin/previews/DashboardPreview.js +110 -8
- package/dist/views/metadata-admin/previews/DatasetPreview.d.ts +18 -0
- package/dist/views/metadata-admin/previews/DatasetPreview.js +89 -0
- package/dist/views/metadata-admin/previews/DatasourcePreview.d.ts +23 -0
- package/dist/views/metadata-admin/previews/DatasourcePreview.js +68 -0
- package/dist/views/metadata-admin/previews/EmailTemplatePreview.d.ts +14 -1
- package/dist/views/metadata-admin/previews/FieldStub.d.ts +30 -0
- package/dist/views/metadata-admin/previews/FieldStub.js +104 -0
- package/dist/views/metadata-admin/previews/FieldsListEditor.d.ts +50 -0
- package/dist/views/metadata-admin/previews/FieldsListEditor.js +97 -0
- package/dist/views/metadata-admin/previews/FlowCanvas.d.ts +43 -0
- package/dist/views/metadata-admin/previews/FlowCanvas.js +328 -0
- package/dist/views/metadata-admin/previews/FlowPreview.d.ts +20 -0
- package/dist/views/metadata-admin/previews/FlowPreview.js +92 -0
- package/dist/views/metadata-admin/previews/FlowRunsPanel.d.ts +46 -0
- package/dist/views/metadata-admin/previews/FlowRunsPanel.js +97 -0
- package/dist/views/metadata-admin/previews/FlowSimulatorPanel.d.ts +25 -0
- package/dist/views/metadata-admin/previews/FlowSimulatorPanel.js +170 -0
- package/dist/views/metadata-admin/previews/JobPreview.d.ts +28 -0
- package/dist/views/metadata-admin/previews/JobPreview.js +290 -0
- package/dist/views/metadata-admin/previews/ObjectFormCanvas.d.ts +30 -0
- package/dist/views/metadata-admin/previews/ObjectFormCanvas.js +547 -0
- package/dist/views/metadata-admin/previews/ObjectPreview.d.ts +14 -1
- package/dist/views/metadata-admin/previews/ObjectPreview.js +5 -30
- package/dist/views/metadata-admin/previews/OutlineStrip.d.ts +32 -0
- package/dist/views/metadata-admin/previews/OutlineStrip.js +8 -0
- package/dist/views/metadata-admin/previews/PageBlockCanvas.d.ts +49 -0
- package/dist/views/metadata-admin/previews/PageBlockCanvas.js +510 -0
- package/dist/views/metadata-admin/previews/PagePreview.d.ts +10 -1
- package/dist/views/metadata-admin/previews/PagePreview.js +90 -4
- package/dist/views/metadata-admin/previews/PermissionPreview.d.ts +27 -0
- package/dist/views/metadata-admin/previews/PermissionPreview.js +115 -0
- package/dist/views/metadata-admin/previews/PreviewShell.d.ts +29 -6
- package/dist/views/metadata-admin/previews/PreviewShell.js +16 -3
- package/dist/views/metadata-admin/previews/ReportPreview.d.ts +18 -1
- package/dist/views/metadata-admin/previews/ReportPreview.js +23 -15
- package/dist/views/metadata-admin/previews/RolePreview.d.ts +19 -0
- package/dist/views/metadata-admin/previews/RolePreview.js +14 -0
- package/dist/views/metadata-admin/previews/SkillPreview.d.ts +22 -0
- package/dist/views/metadata-admin/previews/SkillPreview.js +34 -0
- package/dist/views/metadata-admin/previews/ToolPreview.d.ts +25 -0
- package/dist/views/metadata-admin/previews/ToolPreview.js +122 -0
- package/dist/views/metadata-admin/previews/TranslationPreview.d.ts +25 -0
- package/dist/views/metadata-admin/previews/TranslationPreview.js +52 -0
- package/dist/views/metadata-admin/previews/ValidationPreview.d.ts +27 -0
- package/dist/views/metadata-admin/previews/ValidationPreview.js +110 -0
- package/dist/views/metadata-admin/previews/ViewColumnPanes.d.ts +62 -0
- package/dist/views/metadata-admin/previews/ViewColumnPanes.js +140 -0
- package/dist/views/metadata-admin/previews/ViewPreview.d.ts +23 -1
- package/dist/views/metadata-admin/previews/ViewPreview.js +101 -73
- package/dist/views/metadata-admin/previews/block-config.d.ts +82 -0
- package/dist/views/metadata-admin/previews/block-config.js +324 -0
- package/dist/views/metadata-admin/previews/block-types.d.ts +40 -0
- package/dist/views/metadata-admin/previews/block-types.js +110 -0
- package/dist/views/metadata-admin/previews/field-types.d.ts +53 -0
- package/dist/views/metadata-admin/previews/field-types.js +97 -0
- package/dist/views/metadata-admin/previews/flow-canvas-layout.d.ts +88 -0
- package/dist/views/metadata-admin/previews/flow-canvas-layout.js +190 -0
- package/dist/views/metadata-admin/previews/flow-canvas-parts.d.ts +88 -0
- package/dist/views/metadata-admin/previews/flow-canvas-parts.js +358 -0
- package/dist/views/metadata-admin/previews/form-preview.d.ts +24 -0
- package/dist/views/metadata-admin/previews/form-preview.js +29 -0
- package/dist/views/metadata-admin/previews/index.js +43 -0
- package/dist/views/metadata-admin/previews/object-fields-bridge.d.ts +66 -0
- package/dist/views/metadata-admin/previews/object-fields-bridge.js +171 -0
- package/dist/views/metadata-admin/previews/object-fields-io.d.ts +109 -0
- package/dist/views/metadata-admin/previews/object-fields-io.js +208 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-types.d.ts +91 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-types.js +2 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.d.ts +8 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.js +113 -0
- package/dist/views/metadata-admin/previews/simulator/flow-simulator.d.ts +44 -0
- package/dist/views/metadata-admin/previews/simulator/flow-simulator.js +316 -0
- package/dist/views/metadata-admin/previews/useDatasetCatalog.d.ts +47 -0
- package/dist/views/metadata-admin/previews/useDatasetCatalog.js +133 -0
- package/dist/views/metadata-admin/previews/useFlowNodePalette.d.ts +44 -0
- package/dist/views/metadata-admin/previews/useFlowNodePalette.js +124 -0
- package/dist/views/metadata-admin/previews/useMetaOptions.d.ts +8 -0
- package/dist/views/metadata-admin/previews/useMetaOptions.js +50 -0
- package/dist/views/metadata-admin/previews/useObjectFields.d.ts +23 -0
- package/dist/views/metadata-admin/previews/useObjectFields.js +79 -0
- package/dist/views/metadata-admin/previews/useObjectOptions.d.ts +8 -0
- package/dist/views/metadata-admin/previews/useObjectOptions.js +43 -0
- package/dist/views/metadata-admin/previews/view-column-io.d.ts +42 -0
- package/dist/views/metadata-admin/previews/view-column-io.js +73 -0
- package/dist/views/metadata-admin/previews/widget-types.d.ts +24 -0
- package/dist/views/metadata-admin/previews/widget-types.js +40 -0
- package/dist/views/metadata-admin/registry.d.ts +140 -19
- package/dist/views/metadata-admin/report-schema.d.ts +26 -0
- package/dist/views/metadata-admin/report-schema.js +121 -0
- package/dist/views/metadata-admin/useMetadata.d.ts +100 -2
- package/dist/views/metadata-admin/useMetadata.js +155 -4
- package/dist/views/metadata-admin/view-item-normalize.d.ts +20 -0
- package/dist/views/metadata-admin/view-item-normalize.js +68 -0
- package/dist/views/metadata-admin/view-schema.d.ts +16 -0
- package/dist/views/metadata-admin/view-schema.js +107 -0
- package/dist/views/metadata-admin/view-variant-model.d.ts +23 -0
- package/dist/views/metadata-admin/view-variant-model.js +64 -0
- package/dist/views/metadata-admin/widgets.d.ts +89 -1
- package/dist/views/metadata-admin/widgets.js +491 -17
- package/dist/views/runtime-metadata-persistence.d.ts +78 -0
- package/dist/views/runtime-metadata-persistence.js +89 -0
- package/dist/views/useOpenRecordList.d.ts +18 -0
- package/dist/views/useOpenRecordList.js +36 -0
- package/dist/views/userFilterUrlState.d.ts +15 -0
- package/dist/views/userFilterUrlState.js +53 -0
- package/dist/views/view-config-adapter.d.ts +38 -0
- package/dist/views/view-config-adapter.js +80 -0
- package/package.json +52 -34
- package/dist/views/DesignDrawer.d.ts +0 -28
- package/dist/views/DesignDrawer.js +0 -51
- package/dist/views/metadata-admin/DesignerEditorWrapper.d.ts +0 -68
- package/dist/views/metadata-admin/DesignerEditorWrapper.js +0 -158
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,972 @@
|
|
|
1
1
|
# @object-ui/app-shell — Changelog
|
|
2
2
|
|
|
3
|
+
## 7.0.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- a00e16d: feat: evaluate CEL `disabled` on action buttons + record-page Undo wiring
|
|
8
|
+
|
|
9
|
+
- **components (page header)**: the `record_header` action toolbar now evaluates
|
|
10
|
+
a CEL `disabled` predicate against the record (boolean was the only honoured
|
|
11
|
+
form before), mirroring its existing `visible` evaluation. An action can now
|
|
12
|
+
grey out conditionally (e.g. "Reassign" on a converted lead) instead of only
|
|
13
|
+
hiding via `visible`.
|
|
14
|
+
- **plugin-grid (row menu)**: `RowActionMenu` items likewise evaluate `disabled`
|
|
15
|
+
(boolean or CEL against the row), and skip the click when disabled.
|
|
16
|
+
- **components (action-button)**: forward `undoable` / `recordIdField` when
|
|
17
|
+
executing, so undoable update actions keep their Undo affordance through the
|
|
18
|
+
`action:button` path.
|
|
19
|
+
- **app-shell (RecordDetailView)**: mount `useGlobalUndo` and wire the record
|
|
20
|
+
action runtime's success toast to offer "Undo" for `undoable` actions
|
|
21
|
+
(capturing the changed fields' prior values from the loaded record).
|
|
22
|
+
- **plugin-detail (record:quick_actions)**: the widget's buttons now evaluate a
|
|
23
|
+
CEL `disabled` and show a spinner + disable while running.
|
|
24
|
+
|
|
25
|
+
- 11ef5e3: Action modal transport with placement (SDUI opt #2).
|
|
26
|
+
|
|
27
|
+
`useActionModal` provides a reusable `onModal` handler that renders an action's modal envelope in the right container by `placement`: `center` (Dialog), `side` (Sheet), `bottom` (Drawer), `fullscreen`. `content` is an arbitrary SchemaNode rendered via `SchemaRenderer`, so a modal action can open any page/form/list; string targets / `{objectName, mode}` keep opening a `ModalForm`. Wired into `RecordDetailView` so `type:'modal'` actions open client-side (previously routed to a server POST).
|
|
28
|
+
|
|
29
|
+
- f7f325d: feat: action progress state + Undo affordance
|
|
30
|
+
|
|
31
|
+
- **core**: `ActionResult.undo` (an `UndoableOperation`) and `ActionDef.undoable`.
|
|
32
|
+
On success the `ActionRunner` pushes the operation onto the global UndoManager
|
|
33
|
+
and the success toast carries an "Undo" affordance (`ToastHandler` gains an
|
|
34
|
+
`undo` option).
|
|
35
|
+
- **app-shell**: the console action runtime mounts `useGlobalUndo` (Ctrl+Z /
|
|
36
|
+
Ctrl+Shift+Z) and renders the toast's "Undo" button; its `apiHandler` resolves
|
|
37
|
+
the row id from the list row record and, for `undoable` actions, captures the
|
|
38
|
+
changed fields' prior values so the update can be reverted.
|
|
39
|
+
- **plugin-detail**: record-header quick-action buttons show a spinner + disable
|
|
40
|
+
while the action runs (a visible progress state for slow/flow actions).
|
|
41
|
+
|
|
42
|
+
- c12986e: Add resultDialog + target interpolation for one-shot action reveals
|
|
43
|
+
|
|
44
|
+
Some platform actions return values the user MUST copy now because the
|
|
45
|
+
server will not surface them again — 2FA TOTP URI + backup codes, freshly
|
|
46
|
+
minted OAuth client_secret, regenerated recovery codes. Previously these
|
|
47
|
+
had to ship as bespoke pages in `apps/account` because actions only
|
|
48
|
+
emitted a fire-and-forget toast.
|
|
49
|
+
|
|
50
|
+
**`@object-ui/core` — ActionRunner**
|
|
51
|
+
|
|
52
|
+
- New `ActionDef.resultDialog: ResultDialogSpec` field. When set on a
|
|
53
|
+
successful action, the runner suppresses the `successMessage` toast and
|
|
54
|
+
awaits the registered `ResultDialogHandler` instead. Missing handler is
|
|
55
|
+
non-fatal (logs a warning); rejected handler is treated as acknowledged.
|
|
56
|
+
- New `setResultDialogHandler(handler)` setter.
|
|
57
|
+
- New types: `ResultDialogSpec`, `ResultDialogFieldSpec`,
|
|
58
|
+
`ResultDialogHandler`.
|
|
59
|
+
- `executeUrl` and `executeAPI` now run `${param.X}` and `${ctx.X}`
|
|
60
|
+
interpolation against `target` before fetching / navigating. Values are
|
|
61
|
+
`encodeURIComponent`'d, missing keys resolve to empty string. `ctx`
|
|
62
|
+
exposes `origin`, `user`, `org`, `recordId` by default; consumers can
|
|
63
|
+
inject more via `context.ctx`.
|
|
64
|
+
|
|
65
|
+
**`@object-ui/react`**
|
|
66
|
+
|
|
67
|
+
- `ActionProvider` and `useActionRunner` both gained an `onResultDialog`
|
|
68
|
+
option that wires straight through to the runner.
|
|
69
|
+
|
|
70
|
+
**`@object-ui/app-shell`**
|
|
71
|
+
|
|
72
|
+
- New `ActionResultDialog` component — promise-based, blocks click-outside
|
|
73
|
+
and Escape (the user MUST click acknowledge), renders five field
|
|
74
|
+
formats: `qrcode` (client-side via the `qrcode` package — never sent
|
|
75
|
+
off-device, so 2FA URIs stay secret), `code-list`, `secret`, `text`,
|
|
76
|
+
`json`. Falls back to `json` when a value's shape doesn't match its
|
|
77
|
+
declared format.
|
|
78
|
+
- `ObjectView` and `RecordDetailView` install the handler and mount the
|
|
79
|
+
dialog automatically, so any action with `resultDialog` declared in
|
|
80
|
+
metadata now works without code changes.
|
|
81
|
+
- New dependency: `qrcode@^1.5.x` for client-side QR rendering.
|
|
82
|
+
|
|
83
|
+
Pairs with the framework-side `Action.resultDialog` schema added in
|
|
84
|
+
`@objectstack/spec` and the `sys_two_factor` / `sys_oauth_application` /
|
|
85
|
+
`sys_account` updates in `@objectstack/platform-objects`.
|
|
86
|
+
|
|
87
|
+
- 0c95963: ADR-0021 single-form: dataset-native report editing + legacy report surface retired.
|
|
88
|
+
|
|
89
|
+
- The Studio/runtime report inspector now edits the 9.0 dataset binding (dataset picker + values/rows selectors sourced from the dataset's semantic layer) instead of the removed objectName/columns query form.
|
|
90
|
+
- plugin-report: the pre-9.0 query-form renderers (SpecReportGrid, MatrixRenderer, JoinedReportRenderer), the drill helpers, and the legacy authoring components (ReportBuilder, ReportConfigPanel, ColumnsEditor, GroupingsBuilder, JoinedBlocksEditor, FieldPickerDialog, ChartConfig, ScheduleConfig) are removed. ReportRenderer dispatches dataset-bound reports to DatasetReportRenderer; stored pre-9.0 spec JSON renders through the lossy specReportToPresentation → ReportViewer bridge until migrated.
|
|
91
|
+
|
|
92
|
+
- 1c25b56: ADR-0032: author-time condition validation in the flow inspectors.
|
|
93
|
+
|
|
94
|
+
Flow node and edge condition editors now flag a malformed predicate **as you
|
|
95
|
+
type** — most importantly the `{record.x}` template-brace-in-CEL mistake (#1491),
|
|
96
|
+
which `{…}` parses as a CEL map literal and silently fails — with the same
|
|
97
|
+
corrective message the build and the `validate_expression` agent tool emit.
|
|
98
|
+
Client-side check for now (no CEL parser in the browser); swaps to
|
|
99
|
+
`@objectstack/formula`'s shared `validateExpression` once it is published.
|
|
100
|
+
|
|
101
|
+
- 30ee761: feat(studio): surface pending drafts on the package detail (ADR-0033)
|
|
102
|
+
|
|
103
|
+
After an AI builds an app, its objects/views land as drafts bound to the app package — but Studio's active-only browsers hid them, so the package looked empty and there was no obvious way to find what to review/publish.
|
|
104
|
+
|
|
105
|
+
- `MetadataClient.listDrafts({ packageId?, type? })` calls the new `GET /api/v1/meta/_drafts` endpoint, returning pending draft headers (with `packageId`).
|
|
106
|
+
- The package detail sheet (PackagesPage) now shows a **Pending changes** section listing each drafted item, each linking to the existing per-item review/diff (`?review=1`) so the user can publish it. A just-built app package is no longer shown as empty.
|
|
107
|
+
|
|
108
|
+
- 81c0777: feat(studio): ADR-0033 Phase B — draft review surface (chat → designer → generic diff)
|
|
109
|
+
|
|
110
|
+
Closes the AI metadata-authoring loop in Studio. The framework (ADR-0033 Phases A + C) makes the assistant stage every change as a DRAFT; this lets a human see and review those drafts.
|
|
111
|
+
|
|
112
|
+
**`@object-ui/plugin-chatbot`**
|
|
113
|
+
|
|
114
|
+
- `mapMessages` now detects the framework's draft envelopes — `{ status:'drafted', type, name, … }` (single) and `{ status:'drafted', drafted:[{type,name}] }` (apply_blueprint batch) — and lifts the reviewable targets onto `ChatToolInvocation.draftReview` (mirrors the existing HITL `pendingActionId` path; the Vercel `{type:'text',value}` wrapper is peeled). `blueprint_proposed` is intentionally not surfaced (no draft yet).
|
|
115
|
+
- `ChatbotEnhanced` renders a **"Review N change(s)"** button on drafted tool results, driven by a new `onReviewDraft` callback prop.
|
|
116
|
+
|
|
117
|
+
**`@object-ui/app-shell`**
|
|
118
|
+
|
|
119
|
+
- `assistantBus` gains a review channel (`requestReview` / `requestAssistantReview`); `ConsoleFloatingChatbot` wires the chat button to it; a small navigator inside `AppContent` (which knows the app base) routes to `/apps/:appName/metadata/:type/:name?review=1`.
|
|
120
|
+
- `ResourceEditPage` honours `?review=1`: it force-reloads the pending draft (covers the case where the AI drafted the item after the page mounted) and opens the review/diff.
|
|
121
|
+
- New **`DraftReviewPanel`** — a generic, type-agnostic draft↔published structural diff (added / changed / removed by key), reusing `LayeredDiff`'s `computeDiffRows`. It gives **every** metadata type (view, dashboard, flow, …) a real "what will publishing change" review, surfaced as a toolbar affordance + sheet whenever a draft exists. The object designer keeps its richer per-field review.
|
|
122
|
+
|
|
123
|
+
Nothing is published by any of this — the human still clicks Publish.
|
|
124
|
+
|
|
125
|
+
- 672f854: feat(studio): add "Publish app" button to publish all package drafts (ADR-0033)
|
|
126
|
+
|
|
127
|
+
The package detail's Pending changes section gains a primary **Publish app (N)** button that calls `POST /api/v1/packages/:id/publish-drafts` to promote every drafted item of the app in one shot, then refreshes the pending list. Complements the per-item review/publish links — so after an AI builds an app you can review item-by-item or publish the whole thing at once.
|
|
128
|
+
|
|
129
|
+
- 893e530: Package documentation portal + nav entry (ADR-0046).
|
|
130
|
+
|
|
131
|
+
The `/docs/:name` viewer already existed but had no way in: no index and no
|
|
132
|
+
navigation entry, so a doc was reachable only by typing its exact URL. Adds a
|
|
133
|
+
platform-level docs portal at `/docs` (`DocsIndex`) that lists every installed
|
|
134
|
+
`doc` metadata item grouped by package namespace, each linking to the existing
|
|
135
|
+
viewer. A "Documentation" entry now appears in the home/system navigation
|
|
136
|
+
(`UnifiedSidebar`), visible to all users (not gated behind workspace-admin), so
|
|
137
|
+
docs are discoverable. The viewer route stays app-independent and
|
|
138
|
+
single-coordinate (`/docs/<name>`); per-app deep-links remain opt-in `url` nav
|
|
139
|
+
items pointing at that same global URL. Doc grouping is a pure, unit-tested
|
|
140
|
+
helper (`groupDocsByPackage`).
|
|
141
|
+
|
|
142
|
+
- 053c948: feat: ADR-0047 — interface pages, visualization switcher, and Airtable-parity filters
|
|
143
|
+
|
|
144
|
+
End-user interface/list pages reach full rendering and authoring parity:
|
|
145
|
+
|
|
146
|
+
- **Spec tabs + visualization switcher** — `ObjectView` now forwards
|
|
147
|
+
`viewDef.tabs` (stored/served but never rendered) and `viewDef.appearance`
|
|
148
|
+
(`allowedVisualizations` whitelist), turning on the dormant `ViewSwitcher` when
|
|
149
|
+
more than one type is whitelisted; effective options = author whitelist ∩
|
|
150
|
+
capability-resolvable types (kanban needs `groupBy`, calendar a date field, …).
|
|
151
|
+
`ListView` accepts the canonical `ViewFilterRule[]` tab-filter shape.
|
|
152
|
+
- **User filters** — render only when `userFilters` is explicitly configured;
|
|
153
|
+
selections (dropdown values + active tab) mirror into `uf_*` URL params and
|
|
154
|
+
restore on load, so filtered lists survive reload and are shareable.
|
|
155
|
+
- **Toolbar polish** — the visualization switcher becomes a compact right-side
|
|
156
|
+
"Grid ▾" dropdown inside the tool cluster (no extra row); filter tabs and
|
|
157
|
+
dropdown filters are mutually exclusive.
|
|
158
|
+
- **Studio authoring** — a usable, schema-driven interface-page inspector
|
|
159
|
+
(collapsible sections honoured, array-of-enum → multi-select, a None/Tabs/
|
|
160
|
+
Dropdown `filter-mode` selector where None maps to ABSENCE of `userFilters`),
|
|
161
|
+
and the Design/Preview tabs render the live list via `InterfaceListPage`
|
|
162
|
+
(including a non-empty grid when the source view is hollow).
|
|
163
|
+
|
|
164
|
+
- 053c948: feat(app-shell): ADR-0048 (option A) — package-id app routing + prefer-local resolution
|
|
165
|
+
|
|
166
|
+
Apps are now routed by their canonical package id rather than name:
|
|
167
|
+
|
|
168
|
+
- **Resolution layer** — new `appRoute` helpers: `appRouteSegment(app)`
|
|
169
|
+
(canonical link segment = package id, name fallback) and
|
|
170
|
+
`matchAppBySegment(apps, seg)` (prefers `_packageId`, falls back to `name`).
|
|
171
|
+
`AppContent` selects the active app via `matchAppBySegment`, so
|
|
172
|
+
`/apps/<packageId>` resolves while `/apps/<appName>` keeps working (a per-tenant
|
|
173
|
+
alias / legacy URL).
|
|
174
|
+
- **Emission layer** — nav generates `/apps/<packageId>` links across app
|
|
175
|
+
switching (AppSwitcher/AppSidebar/CommandPalette), sidebar base paths,
|
|
176
|
+
create/edit-app, and the hidden-app switch, all via `appRouteSegment(app)`.
|
|
177
|
+
- **Prefer-local resolution** — `preferLocal(list, name, ownerPackageId)` resolves
|
|
178
|
+
a bare metadata name to the item whose `_packageId` matches the active app's
|
|
179
|
+
package (falling back to first match), wired at PageView/DashboardView/
|
|
180
|
+
ReportView and AppHeader so two installed packages can ship the same bare name.
|
|
181
|
+
|
|
182
|
+
- 053c948: feat(console/ai): AI workspace UX — date-grouped conversations, draggable split, keyboard shortcuts
|
|
183
|
+
|
|
184
|
+
ChatGPT/Claude-parity polish for the console AI workspace:
|
|
185
|
+
|
|
186
|
+
- **Date-grouped conversations** — the flat conversations list groups into
|
|
187
|
+
recency sections (Today / Yesterday / Previous 7 days / Previous 30 days /
|
|
188
|
+
Older) with calendar-day boundaries, via a pure exported
|
|
189
|
+
`groupConversationsByDate()`.
|
|
190
|
+
- **Draggable chat ↔ preview split** — a draggable, double-click-to-reset divider
|
|
191
|
+
between chat and the Live Canvas preview; width persists to `localStorage`,
|
|
192
|
+
clamped so neither pane collapses (chat ≥ 360px, preview ≥ 420px), keyboard-
|
|
193
|
+
accessible (`role="separator"`, ←/→ resize).
|
|
194
|
+
- **Collapsible conversations list** — auto-tucks when the preview opens, with a
|
|
195
|
+
manual toggle.
|
|
196
|
+
- **Keyboard shortcuts** — ⌘⇧O new chat, ⌘⇧S toggle the conversations list.
|
|
197
|
+
|
|
198
|
+
- 5c23088: **Wire `App.hidden` shell hint — App Switcher + avatar dropdown**
|
|
199
|
+
|
|
200
|
+
Honour the new `App.hidden` field from `@objectstack/spec/ui`:
|
|
201
|
+
|
|
202
|
+
- **`AppSwitcher.tsx`** — filter `app.hidden === true` out of the top-bar app dropdown so personal-settings-style apps don't appear next to business apps.
|
|
203
|
+
- **`AppHeader.tsx`** — render hidden apps as entries in the avatar / user dropdown (immediately after the hardcoded Profile / Settings items). Uses the app's `icon` + `label` via the existing `getIcon` + `appLabel` utilities, and navigates to `/apps/${app.name}`.
|
|
204
|
+
|
|
205
|
+
This is the front-end side of the Account-app split: the `account` app shipped by `@objectstack/platform-objects` declares `hidden: true` and now surfaces through the avatar menu — same pattern as GitHub Settings, Google account chip, and Salesforce Personal Settings.
|
|
206
|
+
|
|
207
|
+
No new dependencies; pure metadata-driven wiring.
|
|
208
|
+
|
|
209
|
+
- 053c948: feat(app-shell): zero-roundtrip `newTabUrl` fast path for `opensInNewTab` actions
|
|
210
|
+
|
|
211
|
+
Actions that declare `newTabUrl` (a path template with a `{recordId}` placeholder
|
|
212
|
+
whose target endpoint performs all auth/authz itself) now drive the pre-opened
|
|
213
|
+
popup straight to that URL on click, skipping the action POST entirely — applied
|
|
214
|
+
to both server-action paths (list rows via `useConsoleActionRuntime`, record
|
|
215
|
+
header via `RecordDetailView`). The popup paints the existing spinner page until
|
|
216
|
+
the (possibly slow) endpoint commits its redirect; the URL is resolved absolute
|
|
217
|
+
because `about:blank` gives a bare-relative href no reliable base. The
|
|
218
|
+
popup-blocked toast fallback is unchanged. Removes one full round trip of
|
|
219
|
+
white-screen latency from every such Open click.
|
|
220
|
+
|
|
221
|
+
- 05ff1fb: Studio: the "New page" form can now create a record page bound to an object.
|
|
222
|
+
|
|
223
|
+
The page create form was identity-only (label/name/icon/description), so it couldn't make a `pageType: 'record'` page or bind it to an object — even though the page edit form and protocol schema fully support those fields. Mirror the `view` resource's create config: the page create form now exposes **Object**, **Page type** (default `record`), and **Kind** (`full`/`slotted`), so a record page can be created and bound in Studio (#1541). The block layout is then composed in the editor's PagePreview canvas.
|
|
224
|
+
|
|
225
|
+
- 7c956d0: Runtime persistence seam: add `'page'` artifact type (record-page draft/publish).
|
|
226
|
+
|
|
227
|
+
`RuntimeArtifactType` now includes `'page'`, so a record `PageSchema` stages and publishes through the same ADR-0034 `/meta` draft model as views/reports/dashboards (#1541). New pure helpers `recordPageName(objectName, existing?)` (prefers an assigned page name, else mints `<object>_record`) and `recordPageEnvelope(objectName, schema, name?)` (sets the `name`/`object`/`pageType:'record'`/`kind:'full'` identity fields the resolver matches on) — foundation for the record-page edit loop.
|
|
228
|
+
|
|
229
|
+
- b0d64c4: Studio: new record pages seed their layout from the object's default detail page.
|
|
230
|
+
|
|
231
|
+
Creating a `pageType: 'record'` page bound to an object previously started from a blank canvas. The `page` resource now has a `createSeed` hook that, on create, fetches the bound object and seeds the page's `regions` from `buildDefaultPageSchema(objectDef)` — the same auto-generated detail layout the runtime renders by default. Authors start by tweaking the default page, not rebuilding it. A generic async `createSeed` hook was added to `MetadataResourceConfig` (merged into the create body after `createBuildBody`/`createDefaults`; best-effort). Completes #1541's Studio authoring path.
|
|
232
|
+
|
|
233
|
+
- 80f9796: Repoint the Console bell to `sys_inbox_message` + `sys_notification_receipt` (ADR-0030)
|
|
234
|
+
|
|
235
|
+
The notification bell read the legacy `sys_notification` object's
|
|
236
|
+
`recipient_id`/`is_read`/`title`/`body` columns. ADR-0030 re-modeled
|
|
237
|
+
`sys_notification` into the L2 _event_ (no recipient/read-state), so the bell
|
|
238
|
+
returned nothing — every notification the new pipeline produced was invisible.
|
|
239
|
+
|
|
240
|
+
The bell now reads the L5 in-app materialization instead:
|
|
241
|
+
|
|
242
|
+
- **List**: `sys_inbox_message` filtered by `user_id` (the `mine` scope), 20
|
|
243
|
+
most-recent, ordered by `created_at`.
|
|
244
|
+
- **Read-state**: joins `sys_notification_receipt` (filtered by `user_id` +
|
|
245
|
+
`channel:'inbox'`). A message is unread until its event has a
|
|
246
|
+
`read`/`clicked`/`dismissed` receipt; the unread count drives the badge.
|
|
247
|
+
- **Mark-read**: `UPDATE`s the existing `delivered` receipt to `read`
|
|
248
|
+
(keyed `(notification_id, user_id, channel)`), inserting only as a fallback
|
|
249
|
+
when no receipt exists. Replaces the old `sys_notification.is_read` write.
|
|
250
|
+
- **Navigation**: follows the materialization's `action_url` (absolute,
|
|
251
|
+
`/apps/...`, or app-relative `/{object}/{id}`), falling back to the legacy
|
|
252
|
+
`source_object`/`source_id` pointer.
|
|
253
|
+
- **"View all"**: routes to `/apps/setup/sys_inbox_message?view=mine`.
|
|
254
|
+
|
|
255
|
+
Pairs with the framework ADR-0030 pipeline (`@objectstack/service-messaging`).
|
|
256
|
+
Verified in-browser (showcase Console): a materialized inbox message + its
|
|
257
|
+
`delivered` receipt lit the bell badge; the popover rendered the row;
|
|
258
|
+
"mark all read" flipped the receipt to `read` in place (no duplicate) and
|
|
259
|
+
cleared the badge.
|
|
260
|
+
|
|
261
|
+
- 5e8965c: Complete the page-editor block configuration and prune shell-only blocks. Adds configurable property panels for the remaining content blocks with authorable properties — `page:accordion`, `record:path`, `record:quick_actions`, `ai:chat_window`, `ai:input` — so every page-content block in the palette is configurable in the UI (pure containers like `page:section` / `element:divider` correctly have no panel). Removes shell-singleton blocks (`app:launcher`, `global:notifications`, `user:profile`) from the page block palette — those are provided by the app shell, not authored as page content.
|
|
262
|
+
- 94c58ad: Align the page-editor element palette with reality. Adds the real lightweight-list primitives — `element:definition-list` (compact key/value `<dl>`) and `element:repeater` (data-bound, chrome-free list) — to the block palette with full config panels (object/field pickers for the repeater), and removes three palette entries that have no renderer (`element:form`, `element:filter`, `element:record_picker`) so the palette only offers blocks that actually render.
|
|
263
|
+
- c681874: Expand page-editor block configuration. Adds configurable property panels for more blocks (`element:number`, `element:button`, `record:alert`) and introduces array-valued property editors — a `string-list` editor (e.g. `record:highlights` fields) and an add/remove `array` editor (e.g. `page:tabs` items, `record:details` sections) — so these blocks are configurable in the UI instead of only via raw JSON.
|
|
264
|
+
- d988090: Schema-driven object/field pickers in the page-editor block inspector. Data-reference block properties are now dropdowns populated from the live metadata instead of free-text: an object picker (e.g. `record:related_list` object, `element:number` object) and cascading field pickers that list the chosen object's actual fields (e.g. `record:related_list` relationship field, `element:number` field, `record:path` status field, `record:highlights`/`record:details` field lists). Resolves the object from the record page's bound object or a sibling block property; degrades gracefully to a text input when the metadata can't be fetched.
|
|
265
|
+
- 9049bbe: Add end-user friendly agent process summaries for chatbot tool calls, with a debug mode for raw reasoning and tool details. Console chat surfaces now keep a sanitized browser-side display cache so refreshes can restore user/assistant text plus grouped tool states when the backend returns no message rows.
|
|
266
|
+
- 77cc6bb: Cloud Connection bind v2 UX (cloud ADR runtime-identity-binding §2.3): the binding flow becomes one click. `CloudConnectionPanel` drops the environment-id input entirely (registration happens cloud-side at approval), auto-opens the approval page in a popup on Connect (user-code display stays as the popup-blocked fallback), and shows the registered runtime name + runtime id once bound. `DeviceAuthPage` displays the requesting device's context (`runtime_name` / `runtime_version` from the verification URL) plus an "only approve if you started this" warning — the informed-consent surface for the RFC 8628 flow. Two new `auth.device.*` keys across all locales.
|
|
267
|
+
- 0ca2040: `cloud-connection:panel` SDUI widget — the RFC 8628 device-code binding state machine for the metadata-driven Cloud Connection Setup page (shipped by `@objectstack/cloud-connection`). status → connect → user-code display + approval link → poll → bound/disconnect; the runtime credential never reaches the browser.
|
|
268
|
+
- 04e6168: SDUI: give PageView a console action runtime (#1605). Extract ObjectView's schema-action wiring into a reusable `useConsoleActionRuntime` hook (+ a `ConsoleActionRuntimeProvider` wrapper): confirm / param / result dialogs, the authenticated api / flow / server-action handlers, SPA navigation, the paused screen-flow runner, and a refresh callback. ObjectView now consumes the hook (behaviour unchanged), and PageView wraps its page schema in the runtime — so a page-level `action:button` can collect params, call authenticated API endpoints, show confirm/result dialogs, run screen flows, navigate the SPA, and invalidate embedded data after success. Pages run global (object-less) actions; the hook binds `objectName` only when one is present. This unblocks metadata-driven app home pages (e.g. a "Create environment" primary action) instead of bespoke React components.
|
|
269
|
+
- 39c89e7: ADR-0021 D2: true matrix cross-tab + dataset-path drill-down.
|
|
270
|
+
|
|
271
|
+
- DatasetReportRenderer pivots `type: 'matrix'` reports into a real rows × columns cross-tab (one dataset query over all dimensions, pivoted client-side; matrix without `columns` degrades to the flat grouped table). Joined blocks pivot too.
|
|
272
|
+
- Drill-down: aggregated rows / matrix cells are clickable when the host passes `onDrill` (and the report doesn't set `drilldown: false`), emitting `{dataset, groupKey, runtimeFilter}`. ReportView resolves the dataset's object + dimension→field mapping (reverse-mapping select option labels back to stored values) and navigates to the object list scoped by `?filter[field]=value`.
|
|
273
|
+
- Studio: the report inspector gains a Columns (across dimensions) list for matrix reports; ReportPreview renders through the same DatasetReportRenderer as the runtime, so the matrix preview is WYSIWYG.
|
|
274
|
+
|
|
275
|
+
- 1c8f775: Add the External Datasource Federation Studio surface (ADR-0015 P5)
|
|
276
|
+
|
|
277
|
+
Federated datasources (`schemaMode !== 'managed'`) now get a dedicated
|
|
278
|
+
panel inside their Studio Preview tab, so connecting a mature external
|
|
279
|
+
database and registering its tables as ObjectStack objects is a
|
|
280
|
+
point-and-click flow instead of a CLI-only one. The panel pairs with the
|
|
281
|
+
framework backend shipped in objectstack-ai/framework#1390
|
|
282
|
+
(`registerExternalDatasourceRoutes` → `/api/v1/datasources/:name/external/*`).
|
|
283
|
+
|
|
284
|
+
ObjectStack is metadata-driven: `datasource` is a metadata type, so it is
|
|
285
|
+
browsed and edited through the standard metadata-admin engine
|
|
286
|
+
(`metadata:resource`) reached from the Studio app's left-side menu —
|
|
287
|
+
**not** a hand-written page. The Studio app (framework
|
|
288
|
+
`packages/platform-objects/src/apps/studio.app.ts`, Integration group)
|
|
289
|
+
gains a `Datasources` nav item pointing at
|
|
290
|
+
`metadata:resource?type=datasource`; the federation panel is contributed
|
|
291
|
+
to that standard surface via `registerMetadataPreview('datasource', …)`.
|
|
292
|
+
|
|
293
|
+
**`@object-ui/app-shell` — `views/metadata-admin/external/`**
|
|
294
|
+
|
|
295
|
+
- `api.ts` — a thin, typed REST client over the four federation routes
|
|
296
|
+
(`tables`, `tables/:remote/draft`, `refresh-catalog`, `validate`) plus an
|
|
297
|
+
`importObjectDraft` helper that PUTs a generated draft to `/meta/object`.
|
|
298
|
+
All calls go through `createAuthenticatedFetch()` (Bearer + `X-Tenant-ID`
|
|
299
|
+
- `Accept-Language`). A `503 external_service_unavailable` reply is mapped
|
|
300
|
+
to a typed `ExternalServiceUnavailableError` so the UI shows a friendly
|
|
301
|
+
"federation not enabled on this server" hint. Contract types are inlined
|
|
302
|
+
(they were added in framework 7.3; objectui pins `@objectstack/spec`
|
|
303
|
+
`^7.2.1`).
|
|
304
|
+
- `SchemaBrowser` — lists remote tables (allowedSchemas-filtered server-side)
|
|
305
|
+
with a text filter, on-demand Refresh (never a timer — warehouse
|
|
306
|
+
introspection is expensive), and a per-table Import action.
|
|
307
|
+
- `ImportObjectDialog` — generates an Object draft, surfaces the
|
|
308
|
+
type-compat matrix's `// REVIEW:` columns and the generated `*.object.ts`
|
|
309
|
+
source, then imports it as a real object. Never mutates the remote schema.
|
|
310
|
+
- `ValidationPanel` — runs validation on demand and renders per-object
|
|
311
|
+
structured schema diffs (missing column, type mismatch, …). Doubles as an
|
|
312
|
+
on-demand drift view.
|
|
313
|
+
- `ExternalDatasourcePanel` — Tables / Validation tabs plus a header strip
|
|
314
|
+
with "Refresh catalog" and the snapshot timestamp.
|
|
315
|
+
- `DatasourcePreview` — registered via `registerMetadataPreview('datasource', …)`,
|
|
316
|
+
it renders the panel automatically inside the standard resource edit
|
|
317
|
+
page's Preview tab when the saved datasource is federated
|
|
318
|
+
(`schemaMode !== 'managed'`), keyed off the item name. This is the only
|
|
319
|
+
wiring needed: no bespoke page, no extra route, no `@object-ui/app-shell`
|
|
320
|
+
surface to re-export — the metadata-admin engine + left-side nav own the
|
|
321
|
+
navigation. Federated datasources are read-only code artifacts (the
|
|
322
|
+
`datasource` type forbids runtime create), which the standard list view
|
|
323
|
+
already reflects (no "Create" button).
|
|
324
|
+
|
|
325
|
+
Out of scope (blocked on backend follow-ups): the connection wizard
|
|
326
|
+
(driver/credentials/secrets — belongs in System Settings) and a push-based
|
|
327
|
+
drift inbox (needs an event feed). The framework exposes no
|
|
328
|
+
test-connection, secrets, or drift-feed routes yet.
|
|
329
|
+
|
|
330
|
+
- d54346c: feat: action/flow completion messaging
|
|
331
|
+
|
|
332
|
+
- **core**: `ActionResult.silent` — a handler sets it when the action only
|
|
333
|
+
HANDED OFF to a follow-up UI (rather than completing), so `ActionRunner`
|
|
334
|
+
skips the automatic success toast. Fixes the misleading "Action completed
|
|
335
|
+
successfully" toast that fired the moment a `flow` action opened its wizard.
|
|
336
|
+
- **app-shell**: both flow handlers now return `silent: true` when the flow
|
|
337
|
+
pauses at a screen (the wizard only opened — it hasn't completed). `FlowRunner`
|
|
338
|
+
renders the flow's declared `successMessage` / `errorMessage` (from the
|
|
339
|
+
terminal `AutomationResult`) instead of a generic "Done" / the raw error.
|
|
340
|
+
|
|
341
|
+
- 12566ea: Flow designer ↔ automation engine alignment + run history panel.
|
|
342
|
+
|
|
343
|
+
- **Palette/type-picker:** replace the BPMN `parallel_gateway` / `join_gateway`
|
|
344
|
+
(and `boundary_event` in the picker) with the structured `parallel` and
|
|
345
|
+
`try_catch` constructs the engine actually executes (ADR-0031 keeps the BPMN
|
|
346
|
+
gateway types as import/export interop only — they have no executor, so
|
|
347
|
+
flows authored with them failed at runtime with `NO_EXECUTOR`). Legacy
|
|
348
|
+
gateway nodes still render for imported flows.
|
|
349
|
+
- **Runs panel:** new `FlowRunsPanel` fetches `GET /api/v1/automation/{name}/runs`
|
|
350
|
+
and surfaces run status / duration / per-node step logs in the FlowPreview
|
|
351
|
+
side panel (Variables / Debug / Runs), degrading quietly when the engine is
|
|
352
|
+
offline.
|
|
353
|
+
- **Simulator:** structured containers (`parallel`, `try_catch`) pass through
|
|
354
|
+
honestly as unsupported instead of faking their semantics.
|
|
355
|
+
|
|
356
|
+
- 4e060b7: Polish the Studio flow-designer canvas visuals
|
|
357
|
+
|
|
358
|
+
A refinement pass over the metadata-admin flow designer (`FlowCanvas` +
|
|
359
|
+
`flow-canvas-parts`) — purely presentational, no behavioral or API changes,
|
|
360
|
+
theme-aware (light/dark), and still dependency-free.
|
|
361
|
+
|
|
362
|
+
- **Node cards**: the flat 3px left-accent stripe is replaced by a tinted,
|
|
363
|
+
color-coded **icon chip** (the card's primary category cue), with a bolder
|
|
364
|
+
label, refined uppercase type caption, layered hover elevation
|
|
365
|
+
(`-translate-y-0.5` + soft shadow), and clearer selected / run-state rings.
|
|
366
|
+
Per-category `chip` tone tokens (soft bg + inset ring) added alongside the
|
|
367
|
+
existing icon/accent/label tones. Added distinct tones for `loop` (sky),
|
|
368
|
+
`screen`/`user_task` (pink) and `assignment` (purple) — previously they fell
|
|
369
|
+
back to the generic slate "task" tone, so every node type now reads as a
|
|
370
|
+
distinct color in the canvas.
|
|
371
|
+
- **Readable labels**: node width 188→240 and the per-node summary moved from a
|
|
372
|
+
right-hand column onto a second line, so the label now gets the **full card
|
|
373
|
+
width** (it was badly truncated — "Manager Re…", "Budget Ab…"). A native title
|
|
374
|
+
tooltip surfaces the full text on the rare remaining truncation.
|
|
375
|
+
- **No overlap on add**: adding a connected node no longer pins it directly below
|
|
376
|
+
its parent (which stacked every sibling on the same spot) — it's left to the
|
|
377
|
+
layered auto-layout, which slots it beside its siblings.
|
|
378
|
+
- **Canvas surface**: the dot grid now tracks pan **and** zoom (it moves with
|
|
379
|
+
the diagram instead of floating behind a static texture), plus a subtle inset
|
|
380
|
+
vignette for depth.
|
|
381
|
+
- **Edges**: rounded line caps, slightly stronger default stroke, and
|
|
382
|
+
pill-shaped (rounded-full, frosted) branch/condition labels.
|
|
383
|
+
- **Toolbar + add-node palette**: frosted, rounded controls with a primary
|
|
384
|
+
hover affordance; the palette gains an "Add node" header and matching tinted
|
|
385
|
+
icon chips per row.
|
|
386
|
+
|
|
387
|
+
Verified in-browser (Studio → flow → designer) in both light and dark themes.
|
|
388
|
+
|
|
389
|
+
- 5332639: feat(app-shell): render full object forms (incl. master-detail) in screen-flow wizard steps
|
|
390
|
+
|
|
391
|
+
`FlowRunner` now renders an `object-form` screen step: when the paused screen
|
|
392
|
+
carries `kind: 'object-form'`, it mounts the real `<ObjectForm>` for the named
|
|
393
|
+
object (auto-routing to `MasterDetailForm` for inline child collections),
|
|
394
|
+
prefilled from the step's `defaults`. The form persists itself (atomic
|
|
395
|
+
master-detail batch), then resumes the run with the saved record id bound to the
|
|
396
|
+
step's `idVariable`. `dataSource`/`objects` are threaded through all three
|
|
397
|
+
`FlowRunner` mount points.
|
|
398
|
+
|
|
399
|
+
Also fixes three pre-existing bugs this surfaced (each affects normal forms too):
|
|
400
|
+
|
|
401
|
+
- **plugin-form**: `ObjectForm` now forwards `initialValues`/`initialData` when
|
|
402
|
+
routing to `MasterDetailForm`, so prefilled header values are no longer
|
|
403
|
+
dropped on master-detail create forms.
|
|
404
|
+
- **fields**: `PercentField` treated values as `0–1` fractions (`value × 100`),
|
|
405
|
+
so a `0–100` field (e.g. `probability` default `50`) rendered as `5000%` —
|
|
406
|
+
exceeding `max=100`, which makes HTML5 constraint validation mark the field
|
|
407
|
+
`:invalid` and silently block the whole form's submit. It now treats a field
|
|
408
|
+
declaring `max > 1` as the `0–100` whole-number convention, matching the
|
|
409
|
+
read-side formatter.
|
|
410
|
+
- **data-objectstack**: `ObjectStackAdapter.batchTransaction` now sends
|
|
411
|
+
`credentials: 'include'`, so master-detail batch saves authenticate under the
|
|
412
|
+
console's cookie session (previously every batch save 401'd).
|
|
413
|
+
|
|
414
|
+
- e02aedd: Group the flow add-node palette by category, and offer every node type
|
|
415
|
+
|
|
416
|
+
The quick-add palette listed 12 node types as a flat list; `assignment`,
|
|
417
|
+
`screen`, `delete_record` and the parallel gateways could only be reached by
|
|
418
|
+
adding a node and switching its type in the inspector. Building flows, that's a
|
|
419
|
+
real friction point.
|
|
420
|
+
|
|
421
|
+
- **Complete**: the palette now offers Delete record, Set variables
|
|
422
|
+
(assignment), Screen, Parallel split and Parallel join too — so every common
|
|
423
|
+
node type is one click away.
|
|
424
|
+
- **Grouped**: items are organised into **Data / Logic / Human / Integration /
|
|
425
|
+
Flow** sections with headers and dividers, so the (now longer) list stays
|
|
426
|
+
scannable. A new `nodeCategory(type)` helper drives the grouping and gives
|
|
427
|
+
engine-only / plugin-contributed node types a sensible section; `mergePalette`
|
|
428
|
+
preserves a base item's category and infers one for engine-only types.
|
|
429
|
+
|
|
430
|
+
Verified in-browser: the grouped palette renders all sections with tinted icon
|
|
431
|
+
chips, and the newly-offered types add to the canvas with the correct icon/tone
|
|
432
|
+
and no overlap.
|
|
433
|
+
|
|
434
|
+
- 7130d4e: Add FlowRunner — render & resume interactive screen-flows
|
|
435
|
+
|
|
436
|
+
A `type: 'flow'` action whose run pauses at a `screen` node now opens a
|
|
437
|
+
`FlowRunner` modal that renders the screen's fields, submits the values to the
|
|
438
|
+
framework resume endpoint (`POST /api/v1/automation/{flow}/runs/{runId}/resume`),
|
|
439
|
+
and advances to the next screen or closes + refreshes on completion. Previously
|
|
440
|
+
such flows launched server-side but the screen was never rendered, so the input
|
|
441
|
+
was never collected.
|
|
442
|
+
|
|
443
|
+
- New `FlowRunner` component (fields → form → resume loop).
|
|
444
|
+
- `ObjectView` + `RecordDetailView` flow handlers detect a paused-screen launch
|
|
445
|
+
response (`{ status:'paused', runId, screen }`) and open the runner; for
|
|
446
|
+
list_item actions the row's id (`_rowRecord.id`) flows in as the flow's
|
|
447
|
+
`recordId`.
|
|
448
|
+
|
|
449
|
+
Pairs with the framework screen-flow runtime (`@objectstack/service-automation`
|
|
450
|
+
- `@objectstack/runtime`). Verified in-browser: showcase task row → "Reassign…"
|
|
451
|
+
→ form → submit → the task is reassigned.
|
|
452
|
+
|
|
453
|
+
- 3fa23a7: feat(header): context-aware Help & Documentation menu + app-scoped docs index
|
|
454
|
+
|
|
455
|
+
The top-right "?" was a bare external link to `docs.objectstack.ai`, duplicating
|
|
456
|
+
the left sidebar's in-product `/docs` entry and ignoring the ADR-0046 docs hub.
|
|
457
|
+
It is now an aggregated, context-aware menu:
|
|
458
|
+
|
|
459
|
+
- **This app's docs** — shown only when the current app's package owns docs
|
|
460
|
+
(matched by `_packageId`). A single-doc app deep-links straight to the
|
|
461
|
+
viewer; a multi-doc app lands on the new app-scoped index.
|
|
462
|
+
- **All documentation** — the in-product `/docs` portal.
|
|
463
|
+
- **Online documentation** — `docs.objectstack.ai` (opens in a new tab).
|
|
464
|
+
|
|
465
|
+
Docs are lazily fetched once on first menu open (names/labels only), so the menu
|
|
466
|
+
adds no cost until used; a failed fetch soft-degrades to the static entries.
|
|
467
|
+
|
|
468
|
+
Also adds the app-scoped docs index route **`/apps/:packageId/docs`**
|
|
469
|
+
(`AppDocsIndex`) — the package-scoped sibling of `/docs`, listing just that
|
|
470
|
+
app's docs — which the "This app's docs" entry targets when an app ships more
|
|
471
|
+
than one. New `help.*` strings added to the `en` and `zh` bundles (other
|
|
472
|
+
locales fall back to `en`).
|
|
473
|
+
|
|
474
|
+
- 9f9d1db: Add an `icon` form widget — a searchable Lucide icon picker for metadata-admin.
|
|
475
|
+
|
|
476
|
+
Metadata `icon` fields (page/app/object) were a raw text input where authors had to know and type an exact Lucide name. The new `widget: 'icon'` renders a combobox: the trigger shows a live preview of the current icon, and opening it reveals a search box plus a grid of matching icons (preview + name). Selecting writes the kebab-case name string. Out-of-catalog values (e.g. icons from another library, or typos to fix later) survive — they render on the trigger and stay reachable as a "keep" option so re-opening never silently drops them. Registered as `'icon'` in the metadata-admin `WIDGETS` map; pair with `widget: 'icon'` in the spec `*.form.ts`.
|
|
477
|
+
|
|
478
|
+
- 0d707b6: `marketplace:installed-list` SDUI widget — the Installed Apps body (control-plane/local dual-source list, refresh, uninstall) extracted from the React route page, which now renders the same component. The page shell ships as metadata with `@objectstack/cloud-connection`'s install-local plugin (cloud ADR-0009 P2a).
|
|
479
|
+
- 67dbaa1: interface page: Add-Record config now takes effect; view picker mirrors runtime resolution
|
|
480
|
+
|
|
481
|
+
- **Fix: `interfaceConfig.addRecord` did nothing.** `InterfaceListPage` never forwarded `addRecord` into the schema it hands to `ListView`, so the panel's Add-Record toggle/position/mode were silently dropped — the button could never appear on an interface page. Now `addRecord` is passed through (ListView already gates the button on `addRecord.enabled` across all visualizations).
|
|
482
|
+
- **`view-ref` picker no longer mislabels resolvable values.** A stored `sourceView` like the bare `default` was tagged "(not in object)" even though the runtime resolves it. The widget now mirrors `InterfaceListPage.resolveSourceView` (exact name / `<object>.<name>` suffix / `default`-`list` special-case) via an extracted, unit-tested `resolveStoredViewRef`, showing the matched view's label (e.g. "All Tasks → showcase_task.default") instead of a false warning.
|
|
483
|
+
|
|
484
|
+
- 586770c: metadata editor: `view-ref` widget for picking a source view
|
|
485
|
+
|
|
486
|
+
Adds a `view-ref` form widget so `interfaceConfig.sourceView` (and any field with `widget: 'view-ref'`) renders as a dropdown of the source object's views instead of a free-text name the author could mistype. Views come from a new `WidgetContext.objectViews`, which `ResourceEditPage` loads for the page's source object (`interfaceConfig.source` / `object`). A value not in the catalog is still shown so stale/custom names survive; clearing to "None" omits the field (the protocol treats absence as the object's default view). The widget mirrors the existing `field-ref` picker and degrades gracefully when no source object is bound.
|
|
487
|
+
|
|
488
|
+
Pairs with the `@objectstack/spec` change that sets `widget: 'view-ref'` + `dependsOn: 'source'` on the page form's `sourceView` field.
|
|
489
|
+
|
|
490
|
+
- 652f9b2: feat(packages): "Discard changes" and "Delete app" buttons in the package detail sheet
|
|
491
|
+
|
|
492
|
+
Adds two one-click package-lifecycle actions next to the existing "Publish app", mirroring the new backend endpoints:
|
|
493
|
+
|
|
494
|
+
- **Discard changes (N)** — next to "Publish app" in the Pending changes block. Drops every pending draft via `POST /packages/:id/discard-drafts`, reverting the app to its last published baseline. Non-destructive (published metadata + data untouched), then refreshes the pending list.
|
|
495
|
+
- **Delete app** — in the Actions row. Removes the whole package via `DELETE /packages/:id` (active + draft metadata + drops each object's table). Confirms first ("this cannot be undone"); closes the sheet on success, keeps it open and shows the error on failure.
|
|
496
|
+
|
|
497
|
+
Together with "Publish app", this gives the full AI-build review loop a UI: publish to preview → keep, **discard all changes**, or **delete the app**.
|
|
498
|
+
|
|
499
|
+
- 82195b5: Configurable property panels for page-editor blocks (SDUI). The Studio page editor's block inspector now renders typed, protocol-aligned property fields (editing the block's `properties`) for the minimal SDUI-essential content blocks — `element:text`, `element:image`, `page:header`, `page:card`, `record:related_list` — instead of only the generic `type`/`id`/`className`/`hidden` fields. Previously these properties were editable only via raw JSON.
|
|
500
|
+
- f12225b: The Studio page editor can now edit nested sub-blocks inside container blocks. A `page:tabs`/`page:accordion` tab's children, and a `page:card`/`page:section`'s body, are surfaced as indented, selectable sub-blocks — each one can be selected, configured (via the inspector and its object/field pickers), edited, removed, and new ones added — in both full and slotted pages. Addressing is handled by extending the block-path scheme to support object-key hops (e.g. `…components[0].properties.items[0].children[0]`) and a nested sub-path under slot ids. Closes the last gap so a container's contents are fully point-and-click instead of raw JSON.
|
|
501
|
+
- 14e3db5: The Studio page editor can now edit slotted record pages. A `kind:'slotted'` page surfaces its 7 canonical slots (header / actions / alerts / highlights / details / tabs / discussion) as editable regions — overridden slots show their blocks (selectable + configurable via the inspector and its object/field pickers), and unoverridden slots show an "inherited — add a block to override" placeholder. Edits write back to `slots`; empty slots are omitted so they keep inheriting the synthesized default. This closes the loop for the most common low-code task — customizing a business object's detail page (highlights/tabs/details) point-and-click instead of by hand-editing JSON.
|
|
502
|
+
- 4eb9cb6: feat(plugin-tree): add a `tree` / tree-grid object view type
|
|
503
|
+
|
|
504
|
+
Renders a self-referencing object as an indented, expand/collapse tree-grid —
|
|
505
|
+
the right view for arbitrary-depth hierarchies (business unit / org chart,
|
|
506
|
+
category trees, BOMs, nested comments) that fixed-depth grouping can't express.
|
|
507
|
+
New `@object-ui/plugin-tree` package (`object-tree`/`tree`), `tree` added to the
|
|
508
|
+
`ViewType` union, and dispatch wired through plugin-list `ListView` +
|
|
509
|
+
app-shell `ObjectView` (the console path).
|
|
510
|
+
|
|
511
|
+
- de3224e: feat(metadata): relationship-level `inlineEdit` auto-renders master-detail
|
|
512
|
+
|
|
513
|
+
A child object's `master_detail`/`lookup` field can declare `inlineEdit: true`
|
|
514
|
+
(in the data model) to mean "edit me inline within my parent's form". The
|
|
515
|
+
metadata layer now scans for these and merges the resulting child collections
|
|
516
|
+
into each parent object's form view as `subforms` — so the parent's **standard**
|
|
517
|
+
New/Edit form auto-renders an atomic master-detail form with **no view config
|
|
518
|
+
and no bespoke page**. The intent lives once in the data model (where e.g. an AI
|
|
519
|
+
modelling the schema naturally sets it); forms derive the UI.
|
|
520
|
+
|
|
521
|
+
`master_detail` children WITHOUT `inlineEdit` are not inlined (so associations
|
|
522
|
+
like comments/attachments stay out of the entry form). An explicit
|
|
523
|
+
`form.subforms` entry overrides the derived one. Optional
|
|
524
|
+
`inlineTitle`/`inlineColumns`/`inlineAmountField` tune the grid.
|
|
525
|
+
|
|
526
|
+
- 010883d: Migrate the runtime DashboardView "dashboard editor" onto the studio's spec-driven inspectors. A single app-shell `DashboardConfigPanel` now replaces both legacy `plugin-dashboard` panels (the dashboard-level config panel and the per-widget config panel): with no widget selected it hosts a new spec-driven `DashboardDefaultInspector` (registered as the studio default inspector for the `dashboard` type), and with a widget selected it hosts the existing `DashboardWidgetInspector`. Both inspectors edit the full nested Dashboard document directly, so the runtime's widget flatten/unflatten adapters are removed. The panel lives in app-shell to avoid a circular dependency on plugin-dashboard; the `sys_dashboard` persistence path is unchanged.
|
|
527
|
+
- 7da8a57: Migrate the runtime ReportView "report editor" onto the studio's spec-driven inspector. The right-rail editor now hosts the same report inspector the metadata studio uses (config fields sourced from `@objectstack/spec` `ReportSchema` / `reportForm`) instead of plugin-report's legacy `buildReportSchema` / `ConfigPanelRenderer` engine, so runtime and studio share one report-editing surface. A new spec-driven `ReportDefaultInspector` is registered as the studio default inspector for the `report` type, and a thin app-shell `ReportConfigPanel` hosts it for the runtime (kept in app-shell to avoid a circular dependency on plugin-report). Field pickers read from the in-memory object definition (no extra network fetch); the `sys_report` persistence path is unchanged.
|
|
528
|
+
- 7b71cd8: Unify the runtime ObjectView "view editor" onto the studio's spec-driven inspector. The right-rail view editor now hosts the same `ViewVariantInspector` the metadata studio uses (config fields sourced straight from `@objectstack/spec`) instead of the legacy `buildViewConfigSchema` engine, so runtime and studio share one view-editing surface. A new `view-config-adapter` bridges the runtime's flat view shape and the studio's ViewItem draft, keeping the `sys_view` persistence path untouched; field pickers read from the in-memory object definition (no extra network fetch). The legacy `buildViewConfigSchema` engine and its exports are retired; `ConfigPanelRenderer` is retained for the dashboard/report config panels.
|
|
529
|
+
- 8426db7: feat(form): standard New/Edit modal renders form-view subforms (Tier 0)
|
|
530
|
+
|
|
531
|
+
The console's standard create/edit record modal now renders inline child
|
|
532
|
+
collections when the object's form view declares `subforms` — master-detail
|
|
533
|
+
entry with **no bespoke page**, persisted as one atomic transaction.
|
|
534
|
+
|
|
535
|
+
- `ModalForm` (and the create/edit modal in app-shell `AppContent`) detects
|
|
536
|
+
`subforms` and renders `MasterDetailForm` inside the dialog (it owns its Save
|
|
537
|
+
bar; the modal footer is suppressed); on success the modal closes + refreshes.
|
|
538
|
+
- `AppContent` sources `subforms` from the object's default form view
|
|
539
|
+
(`form.subforms` / `formViews.default.subforms`).
|
|
540
|
+
- `ModalFormSchema` gains `subforms`.
|
|
541
|
+
|
|
542
|
+
With this, declaring `formViews.default.subforms: [{ childObject }]` is enough
|
|
543
|
+
to make an object's standard New/Edit screen a master-detail form — completing
|
|
544
|
+
the config-driven master-detail story (Tier 0 → derive everything from the
|
|
545
|
+
relationship + child metadata).
|
|
546
|
+
|
|
547
|
+
### Patch Changes
|
|
548
|
+
|
|
549
|
+
- 3b5e293: ADR-0034 step 2: route ObjectView's view-config save through the runtime persistence seam, completing the seam's coverage of all three runtime editors (view/report/dashboard). Corrects the seam's `view` branch to mirror ObjectView's real update path (`dataSource.updateViewConfig(...)`, the ADR-0005 overlay API) rather than a raw `sys_view` write. Behaviour is unchanged while the `VITE_RUNTIME_EDIT_VIA_META` flag is off; flag on routes the view update to the studio `/meta` draft. The view CREATE path (`createView` + default-column/kanban/gallery massaging) and the draft/publish UI remain deferred.
|
|
550
|
+
- 02c3c65: ADR-0034 step 1: introduce a flag-gated runtime metadata persistence seam. `persistRuntimeMetadata` / `publishRuntimeMetadata` centralise where the runtime view/report/dashboard editors save. Behind the `VITE_RUNTIME_EDIT_VIA_META` flag (default **off**) they reproduce today's `sys_*` writes exactly (zero behaviour change); flag **on** routes to the studio `/meta` per-item draft/publish model (`MetadataClient.save(..., { mode: 'draft' })` + `publish`). ReportView and DashboardView now save through the seam; ObjectView (view) and the draft/publish UI are deliberately deferred. No `sys_*` table is removed and no data is migrated. Also adds the finalized ADR-0034.
|
|
551
|
+
- b8a5d41: ADR-0048: finish sweeping app-entry links onto the canonical package-id route
|
|
552
|
+
segment (follow-up to the home-page fix).
|
|
553
|
+
|
|
554
|
+
- `AppManagementPage` (System → Apps) "Open app" button now opens
|
|
555
|
+
`/apps/<packageId>` (`app._packageId ?? app.name`) instead of `/apps/<name>`.
|
|
556
|
+
- `AppContent` current-app sub-routes/redirects (the `metadata/package` →
|
|
557
|
+
`component/developer/packages` redirect, and the record-form `baseUrl`) now
|
|
558
|
+
build against the URL's own `appName` segment instead of `activeApp.name`, so a
|
|
559
|
+
`/apps/<packageId>/…` URL keeps its package-id segment instead of flipping to
|
|
560
|
+
the name form. `requestedAppMissing` (preview-drafts) now resolves the segment
|
|
561
|
+
via `matchAppBySegment` so a package-id URL isn't treated as a missing app.
|
|
562
|
+
|
|
563
|
+
- 4cd0a0d: ADR-0048 (#1824): the Studio metadata editor's post-save refresh now scopes its
|
|
564
|
+
layered + draft re-read to the same package as the initial load (`?package=`), so
|
|
565
|
+
when two installed packages ship the same `type`/`name` the editor re-reads
|
|
566
|
+
this package's own row after saving — not another package's. The save itself
|
|
567
|
+
already binds the package; this aligns the refresh with it.
|
|
568
|
+
- a571911: ADR-0048: the console **home** page now links into apps by their canonical
|
|
569
|
+
package-id route segment, matching the nav. The app grid (`HomePage`) and the
|
|
570
|
+
"add to favorites" href (`AppCard`) were still building `/apps/<app.name>` while
|
|
571
|
+
the sidebar/switcher/command-palette emit `/apps/<packageId>` (via
|
|
572
|
+
`appRouteSegment`). So opening an app from the home page produced a name-form URL
|
|
573
|
+
(e.g. `/apps/studio`) instead of `/apps/com.objectstack.studio`. Both now use
|
|
574
|
+
`appRouteSegment(app)`.
|
|
575
|
+
- b99d9bd: ADR-0048: package-scope the Studio metadata editor read. Two installed packages
|
|
576
|
+
may ship metadata with the same `type`/`name`; the editor now resolves the right
|
|
577
|
+
one instead of first-match.
|
|
578
|
+
|
|
579
|
+
- `MetadataClient`: `layered()` and `getDraft()` accept `{ packageId }`, and
|
|
580
|
+
`get()` emits the `package` query param (→ server prefer-local, `?package=`).
|
|
581
|
+
- `ResourceListPage`: each item's edit link carries its owning package
|
|
582
|
+
(`?package=<row._packageId>`), so even the unscoped "all" list disambiguates;
|
|
583
|
+
falls back to the workspace suffix for runtime/overlay-only rows.
|
|
584
|
+
- `ResourceEditPage`: reads `?package=` and scopes the layered + draft read to
|
|
585
|
+
that package. (The route's `:appName` is the Studio app, not the edited item's
|
|
586
|
+
owner, so the scope must come from the URL, not the active app.)
|
|
587
|
+
|
|
588
|
+
- 5a95032: Polish the full-page AI workspace with a responsive conversation drawer, clearer page context, constrained chat width, and accessible conversation row actions.
|
|
589
|
+
- 053c948: fix(app-shell): send the current-page object to the AI assistant context
|
|
590
|
+
|
|
591
|
+
The floating console assistant forwarded only `appName` + the full objects list,
|
|
592
|
+
never the object the user is actually viewing — so asking it to "analyse this
|
|
593
|
+
object" (especially in a non-English prompt) gave the agent nothing to anchor on
|
|
594
|
+
and it replied that it couldn't find the object. The current object/record are
|
|
595
|
+
now derived from the route (mirroring `useTrackRouteAsRecent`'s URL layout,
|
|
596
|
+
tolerant of a `_console` shell prefix) and passed as `context.objectName` /
|
|
597
|
+
`context.recordId`, so the backend injects that object's schema into the system
|
|
598
|
+
prompt and scopes data queries to it. Pairs with the framework current-object
|
|
599
|
+
resolution fix.
|
|
600
|
+
|
|
601
|
+
- 40c79df: Improve the floating chatbot flow with responsive panel bounds, safer FAB placement, inline responding and stop states, and clearer retryable error feedback.
|
|
602
|
+
- 6c0c92c: fix(app-shell): command palette idempotent open + stable locators (ADR-0054 Phase 1)
|
|
603
|
+
|
|
604
|
+
The top-bar "Search… ⌘K" button now opens the command palette directly via a
|
|
605
|
+
shared, idempotent `openCommandPalette()` instead of re-dispatching a synthetic
|
|
606
|
+
`⌘K` `KeyboardEvent` — so it works under automation and in ⌘K-reserving
|
|
607
|
+
browsers. Open state is URL-addressable (`?palette=1`, `?cmdk=1` alias), making
|
|
608
|
+
the palette deep-linkable and restore-on-reload. The dialog and header trigger
|
|
609
|
+
emit stable `data-testid` locators (`overlay:command-palette`,
|
|
610
|
+
`action:command-palette:open`) plus an ARIA name. New `useCommandPalette()` hook
|
|
611
|
+
and `CommandPaletteProvider`; `CommandDialog` gains a `contentProps` passthrough
|
|
612
|
+
for the dialog locator/ARIA. Implements invariants C1/C3/C4 of the UI
|
|
613
|
+
testability contract.
|
|
614
|
+
|
|
615
|
+
- 97c6831: Localize AI workspace, shell navigation, startup, connection, toast, and chatbot affordance text across core console screens.
|
|
616
|
+
- f6044fa: feat(form): subforms in DrawerForm + full-page record form (Tier 0 everywhere)
|
|
617
|
+
|
|
618
|
+
Completes config-driven master-detail across all standard create/edit entry
|
|
619
|
+
points (after the modal in the previous change):
|
|
620
|
+
|
|
621
|
+
- `DrawerForm` now hosts `MasterDetailForm` inside the drawer when the schema
|
|
622
|
+
declares `subforms` (its own Save bar; closes + refreshes on success).
|
|
623
|
+
- `RecordFormPage` (full-page New/Edit) sources `subforms` from the object's
|
|
624
|
+
form view, so the full-page form renders inline child collections too.
|
|
625
|
+
- `ObjectForm`'s subforms shortcut now defers to the drawer/modal variants for
|
|
626
|
+
those formTypes (so they keep their envelope), and only renders the
|
|
627
|
+
master-detail form directly for inline/simple forms.
|
|
628
|
+
|
|
629
|
+
Declaring `formViews.default.subforms: [{ childObject }]` now yields a
|
|
630
|
+
master-detail experience in the modal, drawer, AND full-page form — no bespoke
|
|
631
|
+
page anywhere.
|
|
632
|
+
|
|
633
|
+
- 6cfa330: feat(dashboard): drill "Open in list" escape hatch + unify report drill
|
|
634
|
+
|
|
635
|
+
Adopts the mainstream BI peek-then-escalate drill model. Drill-through opens an
|
|
636
|
+
in-place drawer (keep context) and offers an "Open in list →" affordance to
|
|
637
|
+
escalate to the object's full list page (sort / bulk-select / export / shareable
|
|
638
|
+
URL) — the Looker / Power BI "see records → open in page" pattern.
|
|
639
|
+
|
|
640
|
+
- New `DrillNavigationContext` (`@object-ui/react`): the app shell provides
|
|
641
|
+
`openRecordList`; the renderer stays decoupled from console routing.
|
|
642
|
+
- The drill drawers (pivot / dataset / chart / KPI) render the escape hatch when
|
|
643
|
+
a host navigation handler is present, and hide it otherwise (self-contained
|
|
644
|
+
peek). `DashboardView` provides the handler via `useOpenRecordList`.
|
|
645
|
+
- `DrillDownConfig.target` gains `'navigate'` — skip the drawer and open the
|
|
646
|
+
list directly; degrades to `'drawer'` when no host handler is available.
|
|
647
|
+
- `ReportView` drill-through now opens the same in-place drawer (peek records →
|
|
648
|
+
click a row to open a record) instead of navigating away; the escape hatch
|
|
649
|
+
preserves the previous navigate-to-list behavior. Dashboard and report drill
|
|
650
|
+
are now unified.
|
|
651
|
+
- i18n: `dashboard.openInList` (en / zh).
|
|
652
|
+
|
|
653
|
+
- 23bf869: fix(app-shell): edit-in-studio pencil no longer overlaps interface-page toolbar buttons
|
|
654
|
+
|
|
655
|
+
The PageView "Edit in studio" pencil is an absolute overlay at the page's
|
|
656
|
+
top-right. On an interface (list) page whose header surfaces toolbar buttons
|
|
657
|
+
(e.g. an Approvals page's "Mark Done"), the pencil sat on top of the rightmost
|
|
658
|
+
button, clipping its label. PageView now tells InterfaceListPage to reserve
|
|
659
|
+
right padding on its header (`reserveEditAffordance`, only when the pencil is
|
|
660
|
+
shown) so the toolbar clears the affordance. Non-admin / non-editable pages are
|
|
661
|
+
unchanged.
|
|
662
|
+
|
|
663
|
+
- 70b7780: Metadata editor: a failed LOAD no longer masquerades as field validation errors.
|
|
664
|
+
|
|
665
|
+
When the layered/draft fetch fails (network/500/timeout), `ResourceEditPage` previously still rendered the form on empty defaults, so the client Zod validator fired spurious "name/label/regions required" diagnostics — making a transport failure look like a structurally broken item.
|
|
666
|
+
|
|
667
|
+
- New `loadFailed` state, set in the load catch block and reset at the start of each load.
|
|
668
|
+
- The validation-diagnostics banner is now gated by `shouldRenderDiagnostics()`, which suppresses the diagnostics block entirely on load failure, so the empty-default form's required-field issues never surface.
|
|
669
|
+
- The top error banner is now explicit: "Failed to load <type>/<name>: <message>" (new `engine.edit.loadFailed` i18n key, en + zh-CN).
|
|
670
|
+
|
|
671
|
+
The happy path is unaffected: a genuinely-invalid item that loaded successfully still shows its validation diagnostics.
|
|
672
|
+
|
|
673
|
+
- fe69471: Flow designer: start a new flow with a trigger, and stop the edge "+" overlapping branch labels
|
|
674
|
+
|
|
675
|
+
Two more dogfooding fixes for the Studio flow designer:
|
|
676
|
+
|
|
677
|
+
- **Empty flow → Start node.** An empty editable flow's "Add node" inserted a
|
|
678
|
+
generic `task` node; it now seeds a `start` (trigger) node — the canonical
|
|
679
|
+
entry point every flow needs — so the canvas opens on the trigger and the
|
|
680
|
+
author builds forward from there.
|
|
681
|
+
- **Edge insert handle no longer collides with the branch label.** The "insert
|
|
682
|
+
node" `+` button and the branch/condition label pill were both centered on the
|
|
683
|
+
edge midpoint, so on a labeled edge (`approve`, `if …`) the `+` sat on top of
|
|
684
|
+
the label. The `+` now slides to the right of the label when one is present
|
|
685
|
+
(unlabeled edges keep the centered `+`).
|
|
686
|
+
|
|
687
|
+
Verified in-browser: labeled edges show the label and a clear, separate insert
|
|
688
|
+
handle; `tsc --noEmit` clean.
|
|
689
|
+
|
|
690
|
+
- 0032b23: FlowRunner: close the runner when a resume ends in a terminal flow failure.
|
|
691
|
+
|
|
692
|
+
The engine consumes a run's suspension before executing downstream nodes
|
|
693
|
+
(resume-once semantics), so a resume whose `AutomationResult` is
|
|
694
|
+
`success: false` can never be retried — the old behavior left the dialog open
|
|
695
|
+
and a second Submit hit "No suspended run". Transport-level failures (network
|
|
696
|
+
/ 5xx) still keep the dialog open for retry.
|
|
697
|
+
|
|
698
|
+
- e8d56ec: fix(form): honour the form view layout in the full-page record form
|
|
699
|
+
|
|
700
|
+
`RecordFormPage` hard-coded `formType: 'simple'`, so a record's declared form
|
|
701
|
+
view layout (`tabbed` / `wizard` / `split`) was ignored on the full-page
|
|
702
|
+
create/edit route — `ObjectForm` already renders every variant, the entry point
|
|
703
|
+
just never passed it through. It now reads the object's `form` / `formViews.default`
|
|
704
|
+
`type` + `sections` and forwards them (plus variant props: defaultTab, tabPosition,
|
|
705
|
+
allowSkip, showStepIndicator, split\*). Page-level layouts only — `drawer`/`modal`
|
|
706
|
+
are presentation/open-modes, not record-page layouts, so they fall back to `simple`.
|
|
707
|
+
|
|
708
|
+
Refs objectstack-ai/framework#1890
|
|
709
|
+
|
|
710
|
+
- 0ad72a6: fix: pass full gantt config to renderer, render multi-value lookups in gantt tooltips, persist `bodyExtra` on dataSource actions, and complete zh/en gantt labels
|
|
711
|
+
|
|
712
|
+
Four platform gaps that the EHR app previously worked around with `node_modules` patches:
|
|
713
|
+
|
|
714
|
+
- **app-shell / ObjectView** — the `config.gantt → renderer props` adapter was a hardcoded 6-field whitelist, so `parentField`/`typeField` (and `baseline*`, `groupByField`, `resourceView`, `tooltipFields`, `quickFilters`, …) never reached the renderer and the chart degraded to a flat list. It now spreads the full `viewDef.gantt` first, then applies the three required defaults last (mirroring the gallery branch).
|
|
715
|
+
- **plugin-gantt / ObjectGantt** — the tooltip value formatter only handled single-object lookups, so a multi-value lookup (a populated `[{name},{name}]` array) fell through to `'—'`. It now maps each array element to its display value and joins them.
|
|
716
|
+
- **app-shell / useConsoleActionRuntime** — `bodyExtra` was merged only on the absolute-HTTP path; the generic `dataSource.update` path ignored it, so a pure-confirmation action (no params array) left an empty payload and persisted nothing. `bodyExtra` is now merged last on that path too, matching the documented semantics.
|
|
717
|
+
- **i18n** — added the gantt labels the 9.x renderer references but the bundles lacked: `toolbar.thisWeek/thisMonth/exportPdf/saveLayout`, `viewMode.year`, `menu.add*/removeDependency/noCandidates`, the `linkType.*` and `conflict.*` blocks, and `readOnly*` — in both `en` (canonical key source) and `zh`.
|
|
718
|
+
|
|
719
|
+
- e133fae: Gate the runtime report and dashboard editors behind an admin check. Editing a report or dashboard mutates the **shared** definition (it writes the single `sys_report` / `sys_dashboard` record, not a per-user copy), but the edit buttons were shown to every user — so any viewer could change a report/dashboard for everyone. The "Edit" affordance (and its config panel) is now admin-only, matching ObjectView's existing view-config gate. This is the first step of ADR-0034 (runtime edits are an admin quick-edit of the shared definition).
|
|
720
|
+
- 18d0339: Relabel metadata-driven UI on a language switch without a page refresh (#1319)
|
|
721
|
+
|
|
722
|
+
Switching the UI language left server-resolved metadata labels (object/field/
|
|
723
|
+
view labels, action-dialog text) in the old language until a hard refresh,
|
|
724
|
+
because renderers cache those labels by object name and never refetch on a
|
|
725
|
+
language change.
|
|
726
|
+
|
|
727
|
+
**`@object-ui/auth`** — `createAuthenticatedFetch` now folds the active
|
|
728
|
+
`<html lang>` into `Accept-Language` on API calls (never clobbering an explicit
|
|
729
|
+
header), so a switch carries the new locale on every subsequent request.
|
|
730
|
+
|
|
731
|
+
**`@object-ui/app-shell`** — `ConnectedShellInner` drops the adapter's
|
|
732
|
+
locale-blind metadata cache in the render phase and remounts the metadata
|
|
733
|
+
subtree via `key={language}`, so every renderer refetches in the new locale.
|
|
734
|
+
The adapter and its connection sit above the key and are preserved — an in-app
|
|
735
|
+
relabel, not a reconnect.
|
|
736
|
+
|
|
737
|
+
**`@object-ui/i18n`** — dev-mode missing-key warnings: `createI18n` gains
|
|
738
|
+
`warnMissingKeys` (default on outside production) wiring a deduped i18next
|
|
739
|
+
`missingKeyHandler`. `useObjectLabel`'s convention-key probes are flagged so
|
|
740
|
+
their intentional misses (which fall back to server metadata) stay silent.
|
|
741
|
+
|
|
742
|
+
Pairs with the framework-side locale-aware metadata changes in
|
|
743
|
+
`@objectstack/client` / `@objectstack/objectql` / `@objectstack/rest`.
|
|
744
|
+
|
|
745
|
+
- 59b6bbb: i18n the managed-by empty states for system / append-only / better-auth object lists.
|
|
746
|
+
|
|
747
|
+
`resolveManagedByEmptyState` previously hardcoded English titles and messages (e.g. "No identity records", "No events recorded"), so list views for managed objects (identity, audit logs, system-generated records) rendered English regardless of locale. It now takes the `t` translator and resolves `list.managedBy.{system,appendOnly,betterAuth}.{title,message}` (English kept as `defaultValue` fallbacks); `ObjectView` passes its `t` through. Added the keys to the `en` and `zh` locale packs.
|
|
748
|
+
|
|
749
|
+
- e95cc25: Fix the NavigationSyncEffect baseline race: lazily-loaded `page`/`dashboard` metadata (and the empty cache during `invalidate()` refetch) could seed a partial diff baseline, making platform `sys_` pages look "user added" — the effect then wrote them into every app's navigation, 403ing on ADR-0010 locked apps (red "Failed to update navigation" toasts) and polluting writable apps. The effect now diffs only while both types are `status === 'ready'` (new optional `MetadataContextValue.getTypeStatus`), never treats `sys_`-prefixed artifacts as user creations, and skips apps whose `_lock`/`protection.lock` is `full`/`no-overlay`.
|
|
750
|
+
- e265a40: fix(app-shell): resolve 51 react-hooks/rules-of-hooks errors in ObjectView
|
|
751
|
+
|
|
752
|
+
ObjectView had a mid-component early return (`if (!objectDef) return …`) sitting before ~50 hooks, which violated the Rules of Hooks and risked a `Rendered fewer hooks than expected` crash if `objectDef` flipped present→absent→present on a live instance (object switch, metadata refresh, reload failure). Split the component so the missing-object empty state lives in a thin `ObjectView` wrapper, while `ObjectViewInner` (mounted only when the definition exists) calls all hooks unconditionally. Behavior is unchanged.
|
|
753
|
+
|
|
754
|
+
- 42e557a: "Your organization" Install routes by deployment shape: install-local runtimes (runtime-config `features.installLocal`) install via `/marketplace/install-local` into their OWN kernel (the bound oscc\_ credential fetches the org manifest — ADR-0008); cloud-managed environments keep the control-plane `/cloud-connection/install` path. Previously the org Install button always called the control-plane path, which 401s on self-hosted runtimes.
|
|
755
|
+
- af74a5d: Add an admin-only "Edit in studio" affordance to the runtime PageView. Custom pages are authored in the metadata studio (canvas + inspector), not at runtime — so instead of embedding the heavyweight page canvas, PageView now shows a lightweight top-right button (admins only) that deep-links to the page's studio editor (`/apps/:app/metadata/page/:name`). This gives view/report/dashboard/page a consistent runtime admin edit entry point.
|
|
756
|
+
- 3cc38fe: perf(detail/header): lazy + dedupe related-list fan-out, coalesce header polls
|
|
757
|
+
|
|
758
|
+
Opening a record detail fired ~50 concurrent `/api/v1` requests that
|
|
759
|
+
head-of-line-blocked one another on a single control-plane container.
|
|
760
|
+
|
|
761
|
+
- `RecordDetailView` no longer eager-preloads reverse-reference children
|
|
762
|
+
when the reference rail renders them (that data was discarded while the
|
|
763
|
+
rail re-fetched the same collections).
|
|
764
|
+
- `record:reference_rail` now gates fetching on visibility
|
|
765
|
+
(`IntersectionObserver`; the rail is `hidden xl:flex`), caps concurrency
|
|
766
|
+
at 3, and fetches once per `(parentId + entries)` via a signature guard,
|
|
767
|
+
applying results through a mounted ref.
|
|
768
|
+
- `AppHeader` inbox/notification, approvals, and activity pollers gained
|
|
769
|
+
in-flight guards so bootstrap effect re-runs coalesce to one request; the
|
|
770
|
+
approvals poll now sends one request with all identities comma-joined
|
|
771
|
+
instead of one per identity.
|
|
772
|
+
|
|
773
|
+
Measured locally: opening an environment detail dropped from ~52 to ~17
|
|
774
|
+
requests, related collections from ×3–5 each to ×1, approvals from ×9 to ≤3.
|
|
775
|
+
|
|
776
|
+
- 053a164: fix(metadata): keep form-family views out of the runtime list-view switcher
|
|
777
|
+
|
|
778
|
+
The backend now exposes each view as an independent **ViewItem** (ADR-0017,
|
|
779
|
+
"Object has-many View"): `{ name: '<object>.<key>', object, viewKind:
|
|
780
|
+
'list' | 'form', config }`. The Studio preview was already taught this shape,
|
|
781
|
+
but the runtime console path was not — `MetadataProvider.mergeViewsIntoObjects`
|
|
782
|
+
only understood the legacy aggregated container (`{ list, form, listViews,
|
|
783
|
+
formViews }`) and ignored `viewKind` entirely. As a result a form-family view
|
|
784
|
+
(e.g. `crm_activity.default`, expanded from `formViews.default`) was neither
|
|
785
|
+
recognized nor excluded: navigating to its `/view/<name>` URL silently fell
|
|
786
|
+
back to the default grid list instead of being treated as a record form.
|
|
787
|
+
|
|
788
|
+
`mergeViewsIntoObjects` now recognizes the ViewItem shape and routes by
|
|
789
|
+
`viewKind` — `'list'` → `objectDef.listViews`, `'form'` → `objectDef.formViews`
|
|
790
|
+
— so FORM-family views never enter the list-view switcher (which reads only
|
|
791
|
+
`listViews`). Each item's `config` body is flattened to the renderer shape so
|
|
792
|
+
`type`/`columns`/`calendar`/… survive, the canonical `<object>.<key>` name is
|
|
793
|
+
used as the view id (so `/view/<name>` resolves), and the legacy container is
|
|
794
|
+
skipped for any object that already has expanded ViewItems (no double-listing).
|
|
795
|
+
Objects served only as a legacy container are unaffected.
|
|
796
|
+
|
|
797
|
+
- db8cd00: feat(app-shell): global settle signal (window.\_\_objectui) + region aria-busy (ADR-0054 Phase 3)
|
|
798
|
+
|
|
799
|
+
Adds a single machine-readable "is the app idle?" predicate (ADR-0054 C5). The
|
|
800
|
+
data layer wraps the adapter's `fetch` to count in-flight requests, mirrored onto
|
|
801
|
+
`window.__objectui` with live `idle` / `pendingRequests` getters plus `whenIdle()`
|
|
802
|
+
and `subscribe()`. New `useSettleSignal()` React hook and lower-level exports
|
|
803
|
+
(`getPendingRequests`, `subscribeSettle`, `whenIdle`, `withSettleSignal`,
|
|
804
|
+
`installSettleSignalGlobal`). The list view and record-picker results regions now
|
|
805
|
+
set `aria-busy` while fetching and `data-state="loading|idle"` for region-level
|
|
806
|
+
waiting. Lets an automated (AI) driver wait for settle instead of hardcoding
|
|
807
|
+
timeouts.
|
|
808
|
+
|
|
809
|
+
- 2f31406: Refine Studio package-scoped navigation and home overview.
|
|
810
|
+
|
|
811
|
+
Studio now treats the selected package as the home overview scope, flattens the root Overview sidebar group, hides the duplicate all-metadata sidebar entry, redirects the invalid package metadata route to package management, preserves the selected package across package-management navigation, and adds a localized package-management sidebar label.
|
|
812
|
+
|
|
813
|
+
- d901f65: feat(app-shell): testability ratchet — ban synthetic-event triggers (ADR-0054 Phase 5)
|
|
814
|
+
|
|
815
|
+
Locks in the testability contract so it can't regress. A conformance test (in the
|
|
816
|
+
gating `pnpm test` job) fails the build if a new synthetic-event trigger
|
|
817
|
+
(`dispatchEvent(new KeyboardEvent/MouseEvent/PointerEvent)`) appears anywhere in
|
|
818
|
+
`packages/*/src` or `apps/*/src`; a matching local ESLint rule
|
|
819
|
+
(`object-ui/no-synthetic-event-trigger`) flags it in-editor. The last two
|
|
820
|
+
offenders — the sidebar swipe-to-open gestures (`UnifiedSidebar`, `AppSidebar`)
|
|
821
|
+
— are converted to a direct, idempotent `setOpenMobile(true)` (C1), so the tree
|
|
822
|
+
is clean at zero. Completes the ADR-0054 rollout.
|
|
823
|
+
|
|
824
|
+
- 8d1195d: Fix `type: 'url'` actions so they actually reach the backend in split-origin dev setups, and so reveal-once result dialogs render.
|
|
825
|
+
|
|
826
|
+
- `ActionRunner.executeUrl`: when context provides `apiBase`, relative `/api/...`, `/_auth/...`, and `/_account/...` URLs are now promoted to absolute (`${apiBase}${path}`) before navigation. Same-origin API paths (with or without `apiBase`) trigger a full-page `window.location.href` rather than React-Router push — this is required for server-side OAuth redirect dances (e.g. better-auth `/sign-in/social`) that React Router would otherwise swallow into the SPA's fallback route.
|
|
827
|
+
- `ActionRunner.buildInterpolationContext`: surfaces `ctx.apiBase` for action targets that want to template it explicitly.
|
|
828
|
+
- `ObjectView`: passes `apiBase: import.meta.env.VITE_SERVER_URL` into the toolbar `ActionProvider` context so the above resolves.
|
|
829
|
+
- `action-button` and `action-menu` renderers now forward `resultDialog` when invoking the runner. Previously this field was silently dropped by an explicit whitelist, breaking every "show once, then hide" flow (2FA QR/backup codes, OAuth client_secret, regenerated tokens).
|
|
830
|
+
|
|
831
|
+
- 5ab52c0: feat(app-shell): useUrlOverlay primitive + URL-addressable keyboard-shortcuts dialog (ADR-0054 Phase 2)
|
|
832
|
+
|
|
833
|
+
Adds `useUrlOverlay(key)` — a reusable, router-aware hook that stores a navigable
|
|
834
|
+
overlay's open state in a `?<key>=1` URL param (idempotent open, deep-linkable,
|
|
835
|
+
restore-on-reload, back/forward; `alias`/`value`/`replace` configurable). The
|
|
836
|
+
command palette is refactored onto it (behavior unchanged: `?palette=1`, `?cmdk=1`
|
|
837
|
+
alias). The keyboard-shortcuts dialog becomes URL-addressable (`?shortcuts=1`) and
|
|
838
|
+
gains a click entry in the header Help menu — previously it was only reachable via
|
|
839
|
+
the `?` key (which remains an accelerator). Generalizes ADR-0054 invariants C1/C3
|
|
840
|
+
beyond the Phase 1 reference fix; the shared overlay primitives already carry
|
|
841
|
+
`data-testid` + Radix `data-state`, documented in the README.
|
|
842
|
+
|
|
843
|
+
- ef3c654: Localize the View variant inspector labels. The inspector (the View "home" panel, also hosted by the runtime ObjectView right-rail view editor after the spec-driven migration) previously rendered hardcoded English labels — "Label", "View type", "Object", the view-type dropdown options, and the "spec schema unavailable" hint. These now route through the metadata-admin i18n catalog (en + zh) so the runtime console and the studio both display localized text.
|
|
844
|
+
- Updated dependencies [5976ba3]
|
|
845
|
+
- Updated dependencies [a00e16d]
|
|
846
|
+
- Updated dependencies [eaccefd]
|
|
847
|
+
- Updated dependencies [f7f325d]
|
|
848
|
+
- Updated dependencies [c12986e]
|
|
849
|
+
- Updated dependencies [71d7ce0]
|
|
850
|
+
- Updated dependencies [0c95963]
|
|
851
|
+
- Updated dependencies [30ee761]
|
|
852
|
+
- Updated dependencies [81c0777]
|
|
853
|
+
- Updated dependencies [053c948]
|
|
854
|
+
- Updated dependencies [b99d9bd]
|
|
855
|
+
- Updated dependencies [053c948]
|
|
856
|
+
- Updated dependencies [89e113c]
|
|
857
|
+
- Updated dependencies [ddbe4a2]
|
|
858
|
+
- Updated dependencies [2d47e94]
|
|
859
|
+
- Updated dependencies [c5a7d6f]
|
|
860
|
+
- Updated dependencies [40c79df]
|
|
861
|
+
- Updated dependencies [9049bbe]
|
|
862
|
+
- Updated dependencies [053c948]
|
|
863
|
+
- Updated dependencies [053c948]
|
|
864
|
+
- Updated dependencies [77cc6bb]
|
|
865
|
+
- Updated dependencies [6c0c92c]
|
|
866
|
+
- Updated dependencies [97c6831]
|
|
867
|
+
- Updated dependencies [cb2fdb1]
|
|
868
|
+
- Updated dependencies [a58c6b8]
|
|
869
|
+
- Updated dependencies [c3749eb]
|
|
870
|
+
- Updated dependencies [39c89e7]
|
|
871
|
+
- Updated dependencies [78f9c16]
|
|
872
|
+
- Updated dependencies [92449ef]
|
|
873
|
+
- Updated dependencies [c09f44e]
|
|
874
|
+
- Updated dependencies [f6044fa]
|
|
875
|
+
- Updated dependencies [3d036a9]
|
|
876
|
+
- Updated dependencies [6cfa330]
|
|
877
|
+
- Updated dependencies [ad8ade6]
|
|
878
|
+
- Updated dependencies [e270c7d]
|
|
879
|
+
- Updated dependencies [ab168e4]
|
|
880
|
+
- Updated dependencies [d54346c]
|
|
881
|
+
- Updated dependencies [5332639]
|
|
882
|
+
- Updated dependencies [3870c20]
|
|
883
|
+
- Updated dependencies [2eb3096]
|
|
884
|
+
- Updated dependencies [b88c560]
|
|
885
|
+
- Updated dependencies [0ad72a6]
|
|
886
|
+
- Updated dependencies [bd398df]
|
|
887
|
+
- Updated dependencies [3fa23a7]
|
|
888
|
+
- Updated dependencies [18d0339]
|
|
889
|
+
- Updated dependencies [66ed3ad]
|
|
890
|
+
- Updated dependencies [c6445b6]
|
|
891
|
+
- Updated dependencies [80c133c]
|
|
892
|
+
- Updated dependencies [5e1b838]
|
|
893
|
+
- Updated dependencies [59b6bbb]
|
|
894
|
+
- Updated dependencies [d16566f]
|
|
895
|
+
- Updated dependencies [69510df]
|
|
896
|
+
- Updated dependencies [b148daf]
|
|
897
|
+
- Updated dependencies [90acb7f]
|
|
898
|
+
- Updated dependencies [7913390]
|
|
899
|
+
- Updated dependencies [514f426]
|
|
900
|
+
- Updated dependencies [586a027]
|
|
901
|
+
- Updated dependencies [00f8d2d]
|
|
902
|
+
- Updated dependencies [9aac2b8]
|
|
903
|
+
- Updated dependencies [1394e34]
|
|
904
|
+
- Updated dependencies [e95cc25]
|
|
905
|
+
- Updated dependencies [abe8ebc]
|
|
906
|
+
- Updated dependencies [300d755]
|
|
907
|
+
- Updated dependencies [3cc38fe]
|
|
908
|
+
- Updated dependencies [bd8b054]
|
|
909
|
+
- Updated dependencies [053c948]
|
|
910
|
+
- Updated dependencies [053c948]
|
|
911
|
+
- Updated dependencies [4eb9cb6]
|
|
912
|
+
- Updated dependencies [7c239fd]
|
|
913
|
+
- Updated dependencies [858ad94]
|
|
914
|
+
- Updated dependencies [c849d3b]
|
|
915
|
+
- Updated dependencies [7b71cd8]
|
|
916
|
+
- Updated dependencies [2270239]
|
|
917
|
+
- Updated dependencies [db8cd00]
|
|
918
|
+
- Updated dependencies [650bd1f]
|
|
919
|
+
- Updated dependencies [f011479]
|
|
920
|
+
- Updated dependencies [2f31406]
|
|
921
|
+
- Updated dependencies [18728c1]
|
|
922
|
+
- Updated dependencies [8426db7]
|
|
923
|
+
- Updated dependencies [8d1195d]
|
|
924
|
+
- Updated dependencies [9bef806]
|
|
925
|
+
- @object-ui/core@7.0.0
|
|
926
|
+
- @object-ui/components@7.0.0
|
|
927
|
+
- @object-ui/plugin-grid@7.0.0
|
|
928
|
+
- @object-ui/plugin-detail@7.0.0
|
|
929
|
+
- @object-ui/react@7.0.0
|
|
930
|
+
- @object-ui/plugin-report@7.0.0
|
|
931
|
+
- @object-ui/data-objectstack@7.0.0
|
|
932
|
+
- @object-ui/plugin-chatbot@7.0.0
|
|
933
|
+
- @object-ui/plugin-list@7.0.0
|
|
934
|
+
- @object-ui/i18n@7.0.0
|
|
935
|
+
- @object-ui/types@7.0.0
|
|
936
|
+
- @object-ui/plugin-form@7.0.0
|
|
937
|
+
- @object-ui/fields@7.0.0
|
|
938
|
+
- @object-ui/plugin-charts@7.0.0
|
|
939
|
+
- @object-ui/plugin-dashboard@7.0.0
|
|
940
|
+
- @object-ui/auth@7.0.0
|
|
941
|
+
- @object-ui/plugin-view@7.0.0
|
|
942
|
+
- @object-ui/layout@7.0.0
|
|
943
|
+
- @object-ui/plugin-calendar@7.0.0
|
|
944
|
+
- @object-ui/plugin-designer@7.0.0
|
|
945
|
+
- @object-ui/plugin-editor@7.0.0
|
|
946
|
+
- @object-ui/plugin-kanban@7.0.0
|
|
947
|
+
- @object-ui/collaboration@7.0.0
|
|
948
|
+
- @object-ui/permissions@7.0.0
|
|
949
|
+
- @object-ui/providers@7.0.0
|
|
950
|
+
|
|
951
|
+
## 6.2.3
|
|
952
|
+
|
|
953
|
+
### Patch Changes
|
|
954
|
+
|
|
955
|
+
- 37fb47e: fix org
|
|
956
|
+
- @object-ui/types@6.2.3
|
|
957
|
+
- @object-ui/core@6.2.3
|
|
958
|
+
- @object-ui/i18n@6.2.3
|
|
959
|
+
- @object-ui/react@6.2.3
|
|
960
|
+
- @object-ui/components@6.2.3
|
|
961
|
+
- @object-ui/fields@6.2.3
|
|
962
|
+
- @object-ui/layout@6.2.3
|
|
963
|
+
- @object-ui/data-objectstack@6.2.3
|
|
964
|
+
- @object-ui/auth@6.2.3
|
|
965
|
+
- @object-ui/permissions@6.2.3
|
|
966
|
+
- @object-ui/plugin-editor@6.2.3
|
|
967
|
+
- @object-ui/collaboration@6.2.3
|
|
968
|
+
- @object-ui/providers@6.2.3
|
|
969
|
+
|
|
3
970
|
## 6.2.2
|
|
4
971
|
|
|
5
972
|
### Patch Changes
|