@object-ui/app-shell 6.2.3 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1229 -0
- package/README.md +292 -0
- package/dist/assistant/assistantBus.d.ts +72 -0
- package/dist/assistant/assistantBus.js +133 -0
- package/dist/chrome/CommandPalette.d.ts +1 -1
- package/dist/chrome/CommandPalette.js +26 -22
- package/dist/chrome/ConditionalAuthWrapper.d.ts +1 -1
- package/dist/chrome/ConsoleToaster.d.ts +1 -1
- package/dist/chrome/ConsoleToaster.js +3 -1
- package/dist/chrome/ErrorBoundary.d.ts +1 -1
- package/dist/chrome/KeyboardShortcutsDialog.d.ts +1 -1
- package/dist/chrome/KeyboardShortcutsDialog.js +16 -5
- package/dist/chrome/LoadingScreen.d.ts +1 -1
- package/dist/chrome/LoadingScreen.js +22 -26
- package/dist/chrome/RouteFader.d.ts +1 -1
- package/dist/chrome/ThemeProvider.d.ts +1 -1
- package/dist/components/ManagedByBadge.d.ts +1 -1
- package/dist/console/AppContent.d.ts +1 -1
- package/dist/console/AppContent.js +184 -39
- package/dist/console/ConsoleShell.d.ts +7 -7
- package/dist/console/ConsoleShell.js +32 -3
- package/dist/console/ai/AiChatPage.d.ts +88 -1
- package/dist/console/ai/AiChatPage.js +747 -66
- package/dist/console/ai/ConversationsSidebar.d.ts +26 -1
- package/dist/console/ai/ConversationsSidebar.js +149 -34
- package/dist/console/ai/LiveCanvas.d.ts +28 -0
- package/dist/console/ai/LiveCanvas.js +80 -0
- package/dist/console/ai/reconcileTurn.d.ts +8 -0
- package/dist/console/ai/reconcileTurn.js +20 -0
- package/dist/console/auth/AuthPageLayout.d.ts +1 -1
- package/dist/console/auth/ForgotPasswordPage.d.ts +1 -1
- package/dist/console/auth/LoginPage.d.ts +1 -1
- package/dist/console/auth/RegisterPage.d.ts +1 -1
- package/dist/console/auth/RegisterPage.js +23 -3
- package/dist/console/cloud-connection/CloudConnectionPanel.d.ts +1 -0
- package/dist/console/cloud-connection/CloudConnectionPanel.js +169 -0
- package/dist/console/home/AppCard.d.ts +1 -1
- package/dist/console/home/AppCard.js +6 -12
- package/dist/console/home/HomeAppsStrip.d.ts +8 -0
- package/dist/console/home/HomeAppsStrip.js +61 -0
- package/dist/console/home/HomeLayout.d.ts +1 -1
- package/dist/console/home/HomeLayout.js +3 -1
- package/dist/console/home/HomePage.d.ts +1 -2
- package/dist/console/home/HomePage.js +149 -21
- package/dist/console/home/HomeRail.d.ts +22 -0
- package/dist/console/home/HomeRail.js +62 -0
- package/dist/console/home/QuickActions.d.ts +1 -1
- package/dist/console/home/QuickActions.js +3 -11
- package/dist/console/home/RecentApps.d.ts +1 -1
- package/dist/console/home/RecentApps.js +2 -2
- package/dist/console/home/StarredApps.d.ts +1 -1
- package/dist/console/home/StarredApps.js +2 -2
- package/dist/console/marketplace/InstalledListWidget.d.ts +1 -0
- package/dist/console/marketplace/InstalledListWidget.js +93 -0
- package/dist/console/marketplace/MarkdownText.d.ts +1 -1
- package/dist/console/marketplace/MarketplaceAccessDenied.d.ts +1 -1
- package/dist/console/marketplace/MarketplaceInstalledPage.d.ts +8 -14
- package/dist/console/marketplace/MarketplaceInstalledPage.js +14 -66
- package/dist/console/marketplace/MarketplacePackagePage.d.ts +1 -1
- package/dist/console/marketplace/MarketplacePackagePage.js +249 -8
- package/dist/console/marketplace/MarketplacePage.d.ts +1 -1
- package/dist/console/marketplace/MarketplacePage.js +60 -3
- package/dist/console/marketplace/PackageIcon.d.ts +1 -1
- package/dist/console/marketplace/PluginDisclosure.d.ts +14 -0
- package/dist/console/marketplace/PluginDisclosure.js +38 -0
- package/dist/console/marketplace/marketplaceApi.d.ts +123 -0
- package/dist/console/marketplace/marketplaceApi.js +254 -1
- package/dist/console/organizations/CreateWorkspaceDialog.d.ts +1 -1
- package/dist/console/organizations/OrganizationsLayout.d.ts +1 -1
- package/dist/console/organizations/OrganizationsPage.d.ts +1 -1
- package/dist/console/organizations/manage/AcceptInvitationPage.d.ts +1 -1
- package/dist/console/organizations/manage/InvitationsPage.d.ts +1 -1
- package/dist/console/organizations/manage/InviteMemberDialog.d.ts +1 -1
- package/dist/console/organizations/manage/MembersPage.d.ts +1 -1
- package/dist/console/organizations/manage/OrganizationLayout.d.ts +1 -1
- package/dist/console/organizations/manage/SettingsPage.d.ts +1 -1
- package/dist/context/CommandPaletteProvider.d.ts +44 -0
- package/dist/context/CommandPaletteProvider.js +71 -0
- package/dist/context/FavoritesProvider.d.ts +1 -1
- package/dist/context/NavigationContext.d.ts +1 -1
- package/dist/context/RecentItemsProvider.d.ts +2 -2
- package/dist/context/UserStateAdapters.d.ts +1 -1
- package/dist/context/index.d.ts +2 -0
- package/dist/context/index.js +1 -0
- package/dist/hooks/index.d.ts +5 -2
- package/dist/hooks/index.js +4 -1
- package/dist/hooks/useActionModal.d.ts +53 -0
- package/dist/hooks/useActionModal.js +111 -0
- package/dist/hooks/useChatConversation.d.ts +137 -4
- package/dist/hooks/useChatConversation.js +316 -25
- package/dist/hooks/useConsoleActionRuntime.d.ts +70 -0
- package/dist/hooks/useConsoleActionRuntime.js +564 -0
- package/dist/hooks/useConversationList.js +61 -3
- package/dist/hooks/useHomeInbox.d.ts +13 -0
- package/dist/hooks/useHomeInbox.js +142 -0
- package/dist/hooks/useNavPins.js +17 -23
- package/dist/hooks/useNavigationSync.d.ts +33 -0
- package/dist/hooks/useNavigationSync.js +98 -12
- package/dist/hooks/useReconcileOnError.d.ts +40 -0
- package/dist/hooks/useReconcileOnError.js +37 -0
- package/dist/hooks/useRecordApprovals.d.ts +18 -19
- package/dist/hooks/useRecordApprovals.js +24 -40
- package/dist/hooks/useResponsiveSidebar.js +14 -5
- package/dist/hooks/useSettleSignal.d.ts +19 -0
- package/dist/hooks/useSettleSignal.js +20 -0
- package/dist/hooks/useTrackRouteAsRecent.js +35 -0
- package/dist/hooks/useUrlOverlay.d.ts +62 -0
- package/dist/hooks/useUrlOverlay.js +88 -0
- package/dist/index.d.ts +18 -8
- package/dist/index.js +17 -5
- package/dist/layout/ActivityFeed.d.ts +1 -1
- package/dist/layout/AppHeader.d.ts +3 -2
- package/dist/layout/AppHeader.js +237 -72
- package/dist/layout/AppSidebar.d.ts +2 -1
- package/dist/layout/AppSidebar.js +26 -46
- package/dist/layout/AppSwitcher.d.ts +2 -1
- package/dist/layout/AppSwitcher.js +9 -5
- package/dist/layout/AuthPageLayout.d.ts +1 -1
- package/dist/layout/ConnectionStatus.d.ts +1 -1
- package/dist/layout/ConnectionStatus.js +9 -6
- package/dist/layout/ConsoleChatbotFab.d.ts +19 -1
- package/dist/layout/ConsoleChatbotFab.js +16 -2
- package/dist/layout/ConsoleFloatingChatbot.d.ts +34 -2
- package/dist/layout/ConsoleFloatingChatbot.js +391 -41
- package/dist/layout/ConsoleLayout.d.ts +1 -1
- package/dist/layout/ConsoleLayout.js +27 -11
- package/dist/layout/ContextSelectors.d.ts +44 -0
- package/dist/layout/ContextSelectors.js +242 -0
- package/dist/layout/InboxPopover.d.ts +6 -1
- package/dist/layout/InboxPopover.js +25 -6
- package/dist/layout/LocaleSwitcher.d.ts +1 -1
- package/dist/layout/LocalizedSidebarTrigger.d.ts +2 -0
- package/dist/layout/LocalizedSidebarTrigger.js +15 -0
- package/dist/layout/MobileViewSwitcherContext.d.ts +1 -1
- package/dist/layout/ModeToggle.d.ts +1 -1
- package/dist/layout/PageHeader.d.ts +1 -1
- package/dist/layout/UnifiedSidebar.d.ts +2 -1
- package/dist/layout/UnifiedSidebar.js +116 -15
- package/dist/layout/agentPicker.d.ts +56 -0
- package/dist/layout/agentPicker.js +40 -0
- package/dist/observability/index.d.ts +1 -0
- package/dist/observability/index.js +1 -0
- package/dist/observability/settleSignal.d.ts +64 -0
- package/dist/observability/settleSignal.js +131 -0
- package/dist/preview/CommitTimeline.d.ts +15 -0
- package/dist/preview/CommitTimeline.js +82 -0
- package/dist/preview/DraftChangesPanel.d.ts +19 -0
- package/dist/preview/DraftChangesPanel.js +114 -0
- package/dist/preview/DraftPreviewBar.d.ts +8 -0
- package/dist/preview/DraftPreviewBar.js +86 -0
- package/dist/preview/PreviewDraftEmptyState.d.ts +16 -0
- package/dist/preview/PreviewDraftEmptyState.js +47 -0
- package/dist/preview/PreviewModeContext.d.ts +57 -0
- package/dist/preview/PreviewModeContext.js +99 -0
- package/dist/preview/UnpublishedAppBar.d.ts +8 -0
- package/dist/preview/UnpublishedAppBar.js +83 -0
- package/dist/preview/commitHistory.d.ts +28 -0
- package/dist/preview/commitHistory.js +48 -0
- package/dist/preview/draftStatus.d.ts +20 -0
- package/dist/preview/draftStatus.js +27 -0
- package/dist/preview/usePublishAllDrafts.d.ts +18 -0
- package/dist/preview/usePublishAllDrafts.js +106 -0
- package/dist/providers/AdapterProvider.d.ts +1 -1
- package/dist/providers/AdapterProvider.js +6 -1
- package/dist/providers/ExpressionProvider.d.ts +1 -1
- package/dist/providers/MetadataProvider.d.ts +17 -2
- package/dist/providers/MetadataProvider.js +192 -12
- package/dist/runtime-config.d.ts +46 -2
- package/dist/runtime-config.js +39 -2
- package/dist/services/builtinComponents.js +68 -59
- package/dist/skeletons/SkeletonDashboard.d.ts +1 -1
- package/dist/skeletons/SkeletonDetail.d.ts +1 -1
- package/dist/skeletons/SkeletonGrid.d.ts +1 -1
- package/dist/utils/appRoute.d.ts +21 -0
- package/dist/utils/appRoute.js +25 -0
- package/dist/utils/deriveRelatedLists.d.ts +54 -0
- package/dist/utils/deriveRelatedLists.js +91 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/managedByEmptyState.d.ts +8 -1
- package/dist/utils/managedByEmptyState.js +13 -7
- package/dist/utils/preferLocal.d.ts +18 -0
- package/dist/utils/preferLocal.js +24 -0
- package/dist/views/ActionConfirmDialog.d.ts +1 -1
- package/dist/views/ActionConfirmDialog.js +3 -1
- package/dist/views/ActionParamDialog.d.ts +6 -1
- package/dist/views/ActionParamDialog.js +9 -3
- package/dist/views/ActionResultDialog.d.ts +13 -0
- package/dist/views/ActionResultDialog.js +134 -0
- package/dist/views/ComponentNavView.d.ts +14 -1
- package/dist/views/CreateViewDialog.d.ts +1 -1
- package/dist/views/DashboardConfigPanel.d.ts +28 -0
- package/dist/views/DashboardConfigPanel.js +81 -0
- package/dist/views/DashboardView.d.ts +4 -3
- package/dist/views/DashboardView.js +38 -239
- package/dist/views/FlowRunner.d.ts +31 -0
- package/dist/views/FlowRunner.js +121 -0
- package/dist/views/InterfaceListPage.d.ts +49 -0
- package/dist/views/InterfaceListPage.js +347 -0
- package/dist/views/MetadataInspector.d.ts +2 -2
- package/dist/views/ObjectView.d.ts +1 -1
- package/dist/views/ObjectView.js +209 -532
- package/dist/views/PageView.d.ts +8 -3
- package/dist/views/PageView.js +45 -32
- package/dist/views/RecordDetailView.d.ts +1 -1
- package/dist/views/RecordDetailView.js +363 -148
- package/dist/views/RecordFormPage.d.ts +1 -1
- package/dist/views/RecordFormPage.js +26 -1
- package/dist/views/ReportConfigPanel.d.ts +37 -0
- package/dist/views/ReportConfigPanel.js +85 -0
- package/dist/views/ReportView.d.ts +1 -1
- package/dist/views/ReportView.js +116 -7
- package/dist/views/RuntimeDraftBar.d.ts +30 -0
- package/dist/views/RuntimeDraftBar.js +112 -0
- package/dist/views/ScreenView.d.ts +70 -0
- package/dist/views/ScreenView.js +73 -0
- package/dist/views/SearchResultsPage.d.ts +1 -1
- package/dist/views/SearchResultsPage.js +8 -18
- package/dist/views/ViewConfigPanel.d.ts +24 -17
- package/dist/views/ViewConfigPanel.js +121 -77
- package/dist/views/index.d.ts +1 -1
- package/dist/views/index.js +1 -1
- package/dist/views/metadata-admin/AuditPanel.d.ts +28 -0
- package/dist/views/metadata-admin/AuditPanel.js +79 -0
- package/dist/views/metadata-admin/DiagnosticsPage.d.ts +20 -0
- package/dist/views/metadata-admin/DiagnosticsPage.js +69 -0
- package/dist/views/metadata-admin/DirectoryPage.d.ts +16 -1
- package/dist/views/metadata-admin/DirectoryPage.js +101 -24
- package/dist/views/metadata-admin/DraftReviewPanel.d.ts +33 -0
- package/dist/views/metadata-admin/DraftReviewPanel.js +77 -0
- package/dist/views/metadata-admin/EmbeddedItemEditor.d.ts +17 -1
- package/dist/views/metadata-admin/EmbeddedItemEditor.js +15 -8
- package/dist/views/metadata-admin/JsonSourceEditor.d.ts +39 -0
- package/dist/views/metadata-admin/JsonSourceEditor.js +196 -0
- package/dist/views/metadata-admin/LayeredDiff.d.ts +39 -1
- package/dist/views/metadata-admin/LayeredDiff.js +171 -5
- package/dist/views/metadata-admin/MetadataDetailDrawer.d.ts +15 -1
- package/dist/views/metadata-admin/MetadataTypeActions.d.ts +48 -0
- package/dist/views/metadata-admin/MetadataTypeActions.js +165 -0
- package/dist/views/metadata-admin/PackagesPage.d.ts +18 -0
- package/dist/views/metadata-admin/PackagesPage.js +403 -0
- package/dist/views/metadata-admin/PageShell.d.ts +1 -1
- package/dist/views/metadata-admin/PageShell.js +9 -4
- package/dist/views/metadata-admin/PermissionMatrixEditor.d.ts +35 -1
- package/dist/views/metadata-admin/QuickFind.d.ts +21 -1
- package/dist/views/metadata-admin/QuickFind.js +6 -3
- package/dist/views/metadata-admin/RelatedPanel.d.ts +24 -1
- package/dist/views/metadata-admin/RelatedPanel.js +20 -18
- package/dist/views/metadata-admin/ResourceEditPage.d.ts +40 -1
- package/dist/views/metadata-admin/ResourceEditPage.js +1250 -60
- package/dist/views/metadata-admin/ResourceHistoryPage.d.ts +39 -1
- package/dist/views/metadata-admin/ResourceHistoryPage.js +66 -16
- package/dist/views/metadata-admin/ResourceListPage.d.ts +13 -1
- package/dist/views/metadata-admin/ResourceListPage.js +258 -30
- package/dist/views/metadata-admin/ResourceRouter.d.ts +23 -1
- package/dist/views/metadata-admin/SchemaForm.d.ts +34 -1
- package/dist/views/metadata-admin/SchemaForm.js +559 -49
- package/dist/views/metadata-admin/StudioHomePage.d.ts +22 -0
- package/dist/views/metadata-admin/StudioHomePage.js +205 -0
- package/dist/views/metadata-admin/anchors.js +255 -24
- package/dist/views/metadata-admin/clientValidation.d.ts +50 -0
- package/dist/views/metadata-admin/clientValidation.js +169 -0
- package/dist/views/metadata-admin/color-variant-field.d.ts +30 -0
- package/dist/views/metadata-admin/color-variant-field.js +38 -0
- package/dist/views/metadata-admin/createDerive.d.ts +75 -0
- package/dist/views/metadata-admin/createDerive.js +179 -0
- package/dist/views/metadata-admin/dashboard-schema.d.ts +12 -0
- package/dist/views/metadata-admin/dashboard-schema.js +80 -0
- package/dist/views/metadata-admin/datasource/DatasourceResourcePage.d.ts +35 -0
- package/dist/views/metadata-admin/datasource/DatasourceResourcePage.js +327 -0
- package/dist/views/metadata-admin/datasource/register.d.ts +1 -0
- package/dist/views/metadata-admin/datasource/register.js +24 -0
- package/dist/views/metadata-admin/default-inspector-registry.d.ts +49 -0
- package/dist/views/metadata-admin/default-inspector-registry.js +8 -0
- package/dist/views/metadata-admin/default-schemas.js +115 -10
- package/dist/views/metadata-admin/external/ExternalDatasourcePanel.d.ts +27 -0
- package/dist/views/metadata-admin/external/ExternalDatasourcePanel.js +69 -0
- package/dist/views/metadata-admin/external/ImportObjectDialog.d.ts +27 -0
- package/dist/views/metadata-admin/external/ImportObjectDialog.js +77 -0
- package/dist/views/metadata-admin/external/SchemaBrowser.d.ts +16 -0
- package/dist/views/metadata-admin/external/SchemaBrowser.js +74 -0
- package/dist/views/metadata-admin/external/ValidationPanel.d.ts +16 -0
- package/dist/views/metadata-admin/external/ValidationPanel.js +68 -0
- package/dist/views/metadata-admin/external/api.d.ts +100 -0
- package/dist/views/metadata-admin/external/api.js +124 -0
- package/dist/views/metadata-admin/i18n.d.ts +1 -0
- package/dist/views/metadata-admin/i18n.js +1252 -2
- package/dist/views/metadata-admin/index.d.ts +8 -5
- package/dist/views/metadata-admin/index.js +12 -2
- package/dist/views/metadata-admin/inspector-registry.d.ts +51 -0
- package/dist/views/metadata-admin/inspector-registry.js +11 -0
- package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.d.ts +30 -0
- package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.js +180 -0
- package/dist/views/metadata-admin/inspectors/AppNavInspector.d.ts +16 -0
- package/dist/views/metadata-admin/inspectors/AppNavInspector.js +110 -0
- package/dist/views/metadata-admin/inspectors/ConditionBuilder.d.ts +29 -0
- package/dist/views/metadata-admin/inspectors/ConditionBuilder.js +154 -0
- package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.d.ts +28 -0
- package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.js +110 -0
- package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.d.ts +18 -0
- package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.js +139 -0
- package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.d.ts +21 -0
- package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.js +221 -0
- package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.d.ts +16 -0
- package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.js +126 -0
- package/dist/views/metadata-admin/inspectors/FlowInspector.d.ts +12 -0
- package/dist/views/metadata-admin/inspectors/FlowInspector.js +9 -0
- package/dist/views/metadata-admin/inspectors/FlowKeyValueField.d.ts +30 -0
- package/dist/views/metadata-admin/inspectors/FlowKeyValueField.js +125 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.d.ts +18 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.js +40 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeInspector.d.ts +14 -0
- package/dist/views/metadata-admin/inspectors/FlowNodeInspector.js +205 -0
- package/dist/views/metadata-admin/inspectors/FlowObjectListField.d.ts +26 -0
- package/dist/views/metadata-admin/inspectors/FlowObjectListField.js +105 -0
- package/dist/views/metadata-admin/inspectors/FlowReferenceField.d.ts +83 -0
- package/dist/views/metadata-admin/inspectors/FlowReferenceField.js +181 -0
- package/dist/views/metadata-admin/inspectors/FlowStringListField.d.ts +21 -0
- package/dist/views/metadata-admin/inspectors/FlowStringListField.js +60 -0
- package/dist/views/metadata-admin/inspectors/InspectorComboField.d.ts +40 -0
- package/dist/views/metadata-admin/inspectors/InspectorComboField.js +61 -0
- package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.d.ts +21 -0
- package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.js +55 -0
- package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.d.ts +23 -0
- package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.js +365 -0
- package/dist/views/metadata-admin/inspectors/PageBlockInspector.d.ts +48 -0
- package/dist/views/metadata-admin/inspectors/PageBlockInspector.js +332 -0
- package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.d.ts +58 -0
- package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.js +218 -0
- package/dist/views/metadata-admin/inspectors/ViewColumnInspector.d.ts +19 -0
- package/dist/views/metadata-admin/inspectors/ViewColumnInspector.js +144 -0
- package/dist/views/metadata-admin/inspectors/ViewInspector.d.ts +19 -0
- package/dist/views/metadata-admin/inspectors/ViewInspector.js +21 -0
- package/dist/views/metadata-admin/inspectors/ViewVariantInspector.d.ts +54 -0
- package/dist/views/metadata-admin/inspectors/ViewVariantInspector.js +191 -0
- package/dist/views/metadata-admin/inspectors/_shared.d.ts +128 -0
- package/dist/views/metadata-admin/inspectors/_shared.js +113 -0
- package/dist/views/metadata-admin/inspectors/datasetFilterCondition.d.ts +24 -0
- package/dist/views/metadata-admin/inspectors/datasetFilterCondition.js +97 -0
- package/dist/views/metadata-admin/inspectors/expression-validate.d.ts +26 -0
- package/dist/views/metadata-admin/inspectors/expression-validate.js +66 -0
- package/dist/views/metadata-admin/inspectors/flow-node-config.d.ts +143 -0
- package/dist/views/metadata-admin/inspectors/flow-node-config.js +506 -0
- package/dist/views/metadata-admin/inspectors/index.d.ts +1 -0
- package/dist/views/metadata-admin/inspectors/index.js +45 -0
- package/dist/views/metadata-admin/inspectors/json-schema-to-fields.d.ts +40 -0
- package/dist/views/metadata-admin/inspectors/json-schema-to-fields.js +227 -0
- package/dist/views/metadata-admin/inspectors/useDatasetFields.d.ts +72 -0
- package/dist/views/metadata-admin/inspectors/useDatasetFields.js +0 -0
- package/dist/views/metadata-admin/issuePath.d.ts +22 -0
- package/dist/views/metadata-admin/issuePath.js +65 -0
- package/dist/views/metadata-admin/mergeServerFields.d.ts +65 -0
- package/dist/views/metadata-admin/mergeServerFields.js +56 -0
- package/dist/views/metadata-admin/package-scope.d.ts +26 -0
- package/dist/views/metadata-admin/package-scope.js +43 -0
- package/dist/views/metadata-admin/preview-registry.d.ts +55 -0
- package/dist/views/metadata-admin/previews/ActionPreview.d.ts +25 -0
- package/dist/views/metadata-admin/previews/ActionPreview.js +238 -0
- package/dist/views/metadata-admin/previews/AddWidgetPicker.d.ts +12 -0
- package/dist/views/metadata-admin/previews/AddWidgetPicker.js +56 -0
- package/dist/views/metadata-admin/previews/AgentPreview.d.ts +24 -0
- package/dist/views/metadata-admin/previews/AgentPreview.js +100 -0
- package/dist/views/metadata-admin/previews/AppNavCanvas.d.ts +31 -0
- package/dist/views/metadata-admin/previews/AppNavCanvas.js +260 -0
- package/dist/views/metadata-admin/previews/AppPreview.d.ts +16 -1
- package/dist/views/metadata-admin/previews/AppPreview.js +23 -14
- package/dist/views/metadata-admin/previews/BookPreview.d.ts +20 -0
- package/dist/views/metadata-admin/previews/BookPreview.js +132 -0
- package/dist/views/metadata-admin/previews/DashboardPreview.d.ts +16 -1
- package/dist/views/metadata-admin/previews/DashboardPreview.js +110 -8
- package/dist/views/metadata-admin/previews/DatasetPreview.d.ts +18 -0
- package/dist/views/metadata-admin/previews/DatasetPreview.js +105 -0
- package/dist/views/metadata-admin/previews/DatasourcePreview.d.ts +23 -0
- package/dist/views/metadata-admin/previews/DatasourcePreview.js +68 -0
- package/dist/views/metadata-admin/previews/EmailTemplatePreview.d.ts +14 -1
- package/dist/views/metadata-admin/previews/FieldStub.d.ts +30 -0
- package/dist/views/metadata-admin/previews/FieldStub.js +104 -0
- package/dist/views/metadata-admin/previews/FieldsListEditor.d.ts +50 -0
- package/dist/views/metadata-admin/previews/FieldsListEditor.js +97 -0
- package/dist/views/metadata-admin/previews/FlowCanvas.d.ts +49 -0
- package/dist/views/metadata-admin/previews/FlowCanvas.js +416 -0
- package/dist/views/metadata-admin/previews/FlowPreview.d.ts +20 -0
- package/dist/views/metadata-admin/previews/FlowPreview.js +120 -0
- package/dist/views/metadata-admin/previews/FlowRunsPanel.d.ts +46 -0
- package/dist/views/metadata-admin/previews/FlowRunsPanel.js +97 -0
- package/dist/views/metadata-admin/previews/FlowSimulatorPanel.d.ts +25 -0
- package/dist/views/metadata-admin/previews/FlowSimulatorPanel.js +204 -0
- package/dist/views/metadata-admin/previews/JobPreview.d.ts +28 -0
- package/dist/views/metadata-admin/previews/JobPreview.js +290 -0
- package/dist/views/metadata-admin/previews/ObjectFormCanvas.d.ts +30 -0
- package/dist/views/metadata-admin/previews/ObjectFormCanvas.js +547 -0
- package/dist/views/metadata-admin/previews/ObjectPreview.d.ts +14 -1
- package/dist/views/metadata-admin/previews/ObjectPreview.js +5 -30
- package/dist/views/metadata-admin/previews/OutlineStrip.d.ts +32 -0
- package/dist/views/metadata-admin/previews/OutlineStrip.js +8 -0
- package/dist/views/metadata-admin/previews/PageBlockCanvas.d.ts +49 -0
- package/dist/views/metadata-admin/previews/PageBlockCanvas.js +510 -0
- package/dist/views/metadata-admin/previews/PagePreview.d.ts +10 -1
- package/dist/views/metadata-admin/previews/PagePreview.js +200 -5
- package/dist/views/metadata-admin/previews/PermissionPreview.d.ts +27 -0
- package/dist/views/metadata-admin/previews/PermissionPreview.js +115 -0
- package/dist/views/metadata-admin/previews/PreviewShell.d.ts +29 -6
- package/dist/views/metadata-admin/previews/PreviewShell.js +16 -3
- package/dist/views/metadata-admin/previews/ReportPreview.d.ts +18 -1
- package/dist/views/metadata-admin/previews/ReportPreview.js +23 -15
- package/dist/views/metadata-admin/previews/RolePreview.d.ts +19 -0
- package/dist/views/metadata-admin/previews/RolePreview.js +14 -0
- package/dist/views/metadata-admin/previews/ScreenPreview.d.ts +38 -0
- package/dist/views/metadata-admin/previews/ScreenPreview.js +61 -0
- package/dist/views/metadata-admin/previews/SkillPreview.d.ts +22 -0
- package/dist/views/metadata-admin/previews/SkillPreview.js +34 -0
- package/dist/views/metadata-admin/previews/ToolPreview.d.ts +25 -0
- package/dist/views/metadata-admin/previews/ToolPreview.js +122 -0
- package/dist/views/metadata-admin/previews/TranslationPreview.d.ts +25 -0
- package/dist/views/metadata-admin/previews/TranslationPreview.js +52 -0
- package/dist/views/metadata-admin/previews/ValidationPreview.d.ts +27 -0
- package/dist/views/metadata-admin/previews/ValidationPreview.js +110 -0
- package/dist/views/metadata-admin/previews/ViewColumnPanes.d.ts +62 -0
- package/dist/views/metadata-admin/previews/ViewColumnPanes.js +140 -0
- package/dist/views/metadata-admin/previews/ViewPreview.d.ts +23 -1
- package/dist/views/metadata-admin/previews/ViewPreview.js +101 -73
- package/dist/views/metadata-admin/previews/block-config.d.ts +82 -0
- package/dist/views/metadata-admin/previews/block-config.js +324 -0
- package/dist/views/metadata-admin/previews/block-types.d.ts +40 -0
- package/dist/views/metadata-admin/previews/block-types.js +110 -0
- package/dist/views/metadata-admin/previews/field-types.d.ts +53 -0
- package/dist/views/metadata-admin/previews/field-types.js +97 -0
- package/dist/views/metadata-admin/previews/flow-canvas-layout.d.ts +102 -0
- package/dist/views/metadata-admin/previews/flow-canvas-layout.js +227 -0
- package/dist/views/metadata-admin/previews/flow-canvas-parts.d.ts +96 -0
- package/dist/views/metadata-admin/previews/flow-canvas-parts.js +373 -0
- package/dist/views/metadata-admin/previews/form-preview.d.ts +24 -0
- package/dist/views/metadata-admin/previews/form-preview.js +29 -0
- package/dist/views/metadata-admin/previews/index.js +43 -0
- package/dist/views/metadata-admin/previews/object-fields-bridge.d.ts +66 -0
- package/dist/views/metadata-admin/previews/object-fields-bridge.js +171 -0
- package/dist/views/metadata-admin/previews/object-fields-io.d.ts +130 -0
- package/dist/views/metadata-admin/previews/object-fields-io.js +243 -0
- package/dist/views/metadata-admin/previews/screen-spec.d.ts +43 -0
- package/dist/views/metadata-admin/previews/screen-spec.js +108 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-types.d.ts +102 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-types.js +2 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.d.ts +15 -0
- package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.js +185 -0
- package/dist/views/metadata-admin/previews/simulator/flow-simulator.d.ts +73 -0
- package/dist/views/metadata-admin/previews/simulator/flow-simulator.js +426 -0
- package/dist/views/metadata-admin/previews/useDatasetCatalog.d.ts +47 -0
- package/dist/views/metadata-admin/previews/useDatasetCatalog.js +133 -0
- package/dist/views/metadata-admin/previews/useFlowNodePalette.d.ts +44 -0
- package/dist/views/metadata-admin/previews/useFlowNodePalette.js +124 -0
- package/dist/views/metadata-admin/previews/useMetaOptions.d.ts +8 -0
- package/dist/views/metadata-admin/previews/useMetaOptions.js +50 -0
- package/dist/views/metadata-admin/previews/useObjectFields.d.ts +23 -0
- package/dist/views/metadata-admin/previews/useObjectFields.js +79 -0
- package/dist/views/metadata-admin/previews/useObjectOptions.d.ts +8 -0
- package/dist/views/metadata-admin/previews/useObjectOptions.js +43 -0
- package/dist/views/metadata-admin/previews/view-column-io.d.ts +42 -0
- package/dist/views/metadata-admin/previews/view-column-io.js +73 -0
- package/dist/views/metadata-admin/previews/widget-types.d.ts +24 -0
- package/dist/views/metadata-admin/previews/widget-types.js +40 -0
- package/dist/views/metadata-admin/registry.d.ts +140 -19
- package/dist/views/metadata-admin/report-schema.d.ts +26 -0
- package/dist/views/metadata-admin/report-schema.js +121 -0
- package/dist/views/metadata-admin/useMetadata.d.ts +100 -2
- package/dist/views/metadata-admin/useMetadata.js +155 -4
- package/dist/views/metadata-admin/view-item-normalize.d.ts +20 -0
- package/dist/views/metadata-admin/view-item-normalize.js +68 -0
- package/dist/views/metadata-admin/view-schema.d.ts +16 -0
- package/dist/views/metadata-admin/view-schema.js +107 -0
- package/dist/views/metadata-admin/view-variant-model.d.ts +23 -0
- package/dist/views/metadata-admin/view-variant-model.js +64 -0
- package/dist/views/metadata-admin/widgets.d.ts +89 -1
- package/dist/views/metadata-admin/widgets.js +491 -17
- package/dist/views/runtime-metadata-persistence.d.ts +78 -0
- package/dist/views/runtime-metadata-persistence.js +89 -0
- package/dist/views/useOpenRecordList.d.ts +18 -0
- package/dist/views/useOpenRecordList.js +36 -0
- package/dist/views/userFilterUrlState.d.ts +15 -0
- package/dist/views/userFilterUrlState.js +53 -0
- package/dist/views/view-config-adapter.d.ts +38 -0
- package/dist/views/view-config-adapter.js +80 -0
- package/package.json +52 -34
- package/dist/views/DesignDrawer.d.ts +0 -28
- package/dist/views/DesignDrawer.js +0 -51
- package/dist/views/metadata-admin/DesignerEditorWrapper.d.ts +0 -68
- package/dist/views/metadata-admin/DesignerEditorWrapper.js +0 -158
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
3
|
+
/**
|
|
4
|
+
* FlowReferenceField — an *editable combobox* for flow-node config values that
|
|
5
|
+
* are really references (an object's field, an object/flow/role/user/… by name,
|
|
6
|
+
* a connector, an email template, or another node in this flow) rather than
|
|
7
|
+
* free-form strings.
|
|
8
|
+
*
|
|
9
|
+
* Why a combobox and not a strict dropdown: the designer must never trap the
|
|
10
|
+
* author. The control suggests known values (fetched per {@link ReferenceKind})
|
|
11
|
+
* but always accepts free text, so a field that doesn't exist yet, a role the
|
|
12
|
+
* current tenant hasn't populated, or an empty catalog all still let the author
|
|
13
|
+
* type a value. Implemented with a native `<datalist>` for exactly that
|
|
14
|
+
* suggest-but-allow-anything behaviour, zero extra dependencies, and built-in
|
|
15
|
+
* accessibility.
|
|
16
|
+
*
|
|
17
|
+
* Two layers:
|
|
18
|
+
* • {@link ReferenceCombobox} — the bare control, given an already-resolved
|
|
19
|
+
* concrete kind. Reused by the `objectList` repeater for per-row reference
|
|
20
|
+
* cells (e.g. an approver's value).
|
|
21
|
+
* • {@link FlowReferenceField} — the inspector field wrapper (label + hint),
|
|
22
|
+
* resolving a *polymorphic* reference against the node's own sibling config.
|
|
23
|
+
*
|
|
24
|
+
* Data sources are resolved lazily from the running backend (the same source of
|
|
25
|
+
* truth as the rest of the designer); `object-field` additionally needs to know
|
|
26
|
+
* *which* object — resolved from the reference's `objectSource` against the
|
|
27
|
+
* flow draft (trigger object) or the node's sibling config.
|
|
28
|
+
*/
|
|
29
|
+
import * as React from 'react';
|
|
30
|
+
import { Input, Label } from '@object-ui/components';
|
|
31
|
+
import { useMetadataClient } from '../useMetadata';
|
|
32
|
+
import { useObjectFields } from '../previews/useObjectFields';
|
|
33
|
+
/**
|
|
34
|
+
* Reference kinds backed by a flat metadata list (`client.list(type)`), mapped
|
|
35
|
+
* to their metadata-type name. `object-field` and `node` are resolved
|
|
36
|
+
* specially (not via a list) and are intentionally absent.
|
|
37
|
+
*/
|
|
38
|
+
const KIND_TO_META_TYPE = {
|
|
39
|
+
object: 'object',
|
|
40
|
+
flow: 'flow',
|
|
41
|
+
role: 'role',
|
|
42
|
+
user: 'user',
|
|
43
|
+
team: 'team',
|
|
44
|
+
queue: 'queue',
|
|
45
|
+
department: 'department',
|
|
46
|
+
connector: 'connector',
|
|
47
|
+
'email-template': 'email_template',
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Resolve a (possibly polymorphic) reference spec to a concrete kind. For a
|
|
51
|
+
* polymorphic spec, `sibling(key)` supplies the discriminator value (the row's
|
|
52
|
+
* `type`, or a sibling config key). Returns undefined when nothing resolves —
|
|
53
|
+
* the caller then renders plain free text.
|
|
54
|
+
*/
|
|
55
|
+
export function resolveRefKind(ref, sibling) {
|
|
56
|
+
if (!ref)
|
|
57
|
+
return undefined;
|
|
58
|
+
if (ref.kind)
|
|
59
|
+
return { kind: ref.kind, objectSource: ref.objectSource };
|
|
60
|
+
if (ref.kindFrom && ref.map) {
|
|
61
|
+
const disc = sibling(ref.kindFrom);
|
|
62
|
+
const k = typeof disc === 'string' ? ref.map[disc] : undefined;
|
|
63
|
+
if (k)
|
|
64
|
+
return { kind: k, objectSource: ref.objectSource };
|
|
65
|
+
}
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
/** Read `node.config[key]` as a non-empty string, else undefined. */
|
|
69
|
+
function configString(node, key) {
|
|
70
|
+
const cfg = node?.config;
|
|
71
|
+
if (!cfg || typeof cfg !== 'object' || Array.isArray(cfg))
|
|
72
|
+
return undefined;
|
|
73
|
+
const v = cfg[key];
|
|
74
|
+
return typeof v === 'string' && v ? v : undefined;
|
|
75
|
+
}
|
|
76
|
+
/** Resolve the target object name for an `object-field` reference. */
|
|
77
|
+
function resolveObjectName(kind, objectSource, ctx) {
|
|
78
|
+
if (kind !== 'object-field')
|
|
79
|
+
return undefined;
|
|
80
|
+
const src = objectSource || '$trigger';
|
|
81
|
+
if (src === '$trigger') {
|
|
82
|
+
const nodes = Array.isArray(ctx.draft.nodes) ? ctx.draft.nodes : [];
|
|
83
|
+
const start = nodes.find((n) => n?.type === 'start');
|
|
84
|
+
return configString(start, 'objectName');
|
|
85
|
+
}
|
|
86
|
+
// A sibling config key on the same node (CRUD nodes carry their own objectName).
|
|
87
|
+
return configString(ctx.node, src);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Fetch a metadata type's items as combobox options. `type === undefined`
|
|
91
|
+
* disables the fetch (returns empty), so the hook can be called
|
|
92
|
+
* unconditionally regardless of the reference kind.
|
|
93
|
+
*/
|
|
94
|
+
function useMetadataListOptions(type) {
|
|
95
|
+
const client = useMetadataClient();
|
|
96
|
+
const [state, setState] = React.useState({
|
|
97
|
+
options: [],
|
|
98
|
+
loading: !!type,
|
|
99
|
+
});
|
|
100
|
+
React.useEffect(() => {
|
|
101
|
+
if (!type) {
|
|
102
|
+
setState({ options: [], loading: false });
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
let cancelled = false;
|
|
106
|
+
setState((s) => ({ ...s, loading: true }));
|
|
107
|
+
client
|
|
108
|
+
.list(type)
|
|
109
|
+
.then((rows) => {
|
|
110
|
+
if (cancelled)
|
|
111
|
+
return;
|
|
112
|
+
const options = (Array.isArray(rows) ? rows : [])
|
|
113
|
+
.filter((r) => r && typeof r.name === 'string' && r.name)
|
|
114
|
+
.map((r) => ({
|
|
115
|
+
value: String(r.name),
|
|
116
|
+
label: typeof r.label === 'string' && r.label && r.label !== r.name ? `${r.label} (${r.name})` : String(r.name),
|
|
117
|
+
}));
|
|
118
|
+
setState({ options, loading: false });
|
|
119
|
+
})
|
|
120
|
+
.catch(() => {
|
|
121
|
+
if (!cancelled)
|
|
122
|
+
setState({ options: [], loading: false });
|
|
123
|
+
});
|
|
124
|
+
return () => {
|
|
125
|
+
cancelled = true;
|
|
126
|
+
};
|
|
127
|
+
}, [client, type]);
|
|
128
|
+
return state;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* The bare reference combobox — suggestions for `resolved.kind`, always
|
|
132
|
+
* free-text editable. Hooks are called unconditionally (kind-gated args) so the
|
|
133
|
+
* component is safe to use in a repeater where the kind changes per row.
|
|
134
|
+
*/
|
|
135
|
+
export function ReferenceCombobox({ resolved, value, onCommit, onBlur, disabled, placeholder, context, showHint = true }) {
|
|
136
|
+
const listId = React.useId();
|
|
137
|
+
const ctx = context ?? { draft: {}, node: null };
|
|
138
|
+
const kind = resolved?.kind;
|
|
139
|
+
// object-field: resolve the target object, then its field catalog.
|
|
140
|
+
const objectName = resolved ? resolveObjectName(resolved.kind, resolved.objectSource, ctx) : undefined;
|
|
141
|
+
const { fields: objectFields } = useObjectFields(kind === 'object-field' ? objectName : undefined);
|
|
142
|
+
// Flat metadata-list kinds (object / flow / role / user / team / …).
|
|
143
|
+
const listType = kind && kind !== 'object-field' && kind !== 'node' ? KIND_TO_META_TYPE[kind] : undefined;
|
|
144
|
+
const { options: listOptions } = useMetadataListOptions(listType);
|
|
145
|
+
const options = React.useMemo(() => {
|
|
146
|
+
if (kind === 'object-field') {
|
|
147
|
+
return objectFields.map((f) => ({
|
|
148
|
+
value: f.name,
|
|
149
|
+
label: f.label && f.label !== f.name ? `${f.label} (${f.name})` : f.name,
|
|
150
|
+
}));
|
|
151
|
+
}
|
|
152
|
+
if (kind === 'node') {
|
|
153
|
+
const nodes = Array.isArray(ctx.draft.nodes) ? ctx.draft.nodes : [];
|
|
154
|
+
const currentId = typeof ctx.node?.id === 'string' ? ctx.node.id : undefined;
|
|
155
|
+
return nodes
|
|
156
|
+
.filter((n) => typeof n?.id === 'string' && n.id && n.id !== currentId)
|
|
157
|
+
.map((n) => {
|
|
158
|
+
const id = String(n.id);
|
|
159
|
+
const lbl = typeof n.label === 'string' && n.label ? `${n.label} (${id})` : id;
|
|
160
|
+
return { value: id, label: lbl };
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
if (listType)
|
|
164
|
+
return listOptions;
|
|
165
|
+
return [];
|
|
166
|
+
}, [kind, listType, objectFields, listOptions, ctx.draft, ctx.node]);
|
|
167
|
+
// For an object-field whose object can't be resolved, tell the author why the
|
|
168
|
+
// suggestions are empty — but still let them type a value.
|
|
169
|
+
const unresolvedObject = kind === 'object-field' && !objectName;
|
|
170
|
+
return (_jsxs("div", { className: "w-full space-y-1", children: [_jsx(Input, { list: options.length ? listId : undefined, value: value != null ? String(value) : '', onChange: (e) => onCommit(e.target.value), onBlur: onBlur, placeholder: placeholder, disabled: disabled, className: "h-8 text-sm" }), options.length > 0 && (_jsx("datalist", { id: listId, children: options.map((o) => (_jsx("option", { value: o.value, children: o.label }, o.value))) })), showHint && kind === 'object-field' && objectName && (_jsxs("p", { className: "text-[11px] leading-snug text-muted-foreground", children: ["Fields of ", objectName, "."] })), showHint && unresolvedObject && (_jsx("p", { className: "text-[11px] leading-snug text-muted-foreground", children: "Set the flow\u2019s trigger object (on the Start node) to list fields." }))] }));
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Inspector field wrapper: a labelled reference combobox. A polymorphic ref is
|
|
174
|
+
* resolved against the node's own sibling config keys (e.g. the script node's
|
|
175
|
+
* `template` follows `actionType`).
|
|
176
|
+
*/
|
|
177
|
+
export function FlowReferenceField({ field, value, onCommit, disabled, context }) {
|
|
178
|
+
const node = context?.node ?? null;
|
|
179
|
+
const resolved = resolveRefKind(field.ref, (key) => configString(node, key));
|
|
180
|
+
return (_jsxs("div", { className: "space-y-1", children: [_jsx(Label, { className: "text-xs text-muted-foreground", children: field.label }), _jsx(ReferenceCombobox, { resolved: resolved, value: value, onCommit: onCommit, disabled: disabled, placeholder: field.placeholder, context: context })] }));
|
|
181
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FlowStringListField — a repeatable single-column editor for string-array
|
|
3
|
+
* config (e.g. a notification's `recipients`, a script's `outputVariables`).
|
|
4
|
+
*
|
|
5
|
+
* Mirrors FlowKeyValueField's local-draft pattern: rows live in LOCAL state
|
|
6
|
+
* with a STABLE id and only flush to `onCommit` on blur / Enter / add / remove,
|
|
7
|
+
* so editing never remounts a row mid-keystroke. Empty rows are dropped on
|
|
8
|
+
* flush; an empty list commits `undefined` so no empty array key is written.
|
|
9
|
+
*/
|
|
10
|
+
import * as React from 'react';
|
|
11
|
+
export interface FlowStringListFieldProps {
|
|
12
|
+
label: string;
|
|
13
|
+
value: unknown;
|
|
14
|
+
onCommit: (value: string[] | undefined) => void;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
addLabel: string;
|
|
17
|
+
itemLabel: string;
|
|
18
|
+
removeLabel: string;
|
|
19
|
+
emptyLabel: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function FlowStringListField({ label, value, onCommit, disabled, addLabel, itemLabel, removeLabel, emptyLabel, }: FlowStringListFieldProps): React.JSX.Element;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
3
|
+
/**
|
|
4
|
+
* FlowStringListField — a repeatable single-column editor for string-array
|
|
5
|
+
* config (e.g. a notification's `recipients`, a script's `outputVariables`).
|
|
6
|
+
*
|
|
7
|
+
* Mirrors FlowKeyValueField's local-draft pattern: rows live in LOCAL state
|
|
8
|
+
* with a STABLE id and only flush to `onCommit` on blur / Enter / add / remove,
|
|
9
|
+
* so editing never remounts a row mid-keystroke. Empty rows are dropped on
|
|
10
|
+
* flush; an empty list commits `undefined` so no empty array key is written.
|
|
11
|
+
*/
|
|
12
|
+
import * as React from 'react';
|
|
13
|
+
import { Plus, X } from 'lucide-react';
|
|
14
|
+
import { Button, Input, Label } from '@object-ui/components';
|
|
15
|
+
import { uniqueId } from './_shared';
|
|
16
|
+
function toRows(list, existingIds) {
|
|
17
|
+
const ids = [...existingIds];
|
|
18
|
+
return list.map((value) => {
|
|
19
|
+
const id = uniqueId('sl', ids);
|
|
20
|
+
ids.push(id);
|
|
21
|
+
return { id, value };
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function rowsToList(rows) {
|
|
25
|
+
return rows.map((r) => r.value.trim()).filter((v) => v !== '');
|
|
26
|
+
}
|
|
27
|
+
export function FlowStringListField({ label, value, onCommit, disabled, addLabel, itemLabel, removeLabel, emptyLabel, }) {
|
|
28
|
+
const external = React.useMemo(() => (Array.isArray(value) ? value.map((v) => String(v)) : []), [value]);
|
|
29
|
+
const [rows, setRows] = React.useState(() => toRows(external, []));
|
|
30
|
+
const lastCommitted = React.useRef(JSON.stringify(external));
|
|
31
|
+
React.useEffect(() => {
|
|
32
|
+
const next = JSON.stringify(external);
|
|
33
|
+
if (next !== lastCommitted.current) {
|
|
34
|
+
setRows(toRows(external, []));
|
|
35
|
+
lastCommitted.current = next;
|
|
36
|
+
}
|
|
37
|
+
}, [external]);
|
|
38
|
+
const flush = (nextRows) => {
|
|
39
|
+
const list = rowsToList(nextRows);
|
|
40
|
+
lastCommitted.current = JSON.stringify(list);
|
|
41
|
+
onCommit(list.length ? list : undefined);
|
|
42
|
+
};
|
|
43
|
+
const setRowValue = (id, v) => {
|
|
44
|
+
setRows((rs) => rs.map((r) => (r.id === id ? { ...r, value: v } : r)));
|
|
45
|
+
};
|
|
46
|
+
const addRow = () => {
|
|
47
|
+
setRows((rs) => [...rs, { id: uniqueId('sl', rs.map((r) => r.id)), value: '' }]);
|
|
48
|
+
};
|
|
49
|
+
const removeRow = (id) => {
|
|
50
|
+
setRows((rs) => {
|
|
51
|
+
const next = rs.filter((r) => r.id !== id);
|
|
52
|
+
flush(next);
|
|
53
|
+
return next;
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
return (_jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { className: "text-xs text-muted-foreground", children: label }), _jsxs("div", { className: "space-y-1.5", children: [rows.length === 0 && (_jsx("p", { className: "text-[11px] italic text-muted-foreground", children: emptyLabel })), rows.map((row) => (_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(Input, { value: row.value, onChange: (e) => setRowValue(row.id, e.target.value), onBlur: () => flush(rows), onKeyDown: (e) => {
|
|
57
|
+
if (e.key === 'Enter')
|
|
58
|
+
e.target.blur();
|
|
59
|
+
}, placeholder: itemLabel, disabled: disabled, className: "h-8 flex-1 text-xs" }), _jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "h-8 w-8 shrink-0 p-0 text-muted-foreground", onClick: () => removeRow(row.id), disabled: disabled, "aria-label": removeLabel, title: removeLabel, children: _jsx(X, { className: "h-3.5 w-3.5" }) })] }, row.id)))] }), _jsxs(Button, { type: "button", variant: "outline", size: "sm", className: "h-7 w-full text-xs", onClick: addRow, disabled: disabled, children: [_jsx(Plus, { className: "mr-1 h-3.5 w-3.5" }), addLabel] })] }));
|
|
60
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InspectorComboField — a searchable single-select for scoped inspectors that
|
|
3
|
+
* still lets the author type a value not in the list.
|
|
4
|
+
*
|
|
5
|
+
* Mainstream low-code dataset designers let you *pick* an object / relationship
|
|
6
|
+
* / field from the live schema instead of recalling its API name. This combo
|
|
7
|
+
* renders that picker (grouped, searchable) over a catalog the caller supplies,
|
|
8
|
+
* while keeping the power-user escape hatch: when the typed text matches no
|
|
9
|
+
* option, a "Use «text»" row commits the raw value verbatim (so an offline
|
|
10
|
+
* catalog, a computed path, or a server-only field is never a dead end).
|
|
11
|
+
*
|
|
12
|
+
* Self-filters (`shouldFilter={false}`) for predictable label+value matching.
|
|
13
|
+
*/
|
|
14
|
+
import * as React from 'react';
|
|
15
|
+
export interface InspectorComboOption {
|
|
16
|
+
value: string;
|
|
17
|
+
label: string;
|
|
18
|
+
/** Small muted suffix, e.g. a field type. */
|
|
19
|
+
hint?: string;
|
|
20
|
+
/** Optional group heading; options sharing a group render together. */
|
|
21
|
+
group?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface InspectorComboFieldProps {
|
|
24
|
+
label?: string;
|
|
25
|
+
value: string;
|
|
26
|
+
onCommit: (v: string) => void;
|
|
27
|
+
options: InspectorComboOption[];
|
|
28
|
+
placeholder?: string;
|
|
29
|
+
searchPlaceholder?: string;
|
|
30
|
+
emptyText?: string;
|
|
31
|
+
disabled?: boolean;
|
|
32
|
+
loading?: boolean;
|
|
33
|
+
/** Allow committing a typed value that matches no option (default true). */
|
|
34
|
+
allowCustom?: boolean;
|
|
35
|
+
/** Render the trigger value in a monospace font. */
|
|
36
|
+
mono?: boolean;
|
|
37
|
+
/** Override the trigger label for the currently-selected custom value. */
|
|
38
|
+
className?: string;
|
|
39
|
+
}
|
|
40
|
+
export declare function InspectorComboField({ label, value, onCommit, options, placeholder, searchPlaceholder, emptyText, disabled, loading, allowCustom, mono, className, }: InspectorComboFieldProps): React.JSX.Element;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.
|
|
3
|
+
/**
|
|
4
|
+
* InspectorComboField — a searchable single-select for scoped inspectors that
|
|
5
|
+
* still lets the author type a value not in the list.
|
|
6
|
+
*
|
|
7
|
+
* Mainstream low-code dataset designers let you *pick* an object / relationship
|
|
8
|
+
* / field from the live schema instead of recalling its API name. This combo
|
|
9
|
+
* renders that picker (grouped, searchable) over a catalog the caller supplies,
|
|
10
|
+
* while keeping the power-user escape hatch: when the typed text matches no
|
|
11
|
+
* option, a "Use «text»" row commits the raw value verbatim (so an offline
|
|
12
|
+
* catalog, a computed path, or a server-only field is never a dead end).
|
|
13
|
+
*
|
|
14
|
+
* Self-filters (`shouldFilter={false}`) for predictable label+value matching.
|
|
15
|
+
*/
|
|
16
|
+
import * as React from 'react';
|
|
17
|
+
import { Check, ChevronsUpDown } from 'lucide-react';
|
|
18
|
+
import { cn, Button, Label, Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, Popover, PopoverContent, PopoverTrigger, } from '@object-ui/components';
|
|
19
|
+
function matches(option, q) {
|
|
20
|
+
if (!q)
|
|
21
|
+
return true;
|
|
22
|
+
const needle = q.toLowerCase();
|
|
23
|
+
return (option.value.toLowerCase().includes(needle) ||
|
|
24
|
+
option.label.toLowerCase().includes(needle) ||
|
|
25
|
+
(option.group?.toLowerCase().includes(needle) ?? false));
|
|
26
|
+
}
|
|
27
|
+
export function InspectorComboField({ label, value, onCommit, options, placeholder = 'Select…', searchPlaceholder = 'Search or type…', emptyText = 'No match — keep typing to use a custom value.', disabled, loading, allowCustom = true, mono, className, }) {
|
|
28
|
+
const [open, setOpen] = React.useState(false);
|
|
29
|
+
const [search, setSearch] = React.useState('');
|
|
30
|
+
const selected = options.find((o) => o.value === value);
|
|
31
|
+
const triggerText = selected ? selected.label : value || (loading ? 'Loading…' : placeholder);
|
|
32
|
+
const filtered = React.useMemo(() => options.filter((o) => matches(o, search)), [options, search]);
|
|
33
|
+
const groups = React.useMemo(() => {
|
|
34
|
+
const order = [];
|
|
35
|
+
const byGroup = new Map();
|
|
36
|
+
for (const o of filtered) {
|
|
37
|
+
const g = o.group ?? '';
|
|
38
|
+
if (!byGroup.has(g)) {
|
|
39
|
+
byGroup.set(g, []);
|
|
40
|
+
order.push(g);
|
|
41
|
+
}
|
|
42
|
+
byGroup.get(g).push(o);
|
|
43
|
+
}
|
|
44
|
+
return order.map((g) => ({ heading: g, items: byGroup.get(g) }));
|
|
45
|
+
}, [filtered]);
|
|
46
|
+
const trimmed = search.trim();
|
|
47
|
+
const showCustom = allowCustom && !!trimmed && !options.some((o) => o.value === trimmed);
|
|
48
|
+
const commit = (v) => {
|
|
49
|
+
onCommit(v);
|
|
50
|
+
setOpen(false);
|
|
51
|
+
setSearch('');
|
|
52
|
+
};
|
|
53
|
+
const field = (_jsxs(Popover, { open: open, onOpenChange: (next) => {
|
|
54
|
+
setOpen(next);
|
|
55
|
+
if (!next)
|
|
56
|
+
setSearch('');
|
|
57
|
+
}, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { type: "button", variant: "outline", role: "combobox", "aria-expanded": open, disabled: disabled, className: cn('h-8 w-full justify-between px-2 text-sm font-normal', className), children: [_jsx("span", { className: cn('truncate', mono && 'font-mono', !selected && !value && 'text-muted-foreground'), children: triggerText }), _jsx(ChevronsUpDown, { className: "ml-2 h-3.5 w-3.5 shrink-0 opacity-50" })] }) }), _jsx(PopoverContent, { align: "start", className: "w-[var(--radix-popover-trigger-width)] min-w-[14rem] p-0", children: _jsxs(Command, { shouldFilter: false, children: [_jsx(CommandInput, { value: search, onValueChange: setSearch, placeholder: searchPlaceholder }), _jsxs(CommandList, { children: [!showCustom && filtered.length === 0 && _jsx(CommandEmpty, { children: emptyText }), showCustom && (_jsx(CommandGroup, { children: _jsx(CommandItem, { value: `__custom__${trimmed}`, onSelect: () => commit(trimmed), children: _jsxs("span", { className: "truncate", children: ["Use ", _jsxs("span", { className: "font-mono", children: ["\u201C", trimmed, "\u201D"] })] }) }) })), groups.map((g, gi) => (_jsx(CommandGroup, { heading: g.heading || undefined, children: g.items.map((o) => (_jsxs(CommandItem, { value: o.value, onSelect: () => commit(o.value), children: [_jsx(Check, { className: cn('h-3.5 w-3.5', o.value === value ? 'opacity-100' : 'opacity-0') }), _jsx("span", { className: "truncate font-mono", children: o.value }), o.label && o.label !== o.value && (_jsx("span", { className: "ml-1 truncate text-muted-foreground", children: o.label })), o.hint && _jsx("span", { className: "ml-auto pl-2 text-[10px] text-muted-foreground", children: o.hint })] }, o.value))) }, g.heading || `g${gi}`)))] })] }) })] }));
|
|
58
|
+
if (!label)
|
|
59
|
+
return field;
|
|
60
|
+
return (_jsxs("div", { className: "space-y-1", children: [_jsx(Label, { className: "text-xs text-muted-foreground", children: label }), field] }));
|
|
61
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectDefaultInspector — the "home" panel for the object designer,
|
|
3
|
+
* shown when no field is selected.
|
|
4
|
+
*
|
|
5
|
+
* Without it, deselecting a field falls back to the generic whole-draft
|
|
6
|
+
* SchemaForm, which (a) exposes a raw `fields` JSON editor the canvas
|
|
7
|
+
* already owns, and (b) only renders whatever properties the server's
|
|
8
|
+
* `/meta/types` schema happens to declare (often just `name`). This
|
|
9
|
+
* curated panel instead edits the object-level basics directly, in the
|
|
10
|
+
* active locale, in both create and edit.
|
|
11
|
+
*
|
|
12
|
+
* Create-mode niceties:
|
|
13
|
+
* • `name` is editable only while creating (it's the immutable PK once
|
|
14
|
+
* saved) and auto-derives a snake_case slug from the label until the
|
|
15
|
+
* author edits it directly — mirroring the protocol create form.
|
|
16
|
+
*
|
|
17
|
+
* All edits flow through `onPatch` as shallow draft patches.
|
|
18
|
+
*/
|
|
19
|
+
import * as React from 'react';
|
|
20
|
+
import type { MetadataDefaultInspectorProps } from '../default-inspector-registry';
|
|
21
|
+
export declare function ObjectDefaultInspector({ name, draft, onPatch, readOnly, locale, }: MetadataDefaultInspectorProps): React.JSX.Element;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
3
|
+
/**
|
|
4
|
+
* ObjectDefaultInspector — the "home" panel for the object designer,
|
|
5
|
+
* shown when no field is selected.
|
|
6
|
+
*
|
|
7
|
+
* Without it, deselecting a field falls back to the generic whole-draft
|
|
8
|
+
* SchemaForm, which (a) exposes a raw `fields` JSON editor the canvas
|
|
9
|
+
* already owns, and (b) only renders whatever properties the server's
|
|
10
|
+
* `/meta/types` schema happens to declare (often just `name`). This
|
|
11
|
+
* curated panel instead edits the object-level basics directly, in the
|
|
12
|
+
* active locale, in both create and edit.
|
|
13
|
+
*
|
|
14
|
+
* Create-mode niceties:
|
|
15
|
+
* • `name` is editable only while creating (it's the immutable PK once
|
|
16
|
+
* saved) and auto-derives a snake_case slug from the label until the
|
|
17
|
+
* author edits it directly — mirroring the protocol create form.
|
|
18
|
+
*
|
|
19
|
+
* All edits flow through `onPatch` as shallow draft patches.
|
|
20
|
+
*/
|
|
21
|
+
import * as React from 'react';
|
|
22
|
+
import { InspectorShell, InspectorTextField } from './_shared';
|
|
23
|
+
import { Label } from '@object-ui/components';
|
|
24
|
+
import { toFieldNameLoose } from '../previews/object-fields-io';
|
|
25
|
+
import { slugify } from '../createDerive';
|
|
26
|
+
import { t } from '../i18n';
|
|
27
|
+
export function ObjectDefaultInspector({ name, draft, onPatch, readOnly, locale, }) {
|
|
28
|
+
const tr = React.useCallback((key) => t(key, locale), [locale]);
|
|
29
|
+
// The host passes an empty `name` only while creating a new object.
|
|
30
|
+
const createMode = !name;
|
|
31
|
+
const str = (key) => (typeof draft[key] === 'string' ? draft[key] : '');
|
|
32
|
+
// Auto-derive name from label until the user edits name directly.
|
|
33
|
+
const nameTouched = React.useRef(false);
|
|
34
|
+
const setLabel = (v) => {
|
|
35
|
+
const patch = { label: v || undefined };
|
|
36
|
+
if (createMode && !nameTouched.current)
|
|
37
|
+
patch.name = slugify(v);
|
|
38
|
+
onPatch(patch);
|
|
39
|
+
};
|
|
40
|
+
const setName = (v) => {
|
|
41
|
+
nameTouched.current = true;
|
|
42
|
+
onPatch({ name: toFieldNameLoose(v) });
|
|
43
|
+
};
|
|
44
|
+
const nameValue = createMode ? str('name') : name || str('name');
|
|
45
|
+
const title = str('label') || name || tr('designer.object.kind');
|
|
46
|
+
return (_jsx(InspectorShell, { kindLabel: tr('designer.object.kind'), title: title, onClose: () => { }, hideClose: true, children: _jsxs(Section, { title: tr('designer.object.section.basic'), hint: tr('designer.object.section.basicHint'), children: [_jsx(Field, { hint: tr('designer.object.nameHint'), children: _jsx(InspectorTextField, { label: tr('designer.object.name'), value: nameValue, onCommit: setName, disabled: readOnly || !createMode, mono: true, testId: "object-name-input", placeholder: tr('designer.object.namePlaceholder') }) }), _jsx(InspectorTextField, { label: tr('designer.object.label'), value: str('label'), onCommit: setLabel, disabled: readOnly, placeholder: tr('designer.object.labelPlaceholder') }), _jsx(InspectorTextField, { label: tr('designer.object.pluralLabel'), value: str('pluralLabel'), onCommit: (v) => onPatch({ pluralLabel: v || undefined }), disabled: readOnly, placeholder: tr('designer.object.pluralPlaceholder') }), _jsx(Field, { hint: tr('designer.object.iconHint'), children: _jsx(InspectorTextField, { label: tr('designer.object.icon'), value: str('icon'), onCommit: (v) => onPatch({ icon: v || undefined }), disabled: readOnly, mono: true, placeholder: "building" }) }), _jsxs("div", { className: "space-y-1", children: [_jsx(Label, { className: "text-xs text-muted-foreground", children: tr('designer.object.description') }), _jsx("textarea", { value: str('description'), disabled: readOnly, rows: 2, placeholder: tr('designer.object.descriptionPlaceholder'), onChange: (e) => onPatch({ description: e.target.value || undefined }), className: "w-full text-sm rounded-md border bg-background px-2 py-1.5 focus:outline-none focus:ring-1 focus:ring-primary" })] })] }) }));
|
|
47
|
+
}
|
|
48
|
+
/* ─────────────── Sub-components ─────────────── */
|
|
49
|
+
function Section({ title, hint, children, }) {
|
|
50
|
+
return (_jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "border-b pb-1", children: [_jsx("div", { className: "text-[10px] font-semibold uppercase tracking-wider text-muted-foreground", children: title }), hint && _jsx("div", { className: "text-[10px] normal-case text-muted-foreground/70 mt-0.5", children: hint })] }), _jsx("div", { className: "space-y-2", children: children })] }));
|
|
51
|
+
}
|
|
52
|
+
/** Wraps a field with a small help line below it. */
|
|
53
|
+
function Field({ hint, children }) {
|
|
54
|
+
return (_jsxs("div", { className: "space-y-1", children: [children, hint && _jsx("p", { className: "text-[11px] text-muted-foreground/80 px-0.5 leading-snug", children: hint })] }));
|
|
55
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectFieldInspector — scoped editor for the selected Object field.
|
|
3
|
+
*
|
|
4
|
+
* Selection shape: { kind: 'field', id: '<field_name>' }
|
|
5
|
+
*
|
|
6
|
+
* The inspector edits one field at a time. Sections:
|
|
7
|
+
* • Basic — name (rename), label, type, required, unique, description
|
|
8
|
+
* • Specific — picklist options / lookup target / formula / numeric
|
|
9
|
+
* precision / max length, conditional on type
|
|
10
|
+
* • Advanced — readonly, hidden, indexed, externalId, group
|
|
11
|
+
*
|
|
12
|
+
* All edits are applied as immutable splices of `draft.fields` via
|
|
13
|
+
* the object-fields-io helpers, preserving the original array-vs-record
|
|
14
|
+
* shape AND any unknown keys on the field definition.
|
|
15
|
+
*
|
|
16
|
+
* Rename: changing the `name` rewrites the field's key in-place and
|
|
17
|
+
* re-issues the selection so the inspector stays bound to the same
|
|
18
|
+
* field. Other fields/options that reference the old name are NOT
|
|
19
|
+
* auto-rewritten — callers should re-validate downstream.
|
|
20
|
+
*/
|
|
21
|
+
import * as React from 'react';
|
|
22
|
+
import type { MetadataInspectorProps } from '../inspector-registry';
|
|
23
|
+
export declare function ObjectFieldInspector({ selection, draft, onPatch, onClearSelection, onSelectionChange, readOnly, locale, }: MetadataInspectorProps): React.JSX.Element;
|