@object-ui/app-shell 6.2.3 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. package/CHANGELOG.md +948 -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 +170 -37
  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 +743 -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 +22 -0
  27. package/dist/console/ai/LiveCanvas.js +78 -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 +107 -4
  90. package/dist/hooks/useChatConversation.js +253 -25
  91. package/dist/hooks/useConsoleActionRuntime.d.ts +70 -0
  92. package/dist/hooks/useConsoleActionRuntime.js +560 -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 +16 -7
  110. package/dist/index.js +12 -4
  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 +32 -2
  124. package/dist/layout/ConsoleFloatingChatbot.js +374 -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 +218 -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/observability/index.d.ts +1 -0
  140. package/dist/observability/index.js +1 -0
  141. package/dist/observability/settleSignal.d.ts +64 -0
  142. package/dist/observability/settleSignal.js +131 -0
  143. package/dist/preview/DraftChangesPanel.d.ts +19 -0
  144. package/dist/preview/DraftChangesPanel.js +114 -0
  145. package/dist/preview/DraftPreviewBar.d.ts +8 -0
  146. package/dist/preview/DraftPreviewBar.js +86 -0
  147. package/dist/preview/PreviewDraftEmptyState.d.ts +16 -0
  148. package/dist/preview/PreviewDraftEmptyState.js +47 -0
  149. package/dist/preview/PreviewModeContext.d.ts +57 -0
  150. package/dist/preview/PreviewModeContext.js +99 -0
  151. package/dist/preview/UnpublishedAppBar.d.ts +8 -0
  152. package/dist/preview/UnpublishedAppBar.js +79 -0
  153. package/dist/preview/draftStatus.d.ts +20 -0
  154. package/dist/preview/draftStatus.js +27 -0
  155. package/dist/preview/usePublishAllDrafts.d.ts +18 -0
  156. package/dist/preview/usePublishAllDrafts.js +106 -0
  157. package/dist/providers/AdapterProvider.d.ts +1 -1
  158. package/dist/providers/AdapterProvider.js +6 -1
  159. package/dist/providers/ExpressionProvider.d.ts +1 -1
  160. package/dist/providers/MetadataProvider.d.ts +17 -2
  161. package/dist/providers/MetadataProvider.js +183 -12
  162. package/dist/runtime-config.d.ts +46 -2
  163. package/dist/runtime-config.js +39 -2
  164. package/dist/services/builtinComponents.js +68 -59
  165. package/dist/skeletons/SkeletonDashboard.d.ts +1 -1
  166. package/dist/skeletons/SkeletonDetail.d.ts +1 -1
  167. package/dist/skeletons/SkeletonGrid.d.ts +1 -1
  168. package/dist/utils/appRoute.d.ts +21 -0
  169. package/dist/utils/appRoute.js +25 -0
  170. package/dist/utils/deriveRelatedLists.d.ts +54 -0
  171. package/dist/utils/deriveRelatedLists.js +91 -0
  172. package/dist/utils/index.d.ts +4 -0
  173. package/dist/utils/index.js +3 -0
  174. package/dist/utils/managedByEmptyState.d.ts +8 -1
  175. package/dist/utils/managedByEmptyState.js +13 -7
  176. package/dist/utils/preferLocal.d.ts +18 -0
  177. package/dist/utils/preferLocal.js +24 -0
  178. package/dist/views/ActionConfirmDialog.d.ts +1 -1
  179. package/dist/views/ActionConfirmDialog.js +3 -1
  180. package/dist/views/ActionParamDialog.d.ts +6 -1
  181. package/dist/views/ActionParamDialog.js +9 -3
  182. package/dist/views/ActionResultDialog.d.ts +13 -0
  183. package/dist/views/ActionResultDialog.js +134 -0
  184. package/dist/views/ComponentNavView.d.ts +14 -1
  185. package/dist/views/CreateViewDialog.d.ts +1 -1
  186. package/dist/views/DashboardConfigPanel.d.ts +28 -0
  187. package/dist/views/DashboardConfigPanel.js +81 -0
  188. package/dist/views/DashboardView.d.ts +4 -3
  189. package/dist/views/DashboardView.js +38 -239
  190. package/dist/views/FlowRunner.d.ts +59 -0
  191. package/dist/views/FlowRunner.js +153 -0
  192. package/dist/views/InterfaceListPage.d.ts +49 -0
  193. package/dist/views/InterfaceListPage.js +347 -0
  194. package/dist/views/MetadataInspector.d.ts +2 -2
  195. package/dist/views/ObjectView.d.ts +1 -1
  196. package/dist/views/ObjectView.js +209 -532
  197. package/dist/views/PageView.d.ts +8 -3
  198. package/dist/views/PageView.js +45 -32
  199. package/dist/views/RecordDetailView.d.ts +1 -1
  200. package/dist/views/RecordDetailView.js +363 -148
  201. package/dist/views/RecordFormPage.d.ts +1 -1
  202. package/dist/views/RecordFormPage.js +26 -1
  203. package/dist/views/ReportConfigPanel.d.ts +37 -0
  204. package/dist/views/ReportConfigPanel.js +85 -0
  205. package/dist/views/ReportView.d.ts +1 -1
  206. package/dist/views/ReportView.js +116 -7
  207. package/dist/views/RuntimeDraftBar.d.ts +30 -0
  208. package/dist/views/RuntimeDraftBar.js +112 -0
  209. package/dist/views/SearchResultsPage.d.ts +1 -1
  210. package/dist/views/SearchResultsPage.js +8 -18
  211. package/dist/views/ViewConfigPanel.d.ts +24 -17
  212. package/dist/views/ViewConfigPanel.js +121 -77
  213. package/dist/views/index.d.ts +1 -1
  214. package/dist/views/index.js +1 -1
  215. package/dist/views/metadata-admin/AuditPanel.d.ts +28 -0
  216. package/dist/views/metadata-admin/AuditPanel.js +79 -0
  217. package/dist/views/metadata-admin/DiagnosticsPage.d.ts +20 -0
  218. package/dist/views/metadata-admin/DiagnosticsPage.js +69 -0
  219. package/dist/views/metadata-admin/DirectoryPage.d.ts +16 -1
  220. package/dist/views/metadata-admin/DirectoryPage.js +113 -24
  221. package/dist/views/metadata-admin/DraftReviewPanel.d.ts +33 -0
  222. package/dist/views/metadata-admin/DraftReviewPanel.js +77 -0
  223. package/dist/views/metadata-admin/EmbeddedItemEditor.d.ts +17 -1
  224. package/dist/views/metadata-admin/EmbeddedItemEditor.js +15 -8
  225. package/dist/views/metadata-admin/JsonSourceEditor.d.ts +37 -0
  226. package/dist/views/metadata-admin/JsonSourceEditor.js +178 -0
  227. package/dist/views/metadata-admin/LayeredDiff.d.ts +39 -1
  228. package/dist/views/metadata-admin/LayeredDiff.js +171 -5
  229. package/dist/views/metadata-admin/MetadataDetailDrawer.d.ts +15 -1
  230. package/dist/views/metadata-admin/MetadataTypeActions.d.ts +48 -0
  231. package/dist/views/metadata-admin/MetadataTypeActions.js +165 -0
  232. package/dist/views/metadata-admin/PackagesPage.d.ts +18 -0
  233. package/dist/views/metadata-admin/PackagesPage.js +395 -0
  234. package/dist/views/metadata-admin/PageShell.d.ts +1 -1
  235. package/dist/views/metadata-admin/PageShell.js +9 -4
  236. package/dist/views/metadata-admin/PermissionMatrixEditor.d.ts +35 -1
  237. package/dist/views/metadata-admin/QuickFind.d.ts +21 -1
  238. package/dist/views/metadata-admin/QuickFind.js +6 -3
  239. package/dist/views/metadata-admin/RelatedPanel.d.ts +24 -1
  240. package/dist/views/metadata-admin/RelatedPanel.js +20 -18
  241. package/dist/views/metadata-admin/ResourceEditPage.d.ts +40 -1
  242. package/dist/views/metadata-admin/ResourceEditPage.js +1223 -60
  243. package/dist/views/metadata-admin/ResourceHistoryPage.d.ts +39 -1
  244. package/dist/views/metadata-admin/ResourceHistoryPage.js +66 -16
  245. package/dist/views/metadata-admin/ResourceListPage.d.ts +13 -1
  246. package/dist/views/metadata-admin/ResourceListPage.js +266 -30
  247. package/dist/views/metadata-admin/ResourceRouter.d.ts +23 -1
  248. package/dist/views/metadata-admin/SchemaForm.d.ts +34 -1
  249. package/dist/views/metadata-admin/SchemaForm.js +559 -49
  250. package/dist/views/metadata-admin/StudioHomePage.d.ts +22 -0
  251. package/dist/views/metadata-admin/StudioHomePage.js +213 -0
  252. package/dist/views/metadata-admin/anchors.js +237 -24
  253. package/dist/views/metadata-admin/clientValidation.d.ts +50 -0
  254. package/dist/views/metadata-admin/clientValidation.js +169 -0
  255. package/dist/views/metadata-admin/color-variant-field.d.ts +30 -0
  256. package/dist/views/metadata-admin/color-variant-field.js +38 -0
  257. package/dist/views/metadata-admin/createDerive.d.ts +75 -0
  258. package/dist/views/metadata-admin/createDerive.js +179 -0
  259. package/dist/views/metadata-admin/dashboard-schema.d.ts +12 -0
  260. package/dist/views/metadata-admin/dashboard-schema.js +80 -0
  261. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.d.ts +35 -0
  262. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.js +327 -0
  263. package/dist/views/metadata-admin/datasource/register.d.ts +1 -0
  264. package/dist/views/metadata-admin/datasource/register.js +24 -0
  265. package/dist/views/metadata-admin/default-inspector-registry.d.ts +49 -0
  266. package/dist/views/metadata-admin/default-inspector-registry.js +8 -0
  267. package/dist/views/metadata-admin/default-schemas.js +115 -10
  268. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.d.ts +27 -0
  269. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.js +69 -0
  270. package/dist/views/metadata-admin/external/ImportObjectDialog.d.ts +27 -0
  271. package/dist/views/metadata-admin/external/ImportObjectDialog.js +77 -0
  272. package/dist/views/metadata-admin/external/SchemaBrowser.d.ts +16 -0
  273. package/dist/views/metadata-admin/external/SchemaBrowser.js +74 -0
  274. package/dist/views/metadata-admin/external/ValidationPanel.d.ts +16 -0
  275. package/dist/views/metadata-admin/external/ValidationPanel.js +68 -0
  276. package/dist/views/metadata-admin/external/api.d.ts +100 -0
  277. package/dist/views/metadata-admin/external/api.js +124 -0
  278. package/dist/views/metadata-admin/i18n.d.ts +1 -0
  279. package/dist/views/metadata-admin/i18n.js +1166 -2
  280. package/dist/views/metadata-admin/index.d.ts +8 -5
  281. package/dist/views/metadata-admin/index.js +12 -2
  282. package/dist/views/metadata-admin/inspector-registry.d.ts +51 -0
  283. package/dist/views/metadata-admin/inspector-registry.js +11 -0
  284. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.d.ts +30 -0
  285. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.js +180 -0
  286. package/dist/views/metadata-admin/inspectors/AppNavInspector.d.ts +16 -0
  287. package/dist/views/metadata-admin/inspectors/AppNavInspector.js +110 -0
  288. package/dist/views/metadata-admin/inspectors/ConditionBuilder.d.ts +29 -0
  289. package/dist/views/metadata-admin/inspectors/ConditionBuilder.js +154 -0
  290. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.d.ts +28 -0
  291. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.js +110 -0
  292. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.d.ts +18 -0
  293. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.js +139 -0
  294. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.d.ts +21 -0
  295. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.js +107 -0
  296. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.d.ts +16 -0
  297. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.js +45 -0
  298. package/dist/views/metadata-admin/inspectors/FlowInspector.d.ts +12 -0
  299. package/dist/views/metadata-admin/inspectors/FlowInspector.js +9 -0
  300. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.d.ts +30 -0
  301. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.js +125 -0
  302. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.d.ts +18 -0
  303. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.js +40 -0
  304. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.d.ts +14 -0
  305. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.js +140 -0
  306. package/dist/views/metadata-admin/inspectors/FlowObjectListField.d.ts +26 -0
  307. package/dist/views/metadata-admin/inspectors/FlowObjectListField.js +105 -0
  308. package/dist/views/metadata-admin/inspectors/FlowReferenceField.d.ts +83 -0
  309. package/dist/views/metadata-admin/inspectors/FlowReferenceField.js +181 -0
  310. package/dist/views/metadata-admin/inspectors/FlowStringListField.d.ts +21 -0
  311. package/dist/views/metadata-admin/inspectors/FlowStringListField.js +60 -0
  312. package/dist/views/metadata-admin/inspectors/InspectorComboField.d.ts +40 -0
  313. package/dist/views/metadata-admin/inspectors/InspectorComboField.js +61 -0
  314. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.d.ts +21 -0
  315. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.js +54 -0
  316. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.d.ts +23 -0
  317. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.js +330 -0
  318. package/dist/views/metadata-admin/inspectors/PageBlockInspector.d.ts +48 -0
  319. package/dist/views/metadata-admin/inspectors/PageBlockInspector.js +332 -0
  320. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.d.ts +58 -0
  321. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.js +160 -0
  322. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.d.ts +19 -0
  323. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.js +144 -0
  324. package/dist/views/metadata-admin/inspectors/ViewInspector.d.ts +19 -0
  325. package/dist/views/metadata-admin/inspectors/ViewInspector.js +21 -0
  326. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.d.ts +54 -0
  327. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.js +191 -0
  328. package/dist/views/metadata-admin/inspectors/_shared.d.ts +124 -0
  329. package/dist/views/metadata-admin/inspectors/_shared.js +113 -0
  330. package/dist/views/metadata-admin/inspectors/expression-validate.d.ts +26 -0
  331. package/dist/views/metadata-admin/inspectors/expression-validate.js +66 -0
  332. package/dist/views/metadata-admin/inspectors/flow-node-config.d.ts +143 -0
  333. package/dist/views/metadata-admin/inspectors/flow-node-config.js +461 -0
  334. package/dist/views/metadata-admin/inspectors/index.d.ts +1 -0
  335. package/dist/views/metadata-admin/inspectors/index.js +45 -0
  336. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.d.ts +40 -0
  337. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.js +227 -0
  338. package/dist/views/metadata-admin/inspectors/useDatasetFields.d.ts +72 -0
  339. package/dist/views/metadata-admin/inspectors/useDatasetFields.js +0 -0
  340. package/dist/views/metadata-admin/mergeServerFields.d.ts +65 -0
  341. package/dist/views/metadata-admin/mergeServerFields.js +56 -0
  342. package/dist/views/metadata-admin/preview-registry.d.ts +55 -0
  343. package/dist/views/metadata-admin/previews/ActionPreview.d.ts +25 -0
  344. package/dist/views/metadata-admin/previews/ActionPreview.js +238 -0
  345. package/dist/views/metadata-admin/previews/AddWidgetPicker.d.ts +12 -0
  346. package/dist/views/metadata-admin/previews/AddWidgetPicker.js +56 -0
  347. package/dist/views/metadata-admin/previews/AgentPreview.d.ts +24 -0
  348. package/dist/views/metadata-admin/previews/AgentPreview.js +100 -0
  349. package/dist/views/metadata-admin/previews/AppNavCanvas.d.ts +31 -0
  350. package/dist/views/metadata-admin/previews/AppNavCanvas.js +260 -0
  351. package/dist/views/metadata-admin/previews/AppPreview.d.ts +16 -1
  352. package/dist/views/metadata-admin/previews/AppPreview.js +23 -14
  353. package/dist/views/metadata-admin/previews/BookPreview.d.ts +20 -0
  354. package/dist/views/metadata-admin/previews/BookPreview.js +132 -0
  355. package/dist/views/metadata-admin/previews/DashboardPreview.d.ts +16 -1
  356. package/dist/views/metadata-admin/previews/DashboardPreview.js +110 -8
  357. package/dist/views/metadata-admin/previews/DatasetPreview.d.ts +18 -0
  358. package/dist/views/metadata-admin/previews/DatasetPreview.js +89 -0
  359. package/dist/views/metadata-admin/previews/DatasourcePreview.d.ts +23 -0
  360. package/dist/views/metadata-admin/previews/DatasourcePreview.js +68 -0
  361. package/dist/views/metadata-admin/previews/EmailTemplatePreview.d.ts +14 -1
  362. package/dist/views/metadata-admin/previews/FieldStub.d.ts +30 -0
  363. package/dist/views/metadata-admin/previews/FieldStub.js +104 -0
  364. package/dist/views/metadata-admin/previews/FieldsListEditor.d.ts +50 -0
  365. package/dist/views/metadata-admin/previews/FieldsListEditor.js +97 -0
  366. package/dist/views/metadata-admin/previews/FlowCanvas.d.ts +43 -0
  367. package/dist/views/metadata-admin/previews/FlowCanvas.js +328 -0
  368. package/dist/views/metadata-admin/previews/FlowPreview.d.ts +20 -0
  369. package/dist/views/metadata-admin/previews/FlowPreview.js +92 -0
  370. package/dist/views/metadata-admin/previews/FlowRunsPanel.d.ts +46 -0
  371. package/dist/views/metadata-admin/previews/FlowRunsPanel.js +97 -0
  372. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.d.ts +25 -0
  373. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.js +170 -0
  374. package/dist/views/metadata-admin/previews/JobPreview.d.ts +28 -0
  375. package/dist/views/metadata-admin/previews/JobPreview.js +290 -0
  376. package/dist/views/metadata-admin/previews/ObjectFormCanvas.d.ts +30 -0
  377. package/dist/views/metadata-admin/previews/ObjectFormCanvas.js +547 -0
  378. package/dist/views/metadata-admin/previews/ObjectPreview.d.ts +14 -1
  379. package/dist/views/metadata-admin/previews/ObjectPreview.js +5 -30
  380. package/dist/views/metadata-admin/previews/OutlineStrip.d.ts +32 -0
  381. package/dist/views/metadata-admin/previews/OutlineStrip.js +8 -0
  382. package/dist/views/metadata-admin/previews/PageBlockCanvas.d.ts +49 -0
  383. package/dist/views/metadata-admin/previews/PageBlockCanvas.js +510 -0
  384. package/dist/views/metadata-admin/previews/PagePreview.d.ts +10 -1
  385. package/dist/views/metadata-admin/previews/PagePreview.js +90 -4
  386. package/dist/views/metadata-admin/previews/PermissionPreview.d.ts +27 -0
  387. package/dist/views/metadata-admin/previews/PermissionPreview.js +115 -0
  388. package/dist/views/metadata-admin/previews/PreviewShell.d.ts +29 -6
  389. package/dist/views/metadata-admin/previews/PreviewShell.js +16 -3
  390. package/dist/views/metadata-admin/previews/ReportPreview.d.ts +18 -1
  391. package/dist/views/metadata-admin/previews/ReportPreview.js +23 -15
  392. package/dist/views/metadata-admin/previews/RolePreview.d.ts +19 -0
  393. package/dist/views/metadata-admin/previews/RolePreview.js +14 -0
  394. package/dist/views/metadata-admin/previews/SkillPreview.d.ts +22 -0
  395. package/dist/views/metadata-admin/previews/SkillPreview.js +34 -0
  396. package/dist/views/metadata-admin/previews/ToolPreview.d.ts +25 -0
  397. package/dist/views/metadata-admin/previews/ToolPreview.js +122 -0
  398. package/dist/views/metadata-admin/previews/TranslationPreview.d.ts +25 -0
  399. package/dist/views/metadata-admin/previews/TranslationPreview.js +52 -0
  400. package/dist/views/metadata-admin/previews/ValidationPreview.d.ts +27 -0
  401. package/dist/views/metadata-admin/previews/ValidationPreview.js +110 -0
  402. package/dist/views/metadata-admin/previews/ViewColumnPanes.d.ts +62 -0
  403. package/dist/views/metadata-admin/previews/ViewColumnPanes.js +140 -0
  404. package/dist/views/metadata-admin/previews/ViewPreview.d.ts +23 -1
  405. package/dist/views/metadata-admin/previews/ViewPreview.js +101 -73
  406. package/dist/views/metadata-admin/previews/block-config.d.ts +82 -0
  407. package/dist/views/metadata-admin/previews/block-config.js +324 -0
  408. package/dist/views/metadata-admin/previews/block-types.d.ts +40 -0
  409. package/dist/views/metadata-admin/previews/block-types.js +110 -0
  410. package/dist/views/metadata-admin/previews/field-types.d.ts +53 -0
  411. package/dist/views/metadata-admin/previews/field-types.js +97 -0
  412. package/dist/views/metadata-admin/previews/flow-canvas-layout.d.ts +88 -0
  413. package/dist/views/metadata-admin/previews/flow-canvas-layout.js +190 -0
  414. package/dist/views/metadata-admin/previews/flow-canvas-parts.d.ts +88 -0
  415. package/dist/views/metadata-admin/previews/flow-canvas-parts.js +358 -0
  416. package/dist/views/metadata-admin/previews/form-preview.d.ts +24 -0
  417. package/dist/views/metadata-admin/previews/form-preview.js +29 -0
  418. package/dist/views/metadata-admin/previews/index.js +43 -0
  419. package/dist/views/metadata-admin/previews/object-fields-bridge.d.ts +66 -0
  420. package/dist/views/metadata-admin/previews/object-fields-bridge.js +171 -0
  421. package/dist/views/metadata-admin/previews/object-fields-io.d.ts +109 -0
  422. package/dist/views/metadata-admin/previews/object-fields-io.js +208 -0
  423. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.d.ts +91 -0
  424. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.js +2 -0
  425. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.d.ts +8 -0
  426. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.js +113 -0
  427. package/dist/views/metadata-admin/previews/simulator/flow-simulator.d.ts +44 -0
  428. package/dist/views/metadata-admin/previews/simulator/flow-simulator.js +316 -0
  429. package/dist/views/metadata-admin/previews/useDatasetCatalog.d.ts +47 -0
  430. package/dist/views/metadata-admin/previews/useDatasetCatalog.js +133 -0
  431. package/dist/views/metadata-admin/previews/useFlowNodePalette.d.ts +44 -0
  432. package/dist/views/metadata-admin/previews/useFlowNodePalette.js +124 -0
  433. package/dist/views/metadata-admin/previews/useMetaOptions.d.ts +8 -0
  434. package/dist/views/metadata-admin/previews/useMetaOptions.js +50 -0
  435. package/dist/views/metadata-admin/previews/useObjectFields.d.ts +23 -0
  436. package/dist/views/metadata-admin/previews/useObjectFields.js +79 -0
  437. package/dist/views/metadata-admin/previews/useObjectOptions.d.ts +8 -0
  438. package/dist/views/metadata-admin/previews/useObjectOptions.js +43 -0
  439. package/dist/views/metadata-admin/previews/view-column-io.d.ts +42 -0
  440. package/dist/views/metadata-admin/previews/view-column-io.js +73 -0
  441. package/dist/views/metadata-admin/previews/widget-types.d.ts +24 -0
  442. package/dist/views/metadata-admin/previews/widget-types.js +40 -0
  443. package/dist/views/metadata-admin/registry.d.ts +140 -19
  444. package/dist/views/metadata-admin/report-schema.d.ts +26 -0
  445. package/dist/views/metadata-admin/report-schema.js +121 -0
  446. package/dist/views/metadata-admin/useMetadata.d.ts +100 -2
  447. package/dist/views/metadata-admin/useMetadata.js +155 -4
  448. package/dist/views/metadata-admin/view-item-normalize.d.ts +20 -0
  449. package/dist/views/metadata-admin/view-item-normalize.js +68 -0
  450. package/dist/views/metadata-admin/view-schema.d.ts +16 -0
  451. package/dist/views/metadata-admin/view-schema.js +107 -0
  452. package/dist/views/metadata-admin/view-variant-model.d.ts +23 -0
  453. package/dist/views/metadata-admin/view-variant-model.js +64 -0
  454. package/dist/views/metadata-admin/widgets.d.ts +89 -1
  455. package/dist/views/metadata-admin/widgets.js +491 -17
  456. package/dist/views/runtime-metadata-persistence.d.ts +78 -0
  457. package/dist/views/runtime-metadata-persistence.js +89 -0
  458. package/dist/views/useOpenRecordList.d.ts +18 -0
  459. package/dist/views/useOpenRecordList.js +36 -0
  460. package/dist/views/userFilterUrlState.d.ts +15 -0
  461. package/dist/views/userFilterUrlState.js +53 -0
  462. package/dist/views/view-config-adapter.d.ts +38 -0
  463. package/dist/views/view-config-adapter.js +80 -0
  464. package/package.json +52 -34
  465. package/dist/views/DesignDrawer.d.ts +0 -28
  466. package/dist/views/DesignDrawer.js +0 -51
  467. package/dist/views/metadata-admin/DesignerEditorWrapper.d.ts +0 -68
  468. package/dist/views/metadata-admin/DesignerEditorWrapper.js +0 -158
