@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.
Files changed (486) hide show
  1. package/CHANGELOG.md +1229 -0
  2. package/README.md +292 -0
  3. package/dist/assistant/assistantBus.d.ts +72 -0
  4. package/dist/assistant/assistantBus.js +133 -0
  5. package/dist/chrome/CommandPalette.d.ts +1 -1
  6. package/dist/chrome/CommandPalette.js +26 -22
  7. package/dist/chrome/ConditionalAuthWrapper.d.ts +1 -1
  8. package/dist/chrome/ConsoleToaster.d.ts +1 -1
  9. package/dist/chrome/ConsoleToaster.js +3 -1
  10. package/dist/chrome/ErrorBoundary.d.ts +1 -1
  11. package/dist/chrome/KeyboardShortcutsDialog.d.ts +1 -1
  12. package/dist/chrome/KeyboardShortcutsDialog.js +16 -5
  13. package/dist/chrome/LoadingScreen.d.ts +1 -1
  14. package/dist/chrome/LoadingScreen.js +22 -26
  15. package/dist/chrome/RouteFader.d.ts +1 -1
  16. package/dist/chrome/ThemeProvider.d.ts +1 -1
  17. package/dist/components/ManagedByBadge.d.ts +1 -1
  18. package/dist/console/AppContent.d.ts +1 -1
  19. package/dist/console/AppContent.js +184 -39
  20. package/dist/console/ConsoleShell.d.ts +7 -7
  21. package/dist/console/ConsoleShell.js +32 -3
  22. package/dist/console/ai/AiChatPage.d.ts +88 -1
  23. package/dist/console/ai/AiChatPage.js +747 -66
  24. package/dist/console/ai/ConversationsSidebar.d.ts +26 -1
  25. package/dist/console/ai/ConversationsSidebar.js +149 -34
  26. package/dist/console/ai/LiveCanvas.d.ts +28 -0
  27. package/dist/console/ai/LiveCanvas.js +80 -0
  28. package/dist/console/ai/reconcileTurn.d.ts +8 -0
  29. package/dist/console/ai/reconcileTurn.js +20 -0
  30. package/dist/console/auth/AuthPageLayout.d.ts +1 -1
  31. package/dist/console/auth/ForgotPasswordPage.d.ts +1 -1
  32. package/dist/console/auth/LoginPage.d.ts +1 -1
  33. package/dist/console/auth/RegisterPage.d.ts +1 -1
  34. package/dist/console/auth/RegisterPage.js +23 -3
  35. package/dist/console/cloud-connection/CloudConnectionPanel.d.ts +1 -0
  36. package/dist/console/cloud-connection/CloudConnectionPanel.js +169 -0
  37. package/dist/console/home/AppCard.d.ts +1 -1
  38. package/dist/console/home/AppCard.js +6 -12
  39. package/dist/console/home/HomeAppsStrip.d.ts +8 -0
  40. package/dist/console/home/HomeAppsStrip.js +61 -0
  41. package/dist/console/home/HomeLayout.d.ts +1 -1
  42. package/dist/console/home/HomeLayout.js +3 -1
  43. package/dist/console/home/HomePage.d.ts +1 -2
  44. package/dist/console/home/HomePage.js +149 -21
  45. package/dist/console/home/HomeRail.d.ts +22 -0
  46. package/dist/console/home/HomeRail.js +62 -0
  47. package/dist/console/home/QuickActions.d.ts +1 -1
  48. package/dist/console/home/QuickActions.js +3 -11
  49. package/dist/console/home/RecentApps.d.ts +1 -1
  50. package/dist/console/home/RecentApps.js +2 -2
  51. package/dist/console/home/StarredApps.d.ts +1 -1
  52. package/dist/console/home/StarredApps.js +2 -2
  53. package/dist/console/marketplace/InstalledListWidget.d.ts +1 -0
  54. package/dist/console/marketplace/InstalledListWidget.js +93 -0
  55. package/dist/console/marketplace/MarkdownText.d.ts +1 -1
  56. package/dist/console/marketplace/MarketplaceAccessDenied.d.ts +1 -1
  57. package/dist/console/marketplace/MarketplaceInstalledPage.d.ts +8 -14
  58. package/dist/console/marketplace/MarketplaceInstalledPage.js +14 -66
  59. package/dist/console/marketplace/MarketplacePackagePage.d.ts +1 -1
  60. package/dist/console/marketplace/MarketplacePackagePage.js +249 -8
  61. package/dist/console/marketplace/MarketplacePage.d.ts +1 -1
  62. package/dist/console/marketplace/MarketplacePage.js +60 -3
  63. package/dist/console/marketplace/PackageIcon.d.ts +1 -1
  64. package/dist/console/marketplace/PluginDisclosure.d.ts +14 -0
  65. package/dist/console/marketplace/PluginDisclosure.js +38 -0
  66. package/dist/console/marketplace/marketplaceApi.d.ts +123 -0
  67. package/dist/console/marketplace/marketplaceApi.js +254 -1
  68. package/dist/console/organizations/CreateWorkspaceDialog.d.ts +1 -1
  69. package/dist/console/organizations/OrganizationsLayout.d.ts +1 -1
  70. package/dist/console/organizations/OrganizationsPage.d.ts +1 -1
  71. package/dist/console/organizations/manage/AcceptInvitationPage.d.ts +1 -1
  72. package/dist/console/organizations/manage/InvitationsPage.d.ts +1 -1
  73. package/dist/console/organizations/manage/InviteMemberDialog.d.ts +1 -1
  74. package/dist/console/organizations/manage/MembersPage.d.ts +1 -1
  75. package/dist/console/organizations/manage/OrganizationLayout.d.ts +1 -1
  76. package/dist/console/organizations/manage/SettingsPage.d.ts +1 -1
  77. package/dist/context/CommandPaletteProvider.d.ts +44 -0
  78. package/dist/context/CommandPaletteProvider.js +71 -0
  79. package/dist/context/FavoritesProvider.d.ts +1 -1
  80. package/dist/context/NavigationContext.d.ts +1 -1
  81. package/dist/context/RecentItemsProvider.d.ts +2 -2
  82. package/dist/context/UserStateAdapters.d.ts +1 -1
  83. package/dist/context/index.d.ts +2 -0
  84. package/dist/context/index.js +1 -0
  85. package/dist/hooks/index.d.ts +5 -2
  86. package/dist/hooks/index.js +4 -1
  87. package/dist/hooks/useActionModal.d.ts +53 -0
  88. package/dist/hooks/useActionModal.js +111 -0
  89. package/dist/hooks/useChatConversation.d.ts +137 -4
  90. package/dist/hooks/useChatConversation.js +316 -25
  91. package/dist/hooks/useConsoleActionRuntime.d.ts +70 -0
  92. package/dist/hooks/useConsoleActionRuntime.js +564 -0
  93. package/dist/hooks/useConversationList.js +61 -3
  94. package/dist/hooks/useHomeInbox.d.ts +13 -0
  95. package/dist/hooks/useHomeInbox.js +142 -0
  96. package/dist/hooks/useNavPins.js +17 -23
  97. package/dist/hooks/useNavigationSync.d.ts +33 -0
  98. package/dist/hooks/useNavigationSync.js +98 -12
  99. package/dist/hooks/useReconcileOnError.d.ts +40 -0
  100. package/dist/hooks/useReconcileOnError.js +37 -0
  101. package/dist/hooks/useRecordApprovals.d.ts +18 -19
  102. package/dist/hooks/useRecordApprovals.js +24 -40
  103. package/dist/hooks/useResponsiveSidebar.js +14 -5
  104. package/dist/hooks/useSettleSignal.d.ts +19 -0
  105. package/dist/hooks/useSettleSignal.js +20 -0
  106. package/dist/hooks/useTrackRouteAsRecent.js +35 -0
  107. package/dist/hooks/useUrlOverlay.d.ts +62 -0
  108. package/dist/hooks/useUrlOverlay.js +88 -0
  109. package/dist/index.d.ts +18 -8
  110. package/dist/index.js +17 -5
  111. package/dist/layout/ActivityFeed.d.ts +1 -1
  112. package/dist/layout/AppHeader.d.ts +3 -2
  113. package/dist/layout/AppHeader.js +237 -72
  114. package/dist/layout/AppSidebar.d.ts +2 -1
  115. package/dist/layout/AppSidebar.js +26 -46
  116. package/dist/layout/AppSwitcher.d.ts +2 -1
  117. package/dist/layout/AppSwitcher.js +9 -5
  118. package/dist/layout/AuthPageLayout.d.ts +1 -1
  119. package/dist/layout/ConnectionStatus.d.ts +1 -1
  120. package/dist/layout/ConnectionStatus.js +9 -6
  121. package/dist/layout/ConsoleChatbotFab.d.ts +19 -1
  122. package/dist/layout/ConsoleChatbotFab.js +16 -2
  123. package/dist/layout/ConsoleFloatingChatbot.d.ts +34 -2
  124. package/dist/layout/ConsoleFloatingChatbot.js +391 -41
  125. package/dist/layout/ConsoleLayout.d.ts +1 -1
  126. package/dist/layout/ConsoleLayout.js +27 -11
  127. package/dist/layout/ContextSelectors.d.ts +44 -0
  128. package/dist/layout/ContextSelectors.js +242 -0
  129. package/dist/layout/InboxPopover.d.ts +6 -1
  130. package/dist/layout/InboxPopover.js +25 -6
  131. package/dist/layout/LocaleSwitcher.d.ts +1 -1
  132. package/dist/layout/LocalizedSidebarTrigger.d.ts +2 -0
  133. package/dist/layout/LocalizedSidebarTrigger.js +15 -0
  134. package/dist/layout/MobileViewSwitcherContext.d.ts +1 -1
  135. package/dist/layout/ModeToggle.d.ts +1 -1
  136. package/dist/layout/PageHeader.d.ts +1 -1
  137. package/dist/layout/UnifiedSidebar.d.ts +2 -1
  138. package/dist/layout/UnifiedSidebar.js +116 -15
  139. package/dist/layout/agentPicker.d.ts +56 -0
  140. package/dist/layout/agentPicker.js +40 -0
  141. package/dist/observability/index.d.ts +1 -0
  142. package/dist/observability/index.js +1 -0
  143. package/dist/observability/settleSignal.d.ts +64 -0
  144. package/dist/observability/settleSignal.js +131 -0
  145. package/dist/preview/CommitTimeline.d.ts +15 -0
  146. package/dist/preview/CommitTimeline.js +82 -0
  147. package/dist/preview/DraftChangesPanel.d.ts +19 -0
  148. package/dist/preview/DraftChangesPanel.js +114 -0
  149. package/dist/preview/DraftPreviewBar.d.ts +8 -0
  150. package/dist/preview/DraftPreviewBar.js +86 -0
  151. package/dist/preview/PreviewDraftEmptyState.d.ts +16 -0
  152. package/dist/preview/PreviewDraftEmptyState.js +47 -0
  153. package/dist/preview/PreviewModeContext.d.ts +57 -0
  154. package/dist/preview/PreviewModeContext.js +99 -0
  155. package/dist/preview/UnpublishedAppBar.d.ts +8 -0
  156. package/dist/preview/UnpublishedAppBar.js +83 -0
  157. package/dist/preview/commitHistory.d.ts +28 -0
  158. package/dist/preview/commitHistory.js +48 -0
  159. package/dist/preview/draftStatus.d.ts +20 -0
  160. package/dist/preview/draftStatus.js +27 -0
  161. package/dist/preview/usePublishAllDrafts.d.ts +18 -0
  162. package/dist/preview/usePublishAllDrafts.js +106 -0
  163. package/dist/providers/AdapterProvider.d.ts +1 -1
  164. package/dist/providers/AdapterProvider.js +6 -1
  165. package/dist/providers/ExpressionProvider.d.ts +1 -1
  166. package/dist/providers/MetadataProvider.d.ts +17 -2
  167. package/dist/providers/MetadataProvider.js +192 -12
  168. package/dist/runtime-config.d.ts +46 -2
  169. package/dist/runtime-config.js +39 -2
  170. package/dist/services/builtinComponents.js +68 -59
  171. package/dist/skeletons/SkeletonDashboard.d.ts +1 -1
  172. package/dist/skeletons/SkeletonDetail.d.ts +1 -1
  173. package/dist/skeletons/SkeletonGrid.d.ts +1 -1
  174. package/dist/utils/appRoute.d.ts +21 -0
  175. package/dist/utils/appRoute.js +25 -0
  176. package/dist/utils/deriveRelatedLists.d.ts +54 -0
  177. package/dist/utils/deriveRelatedLists.js +91 -0
  178. package/dist/utils/index.d.ts +4 -0
  179. package/dist/utils/index.js +3 -0
  180. package/dist/utils/managedByEmptyState.d.ts +8 -1
  181. package/dist/utils/managedByEmptyState.js +13 -7
  182. package/dist/utils/preferLocal.d.ts +18 -0
  183. package/dist/utils/preferLocal.js +24 -0
  184. package/dist/views/ActionConfirmDialog.d.ts +1 -1
  185. package/dist/views/ActionConfirmDialog.js +3 -1
  186. package/dist/views/ActionParamDialog.d.ts +6 -1
  187. package/dist/views/ActionParamDialog.js +9 -3
  188. package/dist/views/ActionResultDialog.d.ts +13 -0
  189. package/dist/views/ActionResultDialog.js +134 -0
  190. package/dist/views/ComponentNavView.d.ts +14 -1
  191. package/dist/views/CreateViewDialog.d.ts +1 -1
  192. package/dist/views/DashboardConfigPanel.d.ts +28 -0
  193. package/dist/views/DashboardConfigPanel.js +81 -0
  194. package/dist/views/DashboardView.d.ts +4 -3
  195. package/dist/views/DashboardView.js +38 -239
  196. package/dist/views/FlowRunner.d.ts +31 -0
  197. package/dist/views/FlowRunner.js +121 -0
  198. package/dist/views/InterfaceListPage.d.ts +49 -0
  199. package/dist/views/InterfaceListPage.js +347 -0
  200. package/dist/views/MetadataInspector.d.ts +2 -2
  201. package/dist/views/ObjectView.d.ts +1 -1
  202. package/dist/views/ObjectView.js +209 -532
  203. package/dist/views/PageView.d.ts +8 -3
  204. package/dist/views/PageView.js +45 -32
  205. package/dist/views/RecordDetailView.d.ts +1 -1
  206. package/dist/views/RecordDetailView.js +363 -148
  207. package/dist/views/RecordFormPage.d.ts +1 -1
  208. package/dist/views/RecordFormPage.js +26 -1
  209. package/dist/views/ReportConfigPanel.d.ts +37 -0
  210. package/dist/views/ReportConfigPanel.js +85 -0
  211. package/dist/views/ReportView.d.ts +1 -1
  212. package/dist/views/ReportView.js +116 -7
  213. package/dist/views/RuntimeDraftBar.d.ts +30 -0
  214. package/dist/views/RuntimeDraftBar.js +112 -0
  215. package/dist/views/ScreenView.d.ts +70 -0
  216. package/dist/views/ScreenView.js +73 -0
  217. package/dist/views/SearchResultsPage.d.ts +1 -1
  218. package/dist/views/SearchResultsPage.js +8 -18
  219. package/dist/views/ViewConfigPanel.d.ts +24 -17
  220. package/dist/views/ViewConfigPanel.js +121 -77
  221. package/dist/views/index.d.ts +1 -1
  222. package/dist/views/index.js +1 -1
  223. package/dist/views/metadata-admin/AuditPanel.d.ts +28 -0
  224. package/dist/views/metadata-admin/AuditPanel.js +79 -0
  225. package/dist/views/metadata-admin/DiagnosticsPage.d.ts +20 -0
  226. package/dist/views/metadata-admin/DiagnosticsPage.js +69 -0
  227. package/dist/views/metadata-admin/DirectoryPage.d.ts +16 -1
  228. package/dist/views/metadata-admin/DirectoryPage.js +101 -24
  229. package/dist/views/metadata-admin/DraftReviewPanel.d.ts +33 -0
  230. package/dist/views/metadata-admin/DraftReviewPanel.js +77 -0
  231. package/dist/views/metadata-admin/EmbeddedItemEditor.d.ts +17 -1
  232. package/dist/views/metadata-admin/EmbeddedItemEditor.js +15 -8
  233. package/dist/views/metadata-admin/JsonSourceEditor.d.ts +39 -0
  234. package/dist/views/metadata-admin/JsonSourceEditor.js +196 -0
  235. package/dist/views/metadata-admin/LayeredDiff.d.ts +39 -1
  236. package/dist/views/metadata-admin/LayeredDiff.js +171 -5
  237. package/dist/views/metadata-admin/MetadataDetailDrawer.d.ts +15 -1
  238. package/dist/views/metadata-admin/MetadataTypeActions.d.ts +48 -0
  239. package/dist/views/metadata-admin/MetadataTypeActions.js +165 -0
  240. package/dist/views/metadata-admin/PackagesPage.d.ts +18 -0
  241. package/dist/views/metadata-admin/PackagesPage.js +403 -0
  242. package/dist/views/metadata-admin/PageShell.d.ts +1 -1
  243. package/dist/views/metadata-admin/PageShell.js +9 -4
  244. package/dist/views/metadata-admin/PermissionMatrixEditor.d.ts +35 -1
  245. package/dist/views/metadata-admin/QuickFind.d.ts +21 -1
  246. package/dist/views/metadata-admin/QuickFind.js +6 -3
  247. package/dist/views/metadata-admin/RelatedPanel.d.ts +24 -1
  248. package/dist/views/metadata-admin/RelatedPanel.js +20 -18
  249. package/dist/views/metadata-admin/ResourceEditPage.d.ts +40 -1
  250. package/dist/views/metadata-admin/ResourceEditPage.js +1250 -60
  251. package/dist/views/metadata-admin/ResourceHistoryPage.d.ts +39 -1
  252. package/dist/views/metadata-admin/ResourceHistoryPage.js +66 -16
  253. package/dist/views/metadata-admin/ResourceListPage.d.ts +13 -1
  254. package/dist/views/metadata-admin/ResourceListPage.js +258 -30
  255. package/dist/views/metadata-admin/ResourceRouter.d.ts +23 -1
  256. package/dist/views/metadata-admin/SchemaForm.d.ts +34 -1
  257. package/dist/views/metadata-admin/SchemaForm.js +559 -49
  258. package/dist/views/metadata-admin/StudioHomePage.d.ts +22 -0
  259. package/dist/views/metadata-admin/StudioHomePage.js +205 -0
  260. package/dist/views/metadata-admin/anchors.js +255 -24
  261. package/dist/views/metadata-admin/clientValidation.d.ts +50 -0
  262. package/dist/views/metadata-admin/clientValidation.js +169 -0
  263. package/dist/views/metadata-admin/color-variant-field.d.ts +30 -0
  264. package/dist/views/metadata-admin/color-variant-field.js +38 -0
  265. package/dist/views/metadata-admin/createDerive.d.ts +75 -0
  266. package/dist/views/metadata-admin/createDerive.js +179 -0
  267. package/dist/views/metadata-admin/dashboard-schema.d.ts +12 -0
  268. package/dist/views/metadata-admin/dashboard-schema.js +80 -0
  269. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.d.ts +35 -0
  270. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.js +327 -0
  271. package/dist/views/metadata-admin/datasource/register.d.ts +1 -0
  272. package/dist/views/metadata-admin/datasource/register.js +24 -0
  273. package/dist/views/metadata-admin/default-inspector-registry.d.ts +49 -0
  274. package/dist/views/metadata-admin/default-inspector-registry.js +8 -0
  275. package/dist/views/metadata-admin/default-schemas.js +115 -10
  276. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.d.ts +27 -0
  277. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.js +69 -0
  278. package/dist/views/metadata-admin/external/ImportObjectDialog.d.ts +27 -0
  279. package/dist/views/metadata-admin/external/ImportObjectDialog.js +77 -0
  280. package/dist/views/metadata-admin/external/SchemaBrowser.d.ts +16 -0
  281. package/dist/views/metadata-admin/external/SchemaBrowser.js +74 -0
  282. package/dist/views/metadata-admin/external/ValidationPanel.d.ts +16 -0
  283. package/dist/views/metadata-admin/external/ValidationPanel.js +68 -0
  284. package/dist/views/metadata-admin/external/api.d.ts +100 -0
  285. package/dist/views/metadata-admin/external/api.js +124 -0
  286. package/dist/views/metadata-admin/i18n.d.ts +1 -0
  287. package/dist/views/metadata-admin/i18n.js +1252 -2
  288. package/dist/views/metadata-admin/index.d.ts +8 -5
  289. package/dist/views/metadata-admin/index.js +12 -2
  290. package/dist/views/metadata-admin/inspector-registry.d.ts +51 -0
  291. package/dist/views/metadata-admin/inspector-registry.js +11 -0
  292. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.d.ts +30 -0
  293. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.js +180 -0
  294. package/dist/views/metadata-admin/inspectors/AppNavInspector.d.ts +16 -0
  295. package/dist/views/metadata-admin/inspectors/AppNavInspector.js +110 -0
  296. package/dist/views/metadata-admin/inspectors/ConditionBuilder.d.ts +29 -0
  297. package/dist/views/metadata-admin/inspectors/ConditionBuilder.js +154 -0
  298. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.d.ts +28 -0
  299. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.js +110 -0
  300. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.d.ts +18 -0
  301. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.js +139 -0
  302. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.d.ts +21 -0
  303. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.js +221 -0
  304. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.d.ts +16 -0
  305. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.js +126 -0
  306. package/dist/views/metadata-admin/inspectors/FlowInspector.d.ts +12 -0
  307. package/dist/views/metadata-admin/inspectors/FlowInspector.js +9 -0
  308. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.d.ts +30 -0
  309. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.js +125 -0
  310. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.d.ts +18 -0
  311. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.js +40 -0
  312. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.d.ts +14 -0
  313. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.js +205 -0
  314. package/dist/views/metadata-admin/inspectors/FlowObjectListField.d.ts +26 -0
  315. package/dist/views/metadata-admin/inspectors/FlowObjectListField.js +105 -0
  316. package/dist/views/metadata-admin/inspectors/FlowReferenceField.d.ts +83 -0
  317. package/dist/views/metadata-admin/inspectors/FlowReferenceField.js +181 -0
  318. package/dist/views/metadata-admin/inspectors/FlowStringListField.d.ts +21 -0
  319. package/dist/views/metadata-admin/inspectors/FlowStringListField.js +60 -0
  320. package/dist/views/metadata-admin/inspectors/InspectorComboField.d.ts +40 -0
  321. package/dist/views/metadata-admin/inspectors/InspectorComboField.js +61 -0
  322. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.d.ts +21 -0
  323. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.js +55 -0
  324. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.d.ts +23 -0
  325. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.js +365 -0
  326. package/dist/views/metadata-admin/inspectors/PageBlockInspector.d.ts +48 -0
  327. package/dist/views/metadata-admin/inspectors/PageBlockInspector.js +332 -0
  328. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.d.ts +58 -0
  329. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.js +218 -0
  330. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.d.ts +19 -0
  331. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.js +144 -0
  332. package/dist/views/metadata-admin/inspectors/ViewInspector.d.ts +19 -0
  333. package/dist/views/metadata-admin/inspectors/ViewInspector.js +21 -0
  334. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.d.ts +54 -0
  335. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.js +191 -0
  336. package/dist/views/metadata-admin/inspectors/_shared.d.ts +128 -0
  337. package/dist/views/metadata-admin/inspectors/_shared.js +113 -0
  338. package/dist/views/metadata-admin/inspectors/datasetFilterCondition.d.ts +24 -0
  339. package/dist/views/metadata-admin/inspectors/datasetFilterCondition.js +97 -0
  340. package/dist/views/metadata-admin/inspectors/expression-validate.d.ts +26 -0
  341. package/dist/views/metadata-admin/inspectors/expression-validate.js +66 -0
  342. package/dist/views/metadata-admin/inspectors/flow-node-config.d.ts +143 -0
  343. package/dist/views/metadata-admin/inspectors/flow-node-config.js +506 -0
  344. package/dist/views/metadata-admin/inspectors/index.d.ts +1 -0
  345. package/dist/views/metadata-admin/inspectors/index.js +45 -0
  346. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.d.ts +40 -0
  347. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.js +227 -0
  348. package/dist/views/metadata-admin/inspectors/useDatasetFields.d.ts +72 -0
  349. package/dist/views/metadata-admin/inspectors/useDatasetFields.js +0 -0
  350. package/dist/views/metadata-admin/issuePath.d.ts +22 -0
  351. package/dist/views/metadata-admin/issuePath.js +65 -0
  352. package/dist/views/metadata-admin/mergeServerFields.d.ts +65 -0
  353. package/dist/views/metadata-admin/mergeServerFields.js +56 -0
  354. package/dist/views/metadata-admin/package-scope.d.ts +26 -0
  355. package/dist/views/metadata-admin/package-scope.js +43 -0
  356. package/dist/views/metadata-admin/preview-registry.d.ts +55 -0
  357. package/dist/views/metadata-admin/previews/ActionPreview.d.ts +25 -0
  358. package/dist/views/metadata-admin/previews/ActionPreview.js +238 -0
  359. package/dist/views/metadata-admin/previews/AddWidgetPicker.d.ts +12 -0
  360. package/dist/views/metadata-admin/previews/AddWidgetPicker.js +56 -0
  361. package/dist/views/metadata-admin/previews/AgentPreview.d.ts +24 -0
  362. package/dist/views/metadata-admin/previews/AgentPreview.js +100 -0
  363. package/dist/views/metadata-admin/previews/AppNavCanvas.d.ts +31 -0
  364. package/dist/views/metadata-admin/previews/AppNavCanvas.js +260 -0
  365. package/dist/views/metadata-admin/previews/AppPreview.d.ts +16 -1
  366. package/dist/views/metadata-admin/previews/AppPreview.js +23 -14
  367. package/dist/views/metadata-admin/previews/BookPreview.d.ts +20 -0
  368. package/dist/views/metadata-admin/previews/BookPreview.js +132 -0
  369. package/dist/views/metadata-admin/previews/DashboardPreview.d.ts +16 -1
  370. package/dist/views/metadata-admin/previews/DashboardPreview.js +110 -8
  371. package/dist/views/metadata-admin/previews/DatasetPreview.d.ts +18 -0
  372. package/dist/views/metadata-admin/previews/DatasetPreview.js +105 -0
  373. package/dist/views/metadata-admin/previews/DatasourcePreview.d.ts +23 -0
  374. package/dist/views/metadata-admin/previews/DatasourcePreview.js +68 -0
  375. package/dist/views/metadata-admin/previews/EmailTemplatePreview.d.ts +14 -1
  376. package/dist/views/metadata-admin/previews/FieldStub.d.ts +30 -0
  377. package/dist/views/metadata-admin/previews/FieldStub.js +104 -0
  378. package/dist/views/metadata-admin/previews/FieldsListEditor.d.ts +50 -0
  379. package/dist/views/metadata-admin/previews/FieldsListEditor.js +97 -0
  380. package/dist/views/metadata-admin/previews/FlowCanvas.d.ts +49 -0
  381. package/dist/views/metadata-admin/previews/FlowCanvas.js +416 -0
  382. package/dist/views/metadata-admin/previews/FlowPreview.d.ts +20 -0
  383. package/dist/views/metadata-admin/previews/FlowPreview.js +120 -0
  384. package/dist/views/metadata-admin/previews/FlowRunsPanel.d.ts +46 -0
  385. package/dist/views/metadata-admin/previews/FlowRunsPanel.js +97 -0
  386. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.d.ts +25 -0
  387. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.js +204 -0
  388. package/dist/views/metadata-admin/previews/JobPreview.d.ts +28 -0
  389. package/dist/views/metadata-admin/previews/JobPreview.js +290 -0
  390. package/dist/views/metadata-admin/previews/ObjectFormCanvas.d.ts +30 -0
  391. package/dist/views/metadata-admin/previews/ObjectFormCanvas.js +547 -0
  392. package/dist/views/metadata-admin/previews/ObjectPreview.d.ts +14 -1
  393. package/dist/views/metadata-admin/previews/ObjectPreview.js +5 -30
  394. package/dist/views/metadata-admin/previews/OutlineStrip.d.ts +32 -0
  395. package/dist/views/metadata-admin/previews/OutlineStrip.js +8 -0
  396. package/dist/views/metadata-admin/previews/PageBlockCanvas.d.ts +49 -0
  397. package/dist/views/metadata-admin/previews/PageBlockCanvas.js +510 -0
  398. package/dist/views/metadata-admin/previews/PagePreview.d.ts +10 -1
  399. package/dist/views/metadata-admin/previews/PagePreview.js +200 -5
  400. package/dist/views/metadata-admin/previews/PermissionPreview.d.ts +27 -0
  401. package/dist/views/metadata-admin/previews/PermissionPreview.js +115 -0
  402. package/dist/views/metadata-admin/previews/PreviewShell.d.ts +29 -6
  403. package/dist/views/metadata-admin/previews/PreviewShell.js +16 -3
  404. package/dist/views/metadata-admin/previews/ReportPreview.d.ts +18 -1
  405. package/dist/views/metadata-admin/previews/ReportPreview.js +23 -15
  406. package/dist/views/metadata-admin/previews/RolePreview.d.ts +19 -0
  407. package/dist/views/metadata-admin/previews/RolePreview.js +14 -0
  408. package/dist/views/metadata-admin/previews/ScreenPreview.d.ts +38 -0
  409. package/dist/views/metadata-admin/previews/ScreenPreview.js +61 -0
  410. package/dist/views/metadata-admin/previews/SkillPreview.d.ts +22 -0
  411. package/dist/views/metadata-admin/previews/SkillPreview.js +34 -0
  412. package/dist/views/metadata-admin/previews/ToolPreview.d.ts +25 -0
  413. package/dist/views/metadata-admin/previews/ToolPreview.js +122 -0
  414. package/dist/views/metadata-admin/previews/TranslationPreview.d.ts +25 -0
  415. package/dist/views/metadata-admin/previews/TranslationPreview.js +52 -0
  416. package/dist/views/metadata-admin/previews/ValidationPreview.d.ts +27 -0
  417. package/dist/views/metadata-admin/previews/ValidationPreview.js +110 -0
  418. package/dist/views/metadata-admin/previews/ViewColumnPanes.d.ts +62 -0
  419. package/dist/views/metadata-admin/previews/ViewColumnPanes.js +140 -0
  420. package/dist/views/metadata-admin/previews/ViewPreview.d.ts +23 -1
  421. package/dist/views/metadata-admin/previews/ViewPreview.js +101 -73
  422. package/dist/views/metadata-admin/previews/block-config.d.ts +82 -0
  423. package/dist/views/metadata-admin/previews/block-config.js +324 -0
  424. package/dist/views/metadata-admin/previews/block-types.d.ts +40 -0
  425. package/dist/views/metadata-admin/previews/block-types.js +110 -0
  426. package/dist/views/metadata-admin/previews/field-types.d.ts +53 -0
  427. package/dist/views/metadata-admin/previews/field-types.js +97 -0
  428. package/dist/views/metadata-admin/previews/flow-canvas-layout.d.ts +102 -0
  429. package/dist/views/metadata-admin/previews/flow-canvas-layout.js +227 -0
  430. package/dist/views/metadata-admin/previews/flow-canvas-parts.d.ts +96 -0
  431. package/dist/views/metadata-admin/previews/flow-canvas-parts.js +373 -0
  432. package/dist/views/metadata-admin/previews/form-preview.d.ts +24 -0
  433. package/dist/views/metadata-admin/previews/form-preview.js +29 -0
  434. package/dist/views/metadata-admin/previews/index.js +43 -0
  435. package/dist/views/metadata-admin/previews/object-fields-bridge.d.ts +66 -0
  436. package/dist/views/metadata-admin/previews/object-fields-bridge.js +171 -0
  437. package/dist/views/metadata-admin/previews/object-fields-io.d.ts +130 -0
  438. package/dist/views/metadata-admin/previews/object-fields-io.js +243 -0
  439. package/dist/views/metadata-admin/previews/screen-spec.d.ts +43 -0
  440. package/dist/views/metadata-admin/previews/screen-spec.js +108 -0
  441. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.d.ts +102 -0
  442. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.js +2 -0
  443. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.d.ts +15 -0
  444. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.js +185 -0
  445. package/dist/views/metadata-admin/previews/simulator/flow-simulator.d.ts +73 -0
  446. package/dist/views/metadata-admin/previews/simulator/flow-simulator.js +426 -0
  447. package/dist/views/metadata-admin/previews/useDatasetCatalog.d.ts +47 -0
  448. package/dist/views/metadata-admin/previews/useDatasetCatalog.js +133 -0
  449. package/dist/views/metadata-admin/previews/useFlowNodePalette.d.ts +44 -0
  450. package/dist/views/metadata-admin/previews/useFlowNodePalette.js +124 -0
  451. package/dist/views/metadata-admin/previews/useMetaOptions.d.ts +8 -0
  452. package/dist/views/metadata-admin/previews/useMetaOptions.js +50 -0
  453. package/dist/views/metadata-admin/previews/useObjectFields.d.ts +23 -0
  454. package/dist/views/metadata-admin/previews/useObjectFields.js +79 -0
  455. package/dist/views/metadata-admin/previews/useObjectOptions.d.ts +8 -0
  456. package/dist/views/metadata-admin/previews/useObjectOptions.js +43 -0
  457. package/dist/views/metadata-admin/previews/view-column-io.d.ts +42 -0
  458. package/dist/views/metadata-admin/previews/view-column-io.js +73 -0
  459. package/dist/views/metadata-admin/previews/widget-types.d.ts +24 -0
  460. package/dist/views/metadata-admin/previews/widget-types.js +40 -0
  461. package/dist/views/metadata-admin/registry.d.ts +140 -19
  462. package/dist/views/metadata-admin/report-schema.d.ts +26 -0
  463. package/dist/views/metadata-admin/report-schema.js +121 -0
  464. package/dist/views/metadata-admin/useMetadata.d.ts +100 -2
  465. package/dist/views/metadata-admin/useMetadata.js +155 -4
  466. package/dist/views/metadata-admin/view-item-normalize.d.ts +20 -0
  467. package/dist/views/metadata-admin/view-item-normalize.js +68 -0
  468. package/dist/views/metadata-admin/view-schema.d.ts +16 -0
  469. package/dist/views/metadata-admin/view-schema.js +107 -0
  470. package/dist/views/metadata-admin/view-variant-model.d.ts +23 -0
  471. package/dist/views/metadata-admin/view-variant-model.js +64 -0
  472. package/dist/views/metadata-admin/widgets.d.ts +89 -1
  473. package/dist/views/metadata-admin/widgets.js +491 -17
  474. package/dist/views/runtime-metadata-persistence.d.ts +78 -0
  475. package/dist/views/runtime-metadata-persistence.js +89 -0
  476. package/dist/views/useOpenRecordList.d.ts +18 -0
  477. package/dist/views/useOpenRecordList.js +36 -0
  478. package/dist/views/userFilterUrlState.d.ts +15 -0
  479. package/dist/views/userFilterUrlState.js +53 -0
  480. package/dist/views/view-config-adapter.d.ts +38 -0
  481. package/dist/views/view-config-adapter.js +80 -0
  482. package/package.json +52 -34
  483. package/dist/views/DesignDrawer.d.ts +0 -28
  484. package/dist/views/DesignDrawer.js +0 -51
  485. package/dist/views/metadata-admin/DesignerEditorWrapper.d.ts +0 -68
  486. package/dist/views/metadata-admin/DesignerEditorWrapper.js +0 -158
