@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
@@ -2,12 +2,20 @@
2
2
  * useRecordApprovals
3
3
  *
4
4
  * Resolves the approval state for a single record so the detail-view header
5
- * can surface "Submit for Approval" / "Recall" actions and a status badge.
5
+ * can surface a status badge and when the current user is a pending
6
+ * approver — "Approve" / "Reject" actions.
7
+ *
8
+ * Since ADR-0019 an approval is a **flow node** (`type: 'approval'`), not a
9
+ * standalone process: the flow opens the request when it reaches the node,
10
+ * and a decision resumes the run down its `approve` / `reject` edge. There is
11
+ * therefore no manual "submit" or "recall" from the record header — those
12
+ * endpoints were removed. This hook reads the record's requests and lets a
13
+ * pending approver record a decision.
6
14
  *
7
15
  * Talks directly to the framework REST endpoints under
8
- * `/api/v1/approvals/*`. Fails open: if the approvals plugin is not
9
- * installed (404) or the user has no identity, returns inert state so the
10
- * detail view continues to render normally.
16
+ * `/api/v1/approvals/*`. Fails open: if the approvals plugin is not installed
17
+ * (404 / 501) or the user has no identity, returns inert state so the detail
18
+ * view continues to render normally.
11
19
  */
12
20
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
13
21
  function apiBase() {
@@ -36,7 +44,6 @@ async function fetchJson(path, init) {
36
44
  export function useRecordApprovals(objectName, recordId, currentUserId) {
37
45
  const [loading, setLoading] = useState(false);
38
46
  const [available, setAvailable] = useState(true);
39
- const [processes, setProcesses] = useState([]);
40
47
  const [requests, setRequests] = useState([]);
41
48
  const unavailableRef = useRef(false);
42
49
  const refresh = useCallback(async () => {
@@ -46,16 +53,12 @@ export function useRecordApprovals(objectName, recordId, currentUserId) {
46
53
  return;
47
54
  setLoading(true);
48
55
  try {
49
- const [procResp, reqResp] = await Promise.all([
50
- fetchJson(`/approvals/processes?object=${encodeURIComponent(objectName)}&activeOnly=true`),
51
- fetchJson(`/approvals/requests?object=${encodeURIComponent(objectName)}&recordId=${encodeURIComponent(recordId)}`),
52
- ]);
53
- setProcesses(procResp?.data ?? []);
56
+ const reqResp = await fetchJson(`/approvals/requests?object=${encodeURIComponent(objectName)}&recordId=${encodeURIComponent(recordId)}`);
54
57
  setRequests(reqResp?.data ?? []);
55
58
  setAvailable(true);
56
59
  }
57
60
  catch (err) {
58
- if (err?.status === 404) {
61
+ if (err?.status === 404 || err?.status === 501) {
59
62
  unavailableRef.current = true;
60
63
  setAvailable(false);
61
64
  }
@@ -67,7 +70,6 @@ export function useRecordApprovals(objectName, recordId, currentUserId) {
67
70
  }, [objectName, recordId]);
68
71
  useEffect(() => {
69
72
  if (!objectName || !recordId) {
70
- setProcesses([]);
71
73
  setRequests([]);
72
74
  return;
73
75
  }
@@ -84,30 +86,12 @@ export function useRecordApprovals(objectName, recordId, currentUserId) {
84
86
  });
85
87
  return sorted[0] ?? null;
86
88
  }, [requests]);
87
- const canSubmit = available && processes.length > 0 && !pendingRequest;
88
- const canRecall = !!pendingRequest && !!currentUserId
89
- && pendingRequest.submitter_id === currentUserId;
90
- const submit = useCallback(async (input) => {
91
- if (!objectName || !recordId)
92
- throw new Error('Missing object or record');
93
- const processName = input?.processName
94
- ?? (processes.length === 1 ? processes[0].name : undefined);
95
- const row = await fetchJson(`/approvals/requests`, {
96
- method: 'POST',
97
- body: JSON.stringify({
98
- object: objectName,
99
- recordId,
100
- ...(processName ? { processName } : {}),
101
- ...(input?.comment ? { comment: input.comment } : {}),
102
- }),
103
- });
104
- await refresh();
105
- return row;
106
- }, [objectName, recordId, processes, refresh]);
107
- const recall = useCallback(async (input) => {
89
+ const canDecide = !!pendingRequest && !!currentUserId
90
+ && (pendingRequest.pending_approvers ?? []).includes(currentUserId);
91
+ const decide = useCallback(async (decision, input) => {
108
92
  if (!pendingRequest)
109
93
  throw new Error('No pending request');
110
- const out = await fetchJson(`/approvals/requests/${encodeURIComponent(pendingRequest.id)}/recall`, {
94
+ const out = await fetchJson(`/approvals/requests/${encodeURIComponent(pendingRequest.id)}/${decision}`, {
111
95
  method: 'POST',
112
96
  body: JSON.stringify({
113
97
  ...(currentUserId ? { actorId: currentUserId } : {}),
@@ -115,18 +99,18 @@ export function useRecordApprovals(objectName, recordId, currentUserId) {
115
99
  }),
116
100
  });
117
101
  await refresh();
118
- return out.request;
102
+ return out?.request;
119
103
  }, [pendingRequest, currentUserId, refresh]);
104
+ const approve = useCallback((input) => decide('approve', input), [decide]);
105
+ const reject = useCallback((input) => decide('reject', input), [decide]);
120
106
  return {
121
107
  loading,
122
108
  available,
123
- processes,
124
109
  pendingRequest,
125
110
  latestRequest,
126
- canSubmit,
127
- canRecall,
128
- submit,
129
- recall,
111
+ canDecide,
112
+ approve,
113
+ reject,
130
114
  refresh,
131
115
  };
132
116
  }
@@ -5,24 +5,33 @@
5
5
  * Must be called inside a SidebarProvider context.
6
6
  * @module
7
7
  */
8
- import { useEffect } from 'react';
8
+ import { useEffect, useRef } from 'react';
9
9
  import { useSidebar } from '@object-ui/components';
10
10
  /** Tablet breakpoint range: 768px <= width < 1024px */
11
11
  const TABLET_MIN = 768;
12
12
  const TABLET_MAX = 1024;
13
13
  export function useResponsiveSidebar() {
14
14
  const { setOpen, isMobile } = useSidebar();
15
+ const setOpenRef = useRef(setOpen);
15
16
  useEffect(() => {
17
+ setOpenRef.current = setOpen;
18
+ }, [setOpen]);
19
+ useEffect(() => {
20
+ if (isMobile)
21
+ return undefined;
22
+ let wasTablet = false;
16
23
  function handleResize() {
17
24
  const width = window.innerWidth;
18
- if (width >= TABLET_MIN && width < TABLET_MAX) {
19
- // Tablet: auto-collapse sidebar
20
- setOpen(false);
25
+ const isTablet = width >= TABLET_MIN && width < TABLET_MAX;
26
+ if (isTablet && !wasTablet) {
27
+ // Auto-collapse once when entering tablet width, then preserve manual toggles.
28
+ setOpenRef.current(false);
21
29
  }
30
+ wasTablet = isTablet;
22
31
  }
23
32
  // Run on mount to set initial state
24
33
  handleResize();
25
34
  window.addEventListener('resize', handleResize);
26
35
  return () => window.removeEventListener('resize', handleResize);
27
- }, [setOpen, isMobile]);
36
+ }, [isMobile]);
28
37
  }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * useSettleSignal — React binding for the global in-flight/idle signal.
3
+ *
4
+ * Subscribes to the app-shell settle counter (ADR-0054 C5) so a component can
5
+ * render a global busy indicator or gate UI on "no requests in flight".
6
+ *
7
+ * @example
8
+ * const { pending, idle } = useSettleSignal();
9
+ * return idle ? null : <GlobalSpinner count={pending} />;
10
+ *
11
+ * @module
12
+ */
13
+ export interface SettleSignalState {
14
+ /** Number of requests currently in flight. */
15
+ pending: number;
16
+ /** Whether the app is idle (no requests in flight). */
17
+ idle: boolean;
18
+ }
19
+ export declare function useSettleSignal(): SettleSignalState;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * useSettleSignal — React binding for the global in-flight/idle signal.
3
+ *
4
+ * Subscribes to the app-shell settle counter (ADR-0054 C5) so a component can
5
+ * render a global busy indicator or gate UI on "no requests in flight".
6
+ *
7
+ * @example
8
+ * const { pending, idle } = useSettleSignal();
9
+ * return idle ? null : <GlobalSpinner count={pending} />;
10
+ *
11
+ * @module
12
+ */
13
+ import { useSyncExternalStore } from 'react';
14
+ import { getPendingRequests, subscribeSettle, } from '../observability/settleSignal';
15
+ export function useSettleSignal() {
16
+ const pending = useSyncExternalStore(subscribeSettle, getPendingRequests,
17
+ // SSR/server snapshot — there is no client request activity yet.
18
+ () => 0);
19
+ return { pending, idle: pending === 0 };
20
+ }
@@ -13,6 +13,12 @@
13
13
  * /apps/:appName/page/:id
14
14
  * /apps/:appName/report/:id
15
15
  *
16
+ * It also understands the Studio metadata-admin item routes so that browsing
17
+ * metadata records "recently viewed" entries:
18
+ *
19
+ * /apps/:appName/metadata/:type/:name
20
+ * /apps/:appName/metadata/:type/:name/history
21
+ *
16
22
  * Pass `objects` (the list available in the current app) so we can resolve
17
23
  * a human-readable label for object routes.
18
24
  *
@@ -25,6 +31,15 @@ const ROUTE_PREFIXES = new Set(['view', 'record', 'page', 'dashboard', 'design',
25
31
  function titleize(slug) {
26
32
  return slug.replace(/[-_]/g, ' ').replace(/\b\w/g, c => c.toUpperCase());
27
33
  }
34
+ /** Decode a URL path segment, falling back to the raw value on malformed input. */
35
+ function safeDecode(value) {
36
+ try {
37
+ return decodeURIComponent(value);
38
+ }
39
+ catch {
40
+ return value;
41
+ }
42
+ }
28
43
  export function useTrackRouteAsRecent({ pathname, appName, objects = [], basePathSegment = 'apps', disabled = false, }) {
29
44
  const { addRecentItem } = useRecentItems();
30
45
  // Hold `objects` in a ref so we don't re-fire the tracking effect every
@@ -42,6 +57,26 @@ export function useTrackRouteAsRecent({ pathname, appName, objects = [], basePat
42
57
  const seg2 = parts[2];
43
58
  const seg3 = parts[3];
44
59
  const basePath = `/${basePathSegment}/${appName}`;
60
+ // Studio metadata-admin item routes:
61
+ // /apps/:app/metadata/:type/:name (view / edit a metadata item)
62
+ // /apps/:app/metadata/:type/:name/history
63
+ // Record the specific item as recently-viewed. The bare list route
64
+ // (/metadata/:type) and the create route (/metadata/:type/new) are skipped
65
+ // to keep the list focused on concrete resources. Placed before the
66
+ // object-name branch since `metadata` is a route prefix, not an object.
67
+ if (seg2 === 'metadata') {
68
+ const metaType = parts[3];
69
+ const metaName = parts[4];
70
+ if (metaType && metaName && metaName !== 'new') {
71
+ addRecentItem({
72
+ id: `metadata:${metaType}:${safeDecode(metaName)}`,
73
+ label: safeDecode(metaName),
74
+ href: `${basePath}/metadata/${metaType}/${metaName}`,
75
+ type: 'metadata',
76
+ });
77
+ }
78
+ return;
79
+ }
45
80
  if (seg2 && !ROUTE_PREFIXES.has(seg2)) {
46
81
  const obj = objectsRef.current.find(o => o.name === seg2);
47
82
  if (obj) {
@@ -0,0 +1,62 @@
1
+ /**
2
+ * useUrlOverlay
3
+ *
4
+ * Router-aware open-state for a navigable overlay (command palette, keyboard-
5
+ * shortcuts dialog, record drawer, action dialog, wizard step). The open state
6
+ * is stored in a `?<key>=1` URL search param instead of component `useState`.
7
+ *
8
+ * Why — ADR-0054 "UI testability contract", invariant C3 (URL-addressable
9
+ * state) + C1 (idempotent, direct triggers):
10
+ *
11
+ * - **Deep-linkable / restore-on-reload / back-forward aware.** Open state is
12
+ * a single source of truth in the URL, so the overlay can be reached by
13
+ * navigating to a URL — the most powerful automation primitive — and shared
14
+ * as a link.
15
+ * - **Idempotent open.** `openOverlay()` / `setOpen(true)` are no-ops when the
16
+ * overlay is already open (they never toggle), so an automated driver can
17
+ * always *ensure* it is open. `toggleOverlay()` is provided separately for
18
+ * keyboard accelerators (close-on-repeat).
19
+ *
20
+ * This generalizes the command-palette implementation from ADR-0054 Phase 1 so
21
+ * every navigable overlay can adopt the same contract with one line.
22
+ *
23
+ * @example
24
+ * const { open, setOpen, openOverlay } = useUrlOverlay('palette', { alias: 'cmdk' });
25
+ * // header button: onClick={openOverlay}
26
+ * // dialog: <Dialog open={open} onOpenChange={setOpen}>
27
+ * // deep-link that opens: /apps/foo?palette=1
28
+ *
29
+ * @module
30
+ */
31
+ export interface UseUrlOverlayOptions {
32
+ /**
33
+ * Additional param name(s) accepted as "open" on read (e.g. a legacy alias).
34
+ * Writes always use the canonical `key`; aliases are removed when present.
35
+ */
36
+ alias?: string | string[];
37
+ /** The truthy value written/compared for the param. Defaults to `'1'`. */
38
+ value?: string;
39
+ /**
40
+ * Use `history.replaceState` instead of `pushState` when toggling. Defaults
41
+ * to `true` so a transient overlay doesn't pile up browser-history entries.
42
+ */
43
+ replace?: boolean;
44
+ }
45
+ export interface UrlOverlayControls {
46
+ /** Whether the overlay is currently open (derived from the URL). */
47
+ open: boolean;
48
+ /** Idempotent setter — no navigation when already in the target state. */
49
+ setOpen: (open: boolean) => void;
50
+ /** Idempotent open — a no-op when already open (C1). */
51
+ openOverlay: () => void;
52
+ /** Idempotent close. */
53
+ closeOverlay: () => void;
54
+ /** Toggle — for keyboard accelerators, not for "open" affordances. */
55
+ toggleOverlay: () => void;
56
+ }
57
+ /**
58
+ * Manage a navigable overlay's open state via a `?<key>=1` URL param.
59
+ *
60
+ * Must be called inside a React Router context (uses `useSearchParams`).
61
+ */
62
+ export declare function useUrlOverlay(key: string, options?: UseUrlOverlayOptions): UrlOverlayControls;
@@ -0,0 +1,88 @@
1
+ /**
2
+ * useUrlOverlay
3
+ *
4
+ * Router-aware open-state for a navigable overlay (command palette, keyboard-
5
+ * shortcuts dialog, record drawer, action dialog, wizard step). The open state
6
+ * is stored in a `?<key>=1` URL search param instead of component `useState`.
7
+ *
8
+ * Why — ADR-0054 "UI testability contract", invariant C3 (URL-addressable
9
+ * state) + C1 (idempotent, direct triggers):
10
+ *
11
+ * - **Deep-linkable / restore-on-reload / back-forward aware.** Open state is
12
+ * a single source of truth in the URL, so the overlay can be reached by
13
+ * navigating to a URL — the most powerful automation primitive — and shared
14
+ * as a link.
15
+ * - **Idempotent open.** `openOverlay()` / `setOpen(true)` are no-ops when the
16
+ * overlay is already open (they never toggle), so an automated driver can
17
+ * always *ensure* it is open. `toggleOverlay()` is provided separately for
18
+ * keyboard accelerators (close-on-repeat).
19
+ *
20
+ * This generalizes the command-palette implementation from ADR-0054 Phase 1 so
21
+ * every navigable overlay can adopt the same contract with one line.
22
+ *
23
+ * @example
24
+ * const { open, setOpen, openOverlay } = useUrlOverlay('palette', { alias: 'cmdk' });
25
+ * // header button: onClick={openOverlay}
26
+ * // dialog: <Dialog open={open} onOpenChange={setOpen}>
27
+ * // deep-link that opens: /apps/foo?palette=1
28
+ *
29
+ * @module
30
+ */
31
+ import { useCallback, useMemo } from 'react';
32
+ import { useSearchParams } from 'react-router-dom';
33
+ function asArray(v) {
34
+ if (v == null)
35
+ return [];
36
+ return Array.isArray(v) ? v : [v];
37
+ }
38
+ /**
39
+ * Manage a navigable overlay's open state via a `?<key>=1` URL param.
40
+ *
41
+ * Must be called inside a React Router context (uses `useSearchParams`).
42
+ */
43
+ export function useUrlOverlay(key, options) {
44
+ const { alias, value = '1', replace = true } = options ?? {};
45
+ const [searchParams, setSearchParams] = useSearchParams();
46
+ const aliasKeys = useMemo(() => asArray(alias), [alias]);
47
+ const isOpen = useCallback((params) => params.get(key) === value || aliasKeys.some((a) => params.get(a) === value), [key, value, aliasKeys]);
48
+ const open = isOpen(searchParams);
49
+ const setOpen = useCallback((next) => {
50
+ // Truly idempotent: when already in the target state, do nothing — no
51
+ // redundant history navigation.
52
+ if (next === isOpen(searchParams))
53
+ return;
54
+ const sp = new URLSearchParams(searchParams);
55
+ if (next) {
56
+ sp.set(key, value);
57
+ for (const a of aliasKeys)
58
+ sp.delete(a);
59
+ }
60
+ else {
61
+ sp.delete(key);
62
+ for (const a of aliasKeys)
63
+ sp.delete(a);
64
+ }
65
+ setSearchParams(sp, { replace });
66
+ }, [isOpen, searchParams, setSearchParams, key, value, aliasKeys, replace]);
67
+ const openOverlay = useCallback(() => setOpen(true), [setOpen]);
68
+ const closeOverlay = useCallback(() => setOpen(false), [setOpen]);
69
+ // Toggle uses the functional updater so it never depends on `open` — keeping
70
+ // a keydown listener that references it stable across navigations.
71
+ const toggleOverlay = useCallback(() => {
72
+ setSearchParams((prev) => {
73
+ const sp = new URLSearchParams(prev);
74
+ if (isOpen(sp)) {
75
+ sp.delete(key);
76
+ for (const a of aliasKeys)
77
+ sp.delete(a);
78
+ }
79
+ else {
80
+ sp.set(key, value);
81
+ for (const a of aliasKeys)
82
+ sp.delete(a);
83
+ }
84
+ return sp;
85
+ }, { replace });
86
+ }, [setSearchParams, isOpen, key, value, aliasKeys, replace]);
87
+ return { open, setOpen, openOverlay, closeOverlay, toggleOverlay };
88
+ }
package/dist/index.d.ts CHANGED
@@ -9,6 +9,11 @@ export { AdapterProvider, useAdapter } from './providers/AdapterProvider';
9
9
  export { MetadataProvider, useMetadata, useMetadataItem } from './providers/MetadataProvider';
10
10
  export { ExpressionProvider, useExpressionContext, evaluateVisibility } from './providers/ExpressionProvider';
11
11
  export { useObjectActions } from './hooks/useObjectActions';
12
+ export { useUrlOverlay } from './hooks/useUrlOverlay';
13
+ export type { UseUrlOverlayOptions, UrlOverlayControls } from './hooks/useUrlOverlay';
14
+ export { useSettleSignal } from './hooks/useSettleSignal';
15
+ export type { SettleSignalState } from './hooks/useSettleSignal';
16
+ export { getPendingRequests, isIdle, subscribeSettle, whenIdle, withSettleSignal, installSettleSignalGlobal, type ObjectUiGlobal, } from './observability/settleSignal';
12
17
  export { useRecentItems } from './hooks/useRecentItems';
13
18
  export type { AppShellProps, } from './types';
14
19
  export type { MetadataState, MetadataContextValue, MetadataTypeStatus, } from './providers/MetadataProvider';
@@ -19,14 +24,14 @@ export { ConsoleLayout, AppHeader, AppSidebar, UnifiedSidebar, AppSwitcher, Conn
19
24
  export type { ActivityItem } from './layout';
20
25
  export { CommandPalette, KeyboardShortcutsDialog, OnboardingWalkthrough, ConditionalAuthWrapper, ConsoleToaster, RouteFader, toastWithUndo, type ToastWithUndoOptions, ErrorBoundary, LoadingScreen, ThemeProvider, useTheme, } from './chrome';
21
26
  export { initSentry, captureError, setSentryUser, getSentry } from './observability';
22
- export { initRuntimeConfig, getRuntimeConfig, getCloudBase, isRuntimeConfigInitialised, resetRuntimeConfigForTesting, } from './runtime-config';
23
- export type { RuntimeConfig, RuntimeFeatures } from './runtime-config';
27
+ export { initRuntimeConfig, getRuntimeConfig, getCloudBase, getProductName, getProductShortName, isRuntimeConfigInitialised, resetRuntimeConfigForTesting, } from './runtime-config';
28
+ export type { RuntimeConfig, RuntimeFeatures, RuntimeBranding } from './runtime-config';
24
29
  export { ObjectView, RecordDetailView, RecordFormPage, DashboardView, PageView, ReportView, SearchResultsPage, ViewConfigPanel, } from './views';
25
30
  export type { RecordFormPageProps } from './views';
26
- export { useFavorites, useMetadataService, useNavPins, useNavigationSync, NavigationSyncEffect, addNavigationItem, removeNavigationItems, renameNavigationItems, navigationEqual, generateNavId, useResponsiveSidebar, } from './hooks';
31
+ export { useFavorites, useMetadataService, useNavPins, useNavigationSync, NavigationSyncEffect, addNavigationItem, removeNavigationItems, renameNavigationItems, navigationEqual, generateNavId, useResponsiveSidebar, useActionModal, } from './hooks';
27
32
  export type { FavoriteItem } from './hooks';
28
- export { NavigationProvider, useNavigationContext, FavoritesProvider, RecentItemsProvider, UserStateAdaptersProvider, useUserStateAdapter, useAttachUserStateAdapters, } from './context';
29
- export type { UserDataAdapter, UserStateKind } from './context';
33
+ export { NavigationProvider, useNavigationContext, FavoritesProvider, RecentItemsProvider, CommandPaletteProvider, useCommandPalette, UserStateAdaptersProvider, useUserStateAdapter, useAttachUserStateAdapters, } from './context';
34
+ export type { UserDataAdapter, UserStateKind, CommandPaletteContextValue } from './context';
30
35
  export { AppContent as DefaultAppContent } from './console/AppContent';
31
36
  export { MarketplacePage } from './console/marketplace/MarketplacePage';
32
37
  export { MarketplacePackagePage } from './console/marketplace/MarketplacePackagePage';
@@ -43,10 +48,15 @@ export { MembersPage as DefaultMembersPage } from './console/organizations/manag
43
48
  export { InvitationsPage as DefaultInvitationsPage } from './console/organizations/manage/InvitationsPage';
44
49
  export { SettingsPage as DefaultSettingsPage } from './console/organizations/manage/SettingsPage';
45
50
  export { AcceptInvitationPage as DefaultAcceptInvitationPage } from './console/organizations/manage/AcceptInvitationPage';
46
- export { AiChatPage as DefaultAiChatPage, AiChatPage } from './console/ai/AiChatPage';
51
+ export { AiChatPage as DefaultAiChatPage, AiChatPage, hydratedMessagesToChatMessages, } from './console/ai/AiChatPage';
47
52
  export { ConversationsSidebar } from './console/ai/ConversationsSidebar';
53
+ export { toUIMessages, aiMessageRowsToServerMessages, type HydratedUIMessage, type RawAiMessageRow, } from './hooks/useChatConversation';
48
54
  export { registerAppComponent, getAppComponent, listAppComponents, componentRefToUrlSegments, urlSegmentsToComponentRef, } from './services/componentRegistry';
49
55
  export type { AppComponentRegistryEntry } from './services/componentRegistry';
50
56
  import './services/builtinComponents';
51
- export { MetadataDirectoryPage, MetadataResourceRouter, MetadataResourceListPage, MetadataResourceEditPage, MetadataResourceHistoryPage, MetadataQuickFind, MetadataPageShell, SchemaForm, LayeredDiff, registerMetadataResource, getMetadataResource, listMetadataResources, resolveResourceConfig, useMetadataClient, useMetadataTypes, useTypesIndex, matchesQuery, } from './views/metadata-admin';
52
- export type { MetadataResourceConfig, MetadataDomain, RichMetadataTypeEntry, } from './views/metadata-admin';
57
+ import './console/cloud-connection/CloudConnectionPanel';
58
+ import './console/marketplace/InstalledListWidget';
59
+ export { MetadataDirectoryPage, MetadataResourceRouter, MetadataResourceListPage, MetadataResourceEditPage, MetadataResourceHistoryPage, MetadataDiagnosticsPage, MetadataQuickFind, MetadataPageShell, SchemaForm, LayeredDiff, registerMetadataResource, getMetadataResource, listMetadataResources, resolveResourceConfig, useMetadataClient, useMetadataTypes, useTypesIndex, useGlobalDiagnostics, matchesQuery, registerMetadataPreview, getMetadataPreview, listMetadataPreviewTypes, registerMetadataInspector, getMetadataInspector, listMetadataInspectorTypes, } from './views/metadata-admin';
60
+ export type { MetadataResourceConfig, MetadataDomain, RichMetadataTypeEntry, MetadataPreview, MetadataPreviewProps, MetadataSelection, MetadataInspector, MetadataInspectorProps, } from './views/metadata-admin';
61
+ export { assistantBus, useAssistant, useRegisterAssistantEditor, requestAssistantOpen, } from './assistant/assistantBus';
62
+ export type { AssistantSnapshot, AssistantEditorContext, AssistantEditorField, } from './assistant/assistantBus';
package/dist/index.js CHANGED
@@ -12,6 +12,9 @@ export { MetadataProvider, useMetadata, useMetadataItem } from './providers/Meta
12
12
  export { ExpressionProvider, useExpressionContext, evaluateVisibility } from './providers/ExpressionProvider';
13
13
  // Hooks
14
14
  export { useObjectActions } from './hooks/useObjectActions';
15
+ export { useUrlOverlay } from './hooks/useUrlOverlay';
16
+ export { useSettleSignal } from './hooks/useSettleSignal';
17
+ export { getPendingRequests, isIdle, subscribeSettle, whenIdle, withSettleSignal, installSettleSignalGlobal, } from './observability/settleSignal';
15
18
  export { useRecentItems } from './hooks/useRecentItems';
16
19
  // Console building blocks — compose these in your App.tsx to build the console
17
20
  // routing tree. See examples/console-starter/src/App.tsx for a minimal example.
@@ -25,13 +28,13 @@ export { initSentry, captureError, setSentryUser, getSentry } from './observabil
25
28
  // Runtime configuration pushed by the server at boot. Consumers fetch
26
29
  // `/api/v1/runtime/config` via `initRuntimeConfig()` before first render
27
30
  // and read upstream cloud URL + capability flags from `getRuntimeConfig()`.
28
- export { initRuntimeConfig, getRuntimeConfig, getCloudBase, isRuntimeConfigInitialised, resetRuntimeConfigForTesting, } from './runtime-config';
31
+ export { initRuntimeConfig, getRuntimeConfig, getCloudBase, getProductName, getProductShortName, isRuntimeConfigInitialised, resetRuntimeConfigForTesting, } from './runtime-config';
29
32
  // Standard inner-SPA views
30
33
  export { ObjectView, RecordDetailView, RecordFormPage, DashboardView, PageView, ReportView, SearchResultsPage, ViewConfigPanel, } from './views';
31
34
  // Hooks
32
- export { useFavorites, useMetadataService, useNavPins, useNavigationSync, NavigationSyncEffect, addNavigationItem, removeNavigationItems, renameNavigationItems, navigationEqual, generateNavId, useResponsiveSidebar, } from './hooks';
35
+ export { useFavorites, useMetadataService, useNavPins, useNavigationSync, NavigationSyncEffect, addNavigationItem, removeNavigationItems, renameNavigationItems, navigationEqual, generateNavId, useResponsiveSidebar, useActionModal, } from './hooks';
33
36
  // Context providers
34
- export { NavigationProvider, useNavigationContext, FavoritesProvider, RecentItemsProvider, UserStateAdaptersProvider, useUserStateAdapter, useAttachUserStateAdapters, } from './context';
37
+ export { NavigationProvider, useNavigationContext, FavoritesProvider, RecentItemsProvider, CommandPaletteProvider, useCommandPalette, UserStateAdaptersProvider, useUserStateAdapter, useAttachUserStateAdapters, } from './context';
35
38
  // Default page implementations (consumers can partial-override slots)
36
39
  export { AppContent as DefaultAppContent } from './console/AppContent';
37
40
  export { MarketplacePage } from './console/marketplace/MarketplacePage';
@@ -49,8 +52,12 @@ export { MembersPage as DefaultMembersPage } from './console/organizations/manag
49
52
  export { InvitationsPage as DefaultInvitationsPage } from './console/organizations/manage/InvitationsPage';
50
53
  export { SettingsPage as DefaultSettingsPage } from './console/organizations/manage/SettingsPage';
51
54
  export { AcceptInvitationPage as DefaultAcceptInvitationPage } from './console/organizations/manage/AcceptInvitationPage';
52
- export { AiChatPage as DefaultAiChatPage, AiChatPage } from './console/ai/AiChatPage';
55
+ export { AiChatPage as DefaultAiChatPage, AiChatPage, hydratedMessagesToChatMessages, } from './console/ai/AiChatPage';
53
56
  export { ConversationsSidebar } from './console/ai/ConversationsSidebar';
57
+ // Conversation-history hydration helpers — reused by the public read-only
58
+ // share page (`/s/:token`) so a shared transcript renders identically to the
59
+ // live chat (tool cards included) instead of dumping raw envelopes.
60
+ export { toUIMessages, aiMessageRowsToServerMessages, } from './hooks/useChatConversation';
54
61
  // Phase 3b: Component nav registry — plugins use this to register
55
62
  // admin/setup UI surfaces that are addressable from App metadata via
56
63
  // `{ type: 'component', componentRef: 'ns:name' }` nav items.
@@ -58,8 +65,13 @@ export { registerAppComponent, getAppComponent, listAppComponents, componentRefT
58
65
  // Side-effect import: registers built-in admin components
59
66
  // (metadata:directory, metadata:resource) at module load.
60
67
  import './services/builtinComponents';
68
+ // SDUI widget for the metadata-driven Cloud Connection page (cloud ADR-0008).
69
+ import './console/cloud-connection/CloudConnectionPanel';
70
+ import './console/marketplace/InstalledListWidget';
61
71
  // Phase 3c — generic metadata admin engine. Re-exported so plugins
62
72
  // can call `registerMetadataResource()` to override the per-type
63
73
  // list / edit / create components, and host apps can compose the
64
74
  // page primitives directly when needed.
65
- export { MetadataDirectoryPage, MetadataResourceRouter, MetadataResourceListPage, MetadataResourceEditPage, MetadataResourceHistoryPage, MetadataQuickFind, MetadataPageShell, SchemaForm, LayeredDiff, registerMetadataResource, getMetadataResource, listMetadataResources, resolveResourceConfig, useMetadataClient, useMetadataTypes, useTypesIndex, matchesQuery, } from './views/metadata-admin';
75
+ export { MetadataDirectoryPage, MetadataResourceRouter, MetadataResourceListPage, MetadataResourceEditPage, MetadataResourceHistoryPage, MetadataDiagnosticsPage, MetadataQuickFind, MetadataPageShell, SchemaForm, LayeredDiff, registerMetadataResource, getMetadataResource, listMetadataResources, resolveResourceConfig, useMetadataClient, useMetadataTypes, useTypesIndex, useGlobalDiagnostics, matchesQuery, registerMetadataPreview, getMetadataPreview, listMetadataPreviewTypes, registerMetadataInspector, getMetadataInspector, listMetadataInspectorTypes, } from './views/metadata-admin';
76
+ // AI assistant bus — connects the metadata designers to the global chat.
77
+ export { assistantBus, useAssistant, useRegisterAssistantEditor, requestAssistantOpen, } from './assistant/assistantBus';
@@ -19,4 +19,4 @@ export interface ActivityFeedProps {
19
19
  activities?: ActivityItem[];
20
20
  className?: string;
21
21
  }
22
- export declare function ActivityFeed({ activities, className }: ActivityFeedProps): import("react/jsx-runtime").JSX.Element;
22
+ export declare function ActivityFeed({ activities, className }: ActivityFeedProps): import("react").JSX.Element;
@@ -7,7 +7,8 @@
7
7
  * Variants:
8
8
  * - `app` (default when `appName` is present): sidebar trigger + AppSwitcher
9
9
  * + breadcrumb path. Used by `ConsoleLayout` inside `/apps/:appName/*`.
10
- * - `home` : no breadcrumb; displays the "ObjectStack" wordmark next to the
10
+ * - `home` : no breadcrumb; displays the product wordmark (from
11
+ * `getProductName()`, default "ObjectOS") next to the brand
11
12
  * logo. Used by `/home`.
12
13
  * - `orgs` : no breadcrumb; logo + "Organizations" title. Used by the
13
14
  * `/organizations` landing page.
@@ -30,4 +31,4 @@ export interface AppHeaderProps {
30
31
  activeAppName?: string;
31
32
  onAppChange?: (name: string) => void;
32
33
  }
33
- export declare function AppHeader({ variant, appName, objects, connectionState, presenceUsers, activities, activeAppName, onAppChange, }: AppHeaderProps): import("react/jsx-runtime").JSX.Element;
34
+ export declare function AppHeader({ variant, appName, objects, connectionState, presenceUsers, activities, activeAppName, onAppChange, }: AppHeaderProps): import("react").JSX.Element;