@@ -0,0 +1,171 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ /** Set of types the designer can edit losslessly. Keep in sync with FieldDesigner. */
3
+ const DESIGNER_TYPES = new Set([
4
+ 'text',
5
+ 'textarea',
6
+ 'number',
7
+ 'boolean',
8
+ 'date',
9
+ 'datetime',
10
+ 'time',
11
+ 'select',
12
+ 'email',
13
+ 'phone',
14
+ 'url',
15
+ 'password',
16
+ 'currency',
17
+ 'percent',
18
+ 'lookup',
19
+ 'formula',
20
+ 'autonumber',
21
+ 'file',
22
+ 'image',
23
+ 'markdown',
24
+ 'html',
25
+ 'color',
26
+ 'code',
27
+ 'location',
28
+ 'address',
29
+ 'rating',
30
+ 'slider',
31
+ ]);
32
+ /** Try to map a framework field type to a designer type; null if unsupported. */
33
+ function mapFrameworkToDesignerType(t) {
34
+ if (!t)
35
+ return null;
36
+ if (DESIGNER_TYPES.has(t))
37
+ return t;
38
+ // Best-effort fallbacks for the most common "close cousin" types.
39
+ switch (t) {
40
+ case 'richtext':
41
+ return 'html';
42
+ case 'toggle':
43
+ return 'boolean';
44
+ case 'multiselect':
45
+ case 'checkboxes':
46
+ case 'radio':
47
+ return 'select';
48
+ case 'master_detail':
49
+ case 'tree':
50
+ return 'lookup';
51
+ default:
52
+ return null;
53
+ }
54
+ }
55
+ export function bridgeFromDraft(fieldsInput) {
56
+ const preserved = new Map();
57
+ const designerFields = [];
58
+ const originalOrder = [];
59
+ if (!fieldsInput || typeof fieldsInput !== 'object') {
60
+ return { designerFields, preserved, inputShape: 'record', originalOrder };
61
+ }
62
+ const isArray = Array.isArray(fieldsInput);
63
+ const inputShape = isArray ? 'array' : 'record';
64
+ const entries = isArray
65
+ ? fieldsInput.map((def, i) => [
66
+ String(def?.name ?? `field_${i + 1}`),
67
+ def,
68
+ ])
69
+ : Object.entries(fieldsInput);
70
+ for (const [name, def] of entries) {
71
+ originalOrder.push(name);
72
+ const mapped = mapFrameworkToDesignerType(def?.type);
73
+ if (mapped === null) {
74
+ // Quarantine — preserve as-is, do not surface in the designer.
75
+ preserved.set(name, def);
76
+ continue;
77
+ }
78
+ designerFields.push({
79
+ id: name, // FieldDesigner uses id as React key; using `name` is stable across edits.
80
+ name,
81
+ label: String(def?.label ?? name),
82
+ type: mapped,
83
+ required: !!def?.required,
84
+ unique: !!def?.unique,
85
+ readonly: !!def?.readonly,
86
+ hidden: !!def?.hidden,
87
+ description: typeof def?.description === 'string' ? def.description : undefined,
88
+ defaultValue: def?.default,
89
+ placeholder: typeof def?.placeholder === 'string' ? def.placeholder : undefined,
90
+ group: typeof def?.group === 'string' ? def.group : undefined,
91
+ options: Array.isArray(def?.options)
92
+ ? def.options.map((o) => ({
93
+ label: String(o.label ?? o.value),
94
+ value: String(o.value),
95
+ color: o.color,
96
+ }))
97
+ : undefined,
98
+ referenceTo: typeof def?.reference === 'string' ? def.reference : undefined,
99
+ formula: typeof def?.formula === 'string' ? def.formula : undefined,
100
+ });
101
+ }
102
+ return { designerFields, preserved, inputShape, originalOrder };
103
+ }
104
+ /**
105
+ * Reassemble the framework-shape fields record from designer output.
106
+ * Preserved fields are spliced back in their original order. Newly
107
+ * added fields land at the end.
108
+ */
109
+ export function commitToDraft(designerFields, prev) {
110
+ const designerByName = new Map();
111
+ for (const f of designerFields)
112
+ designerByName.set(f.name, f);
113
+ const writeName = (name, target) => {
114
+ const preserved = prev.preserved.get(name);
115
+ if (preserved) {
116
+ target[name] = preserved;
117
+ return;
118
+ }
119
+ const f = designerByName.get(name);
120
+ if (f) {
121
+ target[name] = serializeDesignerField(f);
122
+ }
123
+ };
124
+ const result = {};
125
+ // First emit fields in their original order to preserve user-visible
126
+ // ordering and keep diff noise low for unchanged drafts.
127
+ for (const name of prev.originalOrder) {
128
+ if (designerByName.has(name) || prev.preserved.has(name)) {
129
+ writeName(name, result);
130
+ }
131
+ }
132
+ // Then append any newly added designer fields (not in originalOrder).
133
+ for (const f of designerFields) {
134
+ if (!prev.originalOrder.includes(f.name)) {
135
+ result[f.name] = serializeDesignerField(f);
136
+ }
137
+ }
138
+ if (prev.inputShape === 'array') {
139
+ return Object.entries(result).map(([name, def]) => ({ name, ...def }));
140
+ }
141
+ return result;
142
+ }
143
+ function serializeDesignerField(f) {
144
+ const out = {
145
+ type: f.type,
146
+ label: f.label,
147
+ };
148
+ if (f.required)
149
+ out.required = true;
150
+ if (f.unique)
151
+ out.unique = true;
152
+ if (f.readonly)
153
+ out.readonly = true;
154
+ if (f.hidden)
155
+ out.hidden = true;
156
+ if (f.description)
157
+ out.description = f.description;
158
+ if (f.defaultValue !== undefined)
159
+ out.default = f.defaultValue;
160
+ if (f.placeholder)
161
+ out.placeholder = f.placeholder;
162
+ if (f.group)
163
+ out.group = f.group;
164
+ if (f.options && f.options.length > 0)
165
+ out.options = f.options;
166
+ if (f.referenceTo)
167
+ out.reference = f.referenceTo;
168
+ if (f.formula)
169
+ out.formula = f.formula;
170
+ return out;
171
+ }
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Field-IO helpers for the form-designer canvas + inspector.
3
+ *
4
+ * `draft.fields` can be either an array `[{name, ...def}, …]` (the
5
+ * legacy / objectql shape) or a record `{name: def, …}` (the spec
6
+ * shape used in `*.object.ts`). This module reads/writes both shapes
7
+ * transparently and preserves arbitrary unknown properties on each
8
+ * field — the inspector only edits the keys it knows about.
9
+ *
10
+ * Field reorders / inserts / removes are performed on a normalized
11
+ * ordered list and serialized back to the input shape, so round-trips
12
+ * are non-destructive.
13
+ */
14
+ import type { FieldTypeId } from './field-types';
15
+ export type Shape = 'array' | 'record';
16
+ export interface FieldEntry {
17
+ /** Canonical snake_case key. */
18
+ name: string;
19
+ /** Raw framework field definition (label, type, options, …). */
20
+ def: Record<string, unknown>;
21
+ }
22
+ export interface FieldsView {
23
+ shape: Shape;
24
+ entries: FieldEntry[];
25
+ }
26
+ /** Read draft.fields into a normalized ordered list. */
27
+ export declare function readFields(fieldsInput: unknown): FieldsView;
28
+ /** Serialize the ordered list back to the original shape. */
29
+ export declare function writeFields(view: FieldsView): Record<string, unknown> | Array<Record<string, unknown>>;
30
+ /** Find the index of a field by name. Returns -1 if not found. */
31
+ export declare function indexOfField(view: FieldsView, name: string): number;
32
+ /** Build a fresh field definition for the given type. */
33
+ export declare function newField(name: string, type: FieldTypeId, label?: string): FieldEntry;
34
+ /** Convert a snake_case name to a human-friendly Title Case label. */
35
+ export declare function toLabel(name: string): string;
36
+ /** Normalize an arbitrary string into a valid snake_case field name. */
37
+ export declare function toFieldName(raw: string): string;
38
+ /**
39
+ * A declared field group (a.k.a. "section"). Lives at the object's
40
+ * top level as `draft.fieldGroups`; individual fields opt into a group
41
+ * via `Field.group === FieldGroup.key`.
42
+ */
43
+ export interface FieldGroup {
44
+ key: string;
45
+ label: string;
46
+ }
47
+ /** Read `draft.fieldGroups` into a normalized, well-typed list. */
48
+ export declare function readGroups(fieldGroupsInput: unknown): FieldGroup[];
49
+ /**
50
+ * Derive a unique snake_case group key from a human label, avoiding
51
+ * collisions with `existing` keys. Falls back to `group` / `group_N`.
52
+ */
53
+ export declare function genGroupKey(label: string, existing: string[]): string;
54
+ /** Append a new group with a unique key derived from `label`. */
55
+ export declare function addGroup(groups: FieldGroup[], label: string): FieldGroup[];
56
+ /** Rename a group's label in place (key is stable). */
57
+ export declare function renameGroup(groups: FieldGroup[], key: string, label: string): FieldGroup[];
58
+ /** Remove a group declaration (callers should also clear members' `group`). */
59
+ export declare function removeGroup(groups: FieldGroup[], key: string): FieldGroup[];
60
+ /** Move a group one slot up (-1) or down (+1), clamped to bounds. */
61
+ export declare function moveGroup(groups: FieldGroup[], key: string, dir: -1 | 1): FieldGroup[];
62
+ /** Strip `group === key` from every field (used after removing a group). */
63
+ export declare function clearFieldGroup(view: FieldsView, key: string): FieldsView;
64
+ /** Generic immutable array move helper (also used by group reorder). */
65
+ export declare function moveArray<T>(arr: T[], from: number, to: number): T[];
66
+ /**
67
+ * Group entries by their `group` property, in `fieldGroups[]` order.
68
+ * Fields with no group (or a group not declared in fieldGroups) land
69
+ * in a trailing "Ungrouped" bucket.
70
+ *
71
+ * By default empty *declared* groups are dropped to avoid chrome noise
72
+ * (read-only / preview). Pass `includeEmptyDeclared` while editing so a
73
+ * freshly-added, still-empty section stays visible as a drop target.
74
+ */
75
+ export interface GroupedEntries {
76
+ key: string | null;
77
+ label: string;
78
+ entries: FieldEntry[];
79
+ }
80
+ export declare function groupEntries(view: FieldsView, fieldGroups: Array<{
81
+ key?: string;
82
+ label?: string;
83
+ }> | undefined, opts?: {
84
+ includeEmptyDeclared?: boolean;
85
+ }): GroupedEntries[];
86
+ export type FieldDiffStatus = 'added' | 'removed' | 'changed' | 'unchanged';
87
+ export interface FieldDiffEntry {
88
+ name: string;
89
+ status: FieldDiffStatus;
90
+ /** Sorted def keys that differ (only for `changed`). */
91
+ changedKeys: string[];
92
+ }
93
+ export interface FieldsDiff {
94
+ /** Per current-field status, keyed by field name. */
95
+ byName: Record<string, FieldDiffEntry>;
96
+ /** Baseline fields absent from the current draft (rendered as ghosts). */
97
+ removed: FieldEntry[];
98
+ counts: {
99
+ added: number;
100
+ changed: number;
101
+ removed: number;
102
+ };
103
+ }
104
+ /**
105
+ * Diff the current `fields` against a `baseline` (e.g. the last published
106
+ * version). Drives the canvas review mode: added / changed / removed
107
+ * per field. Shape-agnostic — both inputs are read via {@link readFields}.
108
+ */
109
+ export declare function diffFields(baselineInput: unknown, currentInput: unknown): FieldsDiff;
@@ -0,0 +1,208 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ /** Read draft.fields into a normalized ordered list. */
3
+ export function readFields(fieldsInput) {
4
+ if (Array.isArray(fieldsInput)) {
5
+ return {
6
+ shape: 'array',
7
+ entries: fieldsInput.map((raw, i) => {
8
+ const { name, ...rest } = raw ?? {};
9
+ return {
10
+ name: typeof name === 'string' && name ? name : `field_${i + 1}`,
11
+ def: rest,
12
+ };
13
+ }),
14
+ };
15
+ }
16
+ if (fieldsInput && typeof fieldsInput === 'object') {
17
+ return {
18
+ shape: 'record',
19
+ entries: Object.entries(fieldsInput).map(([name, def]) => ({ name, def: { ...(def ?? {}) } })),
20
+ };
21
+ }
22
+ return { shape: 'record', entries: [] };
23
+ }
24
+ /** Serialize the ordered list back to the original shape. */
25
+ export function writeFields(view) {
26
+ if (view.shape === 'array') {
27
+ return view.entries.map((e) => ({ name: e.name, ...e.def }));
28
+ }
29
+ const out = {};
30
+ for (const e of view.entries)
31
+ out[e.name] = e.def;
32
+ return out;
33
+ }
34
+ /** Find the index of a field by name. Returns -1 if not found. */
35
+ export function indexOfField(view, name) {
36
+ return view.entries.findIndex((e) => e.name === name);
37
+ }
38
+ /** Build a fresh field definition for the given type. */
39
+ export function newField(name, type, label) {
40
+ const def = { type, label: label ?? toLabel(name) };
41
+ // Seed a single empty option so picklist editor renders a row to fill in.
42
+ if (type === 'select' || type === 'multiselect' || type === 'radio' || type === 'checkboxes') {
43
+ def.options = [{ value: '', label: '' }];
44
+ }
45
+ return { name, def };
46
+ }
47
+ /** Convert a snake_case name to a human-friendly Title Case label. */
48
+ export function toLabel(name) {
49
+ if (!name)
50
+ return '';
51
+ return name
52
+ .split('_')
53
+ .filter(Boolean)
54
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
55
+ .join(' ');
56
+ }
57
+ /** Normalize an arbitrary string into a valid snake_case field name. */
58
+ export function toFieldName(raw) {
59
+ const lower = raw.trim().toLowerCase();
60
+ const sanitized = lower
61
+ .replace(/[^a-z0-9]+/g, '_')
62
+ .replace(/^_+|_+$/g, '')
63
+ .replace(/_{2,}/g, '_');
64
+ if (!sanitized)
65
+ return 'field';
66
+ if (!/^[a-z_]/.test(sanitized))
67
+ return `f_${sanitized}`;
68
+ return sanitized;
69
+ }
70
+ /** Read `draft.fieldGroups` into a normalized, well-typed list. */
71
+ export function readGroups(fieldGroupsInput) {
72
+ if (!Array.isArray(fieldGroupsInput))
73
+ return [];
74
+ return fieldGroupsInput
75
+ .filter((g) => !!g && typeof g === 'object')
76
+ .map((g) => ({
77
+ key: typeof g.key === 'string' ? g.key : '',
78
+ label: typeof g.label === 'string' ? g.label : '',
79
+ }))
80
+ .filter((g) => g.key);
81
+ }
82
+ /**
83
+ * Derive a unique snake_case group key from a human label, avoiding
84
+ * collisions with `existing` keys. Falls back to `group` / `group_N`.
85
+ */
86
+ export function genGroupKey(label, existing) {
87
+ // toFieldName() bottoms out at "field"; for a *group* key prefer
88
+ // "group" when the label carries no usable alphanumerics.
89
+ const base = /[a-z0-9]/i.test(label) ? toFieldName(label) : 'group';
90
+ if (!existing.includes(base))
91
+ return base;
92
+ let i = 2;
93
+ while (existing.includes(`${base}_${i}`))
94
+ i += 1;
95
+ return `${base}_${i}`;
96
+ }
97
+ /** Append a new group with a unique key derived from `label`. */
98
+ export function addGroup(groups, label) {
99
+ const clean = label.trim() || 'New section';
100
+ const key = genGroupKey(clean, groups.map((g) => g.key));
101
+ return [...groups, { key, label: clean }];
102
+ }
103
+ /** Rename a group's label in place (key is stable). */
104
+ export function renameGroup(groups, key, label) {
105
+ const clean = label.trim();
106
+ if (!clean)
107
+ return groups;
108
+ return groups.map((g) => (g.key === key ? { ...g, label: clean } : g));
109
+ }
110
+ /** Remove a group declaration (callers should also clear members' `group`). */
111
+ export function removeGroup(groups, key) {
112
+ return groups.filter((g) => g.key !== key);
113
+ }
114
+ /** Move a group one slot up (-1) or down (+1), clamped to bounds. */
115
+ export function moveGroup(groups, key, dir) {
116
+ const idx = groups.findIndex((g) => g.key === key);
117
+ if (idx < 0)
118
+ return groups;
119
+ const to = idx + dir;
120
+ if (to < 0 || to >= groups.length)
121
+ return groups;
122
+ return moveArray(groups, idx, to);
123
+ }
124
+ /** Strip `group === key` from every field (used after removing a group). */
125
+ export function clearFieldGroup(view, key) {
126
+ return {
127
+ shape: view.shape,
128
+ entries: view.entries.map((e) => e.def.group === key ? { name: e.name, def: { ...e.def, group: undefined } } : e),
129
+ };
130
+ }
131
+ /** Generic immutable array move helper (also used by group reorder). */
132
+ export function moveArray(arr, from, to) {
133
+ const next = arr.slice();
134
+ const [item] = next.splice(from, 1);
135
+ next.splice(to, 0, item);
136
+ return next;
137
+ }
138
+ export function groupEntries(view, fieldGroups, opts) {
139
+ const declared = Array.isArray(fieldGroups) ? fieldGroups.filter((g) => typeof g?.key === 'string') : [];
140
+ const buckets = new Map();
141
+ for (const g of declared) {
142
+ buckets.set(g.key, { key: g.key, label: String(g.label ?? g.key), entries: [] });
143
+ }
144
+ const declaredKeys = new Set(declared.map((g) => g.key));
145
+ for (const e of view.entries) {
146
+ const g = typeof e.def.group === 'string' ? e.def.group : null;
147
+ if (g && declaredKeys.has(g)) {
148
+ buckets.get(g).entries.push(e);
149
+ }
150
+ else {
151
+ if (!buckets.has(null))
152
+ buckets.set(null, { key: null, label: 'Ungrouped', entries: [] });
153
+ buckets.get(null).entries.push(e);
154
+ }
155
+ }
156
+ const includeEmpty = !!opts?.includeEmptyDeclared;
157
+ // Drop empty declared buckets unless asked to keep them (edit mode).
158
+ // The implicit "Ungrouped" bucket is only created when populated, so
159
+ // it never shows empty.
160
+ return Array.from(buckets.values()).filter((b) => b.entries.length > 0 || (includeEmpty && b.key !== null));
161
+ }
162
+ /** Stable equality for field-def values (small JSON — order-sensitive is fine). */
163
+ function valueEqual(a, b) {
164
+ if (a === b)
165
+ return true;
166
+ return JSON.stringify(a ?? null) === JSON.stringify(b ?? null);
167
+ }
168
+ /** Def keys whose values differ between two field definitions, sorted. */
169
+ function changedDefKeys(a, b) {
170
+ const keys = new Set([...Object.keys(a), ...Object.keys(b)]);
171
+ const out = [];
172
+ for (const k of keys)
173
+ if (!valueEqual(a[k], b[k]))
174
+ out.push(k);
175
+ return out.sort();
176
+ }
177
+ /**
178
+ * Diff the current `fields` against a `baseline` (e.g. the last published
179
+ * version). Drives the canvas review mode: added / changed / removed
180
+ * per field. Shape-agnostic — both inputs are read via {@link readFields}.
181
+ */
182
+ export function diffFields(baselineInput, currentInput) {
183
+ const base = readFields(baselineInput);
184
+ const cur = readFields(currentInput);
185
+ const baseByName = new Map(base.entries.map((e) => [e.name, e]));
186
+ const curNames = new Set(cur.entries.map((e) => e.name));
187
+ const byName = {};
188
+ let added = 0;
189
+ let changed = 0;
190
+ for (const e of cur.entries) {
191
+ const b = baseByName.get(e.name);
192
+ if (!b) {
193
+ byName[e.name] = { name: e.name, status: 'added', changedKeys: [] };
194
+ added += 1;
195
+ continue;
196
+ }
197
+ const keys = changedDefKeys(b.def, e.def);
198
+ if (keys.length) {
199
+ byName[e.name] = { name: e.name, status: 'changed', changedKeys: keys };
200
+ changed += 1;
201
+ }
202
+ else {
203
+ byName[e.name] = { name: e.name, status: 'unchanged', changedKeys: [] };
204
+ }
205
+ }
206
+ const removed = base.entries.filter((e) => !curNames.has(e.name));
207
+ return { byName, removed, counts: { added, changed, removed: removed.length } };
208
+ }
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Shared types for the designer-time flow simulator.
3
+ *
4
+ * The simulator is a CLIENT-SIDE, BACKEND-FREE interpreter used to debug a flow
5
+ * draft inside the visual designer. It NEVER calls a `dataSource`: every
6
+ * side-effecting node (CRUD / connector / http / script) is MOCKED, so running
7
+ * a simulation can never write or delete real data and never needs a live
8
+ * environment. Its guiding rule (per design review) is: *never silently
9
+ * simulate semantics that differ from the runtime* — anything we cannot
10
+ * faithfully model (join synchronization, subflows, boundary events, arbitrary
11
+ * script code) is surfaced as an explicit pause/notice instead of a fake
12
+ * "success".
13
+ */
14
+ export interface SimNode {
15
+ id: string;
16
+ type: string;
17
+ label?: string;
18
+ config?: Record<string, unknown>;
19
+ connectorConfig?: Record<string, unknown>;
20
+ [k: string]: unknown;
21
+ }
22
+ export interface SimEdge {
23
+ id?: string;
24
+ source: string;
25
+ target: string;
26
+ condition?: string | {
27
+ source?: string;
28
+ };
29
+ isDefault?: boolean;
30
+ label?: string;
31
+ }
32
+ export type SimStatus = 'idle' | 'running' | 'paused' | 'done' | 'error';
33
+ /** One evaluated outgoing edge of a decision (kept for the debug timeline). */
34
+ export interface SimEdgeEval {
35
+ edgeId: string;
36
+ target: string;
37
+ condition?: string;
38
+ result: boolean;
39
+ error?: string;
40
+ isDefault?: boolean;
41
+ selected: boolean;
42
+ }
43
+ export type SimStepStatus = 'ok' | 'mocked' | 'paused' | 'skipped' | 'error';
44
+ /** A single executed node, rich enough to debug decisions and data writes. */
45
+ export interface SimStep {
46
+ seq: number;
47
+ nodeId: string;
48
+ type: string;
49
+ label: string;
50
+ status: SimStepStatus;
51
+ /** Variable names → values written by this node (mocked side effects). */
52
+ wrote?: Record<string, unknown>;
53
+ /** Per-edge condition diagnostics for a decision node. */
54
+ edges?: SimEdgeEval[];
55
+ /** Human-readable note (e.g. "mocked", "paused for screen input"). */
56
+ note?: string;
57
+ /** Evaluation/structural error surfaced to the author. */
58
+ error?: string;
59
+ }
60
+ export interface SimState {
61
+ status: SimStatus;
62
+ variables: Record<string, unknown>;
63
+ steps: SimStep[];
64
+ /** Node ids waiting to execute. */
65
+ frontier: string[];
66
+ /** Last executed (or currently paused) node. */
67
+ activeNodeId: string | null;
68
+ visitedNodeIds: string[];
69
+ traversedEdgeIds: string[];
70
+ /** Set while `status === 'paused'` ("wait" or "screen"). */
71
+ pausedReason?: string;
72
+ error?: string;
73
+ }
74
+ export type DiagnosticLevel = 'error' | 'warning';
75
+ export interface Diagnostic {
76
+ level: DiagnosticLevel;
77
+ nodeId?: string;
78
+ message: string;
79
+ }
80
+ export interface FlowValidation {
81
+ errors: Diagnostic[];
82
+ warnings: Diagnostic[];
83
+ /** Resolved entry node id, when exactly one is determinable. */
84
+ startNodeId?: string;
85
+ }
86
+ /**
87
+ * Author-supplied mock outputs, keyed by node id. The value is merged into the
88
+ * simulation variables according to the node type (single `outputVariable` or a
89
+ * `outputVariables` list). For a `screen` node it supplies the captured inputs.
90
+ */
91
+ export type MockResults = Record<string, unknown>;
@@ -0,0 +1,2 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ export {};
@@ -0,0 +1,8 @@
1
+ import type { FlowValidation, SimEdge, SimNode } from './flow-sim-types';
2
+ /** Evaluate a CEL condition, capturing (not swallowing) any failure. */
3
+ export declare function evalCondition(expr: string, variables: Record<string, unknown>): {
4
+ result: boolean;
5
+ error?: string;
6
+ };
7
+ /** Static structural checks; `errors` block Run, `warnings` are advisory. */
8
+ export declare function validateFlowDraft(nodes: SimNode[], edges: SimEdge[]): FlowValidation;