@@ -0,0 +1,426 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ import { evalCondition, validateFlowDraft } from './flow-sim-validate';
3
+ const MAX_STEPS = 500;
4
+ const PASS_THROUGH = new Set(['start']);
5
+ const MOCKED_SIDE_EFFECT = new Set([
6
+ 'create_record',
7
+ 'update_record',
8
+ 'delete_record',
9
+ 'get_record',
10
+ 'http_request',
11
+ 'connector_action',
12
+ ]);
13
+ // `parallel` / `try_catch` carry nested body regions (ADR-0031) the flat
14
+ // stepper can't walk — pass through honestly instead of faking their semantics.
15
+ const UNSUPPORTED = new Set(['join_gateway', 'subflow', 'boundary_event', 'parallel', 'try_catch']);
16
+ const edgeId = (e, i) => e.id || `${e.source}->${e.target}#${i}`;
17
+ const condStr = (c) => (typeof c === 'string' ? c : undefined);
18
+ const str = (v) => (typeof v === 'string' && v ? v : undefined);
19
+ export class FlowSimulator {
20
+ constructor(nodes, edges) {
21
+ Object.defineProperty(this, "nodes", {
22
+ enumerable: true,
23
+ configurable: true,
24
+ writable: true,
25
+ value: new Map()
26
+ });
27
+ Object.defineProperty(this, "edges", {
28
+ enumerable: true,
29
+ configurable: true,
30
+ writable: true,
31
+ value: []
32
+ });
33
+ Object.defineProperty(this, "mocks", {
34
+ enumerable: true,
35
+ configurable: true,
36
+ writable: true,
37
+ value: {}
38
+ });
39
+ Object.defineProperty(this, "seq", {
40
+ enumerable: true,
41
+ configurable: true,
42
+ writable: true,
43
+ value: 0
44
+ });
45
+ Object.defineProperty(this, "state", {
46
+ enumerable: true,
47
+ configurable: true,
48
+ writable: true,
49
+ value: {
50
+ status: 'idle',
51
+ variables: {},
52
+ steps: [],
53
+ frontier: [],
54
+ activeNodeId: null,
55
+ visitedNodeIds: [],
56
+ traversedEdgeIds: [],
57
+ }
58
+ });
59
+ for (const n of nodes)
60
+ this.nodes.set(n.id, n);
61
+ this.edges = edges;
62
+ }
63
+ /** Validate + seed variables and queue the entry node. Returns the validation. */
64
+ reset(seedVariables = {}, mocks = {}) {
65
+ const validation = validateFlowDraft([...this.nodes.values()], this.edges);
66
+ this.mocks = mocks;
67
+ this.seq = 0;
68
+ this.state = {
69
+ status: validation.errors.length ? 'error' : 'idle',
70
+ variables: { ...seedVariables },
71
+ steps: [],
72
+ frontier: validation.startNodeId ? [validation.startNodeId] : [],
73
+ activeNodeId: null,
74
+ visitedNodeIds: [],
75
+ traversedEdgeIds: [],
76
+ error: validation.errors.length ? validation.errors[0].message : undefined,
77
+ };
78
+ return validation;
79
+ }
80
+ get done() {
81
+ return this.state.status === 'done' || this.state.status === 'error';
82
+ }
83
+ /** Execute one queued node. Returns the recorded step, or null when idle. */
84
+ step() {
85
+ const s = this.state;
86
+ if (s.status === 'error' || s.status === 'done' || s.status === 'paused')
87
+ return null;
88
+ if (this.seq >= MAX_STEPS) {
89
+ s.status = 'error';
90
+ s.error = `Step limit (${MAX_STEPS}) exceeded — the flow may contain an infinite loop.`;
91
+ return null;
92
+ }
93
+ const nodeId = s.frontier.shift();
94
+ if (!nodeId) {
95
+ s.status = 'done';
96
+ s.activeNodeId = null;
97
+ return null;
98
+ }
99
+ const node = this.nodes.get(nodeId);
100
+ if (!node) {
101
+ return this.record(nodeId, 'unknown', nodeId, 'error', { error: `Node "${nodeId}" not found.` });
102
+ }
103
+ s.status = 'running';
104
+ s.activeNodeId = nodeId;
105
+ if (!s.visitedNodeIds.includes(nodeId))
106
+ s.visitedNodeIds.push(nodeId);
107
+ const step = this.execute(node);
108
+ // Settle the run status. A pause halts the queue until resume(); a decision
109
+ // dead-end / missing node already set 'error' inside execute(). Only a still
110
+ // -'running' branch that drained the frontier completes as 'done'.
111
+ if (s.status === 'running' && s.frontier.length === 0) {
112
+ s.status = 'done';
113
+ s.activeNodeId = null;
114
+ }
115
+ return step;
116
+ }
117
+ /** Run to completion (or until a pause / error). */
118
+ runToEnd() {
119
+ let guard = 0;
120
+ while (this.state.status !== 'done' && this.state.status !== 'error' && this.state.status !== 'paused') {
121
+ if (++guard > MAX_STEPS + 5)
122
+ break;
123
+ this.step();
124
+ }
125
+ return this.state;
126
+ }
127
+ /**
128
+ * Continue a flow paused on a `wait`, `screen`, or `approval` node.
129
+ * - `screenOutputs` — inputs captured from a paused screen.
130
+ * - `decision` — the branch an approval resumes down (ADR-0019/0044:
131
+ * `approve` / `reject` / `revise`). The run takes ONLY the out-edge whose
132
+ * label matches, mirroring how the engine resumes a suspended approval by
133
+ * branch label — instead of fanning out to every out-edge.
134
+ */
135
+ resume(opts = {}) {
136
+ const s = this.state;
137
+ if (s.status !== 'paused' || !s.activeNodeId)
138
+ return;
139
+ const node = this.nodes.get(s.activeNodeId);
140
+ if (opts.screenOutputs && node?.type === 'screen') {
141
+ Object.assign(s.variables, opts.screenOutputs);
142
+ }
143
+ s.pausedReason = undefined;
144
+ s.status = 'running';
145
+ if (node?.type === 'approval')
146
+ this.resumeApproval(node, opts.decision);
147
+ else if (node)
148
+ this.enqueueSuccessors(node);
149
+ if (s.frontier.length === 0) {
150
+ s.status = 'done';
151
+ s.activeNodeId = null;
152
+ }
153
+ }
154
+ /**
155
+ * Resume a suspended approval down the chosen decision's out-edge: the one
156
+ * whose `label` equals `decision` (case-insensitive — `approve` / `reject` /
157
+ * `revise`). With no match (or no decision) it falls back to fanning out —
158
+ * mirroring the engine's unmatched-`branchLabel` fallback — and logs that so
159
+ * the author notices the unrouted decision.
160
+ */
161
+ resumeApproval(node, decision) {
162
+ const out = this.edges.map((e, i) => ({ e, i })).filter((x) => x.e.source === node.id);
163
+ const want = (decision ?? '').trim().toLowerCase();
164
+ const chosen = want ? out.find((x) => (x.e.label ?? '').trim().toLowerCase() === want) : undefined;
165
+ if (chosen) {
166
+ this.traverse(chosen.e, chosen.i);
167
+ this.record(node.id, 'approval', node.label, 'ok', { note: `Decision: ${decision} → ${chosen.e.target}` });
168
+ }
169
+ else {
170
+ for (const x of out)
171
+ this.traverse(x.e, x.i);
172
+ this.record(node.id, 'approval', node.label, 'ok', {
173
+ note: want
174
+ ? `No out-edge labelled "${decision}"; took all branches (engine label-fallback).`
175
+ : 'No decision supplied; took all branches.',
176
+ });
177
+ }
178
+ }
179
+ // ---- node execution -----------------------------------------------------
180
+ execute(node) {
181
+ const type = node.type;
182
+ if (type === 'end') {
183
+ // Terminate this branch only; other queued branches still run.
184
+ return this.record(node.id, type, node.label, 'ok', { note: 'Flow end reached.' });
185
+ }
186
+ if (type === 'decision')
187
+ return this.executeDecision(node);
188
+ if (type === 'assignment')
189
+ return this.executeAssignment(node);
190
+ if (UNSUPPORTED.has(type)) {
191
+ this.enqueueSuccessors(node);
192
+ return this.record(node.id, type, node.label, 'skipped', {
193
+ note: `"${type}" is not modelled by the simulator; passing through without its real semantics.`,
194
+ });
195
+ }
196
+ if (type === 'parallel_gateway') {
197
+ this.enqueueSuccessors(node);
198
+ return this.record(node.id, type, node.label, 'ok', {
199
+ note: 'Parallel split — branches fan out (no join synchronization is simulated).',
200
+ });
201
+ }
202
+ if (type === 'approval') {
203
+ // ADR-0019: an approval node opens a request and SUSPENDS the run until a
204
+ // decision is recorded. Model that as a pause; the author resumes down the
205
+ // chosen approve / reject / revise out-edge (see resumeApproval) rather
206
+ // than fanning out to every out-edge at once.
207
+ this.state.status = 'paused';
208
+ this.state.pausedReason = 'approval';
209
+ return this.record(node.id, type, node.label, 'paused', { note: 'Approval reached — choose a decision to continue.' });
210
+ }
211
+ if (type === 'wait') {
212
+ this.state.status = 'paused';
213
+ this.state.pausedReason = 'wait';
214
+ return this.record(node.id, type, node.label, 'paused', { note: 'Wait reached — continue manually.' });
215
+ }
216
+ if (type === 'screen') {
217
+ // Mirror the engine's `shouldPause`: a screen suspends only when it
218
+ // collects input (`fields`) or explicitly opts in (`waitForInput`).
219
+ // A field-less / `waitForInput:false` screen is a server pass-through.
220
+ const fields = Array.isArray(node.config?.fields) ? node.config.fields : [];
221
+ const waitForInput = node.config?.waitForInput;
222
+ const shouldPause = waitForInput === true || (fields.length > 0 && waitForInput !== false);
223
+ if (shouldPause) {
224
+ this.state.status = 'paused';
225
+ this.state.pausedReason = 'screen';
226
+ return this.record(node.id, type, node.label, 'paused', { note: 'Screen reached — provide inputs, then continue.' });
227
+ }
228
+ this.enqueueSuccessors(node);
229
+ return this.record(node.id, type, node.label, 'ok', { note: 'Screen has no input — passed through (matches runtime).' });
230
+ }
231
+ if (type === 'loop') {
232
+ const step = this.executeLoop(node);
233
+ this.enqueueSuccessors(node);
234
+ return step;
235
+ }
236
+ if (MOCKED_SIDE_EFFECT.has(type) || type === 'script') {
237
+ const wrote = this.applyMock(node);
238
+ this.enqueueSuccessors(node);
239
+ return this.record(node.id, type, node.label, 'mocked', {
240
+ wrote,
241
+ note: this.mockNote(node),
242
+ });
243
+ }
244
+ // start / assignment / anything else: pass straight through.
245
+ this.enqueueSuccessors(node);
246
+ return this.record(node.id, type, node.label, 'ok', {
247
+ note: PASS_THROUGH.has(type) ? undefined : `Type "${type}" treated as pass-through.`,
248
+ });
249
+ }
250
+ executeDecision(node) {
251
+ const out = this.edges
252
+ .map((e, i) => ({ e, i }))
253
+ .filter((x) => x.e.source === node.id);
254
+ const evals = [];
255
+ let chosen;
256
+ let firstError;
257
+ // Evaluate conditional edges in declared order; first truthy wins.
258
+ for (const { e, i } of out) {
259
+ if (e.isDefault)
260
+ continue;
261
+ const cond = condStr(e.condition);
262
+ if (!cond) {
263
+ evals.push({ edgeId: edgeId(e, i), target: e.target, result: false, selected: false, error: 'Branch has no condition.' });
264
+ continue;
265
+ }
266
+ const r = evalCondition(cond, this.state.variables);
267
+ if (r.error && !firstError)
268
+ firstError = `${cond}: ${r.error}`;
269
+ const selected = r.result && !chosen;
270
+ if (selected)
271
+ chosen = { e, i };
272
+ evals.push({ edgeId: edgeId(e, i), target: e.target, condition: cond, result: r.result, error: r.error, selected });
273
+ }
274
+ // Fall back to the default branch when no condition matched.
275
+ if (!chosen) {
276
+ const def = out.find((x) => x.e.isDefault);
277
+ if (def) {
278
+ chosen = def;
279
+ evals.push({ edgeId: edgeId(def.e, def.i), target: def.e.target, isDefault: true, result: true, selected: true });
280
+ }
281
+ }
282
+ const multiMatch = evals.filter((x) => x.result && !x.isDefault).length > 1;
283
+ if (chosen)
284
+ this.traverse(chosen.e, chosen.i);
285
+ return this.record(node.id, 'decision', node.label, chosen ? 'ok' : 'error', {
286
+ edges: evals,
287
+ error: chosen ? undefined : firstError ?? 'No branch matched and there is no default branch.',
288
+ note: multiMatch ? 'Multiple conditions matched; the first declared branch was taken.' : undefined,
289
+ });
290
+ }
291
+ /**
292
+ * assignment node — set flow variables. Normalizes the three authoring
293
+ * shapes the engine accepts (Studio's `{ assignments: { var: value } }`
294
+ * map, the example `{ assignments: [{ variable, value }] }` array, and the
295
+ * legacy flat `{ var: value }`) and interpolates `{var}` templates — so the
296
+ * Debug run mirrors runtime instead of silently no-oping.
297
+ */
298
+ executeAssignment(node) {
299
+ const cfg = node.config ?? {};
300
+ const raw = cfg.assignments;
301
+ const pairs = [];
302
+ if (Array.isArray(raw)) {
303
+ for (const item of raw) {
304
+ if (item && typeof item === 'object') {
305
+ const e = item;
306
+ const name = e.variable ?? e.name ?? e.key;
307
+ if (typeof name === 'string' && name)
308
+ pairs.push([name, e.value]);
309
+ }
310
+ }
311
+ }
312
+ else if (raw && typeof raw === 'object') {
313
+ for (const [k, v] of Object.entries(raw))
314
+ pairs.push([k, v]);
315
+ }
316
+ else {
317
+ for (const [k, v] of Object.entries(cfg))
318
+ pairs.push([k, v]);
319
+ }
320
+ const wrote = {};
321
+ for (const [key, value] of pairs) {
322
+ const resolved = this.interpolateValue(value);
323
+ this.state.variables[key] = resolved;
324
+ wrote[key] = resolved;
325
+ }
326
+ this.enqueueSuccessors(node);
327
+ return this.record(node.id, 'assignment', node.label, 'ok', {
328
+ wrote: Object.keys(wrote).length ? wrote : undefined,
329
+ note: Object.keys(wrote).length ? undefined : 'No assignments defined.',
330
+ });
331
+ }
332
+ /** Resolve `{var}` templates in an assignment value against live variables. */
333
+ interpolateValue(value) {
334
+ if (typeof value !== 'string')
335
+ return value;
336
+ const whole = value.match(/^\{([^}]+)\}$/);
337
+ if (whole) {
338
+ const v = this.state.variables[whole[1].trim()];
339
+ return v !== undefined ? v : value;
340
+ }
341
+ return value.replace(/\{([^}]+)\}/g, (_m, k) => {
342
+ const v = this.state.variables[String(k).trim()];
343
+ return v === undefined || v === null ? '' : String(v);
344
+ });
345
+ }
346
+ executeLoop(node) {
347
+ const ref = str(node.config?.collection);
348
+ const iterVar = str(node.config?.iteratorVariable);
349
+ let note = 'Loop simulated as a single pass (body re-execution is not modelled).';
350
+ if (ref) {
351
+ const resolved = this.resolveRef(ref);
352
+ if (Array.isArray(resolved)) {
353
+ note = `Collection "${ref}" has ${resolved.length} item(s); simulated as a single pass.`;
354
+ if (iterVar && resolved.length)
355
+ this.state.variables[iterVar] = resolved[0];
356
+ }
357
+ else if (resolved !== undefined) {
358
+ note = `Collection "${ref}" is not an array; loop may not run at runtime.`;
359
+ }
360
+ }
361
+ return this.record(node.id, 'loop', node.label, 'ok', { note });
362
+ }
363
+ // ---- helpers ------------------------------------------------------------
364
+ /** Resolve a `{var}` template ref or a plain variable name from `variables`. */
365
+ resolveRef(ref) {
366
+ const m = ref.match(/^\{(.+)\}$/);
367
+ const key = (m ? m[1] : ref).trim();
368
+ return this.state.variables[key];
369
+ }
370
+ /** Apply a node's mock output to the simulation variables; returns what it wrote. */
371
+ applyMock(node) {
372
+ const cfg = node.config ?? {};
373
+ const mock = this.mocks[node.id];
374
+ const wrote = {};
375
+ const single = str(cfg.outputVariable);
376
+ if (single) {
377
+ wrote[single] = mock !== undefined ? mock : {};
378
+ this.state.variables[single] = wrote[single];
379
+ }
380
+ const list = Array.isArray(cfg.outputVariables) ? cfg.outputVariables : [];
381
+ if (list.length) {
382
+ const m = mock && typeof mock === 'object' ? mock : {};
383
+ for (const name of list) {
384
+ if (typeof name !== 'string')
385
+ continue;
386
+ wrote[name] = name in m ? m[name] : undefined;
387
+ this.state.variables[name] = wrote[name];
388
+ }
389
+ }
390
+ return Object.keys(wrote).length ? wrote : undefined;
391
+ }
392
+ mockNote(node) {
393
+ if (node.type === 'script') {
394
+ const action = str(node.config?.actionType);
395
+ if (action && action !== 'code') {
396
+ const recips = Array.isArray(node.config?.recipients) ? node.config.recipients.length : 0;
397
+ return `Mocked ${action} notification${recips ? ` to ${recips} recipient(s)` : ''}.`;
398
+ }
399
+ return 'Mocked code script (no real code executed).';
400
+ }
401
+ return `Mocked ${node.type.replace(/_/g, ' ')} (no backend call).`;
402
+ }
403
+ /** Enqueue every outgoing target (linear nodes have one; parallel fans out). */
404
+ enqueueSuccessors(node) {
405
+ this.edges.forEach((e, i) => {
406
+ if (e.source === node.id)
407
+ this.traverse(e, i);
408
+ });
409
+ }
410
+ traverse(e, i) {
411
+ const id = edgeId(e, i);
412
+ if (!this.state.traversedEdgeIds.includes(id))
413
+ this.state.traversedEdgeIds.push(id);
414
+ if (this.nodes.has(e.target))
415
+ this.state.frontier.push(e.target);
416
+ }
417
+ record(nodeId, type, label, status, extra = {}) {
418
+ const step = { seq: this.seq++, nodeId, type, label: label || nodeId, status, ...extra };
419
+ this.state.steps.push(step);
420
+ if (status === 'error' && this.state.status !== 'paused') {
421
+ this.state.status = 'error';
422
+ this.state.error = extra.error;
423
+ }
424
+ return step;
425
+ }
426
+ }
@@ -0,0 +1,47 @@
1
+ export interface DatasetDimensionInfo {
2
+ /** Dimension name (snake_case, referenced by `report.rows`). */
3
+ name: string;
4
+ /** Raw field type id when declared (e.g. 'text', 'date'). */
5
+ type?: string;
6
+ }
7
+ export interface DatasetMeasureInfo {
8
+ /** Measure name (snake_case, referenced by `report.values`). */
9
+ name: string;
10
+ /** Aggregate function (sum / avg / count / …) — display hint only. */
11
+ aggregate?: string;
12
+ /** Whether the dataset author certified this measure. */
13
+ certified?: boolean;
14
+ }
15
+ export interface DatasetCatalogEntry {
16
+ /** Dataset unique name (what `report.dataset` stores). */
17
+ name: string;
18
+ /** Human label (falls back to the name). */
19
+ label: string;
20
+ dimensions: DatasetDimensionInfo[];
21
+ measures: DatasetMeasureInfo[];
22
+ }
23
+ export interface UseDatasetCatalogResult {
24
+ datasets: DatasetCatalogEntry[];
25
+ loading: boolean;
26
+ error: string | null;
27
+ }
28
+ /** Normalize a raw dataset document into a catalog entry. */
29
+ export declare function toCatalogEntry(doc: Record<string, unknown>): DatasetCatalogEntry | null;
30
+ export declare function useDatasetCatalog(
31
+ /**
32
+ * Pre-resolved catalog. When supplied the hook skips the network fetch
33
+ * entirely and returns this list verbatim.
34
+ */
35
+ override?: DatasetCatalogEntry[]): UseDatasetCatalogResult;
36
+ export interface UseDatasetSemanticsResult {
37
+ dimensions: DatasetDimensionInfo[];
38
+ measures: DatasetMeasureInfo[];
39
+ loading: boolean;
40
+ error: string | null;
41
+ }
42
+ /**
43
+ * Resolve the bound dataset's dimensions/measures from the catalog, lazily
44
+ * hydrating via `client.get('dataset', name)` when the list endpoint returned
45
+ * a summary without them (some servers list names only).
46
+ */
47
+ export declare function useDatasetSemantics(name: string | undefined, catalog: UseDatasetCatalogResult): UseDatasetSemanticsResult;
@@ -0,0 +1,133 @@
1
+ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.
2
+ /**
3
+ * useDatasetCatalog — loads the analytics dataset catalog for the Report
4
+ * inspector's dataset binding controls (ADR-0021 single-form).
5
+ *
6
+ * A 9.0 report binds a semantic-layer `dataset` and selects its `values`
7
+ * (measure names) grouped by `rows` (dimension names) — so the editor needs
8
+ * (a) the list of datasets to bind, and (b) the bound dataset's
9
+ * dimensions/measures to offer as picker options.
10
+ *
11
+ * Mirrors {@link useObjectFields}: defensive (a 404 or transport error
12
+ * resolves to an empty catalog with `error` set, the inspector falls back to
13
+ * manual entry) and override-friendly (hosts that already hold the catalog
14
+ * pass it to keep the inspector network-free, e.g. tests and the runtime
15
+ * config panel).
16
+ */
17
+ import * as React from 'react';
18
+ import { useMetadataClient } from '../useMetadata';
19
+ function resolveLabel(label, fallback) {
20
+ if (typeof label === 'string' && label)
21
+ return label;
22
+ if (label && typeof label === 'object') {
23
+ const def = label.default;
24
+ if (typeof def === 'string' && def)
25
+ return def;
26
+ }
27
+ return fallback;
28
+ }
29
+ /** Normalize a raw dataset document into a catalog entry. */
30
+ export function toCatalogEntry(doc) {
31
+ const name = typeof doc.name === 'string' ? doc.name : '';
32
+ if (!name)
33
+ return null;
34
+ const dimensions = Array.isArray(doc.dimensions)
35
+ ? doc.dimensions
36
+ .filter((d) => d && typeof d.name === 'string' && d.name)
37
+ .map((d) => ({
38
+ name: d.name,
39
+ type: typeof d.type === 'string' ? d.type : undefined,
40
+ }))
41
+ : [];
42
+ const measures = Array.isArray(doc.measures)
43
+ ? doc.measures
44
+ .filter((m) => m && typeof m.name === 'string' && m.name)
45
+ .map((m) => ({
46
+ name: m.name,
47
+ aggregate: typeof m.aggregate === 'string' ? m.aggregate : undefined,
48
+ certified: m.certified === true,
49
+ }))
50
+ : [];
51
+ return { name, label: resolveLabel(doc.label, name), dimensions, measures };
52
+ }
53
+ export function useDatasetCatalog(
54
+ /**
55
+ * Pre-resolved catalog. When supplied the hook skips the network fetch
56
+ * entirely and returns this list verbatim.
57
+ */
58
+ override) {
59
+ const client = useMetadataClient();
60
+ const [state, setState] = React.useState({
61
+ datasets: override ?? [],
62
+ loading: !override,
63
+ error: null,
64
+ });
65
+ React.useEffect(() => {
66
+ if (override) {
67
+ setState({ datasets: override, loading: false, error: null });
68
+ return;
69
+ }
70
+ let cancelled = false;
71
+ setState((s) => ({ ...s, loading: true, error: null }));
72
+ client
73
+ .list('dataset')
74
+ .then((docs) => {
75
+ if (cancelled)
76
+ return;
77
+ const datasets = (Array.isArray(docs) ? docs : [])
78
+ .map(toCatalogEntry)
79
+ .filter((e) => e !== null);
80
+ setState({ datasets, loading: false, error: null });
81
+ })
82
+ .catch((err) => {
83
+ if (cancelled)
84
+ return;
85
+ setState({ datasets: [], loading: false, error: err?.message ?? String(err) });
86
+ });
87
+ return () => {
88
+ cancelled = true;
89
+ };
90
+ }, [client, override]);
91
+ return state;
92
+ }
93
+ /**
94
+ * Resolve the bound dataset's dimensions/measures from the catalog, lazily
95
+ * hydrating via `client.get('dataset', name)` when the list endpoint returned
96
+ * a summary without them (some servers list names only).
97
+ */
98
+ export function useDatasetSemantics(name, catalog) {
99
+ const client = useMetadataClient();
100
+ const entry = name ? catalog.datasets.find((d) => d.name === name) : undefined;
101
+ const needsFetch = !!name && !catalog.loading &&
102
+ (!entry || (entry.dimensions.length === 0 && entry.measures.length === 0));
103
+ const [fetched, setFetched] = React.useState(null);
104
+ React.useEffect(() => {
105
+ if (!needsFetch || !name)
106
+ return;
107
+ if (fetched?.name === name)
108
+ return;
109
+ let cancelled = false;
110
+ client
111
+ .get('dataset', name)
112
+ .then((doc) => {
113
+ if (cancelled)
114
+ return;
115
+ setFetched({ name, entry: doc ? toCatalogEntry(doc) : null, error: doc ? null : 'Dataset not found' });
116
+ })
117
+ .catch((err) => {
118
+ if (cancelled)
119
+ return;
120
+ setFetched({ name, entry: null, error: err?.message ?? String(err) });
121
+ });
122
+ return () => {
123
+ cancelled = true;
124
+ };
125
+ }, [client, name, needsFetch, fetched]);
126
+ const resolved = needsFetch && fetched?.name === name ? fetched.entry : entry;
127
+ return {
128
+ dimensions: resolved?.dimensions ?? [],
129
+ measures: resolved?.measures ?? [],
130
+ loading: catalog.loading || (needsFetch && fetched?.name !== name),
131
+ error: (needsFetch && fetched?.name === name ? fetched.error : null) ?? catalog.error,
132
+ };
133
+ }
@@ -0,0 +1,44 @@
1
+ import { type PaletteItem } from './flow-canvas-parts';
2
+ /** Minimal shape of an engine action descriptor we consume. */
3
+ interface ActionDescriptorLite {
4
+ type: string;
5
+ name?: string;
6
+ description?: string;
7
+ paradigms?: string[];
8
+ deprecated?: boolean;
9
+ /**
10
+ * JSON Schema for the node's `config` (ADR-0018 §configSchema). Present only
11
+ * for actions whose executor publishes one (e.g. the ADR-0019 approval node).
12
+ * Drives the inspector's server-rendered property form.
13
+ */
14
+ configSchema?: unknown;
15
+ }
16
+ /** Server API base — shared by the palette fetch and the runs panel. */
17
+ export declare function apiBase(): string;
18
+ /**
19
+ * Merge engine descriptors onto the hardcoded base. Base order is canonical;
20
+ * a descriptor overlays its base entry's label/hint (so the engine is the
21
+ * source of truth for naming), and engine-only types are appended.
22
+ */
23
+ export declare function mergePalette(base: PaletteItem[], descriptors: ActionDescriptorLite[]): PaletteItem[];
24
+ /**
25
+ * Fetch the running engine's published action descriptors from
26
+ * `GET /api/v1/automation/actions`. Returns `[]` while loading or on any error
27
+ * (offline / plugin absent / older backend), so consumers fall back to their
28
+ * hardcoded defaults. Shared by both the palette and the inspector's
29
+ * server-driven config form.
30
+ */
31
+ export declare function useActionDescriptors(): ActionDescriptorLite[];
32
+ /**
33
+ * Returns the node palette merged with the running engine's published
34
+ * descriptors. Falls back to {@link NODE_PALETTE} while loading or on any
35
+ * error, so the designer always has a usable palette.
36
+ */
37
+ export declare function useFlowNodePalette(): PaletteItem[];
38
+ /**
39
+ * Map of node `type` → published config JSON Schema, for the actions whose
40
+ * executor publishes one. Empty while loading / offline, so the inspector
41
+ * falls back to its hardcoded field group for every type.
42
+ */
43
+ export declare function useActionConfigSchemas(): Record<string, unknown>;
44
+ export {};