@object-ui/app-shell 6.2.3 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +948 -0
- package/README.md +292 -0
- package/dist/assistant/assistantBus.d.ts +72 -0
- package/dist/assistant/assistantBus.js +133 -0
- package/dist/chrome/CommandPalette.d.ts +1 -1
- package/dist/chrome/CommandPalette.js +26 -22
- package/dist/chrome/ConditionalAuthWrapper.d.ts +1 -1
- package/dist/chrome/ConsoleToaster.d.ts +1 -1
- package/dist/chrome/ConsoleToaster.js +3 -1
- package/dist/chrome/ErrorBoundary.d.ts +1 -1
- package/dist/chrome/KeyboardShortcutsDialog.d.ts +1 -1
- package/dist/chrome/KeyboardShortcutsDialog.js +16 -5
- package/dist/chrome/LoadingScreen.d.ts +1 -1
- package/dist/chrome/LoadingScreen.js +22 -26
- package/dist/chrome/RouteFader.d.ts +1 -1
- package/dist/chrome/ThemeProvider.d.ts +1 -1
- package/dist/components/ManagedByBadge.d.ts +1 -1
- package/dist/console/AppContent.d.ts +1 -1
- package/dist/console/AppContent.js +170 -37
- package/dist/console/ConsoleShell.d.ts +7 -7
- package/dist/console/ConsoleShell.js +32 -3
- package/dist/console/ai/AiChatPage.d.ts +88 -1
- package/dist/console/ai/AiChatPage.js +743 -66
- package/dist/console/ai/ConversationsSidebar.d.ts +26 -1
- package/dist/console/ai/ConversationsSidebar.js +149 -34
- package/dist/console/ai/LiveCanvas.d.ts +22 -0
- package/dist/console/ai/LiveCanvas.js +78 -0
- package/dist/console/ai/reconcileTurn.d.ts +8 -0
- package/dist/console/ai/reconcileTurn.js +20 -0
- package/dist/console/auth/AuthPageLayout.d.ts +1 -1
- package/dist/console/auth/ForgotPasswordPage.d.ts +1 -1
- package/dist/console/auth/LoginPage.d.ts +1 -1
- package/dist/console/auth/RegisterPage.d.ts +1 -1
- package/dist/console/auth/RegisterPage.js +23 -3
- package/dist/console/cloud-connection/CloudConnectionPanel.d.ts +1 -0
- package/dist/console/cloud-connection/CloudConnectionPanel.js +169 -0
- package/dist/console/home/AppCard.d.ts +1 -1
- package/dist/console/home/AppCard.js +6 -12
- package/dist/console/home/HomeAppsStrip.d.ts +8 -0
- package/dist/console/home/HomeAppsStrip.js +61 -0
- package/dist/console/home/HomeLayout.d.ts +1 -1
- package/dist/console/home/HomeLayout.js +3 -1
- package/dist/console/home/HomePage.d.ts +1 -2
- package/dist/console/home/HomePage.js +149 -21
- package/dist/console/home/HomeRail.d.ts +22 -0
- package/dist/console/home/HomeRail.js +62 -0
- package/dist/console/home/QuickActions.d.ts +1 -1
- package/dist/console/home/QuickActions.js +3 -11
- package/dist/console/home/RecentApps.d.ts +1 -1
- package/dist/console/home/RecentApps.js +2 -2
- package/dist/console/home/StarredApps.d.ts +1 -1
- package/dist/console/home/StarredApps.js +2 -2
- package/dist/console/marketplace/InstalledListWidget.d.ts +1 -0
- package/dist/console/marketplace/InstalledListWidget.js +93 -0
- package/dist/console/marketplace/MarkdownText.d.ts +1 -1
- package/dist/console/marketplace/MarketplaceAccessDenied.d.ts +1 -1
- package/dist/console/marketplace/MarketplaceInstalledPage.d.ts +8 -14
- package/dist/console/marketplace/MarketplaceInstalledPage.js +14 -66
- package/dist/console/marketplace/MarketplacePackagePage.d.ts +1 -1
- package/dist/console/marketplace/MarketplacePackagePage.js +249 -8
- package/dist/console/marketplace/MarketplacePage.d.ts +1 -1
- package/dist/console/marketplace/MarketplacePage.js +60 -3
- package/dist/console/marketplace/PackageIcon.d.ts +1 -1
- package/dist/console/marketplace/PluginDisclosure.d.ts +14 -0
- package/dist/console/marketplace/PluginDisclosure.js +38 -0
- package/dist/console/marketplace/marketplaceApi.d.ts +123 -0
- package/dist/console/marketplace/marketplaceApi.js +254 -1
- package/dist/console/organizations/CreateWorkspaceDialog.d.ts +1 -1
- package/dist/console/organizations/OrganizationsLayout.d.ts +1 -1
- package/dist/console/organizations/OrganizationsPage.d.ts +1 -1
- package/dist/console/organizations/manage/AcceptInvitationPage.d.ts +1 -1
- package/dist/console/organizations/manage/InvitationsPage.d.ts +1 -1
- package/dist/console/organizations/manage/InviteMemberDialog.d.ts +1 -1
- package/dist/console/organizations/manage/MembersPage.d.ts +1 -1
- package/dist/console/organizations/manage/OrganizationLayout.d.ts +1 -1
- package/dist/console/organizations/manage/SettingsPage.d.ts +1 -1
- package/dist/context/CommandPaletteProvider.d.ts +44 -0
- package/dist/context/CommandPaletteProvider.js +71 -0
- package/dist/context/FavoritesProvider.d.ts +1 -1
- package/dist/context/NavigationContext.d.ts +1 -1
- package/dist/context/RecentItemsProvider.d.ts +2 -2
- package/dist/context/UserStateAdapters.d.ts +1 -1
- package/dist/context/index.d.ts +2 -0
- package/dist/context/index.js +1 -0
- package/dist/hooks/index.d.ts +5 -2
- package/dist/hooks/index.js +4 -1
- package/dist/hooks/useActionModal.d.ts +53 -0
- package/dist/hooks/useActionModal.js +111 -0
- package/dist/hooks/useChatConversation.d.ts +107 -4
- package/dist/hooks/useChatConversation.js +253 -25
- package/dist/hooks/useConsoleActionRuntime.d.ts +70 -0
- package/dist/hooks/useConsoleActionRuntime.js +560 -0
- package/dist/hooks/useConversationList.js +61 -3
- package/dist/hooks/useHomeInbox.d.ts +13 -0
- package/dist/hooks/useHomeInbox.js +142 -0
- package/dist/hooks/useNavPins.js +17 -23
- package/dist/hooks/useNavigationSync.d.ts +33 -0
- package/dist/hooks/useNavigationSync.js +98 -12
- package/dist/hooks/useReconcileOnError.d.ts +40 -0
- package/dist/hooks/useReconcileOnError.js +37 -0
- package/dist/hooks/useRecordApprovals.d.ts +18 -19
- package/dist/hooks/useRecordApprovals.js +24 -40
- package/dist/hooks/useResponsiveSidebar.js +14 -5
- package/dist/hooks/useSettleSignal.d.ts +19 -0
- package/dist/hooks/useSettleSignal.js +20 -0
- package/dist/hooks/useTrackRouteAsRecent.js +35 -0
- package/dist/hooks/useUrlOverlay.d.ts +62 -0
- package/dist/hooks/useUrlOverlay.js +88 -0
- package/dist/index.d.ts +16 -7
- package/dist/index.js +12 -4
- package/dist/layout/ActivityFeed.d.ts +1 -1
- package/dist/layout/AppHeader.d.ts +3 -2
- package/dist/layout/AppHeader.js +237 -72
- package/dist/layout/AppSidebar.d.ts +2 -1
- package/dist/layout/AppSidebar.js +26 -46
- package/dist/layout/AppSwitcher.d.ts +2 -1
- package/dist/layout/AppSwitcher.js +9 -5
- package/dist/layout/AuthPageLayout.d.ts +1 -1
- package/dist/layout/ConnectionStatus.d.ts +1 -1
- package/dist/layout/ConnectionStatus.js +9 -6
- package/dist/layout/ConsoleChatbotFab.d.ts +19 -1
- package/dist/layout/ConsoleChatbotFab.js +16 -2
- package/dist/layout/ConsoleFloatingChatbot.d.ts +32 -2
- package/dist/layout/ConsoleFloatingChatbot.js +374 -41
- package/dist/layout/ConsoleLayout.d.ts +1 -1
- package/dist/layout/ConsoleLayout.js +27 -11
- package/dist/layout/ContextSelectors.d.ts +44 -0
- package/dist/layout/ContextSelectors.js +218 -0
- package/dist/layout/InboxPopover.d.ts +6 -1
- package/dist/layout/InboxPopover.js +25 -6
- package/dist/layout/LocaleSwitcher.d.ts +1 -1
- package/dist/layout/LocalizedSidebarTrigger.d.ts +2 -0
- package/dist/layout/LocalizedSidebarTrigger.js +15 -0
- package/dist/layout/MobileViewSwitcherContext.d.ts +1 -1
- package/dist/layout/ModeToggle.d.ts +1 -1
- package/dist/layout/PageHeader.d.ts +1 -1
- package/dist/layout/UnifiedSidebar.d.ts +2 -1
- package/dist/layout/UnifiedSidebar.js +116 -15
- package/dist/observability/index.d.ts +1 -0
- package/dist/observability/index.js +1 -0
- package/dist/observability/settleSignal.d.ts +64 -0
- package/dist/observability/settleSignal.js +131 -0
- package/dist/preview/DraftChangesPanel.d.ts +19 -0
- package/dist/preview/DraftChangesPanel.js +114 -0
- package/dist/preview/DraftPreviewBar.d.ts +8 -0
- package/dist/preview/DraftPreviewBar.js +86 -0
- package/dist/preview/PreviewDraftEmptyState.d.ts +16 -0
- package/dist/preview/PreviewDraftEmptyState.js +47 -0
- package/dist/preview/PreviewModeContext.d.ts +57 -0
- package/dist/preview/PreviewModeContext.js +99 -0
- package/dist/preview/UnpublishedAppBar.d.ts +8 -0
- package/dist/preview/UnpublishedAppBar.js +79 -0
- package/dist/preview/draftStatus.d.ts +20 -0
- package/dist/preview/draftStatus.js +27 -0
- package/dist/preview/usePublishAllDrafts.d.ts +18 -0
- package/dist/preview/usePublishAllDrafts.js +106 -0
- package/dist/providers/AdapterProvider.d.ts +1 -1
- package/dist/providers/AdapterProvider.js +6 -1
- package/dist/providers/ExpressionProvider.d.ts +1 -1
- package/dist/providers/MetadataProvider.d.ts +17 -2
- package/dist/providers/MetadataProvider.js +183 -12
- package/dist/runtime-config.d.ts +46 -2
- package/dist/runtime-config.js +39 -2
- package/dist/services/builtinComponents.js +68 -59
- package/dist/skeletons/SkeletonDashboard.d.ts +1 -1
- package/dist/skeletons/SkeletonDetail.d.ts +1 -1
- package/dist/skeletons/SkeletonGrid.d.ts +1 -1
- package/dist/utils/appRoute.d.ts +21 -0
- package/dist/utils/appRoute.js +25 -0
- package/dist/utils/deriveRelatedLists.d.ts +54 -0
- package/dist/utils/deriveRelatedLists.js +91 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/managedByEmptyState.d.ts +8 -1
- package/dist/utils/managedByEmptyState.js +13 -7
- package/dist/utils/preferLocal.d.ts +18 -0
- package/dist/utils/preferLocal.js +24 -0
- package/dist/views/ActionConfirmDialog.d.ts +1 -1
- package/dist/views/ActionConfirmDialog.js +3 -1
- package/dist/views/ActionParamDialog.d.ts +6 -1
- package/dist/views/ActionParamDialog.js +9 -3
- package/dist/views/ActionResultDialog.d.ts +13 -0
- package/dist/views/ActionResultDialog.js +134 -0
- package/dist/views/ComponentNavView.d.ts +14 -1
- package/dist/views/CreateViewDialog.d.ts +1 -1
- package/dist/views/DashboardConfigPanel.d.ts +28 -0
- package/dist/views/DashboardConfigPanel.js +81 -0
- package/dist/views/DashboardView.d.ts +4 -3
- package/dist/views/DashboardView.js +38 -239
- package/dist/views/FlowRunner.d.ts +59 -0
- package/dist/views/FlowRunner.js +153 -0
- package/dist/views/InterfaceListPage.d.ts +49 -0
- package/dist/views/InterfaceListPage.js +347 -0
- package/dist/views/MetadataInspector.d.ts +2 -2
- package/dist/views/ObjectView.d.ts +1 -1
- package/dist/views/ObjectView.js +209 -532
- package/dist/views/PageView.d.ts +8 -3
- package/dist/views/PageView.js +45 -32
- package/dist/views/RecordDetailView.d.ts +1 -1
- package/dist/views/RecordDetailView.js +363 -148
- package/dist/views/RecordFormPage.d.ts +1 -1
- package/dist/views/RecordFormPage.js +26 -1
- package/dist/views/ReportConfigPanel.d.ts +37 -0
- package/dist/views/ReportConfigPanel.js +85 -0
- package/dist/views/ReportView.d.ts +1 -1
- package/dist/views/ReportView.js +116 -7
- package/dist/views/RuntimeDraftBar.d.ts +30 -0
- package/dist/views/RuntimeDraftBar.js +112 -0
- package/dist/views/SearchResultsPage.d.ts +1 -1
- package/dist/views/SearchResultsPage.js +8 -18
- package/dist/views/ViewConfigPanel.d.ts +24 -17
- package/dist/views/ViewConfigPanel.js +121 -77
- package/dist/views/index.d.ts +1 -1
- package/dist/views/index.js +1 -1
- package/dist/views/metadata-admin/AuditPanel.d.ts +28 -0
- package/dist/views/metadata-admin/AuditPanel.js +79 -0
- package/dist/views/metadata-admin/DiagnosticsPage.d.ts +20 -0
- package/dist/views/metadata-admin/DiagnosticsPage.js +69 -0
- package/dist/views/metadata-admin/DirectoryPage.d.ts +16 -1
- package/dist/views/metadata-admin/DirectoryPage.js +113 -24
- package/dist/views/metadata-admin/DraftReviewPanel.d.ts +33 -0
- package/dist/views/metadata-admin/DraftReviewPanel.js +77 -0
- package/dist/views/metadata-admin/EmbeddedItemEditor.d.ts +17 -1
- package/dist/views/metadata-admin/EmbeddedItemEditor.js +15 -8
- package/dist/views/metadata-admin/JsonSourceEditor.d.ts +37 -0
- package/dist/views/metadata-admin/JsonSourceEditor.js +178 -0
- package/dist/views/metadata-admin/LayeredDiff.d.ts +39 -1
- package/dist/views/metadata-admin/LayeredDiff.js +171 -5
- package/dist/views/metadata-admin/MetadataDetailDrawer.d.ts +15 -1
- package/dist/views/metadata-admin/MetadataTypeActions.d.ts +48 -0
- package/dist/views/metadata-admin/MetadataTypeActions.js +165 -0
- package/dist/views/metadata-admin/PackagesPage.d.ts +18 -0
- package/dist/views/metadata-admin/PackagesPage.js +395 -0
- package/dist/views/metadata-admin/PageShell.d.ts +1 -1
- package/dist/views/metadata-admin/PageShell.js +9 -4
- package/dist/views/metadata-admin/PermissionMatrixEditor.d.ts +35 -1
- package/dist/views/metadata-admin/QuickFind.d.ts +21 -1
- package/dist/views/metadata-admin/QuickFind.js +6 -3
- package/dist/views/metadata-admin/RelatedPanel.d.ts +24 -1
- package/dist/views/metadata-admin/RelatedPanel.js +20 -18
- package/dist/views/metadata-admin/ResourceEditPage.d.ts +40 -1
- package/dist/views/metadata-admin/ResourceEditPage.js +1223 -60
- package/dist/views/metadata-admin/ResourceHistoryPage.d.ts +39 -1
- package/dist/views/metadata-admin/ResourceHistoryPage.js +66 -16
- package/dist/views/metadata-admin/ResourceListPage.d.ts +13 -1
- package/dist/views/metadata-admin/ResourceListPage.js +266 -30
- package/dist/views/metadata-admin/ResourceRouter.d.ts +23 -1
- package/dist/views/metadata-admin/SchemaForm.d.ts +34 -1
- package/dist/views/metadata-admin/SchemaForm.js +559 -49
- package/dist/views/metadata-admin/StudioHomePage.d.ts +22 -0
- package/dist/views/metadata-admin/StudioHomePage.js +213 -0
- package/dist/views/metadata-admin/anchors.js +237 -24
- package/dist/views/metadata-admin/clientValidation.d.ts +50 -0
- package/dist/views/metadata-admin/clientValidation.js +169 -0
- package/dist/views/metadata-admin/color-variant-field.d.ts +30 -0
- package/dist/views/metadata-admin/color-variant-field.js +38 -0
- package/dist/views/metadata-admin/createDerive.d.ts +75 -0
- package/dist/views/metadata-admin/createDerive.js +179 -0
- package/dist/views/metadata-admin/dashboard-schema.d.ts +12 -0
- package/dist/views/metadata-admin/dashboard-schema.js +80 -0
- package/dist/views/metadata-admin/datasource/DatasourceResourcePage.d.ts +35 -0
- package/dist/views/metadata-admin/datasource/DatasourceResourcePage.js +327 -0
- package/dist/views/metadata-admin/datasource/register.d.ts +1 -0
- package/dist/views/metadata-admin/datasource/register.js +24 -0
- package/dist/views/metadata-admin/default-inspector-registry.d.ts +49 -0
- package/dist/views/metadata-admin/default-inspector-registry.js +8 -0
- package/dist/views/metadata-admin/default-schemas.js +115 -10
- package/dist/views/metadata-admin/external/ExternalDatasourcePanel.d.ts +27 -0
- package/dist/views/metadata-admin/external/ExternalDatasourcePanel.js +69 -0
- package/dist/views/metadata-admin/external/ImportObjectDialog.d.ts +27 -0
- package/dist/views/metadata-admin/external/ImportObjectDialog.js +77 -0
- package/dist/views/metadata-admin/external/SchemaBrowser.d.ts +16 -0
- package/dist/views/metadata-admin/external/SchemaBrowser.js +74 -0
- package/dist/views/metadata-admin/external/ValidationPanel.d.ts +16 -0
- package/dist/views/metadata-admin/external/ValidationPanel.js +68 -0
- package/dist/views/metadata-admin/external/api.d.ts +100 -0
- package/dist/views/metadata-admin/external/api.js +124 -0
- package/dist/views/metadata-admin/i18n.d.ts +1 -0
- package/dist/views/metadata-admin/i18n.js +1166 -2
- package/dist/views/metadata-admin/index.d.ts +8 -5
- package/dist/views/metadata-admin/index.js +12 -2
- package/dist/views/metadata-admin/inspector-registry.d.ts +51 -0
- package/dist/views/metadata-admin/inspector-registry.js +11 -0
- package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.d.ts +30 -0
- package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.js +180 -0
- package/dist/views/metadata-admin/inspectors/AppNavInspector.d.ts +16 -0
- package/dist/views/metadata-admin/inspectors/AppNavInspector.js +110 -0
- package/dist/views/metadata-admin/inspectors/ConditionBuilder.d.ts +29 -0
- package/dist/views/metadata-admin/inspectors/ConditionBuilder.js +154 -0
- package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.d.ts +28 -0
- package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.js +110 -0
- package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.d.ts +18 -0
- package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.js +139 -0
- package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.d.ts +21 -0
- package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.js +107 -0
- package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.d.ts +16 -0
- package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.js +45 -0
- package/dist/views/metadata-admin/inspectors/FlowInspector.d.ts +12 -0
- package/dist/views/metadata-admin/inspectors/FlowInspector.js +9 -0
- package/dist/views/metadata-admin/inspectors/FlowKeyValueField.d.ts +30 -0
- package/dist/views/metadata-admin/inspectors/FlowKeyValueField.js +125 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.d.ts +18 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.js +40 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeInspector.d.ts +14 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeInspector.js +140 -0
- package/dist/views/metadata-admin/inspectors/FlowObjectListField.d.ts +26 -0
- package/dist/views/metadata-admin/inspectors/FlowObjectListField.js +105 -0
- package/dist/views/metadata-admin/inspectors/FlowReferenceField.d.ts +83 -0
- package/dist/views/metadata-admin/inspectors/FlowReferenceField.js +181 -0
- package/dist/views/metadata-admin/inspectors/FlowStringListField.d.ts +21 -0
- package/dist/views/metadata-admin/inspectors/FlowStringListField.js +60 -0
- package/dist/views/metadata-admin/inspectors/InspectorComboField.d.ts +40 -0
- package/dist/views/metadata-admin/inspectors/InspectorComboField.js +61 -0
- package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.d.ts +21 -0
- package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.js +54 -0
- package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.d.ts +23 -0
- package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.js +330 -0
- package/dist/views/metadata-admin/inspectors/PageBlockInspector.d.ts +48 -0
- package/dist/views/metadata-admin/inspectors/PageBlockInspector.js +332 -0
- package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.d.ts +58 -0
- package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.js +160 -0
- package/dist/views/metadata-admin/inspectors/ViewColumnInspector.d.ts +19 -0
- package/dist/views/metadata-admin/inspectors/ViewColumnInspector.js +144 -0
- package/dist/views/metadata-admin/inspectors/ViewInspector.d.ts +19 -0
- package/dist/views/metadata-admin/inspectors/ViewInspector.js +21 -0
- package/dist/views/metadata-admin/inspectors/ViewVariantInspector.d.ts +54 -0
- package/dist/views/metadata-admin/inspectors/ViewVariantInspector.js +191 -0
- package/dist/views/metadata-admin/inspectors/_shared.d.ts +124 -0
- package/dist/views/metadata-admin/inspectors/_shared.js +113 -0
- package/dist/views/metadata-admin/inspectors/expression-validate.d.ts +26 -0
- package/dist/views/metadata-admin/inspectors/expression-validate.js +66 -0
- package/dist/views/metadata-admin/inspectors/flow-node-config.d.ts +143 -0
- package/dist/views/metadata-admin/inspectors/flow-node-config.js +461 -0
- package/dist/views/metadata-admin/inspectors/index.d.ts +1 -0
- package/dist/views/metadata-admin/inspectors/index.js +45 -0
- package/dist/views/metadata-admin/inspectors/json-schema-to-fields.d.ts +40 -0
- package/dist/views/metadata-admin/inspectors/json-schema-to-fields.js +227 -0
- package/dist/views/metadata-admin/inspectors/useDatasetFields.d.ts +72 -0
- package/dist/views/metadata-admin/inspectors/useDatasetFields.js +0 -0
- package/dist/views/metadata-admin/mergeServerFields.d.ts +65 -0
- package/dist/views/metadata-admin/mergeServerFields.js +56 -0
- package/dist/views/metadata-admin/preview-registry.d.ts +55 -0
- package/dist/views/metadata-admin/previews/ActionPreview.d.ts +25 -0
- package/dist/views/metadata-admin/previews/ActionPreview.js +238 -0
- package/dist/views/metadata-admin/previews/AddWidgetPicker.d.ts +12 -0
- package/dist/views/metadata-admin/previews/AddWidgetPicker.js +56 -0
- package/dist/views/metadata-admin/previews/AgentPreview.d.ts +24 -0
- package/dist/views/metadata-admin/previews/AgentPreview.js +100 -0
- package/dist/views/metadata-admin/previews/AppNavCanvas.d.ts +31 -0
- package/dist/views/metadata-admin/previews/AppNavCanvas.js +260 -0
- package/dist/views/metadata-admin/previews/AppPreview.d.ts +16 -1
- package/dist/views/metadata-admin/previews/AppPreview.js +23 -14
- package/dist/views/metadata-admin/previews/BookPreview.d.ts +20 -0
- package/dist/views/metadata-admin/previews/BookPreview.js +132 -0
- package/dist/views/metadata-admin/previews/DashboardPreview.d.ts +16 -1
- package/dist/views/metadata-admin/previews/DashboardPreview.js +110 -8
- package/dist/views/metadata-admin/previews/DatasetPreview.d.ts +18 -0
- package/dist/views/metadata-admin/previews/DatasetPreview.js +89 -0
- package/dist/views/metadata-admin/previews/DatasourcePreview.d.ts +23 -0
- package/dist/views/metadata-admin/previews/DatasourcePreview.js +68 -0
- package/dist/views/metadata-admin/previews/EmailTemplatePreview.d.ts +14 -1
- package/dist/views/metadata-admin/previews/FieldStub.d.ts +30 -0
- package/dist/views/metadata-admin/previews/FieldStub.js +104 -0
- package/dist/views/metadata-admin/previews/FieldsListEditor.d.ts +50 -0
- package/dist/views/metadata-admin/previews/FieldsListEditor.js +97 -0
- package/dist/views/metadata-admin/previews/FlowCanvas.d.ts +43 -0
- package/dist/views/metadata-admin/previews/FlowCanvas.js +328 -0
- package/dist/views/metadata-admin/previews/FlowPreview.d.ts +20 -0
- package/dist/views/metadata-admin/previews/FlowPreview.js +92 -0
- package/dist/views/metadata-admin/previews/FlowRunsPanel.d.ts +46 -0
- package/dist/views/metadata-admin/previews/FlowRunsPanel.js +97 -0
- package/dist/views/metadata-admin/previews/FlowSimulatorPanel.d.ts +25 -0
- package/dist/views/metadata-admin/previews/FlowSimulatorPanel.js +170 -0
- package/dist/views/metadata-admin/previews/JobPreview.d.ts +28 -0
- package/dist/views/metadata-admin/previews/JobPreview.js +290 -0
- package/dist/views/metadata-admin/previews/ObjectFormCanvas.d.ts +30 -0
- package/dist/views/metadata-admin/previews/ObjectFormCanvas.js +547 -0
- package/dist/views/metadata-admin/previews/ObjectPreview.d.ts +14 -1
- package/dist/views/metadata-admin/previews/ObjectPreview.js +5 -30
- package/dist/views/metadata-admin/previews/OutlineStrip.d.ts +32 -0
- package/dist/views/metadata-admin/previews/OutlineStrip.js +8 -0
- package/dist/views/metadata-admin/previews/PageBlockCanvas.d.ts +49 -0
- package/dist/views/metadata-admin/previews/PageBlockCanvas.js +510 -0
- package/dist/views/metadata-admin/previews/PagePreview.d.ts +10 -1
- package/dist/views/metadata-admin/previews/PagePreview.js +90 -4
- package/dist/views/metadata-admin/previews/PermissionPreview.d.ts +27 -0
- package/dist/views/metadata-admin/previews/PermissionPreview.js +115 -0
- package/dist/views/metadata-admin/previews/PreviewShell.d.ts +29 -6
- package/dist/views/metadata-admin/previews/PreviewShell.js +16 -3
- package/dist/views/metadata-admin/previews/ReportPreview.d.ts +18 -1
- package/dist/views/metadata-admin/previews/ReportPreview.js +23 -15
- package/dist/views/metadata-admin/previews/RolePreview.d.ts +19 -0
- package/dist/views/metadata-admin/previews/RolePreview.js +14 -0
- package/dist/views/metadata-admin/previews/SkillPreview.d.ts +22 -0
- package/dist/views/metadata-admin/previews/SkillPreview.js +34 -0
- package/dist/views/metadata-admin/previews/ToolPreview.d.ts +25 -0
- package/dist/views/metadata-admin/previews/ToolPreview.js +122 -0
- package/dist/views/metadata-admin/previews/TranslationPreview.d.ts +25 -0
- package/dist/views/metadata-admin/previews/TranslationPreview.js +52 -0
- package/dist/views/metadata-admin/previews/ValidationPreview.d.ts +27 -0
- package/dist/views/metadata-admin/previews/ValidationPreview.js +110 -0
- package/dist/views/metadata-admin/previews/ViewColumnPanes.d.ts +62 -0
- package/dist/views/metadata-admin/previews/ViewColumnPanes.js +140 -0
- package/dist/views/metadata-admin/previews/ViewPreview.d.ts +23 -1
- package/dist/views/metadata-admin/previews/ViewPreview.js +101 -73
- package/dist/views/metadata-admin/previews/block-config.d.ts +82 -0
- package/dist/views/metadata-admin/previews/block-config.js +324 -0
- package/dist/views/metadata-admin/previews/block-types.d.ts +40 -0
- package/dist/views/metadata-admin/previews/block-types.js +110 -0
- package/dist/views/metadata-admin/previews/field-types.d.ts +53 -0
- package/dist/views/metadata-admin/previews/field-types.js +97 -0
- package/dist/views/metadata-admin/previews/flow-canvas-layout.d.ts +88 -0
- package/dist/views/metadata-admin/previews/flow-canvas-layout.js +190 -0
- package/dist/views/metadata-admin/previews/flow-canvas-parts.d.ts +88 -0
- package/dist/views/metadata-admin/previews/flow-canvas-parts.js +358 -0
- package/dist/views/metadata-admin/previews/form-preview.d.ts +24 -0
- package/dist/views/metadata-admin/previews/form-preview.js +29 -0
- package/dist/views/metadata-admin/previews/index.js +43 -0
- package/dist/views/metadata-admin/previews/object-fields-bridge.d.ts +66 -0
- package/dist/views/metadata-admin/previews/object-fields-bridge.js +171 -0
- package/dist/views/metadata-admin/previews/object-fields-io.d.ts +109 -0
- package/dist/views/metadata-admin/previews/object-fields-io.js +208 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-types.d.ts +91 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-types.js +2 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.d.ts +8 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.js +113 -0
- package/dist/views/metadata-admin/previews/simulator/flow-simulator.d.ts +44 -0
- package/dist/views/metadata-admin/previews/simulator/flow-simulator.js +316 -0
- package/dist/views/metadata-admin/previews/useDatasetCatalog.d.ts +47 -0
- package/dist/views/metadata-admin/previews/useDatasetCatalog.js +133 -0
- package/dist/views/metadata-admin/previews/useFlowNodePalette.d.ts +44 -0
- package/dist/views/metadata-admin/previews/useFlowNodePalette.js +124 -0
- package/dist/views/metadata-admin/previews/useMetaOptions.d.ts +8 -0
- package/dist/views/metadata-admin/previews/useMetaOptions.js +50 -0
- package/dist/views/metadata-admin/previews/useObjectFields.d.ts +23 -0
- package/dist/views/metadata-admin/previews/useObjectFields.js +79 -0
- package/dist/views/metadata-admin/previews/useObjectOptions.d.ts +8 -0
- package/dist/views/metadata-admin/previews/useObjectOptions.js +43 -0
- package/dist/views/metadata-admin/previews/view-column-io.d.ts +42 -0
- package/dist/views/metadata-admin/previews/view-column-io.js +73 -0
- package/dist/views/metadata-admin/previews/widget-types.d.ts +24 -0
- package/dist/views/metadata-admin/previews/widget-types.js +40 -0
- package/dist/views/metadata-admin/registry.d.ts +140 -19
- package/dist/views/metadata-admin/report-schema.d.ts +26 -0
- package/dist/views/metadata-admin/report-schema.js +121 -0
- package/dist/views/metadata-admin/useMetadata.d.ts +100 -2
- package/dist/views/metadata-admin/useMetadata.js +155 -4
- package/dist/views/metadata-admin/view-item-normalize.d.ts +20 -0
- package/dist/views/metadata-admin/view-item-normalize.js +68 -0
- package/dist/views/metadata-admin/view-schema.d.ts +16 -0
- package/dist/views/metadata-admin/view-schema.js +107 -0
- package/dist/views/metadata-admin/view-variant-model.d.ts +23 -0
- package/dist/views/metadata-admin/view-variant-model.js +64 -0
- package/dist/views/metadata-admin/widgets.d.ts +89 -1
- package/dist/views/metadata-admin/widgets.js +491 -17
- package/dist/views/runtime-metadata-persistence.d.ts +78 -0
- package/dist/views/runtime-metadata-persistence.js +89 -0
- package/dist/views/useOpenRecordList.d.ts +18 -0
- package/dist/views/useOpenRecordList.js +36 -0
- package/dist/views/userFilterUrlState.d.ts +15 -0
- package/dist/views/userFilterUrlState.js +53 -0
- package/dist/views/view-config-adapter.d.ts +38 -0
- package/dist/views/view-config-adapter.js +80 -0
- package/package.json +52 -34
- package/dist/views/DesignDrawer.d.ts +0 -28
- package/dist/views/DesignDrawer.js +0 -51
- package/dist/views/metadata-admin/DesignerEditorWrapper.d.ts +0 -68
- package/dist/views/metadata-admin/DesignerEditorWrapper.js +0 -158
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
/** Convenience: a `['config', key]`-rooted field (the common case). */
|
|
3
|
+
function cfg(key, label, kind, extra = {}) {
|
|
4
|
+
return { id: key, path: ['config', key], label, kind, ...extra };
|
|
5
|
+
}
|
|
6
|
+
/** Convenience: a top-level node field at `[block, key]` (spec-structured). */
|
|
7
|
+
function at(block, key, label, kind, extra = {}) {
|
|
8
|
+
return { id: `${block}.${key}`, path: [block, key], label, kind, ...extra };
|
|
9
|
+
}
|
|
10
|
+
/** Reusable HTTP method options. */
|
|
11
|
+
const HTTP_METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'].map((m) => ({ value: m, label: m }));
|
|
12
|
+
/**
|
|
13
|
+
* Config groups keyed by the spec `FlowNodeAction` type. CRUD/script/http
|
|
14
|
+
* fields live under `config`; wait/connector/boundary use the spec's
|
|
15
|
+
* top-level structured blocks.
|
|
16
|
+
*/
|
|
17
|
+
const FLOW_NODE_CONFIG = {
|
|
18
|
+
// Trigger — the start node IS the flow trigger (spec: `'start' // Trigger`).
|
|
19
|
+
// The trigger CATEGORY is flow-level (`flow.type`); the start node's `config`
|
|
20
|
+
// carries the trigger PARAMETERS. Keys match real production metadata:
|
|
21
|
+
// record-change starts use objectName + criteria; scheduled starts use a cron
|
|
22
|
+
// `schedule`. All optional and shown together (no category gating) so every
|
|
23
|
+
// real start node renders without falling back to JSON.
|
|
24
|
+
start: [
|
|
25
|
+
cfg('triggerType', 'Trigger', 'select', {
|
|
26
|
+
help: 'When this flow starts. Record triggers fire on data changes; schedule triggers fire on a cron.',
|
|
27
|
+
options: [
|
|
28
|
+
{ value: 'record-after-create', label: 'Record created' },
|
|
29
|
+
{ value: 'record-after-update', label: 'Record updated' },
|
|
30
|
+
{ value: 'record-before-update', label: 'Record before update' },
|
|
31
|
+
{ value: 'record-after-delete', label: 'Record deleted' },
|
|
32
|
+
{ value: 'record-change', label: 'Record changed (any)' },
|
|
33
|
+
{ value: 'schedule', label: 'Schedule (cron)' },
|
|
34
|
+
{ value: 'manual', label: 'Manual / autolaunched' },
|
|
35
|
+
{ value: 'webhook', label: 'Webhook / API' },
|
|
36
|
+
{ value: 'event', label: 'Platform event' },
|
|
37
|
+
],
|
|
38
|
+
}),
|
|
39
|
+
cfg('objectName', 'Object', 'reference', {
|
|
40
|
+
ref: { kind: 'object' },
|
|
41
|
+
placeholder: 'crm_lead',
|
|
42
|
+
help: 'Target object for record / scheduled-scan triggers.',
|
|
43
|
+
}),
|
|
44
|
+
cfg('condition', 'Entry condition', 'expression', {
|
|
45
|
+
placeholder: 'status == "qualifying" && previous.status != "qualifying"',
|
|
46
|
+
help: 'CEL predicate — the flow runs only when this is true. Leave empty to run on every event.',
|
|
47
|
+
}),
|
|
48
|
+
cfg('cron', 'Cron schedule', 'text', {
|
|
49
|
+
placeholder: '0 7 * * *',
|
|
50
|
+
help: 'Cron expression for scheduled triggers.',
|
|
51
|
+
showWhen: { field: 'triggerType', equals: ['schedule'] },
|
|
52
|
+
}),
|
|
53
|
+
// Legacy keys — rendered only when present so older metadata never falls
|
|
54
|
+
// back to raw JSON. Prefer `condition` / `cron` above for new flows.
|
|
55
|
+
cfg('criteria', 'Entry condition (legacy)', 'expression', {
|
|
56
|
+
placeholder: 'status == "active"',
|
|
57
|
+
help: 'Legacy key — prefer "Entry condition" (condition).',
|
|
58
|
+
showWhen: { field: '__legacy__', equals: [] },
|
|
59
|
+
}),
|
|
60
|
+
cfg('schedule', 'Cron schedule (legacy)', 'text', {
|
|
61
|
+
placeholder: '0 9 * * *',
|
|
62
|
+
help: 'Legacy key — prefer "Cron schedule" (cron).',
|
|
63
|
+
showWhen: { field: '__legacy__', equals: [] },
|
|
64
|
+
}),
|
|
65
|
+
],
|
|
66
|
+
end: [
|
|
67
|
+
cfg('outcome', 'Outcome', 'text', { placeholder: 'success · failure' }),
|
|
68
|
+
cfg('outputVariable', 'Output variable', 'text', { placeholder: 'result' }),
|
|
69
|
+
],
|
|
70
|
+
decision: [
|
|
71
|
+
cfg('conditions', 'Branches', 'objectList', {
|
|
72
|
+
help: 'Each branch has a label and a CEL expression (spec decision shape). A branch whose expression is "true" is the default/else path.',
|
|
73
|
+
columns: [
|
|
74
|
+
{ key: 'label', label: 'Label', kind: 'text', placeholder: 'Has deals' },
|
|
75
|
+
{ key: 'expression', label: 'Expression', kind: 'expression', placeholder: 'expiring_deals.length > 0' },
|
|
76
|
+
],
|
|
77
|
+
}),
|
|
78
|
+
cfg('condition', 'Condition (single)', 'expression', {
|
|
79
|
+
placeholder: 'amount > 10000',
|
|
80
|
+
help: 'Legacy single-branch condition (CEL). Prefer Branches above; per-edge conditions also live on the outgoing edges.',
|
|
81
|
+
showWhen: { field: '__legacy__', equals: [] },
|
|
82
|
+
}),
|
|
83
|
+
],
|
|
84
|
+
assignment: [
|
|
85
|
+
cfg('assignments', 'Assignments', 'keyValue', {
|
|
86
|
+
help: 'Set variables: each key is a variable, each value an expression or literal.',
|
|
87
|
+
}),
|
|
88
|
+
],
|
|
89
|
+
loop: [
|
|
90
|
+
cfg('collection', 'Collection', 'expression', { placeholder: '{leadList}', help: 'Expression resolving to the items to iterate.' }),
|
|
91
|
+
cfg('iteratorVariable', 'Item variable', 'text', { placeholder: 'currentItem' }),
|
|
92
|
+
],
|
|
93
|
+
// Sequential multi-instance (ADR-0037 A2): a per-item subflow, one at a time;
|
|
94
|
+
// each item may durably pause (e.g. a per-item approval).
|
|
95
|
+
map: [
|
|
96
|
+
cfg('collection', 'Collection', 'expression', { placeholder: '{items}', help: 'Expression resolving to the array to process, one item at a time.' }),
|
|
97
|
+
cfg('flowName', 'Per-item flow', 'reference', { ref: { kind: 'flow' }, placeholder: 'one_task_signoff', help: 'Subflow run for each item — it may pause (e.g. an approval).' }),
|
|
98
|
+
cfg('iteratorVariable', 'Item variable', 'text', { placeholder: 'item' }),
|
|
99
|
+
cfg('itemObject', 'Item object', 'reference', { ref: { kind: 'object' }, placeholder: 'showcase_task', help: 'When items are records, the object they belong to (exposes each item as the child’s record).' }),
|
|
100
|
+
cfg('outputVariable', 'Output variable', 'text', { placeholder: 'results', help: 'Each item’s subflow output, collected in order.' }),
|
|
101
|
+
],
|
|
102
|
+
create_record: [
|
|
103
|
+
cfg('objectName', 'Object', 'reference', { ref: { kind: 'object' }, placeholder: 'contract' }),
|
|
104
|
+
cfg('fields', 'Field values', 'keyValue', { help: 'Field values to write on the new record.' }),
|
|
105
|
+
cfg('outputVariable', 'Output variable', 'text', { placeholder: 'newRecord' }),
|
|
106
|
+
],
|
|
107
|
+
update_record: [
|
|
108
|
+
cfg('objectName', 'Object', 'reference', { ref: { kind: 'object' }, placeholder: 'contract' }),
|
|
109
|
+
cfg('filter', 'Filter', 'keyValue', { help: 'Field/value pairs identifying the record(s) to update (e.g. id → {recordId}).' }),
|
|
110
|
+
cfg('fields', 'Field values', 'keyValue', { help: 'Field values to write.' }),
|
|
111
|
+
],
|
|
112
|
+
delete_record: [
|
|
113
|
+
cfg('objectName', 'Object', 'reference', { ref: { kind: 'object' }, placeholder: 'contract' }),
|
|
114
|
+
cfg('filter', 'Filter', 'keyValue', { help: 'Field/value pairs identifying the record(s) to delete.' }),
|
|
115
|
+
],
|
|
116
|
+
get_record: [
|
|
117
|
+
cfg('objectName', 'Object', 'reference', { ref: { kind: 'object' }, placeholder: 'contract' }),
|
|
118
|
+
cfg('filter', 'Filter', 'keyValue', { help: 'Field/value pairs to match (e.g. status → active). Operator values like {"$ne": null} are preserved.' }),
|
|
119
|
+
cfg('limit', 'Limit', 'number', { placeholder: '100' }),
|
|
120
|
+
cfg('outputVariable', 'Output variable', 'text', { placeholder: 'records' }),
|
|
121
|
+
],
|
|
122
|
+
http_request: [
|
|
123
|
+
cfg('method', 'Method', 'select', { options: HTTP_METHODS, defaultValue: 'GET' }),
|
|
124
|
+
cfg('url', 'URL', 'text', { placeholder: 'https://api.example.com/v1/contracts' }),
|
|
125
|
+
cfg('headers', 'Headers', 'keyValue', { help: 'Request headers (e.g. Authorization, Content-Type).' }),
|
|
126
|
+
cfg('body', 'Body', 'textarea', { placeholder: '{ "key": "value" }', help: 'Request payload (JSON or expression).' }),
|
|
127
|
+
cfg('outputVariable', 'Output variable', 'text', { placeholder: 'response' }),
|
|
128
|
+
{ id: 'timeoutMs', path: ['timeoutMs'], label: 'Timeout (ms)', kind: 'number', placeholder: '30000' },
|
|
129
|
+
],
|
|
130
|
+
// Script — overloaded in real metadata. Two observed shapes, discriminated by
|
|
131
|
+
// `actionType`: notification (actionType: email/sms/... → template/recipients/
|
|
132
|
+
// variables) and code (no actionType → script/outputVariables). The form adapts
|
|
133
|
+
// on actionType; unknown values still show the code fields so nothing is lost.
|
|
134
|
+
script: [
|
|
135
|
+
cfg('actionType', 'Action type', 'select', {
|
|
136
|
+
options: [
|
|
137
|
+
{ value: 'code', label: 'Code' },
|
|
138
|
+
{ value: 'email', label: 'Email' },
|
|
139
|
+
{ value: 'sms', label: 'SMS' },
|
|
140
|
+
{ value: 'notification', label: 'Notification' },
|
|
141
|
+
],
|
|
142
|
+
defaultValue: 'code',
|
|
143
|
+
help: 'How this step runs. Leave as Code for a raw script.',
|
|
144
|
+
}),
|
|
145
|
+
cfg('template', 'Template', 'reference', {
|
|
146
|
+
// Polymorphic: an email step picks from the email-template catalog; sms /
|
|
147
|
+
// notification have no flat catalog yet, so they degrade to free text.
|
|
148
|
+
ref: { kindFrom: 'actionType', map: { email: 'email-template' } },
|
|
149
|
+
placeholder: 'case_escalated',
|
|
150
|
+
help: 'Message template id.',
|
|
151
|
+
showWhen: { field: 'actionType', equals: ['email', 'sms', 'notification'] },
|
|
152
|
+
}),
|
|
153
|
+
cfg('recipients', 'Recipients', 'stringList', {
|
|
154
|
+
help: 'One recipient per row (user id, field ref, or address).',
|
|
155
|
+
showWhen: { field: 'actionType', equals: ['email', 'sms', 'notification'] },
|
|
156
|
+
}),
|
|
157
|
+
cfg('variables', 'Template variables', 'keyValue', {
|
|
158
|
+
help: 'Values injected into the template.',
|
|
159
|
+
showWhen: { field: 'actionType', equals: ['email', 'sms', 'notification'] },
|
|
160
|
+
}),
|
|
161
|
+
cfg('script', 'Code', 'textarea', {
|
|
162
|
+
placeholder: 'return { ok: true };',
|
|
163
|
+
help: 'Script body (JS/TS).',
|
|
164
|
+
showWhen: { field: 'actionType', equals: ['code'] },
|
|
165
|
+
}),
|
|
166
|
+
cfg('outputVariables', 'Output variables', 'stringList', {
|
|
167
|
+
help: 'Names of variables this script writes back.',
|
|
168
|
+
showWhen: { field: 'actionType', equals: ['code'] },
|
|
169
|
+
}),
|
|
170
|
+
{ id: 'timeoutMs', path: ['timeoutMs'], label: 'Timeout (ms)', kind: 'number', placeholder: '30000' },
|
|
171
|
+
],
|
|
172
|
+
screen: [
|
|
173
|
+
cfg('fields', 'Fields', 'objectList', {
|
|
174
|
+
help: 'Fields presented on this screen.',
|
|
175
|
+
columns: [
|
|
176
|
+
{ key: 'name', label: 'Name', kind: 'text', placeholder: 'discount' },
|
|
177
|
+
{ key: 'label', label: 'Label', kind: 'text', placeholder: 'Discount %' },
|
|
178
|
+
{ key: 'type', label: 'Type', kind: 'text', placeholder: 'number' },
|
|
179
|
+
{ key: 'required', label: 'Required', kind: 'boolean' },
|
|
180
|
+
{ key: 'visibleWhen', label: 'Visible when', kind: 'expression', placeholder: 'stage == "review"' },
|
|
181
|
+
],
|
|
182
|
+
}),
|
|
183
|
+
],
|
|
184
|
+
// Approval node (ADR-0019). The node opens an approval request on entry,
|
|
185
|
+
// suspends the run, and resumes down its `approve` / `reject` out-edge once a
|
|
186
|
+
// decision is recorded. Config mirrors `@objectstack/spec`
|
|
187
|
+
// ApprovalNodeConfigSchema; entry criteria and on-approve / on-reject actions
|
|
188
|
+
// are NOT here — they live on the graph (the edge into this node, and the
|
|
189
|
+
// nodes wired to its `approve` / `reject` out-edges).
|
|
190
|
+
approval: [
|
|
191
|
+
cfg('approvers', 'Approvers', 'objectList', {
|
|
192
|
+
help: 'Who may act on this step. Wire the node’s out-edges with labels "approve" and "reject".',
|
|
193
|
+
columns: [
|
|
194
|
+
{
|
|
195
|
+
key: 'type',
|
|
196
|
+
label: 'Type',
|
|
197
|
+
kind: 'select',
|
|
198
|
+
options: [
|
|
199
|
+
{ value: 'user', label: 'User' },
|
|
200
|
+
{ value: 'role', label: 'Role' },
|
|
201
|
+
{ value: 'team', label: 'Team' },
|
|
202
|
+
{ value: 'department', label: 'Department' },
|
|
203
|
+
{ value: 'manager', label: 'Manager' },
|
|
204
|
+
{ value: 'field', label: 'Field' },
|
|
205
|
+
{ value: 'queue', label: 'Queue' },
|
|
206
|
+
],
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
// Polymorphic: the picker follows the row's `type`. `manager` takes no
|
|
210
|
+
// value (resolved from the submitter's manager_id) so it stays unmapped
|
|
211
|
+
// → free text; unmapped/empty types likewise fall back to free text.
|
|
212
|
+
key: 'value',
|
|
213
|
+
label: 'Value',
|
|
214
|
+
kind: 'reference',
|
|
215
|
+
placeholder: 'user id / role / field — per type',
|
|
216
|
+
ref: {
|
|
217
|
+
kindFrom: 'type',
|
|
218
|
+
objectSource: '$trigger',
|
|
219
|
+
map: {
|
|
220
|
+
user: 'user',
|
|
221
|
+
role: 'role',
|
|
222
|
+
team: 'team',
|
|
223
|
+
department: 'department',
|
|
224
|
+
field: 'object-field',
|
|
225
|
+
queue: 'queue',
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
],
|
|
230
|
+
}),
|
|
231
|
+
cfg('behavior', 'Behavior', 'select', {
|
|
232
|
+
options: [
|
|
233
|
+
{ value: 'first_response', label: 'First response wins' },
|
|
234
|
+
{ value: 'unanimous', label: 'Unanimous (all approve)' },
|
|
235
|
+
],
|
|
236
|
+
defaultValue: 'first_response',
|
|
237
|
+
help: 'How multiple approvers combine.',
|
|
238
|
+
}),
|
|
239
|
+
cfg('lockRecord', 'Lock record', 'boolean', {
|
|
240
|
+
help: 'Lock the triggering record from edits while this node is pending.',
|
|
241
|
+
}),
|
|
242
|
+
cfg('approvalStatusField', 'Status field', 'reference', {
|
|
243
|
+
ref: { kind: 'object-field', objectSource: '$trigger' },
|
|
244
|
+
placeholder: 'approval_status',
|
|
245
|
+
help: 'Business-object field to mirror request status onto (pending/approved/rejected). Should be readonly.',
|
|
246
|
+
}),
|
|
247
|
+
// Per-node SLA escalation (spec ApprovalEscalationSchema, nested under
|
|
248
|
+
// config.escalation). Sub-fields reveal once escalation is enabled.
|
|
249
|
+
{ id: 'escalation.enabled', path: ['config', 'escalation', 'enabled'], label: 'SLA escalation', kind: 'boolean', defaultValue: 'false', help: 'Escalate when a decision is not recorded within the timeout.' },
|
|
250
|
+
{ id: 'escalation.timeoutHours', path: ['config', 'escalation', 'timeoutHours'], label: 'Timeout (hours)', kind: 'number', placeholder: '24', showWhen: { field: 'escalation.enabled', equals: ['true'] } },
|
|
251
|
+
{
|
|
252
|
+
id: 'escalation.action', path: ['config', 'escalation', 'action'], label: 'On timeout', kind: 'select', defaultValue: 'notify',
|
|
253
|
+
options: [
|
|
254
|
+
{ value: 'notify', label: 'Notify' },
|
|
255
|
+
{ value: 'reassign', label: 'Reassign' },
|
|
256
|
+
{ value: 'auto_approve', label: 'Auto-approve' },
|
|
257
|
+
{ value: 'auto_reject', label: 'Auto-reject' },
|
|
258
|
+
],
|
|
259
|
+
showWhen: { field: 'escalation.enabled', equals: ['true'] },
|
|
260
|
+
},
|
|
261
|
+
{ id: 'escalation.escalateTo', path: ['config', 'escalation', 'escalateTo'], label: 'Escalate to', kind: 'reference', ref: { kind: 'role' }, placeholder: 'user id / role / manager level', showWhen: { field: 'escalation.enabled', equals: ['true'] } },
|
|
262
|
+
{ id: 'escalation.notifySubmitter', path: ['config', 'escalation', 'notifySubmitter'], label: 'Notify submitter', kind: 'boolean', showWhen: { field: 'escalation.enabled', equals: ['true'] } },
|
|
263
|
+
],
|
|
264
|
+
wait: [
|
|
265
|
+
at('waitEventConfig', 'eventType', 'Wait for', 'select', {
|
|
266
|
+
options: [
|
|
267
|
+
{ value: 'timer', label: 'Timer' },
|
|
268
|
+
{ value: 'signal', label: 'Signal' },
|
|
269
|
+
{ value: 'webhook', label: 'Webhook' },
|
|
270
|
+
{ value: 'manual', label: 'Manual' },
|
|
271
|
+
{ value: 'condition', label: 'Condition' },
|
|
272
|
+
],
|
|
273
|
+
defaultValue: 'timer',
|
|
274
|
+
}),
|
|
275
|
+
at('waitEventConfig', 'timerDuration', 'Duration', 'text', {
|
|
276
|
+
placeholder: 'PT1H · P3D',
|
|
277
|
+
help: 'ISO 8601 duration (e.g. PT1H, P3D).',
|
|
278
|
+
showWhen: { field: 'waitEventConfig.eventType', equals: ['timer'] },
|
|
279
|
+
}),
|
|
280
|
+
at('waitEventConfig', 'signalName', 'Signal name', 'text', {
|
|
281
|
+
placeholder: 'contract.renewed',
|
|
282
|
+
showWhen: { field: 'waitEventConfig.eventType', equals: ['signal', 'webhook'] },
|
|
283
|
+
}),
|
|
284
|
+
at('waitEventConfig', 'timeoutMs', 'Timeout (ms)', 'number', { placeholder: '3600000' }),
|
|
285
|
+
at('waitEventConfig', 'onTimeout', 'On timeout', 'select', {
|
|
286
|
+
options: [
|
|
287
|
+
{ value: 'fail', label: 'Fail' },
|
|
288
|
+
{ value: 'continue', label: 'Continue' },
|
|
289
|
+
],
|
|
290
|
+
defaultValue: 'fail',
|
|
291
|
+
}),
|
|
292
|
+
],
|
|
293
|
+
subflow: [
|
|
294
|
+
cfg('flowName', 'Flow', 'reference', { ref: { kind: 'flow' }, placeholder: 'escalation_flow' }),
|
|
295
|
+
cfg('input', 'Input mapping', 'keyValue', { help: 'Values passed to the subflow\u2019s input variables.' }),
|
|
296
|
+
cfg('outputVariable', 'Output variable', 'text', { placeholder: 'subResult' }),
|
|
297
|
+
{ id: 'timeoutMs', path: ['timeoutMs'], label: 'Timeout (ms)', kind: 'number', placeholder: '60000' },
|
|
298
|
+
],
|
|
299
|
+
connector_action: [
|
|
300
|
+
at('connectorConfig', 'connectorId', 'Connector', 'reference', { ref: { kind: 'connector' }, placeholder: 'slack · email · salesforce' }),
|
|
301
|
+
// actionId is polymorphic on the chosen connector and has no flat catalog
|
|
302
|
+
// (a deliberate open extension point) — stays free text.
|
|
303
|
+
at('connectorConfig', 'actionId', 'Action', 'text', { placeholder: 'sendMessage · send' }),
|
|
304
|
+
at('connectorConfig', 'input', 'Input', 'keyValue', { help: 'Mapped inputs for the connector action.' }),
|
|
305
|
+
{ id: 'timeoutMs', path: ['timeoutMs'], label: 'Timeout (ms)', kind: 'number', placeholder: '30000' },
|
|
306
|
+
],
|
|
307
|
+
// ADR-0031 structured constructs. Their bodies are nested regions
|
|
308
|
+
// (config.branches / config.try / config.catch) — sub-graphs the flat field
|
|
309
|
+
// kinds can't model; authors edit them in the JSON source editor. Only the
|
|
310
|
+
// scalar knobs surface here.
|
|
311
|
+
parallel: [],
|
|
312
|
+
try_catch: [
|
|
313
|
+
cfg('errorVariable', 'Error variable', 'text', {
|
|
314
|
+
placeholder: '$error',
|
|
315
|
+
help: 'Variable the caught error is bound to inside the catch region.',
|
|
316
|
+
}),
|
|
317
|
+
],
|
|
318
|
+
// Legacy BPMN interop pair — kept so imported flows still render an
|
|
319
|
+
// inspector, but no longer offered by the palette / type picker (the engine
|
|
320
|
+
// has no executor; ADR-0031 makes them import/export-only).
|
|
321
|
+
parallel_gateway: [],
|
|
322
|
+
join_gateway: [],
|
|
323
|
+
boundary_event: [
|
|
324
|
+
at('boundaryConfig', 'attachedToNodeId', 'Attached to', 'reference', { ref: { kind: 'node' }, placeholder: 'host node id', help: 'Host node this boundary event monitors.' }),
|
|
325
|
+
at('boundaryConfig', 'eventType', 'Event type', 'select', {
|
|
326
|
+
options: [
|
|
327
|
+
{ value: 'error', label: 'Error' },
|
|
328
|
+
{ value: 'timer', label: 'Timer' },
|
|
329
|
+
{ value: 'signal', label: 'Signal' },
|
|
330
|
+
{ value: 'cancel', label: 'Cancel' },
|
|
331
|
+
],
|
|
332
|
+
defaultValue: 'error',
|
|
333
|
+
}),
|
|
334
|
+
at('boundaryConfig', 'interrupting', 'Interrupting', 'boolean', { help: 'Cancel the host activity when this event fires.' }),
|
|
335
|
+
at('boundaryConfig', 'errorCode', 'Error code', 'text', {
|
|
336
|
+
placeholder: 'TIMEOUT (empty = all)',
|
|
337
|
+
showWhen: { field: 'boundaryConfig.eventType', equals: ['error'] },
|
|
338
|
+
}),
|
|
339
|
+
at('boundaryConfig', 'timerDuration', 'Duration', 'text', {
|
|
340
|
+
placeholder: 'PT1H',
|
|
341
|
+
showWhen: { field: 'boundaryConfig.eventType', equals: ['timer'] },
|
|
342
|
+
}),
|
|
343
|
+
at('boundaryConfig', 'signalName', 'Signal name', 'text', {
|
|
344
|
+
placeholder: 'contract.cancelled',
|
|
345
|
+
showWhen: { field: 'boundaryConfig.eventType', equals: ['signal'] },
|
|
346
|
+
}),
|
|
347
|
+
],
|
|
348
|
+
/**
|
|
349
|
+
* Legacy generic "action" group — retained for flows authored before the
|
|
350
|
+
* spec node types were adopted. Never auto-migrated to a spec type (the old
|
|
351
|
+
* `action` could mean create/update/query/email/webhook); authors re-pick a
|
|
352
|
+
* precise type explicitly.
|
|
353
|
+
*/
|
|
354
|
+
legacy_action: [
|
|
355
|
+
cfg('action', 'Action', 'text', { placeholder: 'sendEmail · createTask · update · query' }),
|
|
356
|
+
cfg('objectName', 'Object', 'reference', { ref: { kind: 'object' }, placeholder: 'contract' }),
|
|
357
|
+
cfg('recordId', 'Record', 'expression', { placeholder: 'record.id' }),
|
|
358
|
+
cfg('params', 'Parameters', 'keyValue', { help: 'Action inputs. Values auto-typed: 3 \u2192 number, true \u2192 boolean.' }),
|
|
359
|
+
cfg('fields', 'Field values', 'keyValue'),
|
|
360
|
+
cfg('outputVariable', 'Output variable', 'text', { placeholder: 'result' }),
|
|
361
|
+
],
|
|
362
|
+
};
|
|
363
|
+
/**
|
|
364
|
+
* Maps legacy / alias designer node types onto a spec config group. The spec
|
|
365
|
+
* `FlowNodeAction` types resolve to themselves; older designer types resolve to
|
|
366
|
+
* the closest spec group. Legacy generic `action` resolves to `legacy_action`
|
|
367
|
+
* (kept deliberately distinct — never silently rewritten to a CRUD type).
|
|
368
|
+
*/
|
|
369
|
+
const TYPE_ALIASES = {
|
|
370
|
+
action: 'legacy_action',
|
|
371
|
+
branch: 'decision',
|
|
372
|
+
gateway: 'decision',
|
|
373
|
+
condition: 'decision',
|
|
374
|
+
timer: 'wait',
|
|
375
|
+
delay: 'wait',
|
|
376
|
+
flow: 'subflow',
|
|
377
|
+
invoke: 'subflow',
|
|
378
|
+
task: 'legacy_action',
|
|
379
|
+
user_task: 'screen',
|
|
380
|
+
service_task: 'connector_action',
|
|
381
|
+
script_task: 'script',
|
|
382
|
+
notification: 'connector_action',
|
|
383
|
+
signal: 'boundary_event',
|
|
384
|
+
webhook: 'connector_action',
|
|
385
|
+
for_each: 'loop',
|
|
386
|
+
};
|
|
387
|
+
/** Resolve the config fields for a node type (alias-aware). */
|
|
388
|
+
export function fieldsForNodeType(type) {
|
|
389
|
+
if (!type)
|
|
390
|
+
return [];
|
|
391
|
+
const canonical = TYPE_ALIASES[type] ?? type;
|
|
392
|
+
return FLOW_NODE_CONFIG[canonical] ?? [];
|
|
393
|
+
}
|
|
394
|
+
/** Read the current value at a field's node path. */
|
|
395
|
+
export function getFieldValue(node, field) {
|
|
396
|
+
let cur = node;
|
|
397
|
+
for (const seg of field.path) {
|
|
398
|
+
if (cur && typeof cur === 'object' && !Array.isArray(cur))
|
|
399
|
+
cur = cur[seg];
|
|
400
|
+
else
|
|
401
|
+
return undefined;
|
|
402
|
+
}
|
|
403
|
+
return cur;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* The `config` key this field owns, or `undefined` for fields stored outside
|
|
407
|
+
* `config` (spec-structured blocks, top-level `timeoutMs`). Used by the
|
|
408
|
+
* inspector to compute "extra" config keys for the optional Advanced block —
|
|
409
|
+
* only config-rooted fields suppress an Advanced key.
|
|
410
|
+
*/
|
|
411
|
+
export function configKeyOf(field) {
|
|
412
|
+
// Any config-rooted field claims its first config segment — so nested groups
|
|
413
|
+
// (e.g. `['config','escalation','enabled']`) all claim `escalation`, keeping
|
|
414
|
+
// the whole block out of the Advanced editor.
|
|
415
|
+
return field.path.length >= 2 && field.path[0] === 'config' ? field.path[1] : undefined;
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Whether a field should render. Conditional fields show when their controller
|
|
419
|
+
* (by `id`) resolves — via stored value, else spec `defaultValue` — to one of
|
|
420
|
+
* `equals`, OR when the field already holds a stored value (so existing config
|
|
421
|
+
* is never hidden).
|
|
422
|
+
*/
|
|
423
|
+
export function isFieldVisible(field, node, fields) {
|
|
424
|
+
if (!field.showWhen)
|
|
425
|
+
return true;
|
|
426
|
+
const own = getFieldValue(node, field);
|
|
427
|
+
if (own !== undefined && own !== null && own !== '')
|
|
428
|
+
return true;
|
|
429
|
+
const controller = fields.find((f) => f.id === field.showWhen.field);
|
|
430
|
+
if (!controller)
|
|
431
|
+
return false;
|
|
432
|
+
const raw = getFieldValue(node, controller);
|
|
433
|
+
const resolved = raw === undefined || raw === null || raw === '' ? controller.defaultValue : raw;
|
|
434
|
+
// Boolean controllers (e.g. `escalation.enabled`) compare against 'true'/'false'.
|
|
435
|
+
const value = typeof resolved === 'boolean' ? String(resolved) : resolved;
|
|
436
|
+
return typeof value === 'string' && field.showWhen.equals.includes(value);
|
|
437
|
+
}
|
|
438
|
+
/** Node types offered in the inspector's type picker (spec `FlowNodeAction`). */
|
|
439
|
+
export const FLOW_NODE_TYPE_OPTIONS = [
|
|
440
|
+
'start',
|
|
441
|
+
'create_record',
|
|
442
|
+
'update_record',
|
|
443
|
+
'delete_record',
|
|
444
|
+
'get_record',
|
|
445
|
+
'decision',
|
|
446
|
+
'assignment',
|
|
447
|
+
'loop',
|
|
448
|
+
'http_request',
|
|
449
|
+
'script',
|
|
450
|
+
'screen',
|
|
451
|
+
'approval',
|
|
452
|
+
'wait',
|
|
453
|
+
'subflow',
|
|
454
|
+
'map',
|
|
455
|
+
'connector_action',
|
|
456
|
+
// ADR-0031: structured constructs replace the BPMN gateway/boundary types in
|
|
457
|
+
// the picker — those remain import/export-only (no engine executor).
|
|
458
|
+
'parallel',
|
|
459
|
+
'try_catch',
|
|
460
|
+
'end',
|
|
461
|
+
];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function registerBuiltinInspectors(): void;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
/**
|
|
3
|
+
* Registers built-in metadata inspectors. Mirrors `previews/index.ts`.
|
|
4
|
+
* Imported as a side effect from `metadata-admin/index.ts`.
|
|
5
|
+
*/
|
|
6
|
+
import { registerMetadataInspector } from '../inspector-registry';
|
|
7
|
+
import { registerMetadataDefaultInspector } from '../default-inspector-registry';
|
|
8
|
+
import { DashboardWidgetInspector } from './DashboardWidgetInspector';
|
|
9
|
+
import { DashboardDefaultInspector } from './DashboardDefaultInspector';
|
|
10
|
+
import { FlowInspector } from './FlowInspector';
|
|
11
|
+
import { AppNavInspector } from './AppNavInspector';
|
|
12
|
+
import { ViewInspector, ViewDefaultInspector } from './ViewInspector';
|
|
13
|
+
import { PageBlockInspector } from './PageBlockInspector';
|
|
14
|
+
import { ReportDefaultInspector } from './ReportDefaultInspector';
|
|
15
|
+
import { ObjectFieldInspector } from './ObjectFieldInspector';
|
|
16
|
+
import { ObjectDefaultInspector } from './ObjectDefaultInspector';
|
|
17
|
+
import { DatasetDefaultInspector } from './DatasetDefaultInspector';
|
|
18
|
+
import { ActionDefaultInspector } from './ActionDefaultInspector';
|
|
19
|
+
export function registerBuiltinInspectors() {
|
|
20
|
+
registerMetadataInspector('dashboard', DashboardWidgetInspector);
|
|
21
|
+
registerMetadataDefaultInspector('dashboard', DashboardDefaultInspector);
|
|
22
|
+
// Approval is authored as a flow node (`type: 'approval'`) since ADR-0019 —
|
|
23
|
+
// edited through FlowInspector, not a standalone step inspector. FlowInspector
|
|
24
|
+
// routes node vs. edge selections to the right scoped editor.
|
|
25
|
+
registerMetadataInspector('flow', FlowInspector);
|
|
26
|
+
// ADR-0020: `workflow` retired as a metadata type — no workflow-action
|
|
27
|
+
// inspector. State machines live on the object as a `state_machine`
|
|
28
|
+
// validation rule.
|
|
29
|
+
registerMetadataInspector('app', AppNavInspector);
|
|
30
|
+
registerMetadataInspector('view', ViewInspector);
|
|
31
|
+
registerMetadataDefaultInspector('view', ViewDefaultInspector);
|
|
32
|
+
registerMetadataInspector('page', PageBlockInspector);
|
|
33
|
+
// ADR-0021 single-form: a 9.0 report selects dataset measures/dimensions
|
|
34
|
+
// by NAME (no per-column config document), so there is no scoped column
|
|
35
|
+
// inspector — the default inspector owns the whole editing surface.
|
|
36
|
+
registerMetadataDefaultInspector('report', ReportDefaultInspector);
|
|
37
|
+
registerMetadataInspector('object', ObjectFieldInspector);
|
|
38
|
+
registerMetadataDefaultInspector('object', ObjectDefaultInspector);
|
|
39
|
+
// ADR-0021: structured dataset designer (object/include/dimensions/measures).
|
|
40
|
+
registerMetadataDefaultInspector('dataset', DatasetDefaultInspector);
|
|
41
|
+
// Type-aware Action authoring (Salesforce/ServiceNow-style): branch the form
|
|
42
|
+
// by action type, group inputs/placement/feedback/conditions/AI, fall back to
|
|
43
|
+
// SchemaForm for advanced props.
|
|
44
|
+
registerMetadataDefaultInspector('action', ActionDefaultInspector);
|
|
45
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* json-schema-to-fields — adapt an engine-published config JSON Schema into the
|
|
3
|
+
* inspector's {@link FlowConfigField} model, so the flow designer renders a
|
|
4
|
+
* node's property form **from the server** rather than a hardcoded client form.
|
|
5
|
+
*
|
|
6
|
+
* The automation engine owns each node type's config contract: built-in node
|
|
7
|
+
* packs and plugins publish an `ActionDescriptor` whose `configSchema` is the
|
|
8
|
+
* JSON Schema compiled from the executor's Zod (ADR-0018 §configSchema). The
|
|
9
|
+
* approval plugin (ADR-0019) is the first to publish one. Driving the inspector
|
|
10
|
+
* from that schema keeps the property form in lock-step with what the running
|
|
11
|
+
* backend actually validates — when a plugin evolves its config, the designer
|
|
12
|
+
* updates with no client release.
|
|
13
|
+
*
|
|
14
|
+
* We map onto `FlowConfigField[]` (rather than rendering JSON Schema directly)
|
|
15
|
+
* so the existing, polished field widgets — select, boolean, the `objectList`
|
|
16
|
+
* repeater (e.g. approvers), the optional Advanced-JSON escape hatch — are
|
|
17
|
+
* reused unchanged. Anything the mapping can't express (deeply nested objects,
|
|
18
|
+
* unions) is simply left off the form and remains editable in the Advanced
|
|
19
|
+
* block, so authors are never locked out.
|
|
20
|
+
*
|
|
21
|
+
* Scope mirrors what `z.toJSONSchema` emits for real node configs:
|
|
22
|
+
* • string → text (enum → select)
|
|
23
|
+
* • number / integer → number
|
|
24
|
+
* • boolean → boolean
|
|
25
|
+
* • array of string → stringList
|
|
26
|
+
* • array of object → objectList (columns from item props)
|
|
27
|
+
* • object (one level) → flattened sub-fields under config.<key>.*
|
|
28
|
+
* (a nested `enabled: boolean` makes the
|
|
29
|
+
* group's other fields reveal when enabled)
|
|
30
|
+
*/
|
|
31
|
+
import type { FlowConfigField } from './flow-node-config';
|
|
32
|
+
/** "approvalStatusField" → "Approval Status Field"; "approve" → "Approve". */
|
|
33
|
+
export declare function humanizeKey(key: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Convert a published config JSON Schema (an object schema) into the inspector's
|
|
36
|
+
* `FlowConfigField[]`. Property order is preserved. Returns `null` when the
|
|
37
|
+
* schema is not a usable object schema, so callers fall back to their hardcoded
|
|
38
|
+
* field group.
|
|
39
|
+
*/
|
|
40
|
+
export declare function jsonSchemaToFlowFields(schema: unknown): FlowConfigField[] | null;
|