@object-ui/app-shell 6.2.3 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (486) hide show
  1. package/CHANGELOG.md +1229 -0
  2. package/README.md +292 -0
  3. package/dist/assistant/assistantBus.d.ts +72 -0
  4. package/dist/assistant/assistantBus.js +133 -0
  5. package/dist/chrome/CommandPalette.d.ts +1 -1
  6. package/dist/chrome/CommandPalette.js +26 -22
  7. package/dist/chrome/ConditionalAuthWrapper.d.ts +1 -1
  8. package/dist/chrome/ConsoleToaster.d.ts +1 -1
  9. package/dist/chrome/ConsoleToaster.js +3 -1
  10. package/dist/chrome/ErrorBoundary.d.ts +1 -1
  11. package/dist/chrome/KeyboardShortcutsDialog.d.ts +1 -1
  12. package/dist/chrome/KeyboardShortcutsDialog.js +16 -5
  13. package/dist/chrome/LoadingScreen.d.ts +1 -1
  14. package/dist/chrome/LoadingScreen.js +22 -26
  15. package/dist/chrome/RouteFader.d.ts +1 -1
  16. package/dist/chrome/ThemeProvider.d.ts +1 -1
  17. package/dist/components/ManagedByBadge.d.ts +1 -1
  18. package/dist/console/AppContent.d.ts +1 -1
  19. package/dist/console/AppContent.js +184 -39
  20. package/dist/console/ConsoleShell.d.ts +7 -7
  21. package/dist/console/ConsoleShell.js +32 -3
  22. package/dist/console/ai/AiChatPage.d.ts +88 -1
  23. package/dist/console/ai/AiChatPage.js +747 -66
  24. package/dist/console/ai/ConversationsSidebar.d.ts +26 -1
  25. package/dist/console/ai/ConversationsSidebar.js +149 -34
  26. package/dist/console/ai/LiveCanvas.d.ts +28 -0
  27. package/dist/console/ai/LiveCanvas.js +80 -0
  28. package/dist/console/ai/reconcileTurn.d.ts +8 -0
  29. package/dist/console/ai/reconcileTurn.js +20 -0
  30. package/dist/console/auth/AuthPageLayout.d.ts +1 -1
  31. package/dist/console/auth/ForgotPasswordPage.d.ts +1 -1
  32. package/dist/console/auth/LoginPage.d.ts +1 -1
  33. package/dist/console/auth/RegisterPage.d.ts +1 -1
  34. package/dist/console/auth/RegisterPage.js +23 -3
  35. package/dist/console/cloud-connection/CloudConnectionPanel.d.ts +1 -0
  36. package/dist/console/cloud-connection/CloudConnectionPanel.js +169 -0
  37. package/dist/console/home/AppCard.d.ts +1 -1
  38. package/dist/console/home/AppCard.js +6 -12
  39. package/dist/console/home/HomeAppsStrip.d.ts +8 -0
  40. package/dist/console/home/HomeAppsStrip.js +61 -0
  41. package/dist/console/home/HomeLayout.d.ts +1 -1
  42. package/dist/console/home/HomeLayout.js +3 -1
  43. package/dist/console/home/HomePage.d.ts +1 -2
  44. package/dist/console/home/HomePage.js +149 -21
  45. package/dist/console/home/HomeRail.d.ts +22 -0
  46. package/dist/console/home/HomeRail.js +62 -0
  47. package/dist/console/home/QuickActions.d.ts +1 -1
  48. package/dist/console/home/QuickActions.js +3 -11
  49. package/dist/console/home/RecentApps.d.ts +1 -1
  50. package/dist/console/home/RecentApps.js +2 -2
  51. package/dist/console/home/StarredApps.d.ts +1 -1
  52. package/dist/console/home/StarredApps.js +2 -2
  53. package/dist/console/marketplace/InstalledListWidget.d.ts +1 -0
  54. package/dist/console/marketplace/InstalledListWidget.js +93 -0
  55. package/dist/console/marketplace/MarkdownText.d.ts +1 -1
  56. package/dist/console/marketplace/MarketplaceAccessDenied.d.ts +1 -1
  57. package/dist/console/marketplace/MarketplaceInstalledPage.d.ts +8 -14
  58. package/dist/console/marketplace/MarketplaceInstalledPage.js +14 -66
  59. package/dist/console/marketplace/MarketplacePackagePage.d.ts +1 -1
  60. package/dist/console/marketplace/MarketplacePackagePage.js +249 -8
  61. package/dist/console/marketplace/MarketplacePage.d.ts +1 -1
  62. package/dist/console/marketplace/MarketplacePage.js +60 -3
  63. package/dist/console/marketplace/PackageIcon.d.ts +1 -1
  64. package/dist/console/marketplace/PluginDisclosure.d.ts +14 -0
  65. package/dist/console/marketplace/PluginDisclosure.js +38 -0
  66. package/dist/console/marketplace/marketplaceApi.d.ts +123 -0
  67. package/dist/console/marketplace/marketplaceApi.js +254 -1
  68. package/dist/console/organizations/CreateWorkspaceDialog.d.ts +1 -1
  69. package/dist/console/organizations/OrganizationsLayout.d.ts +1 -1
  70. package/dist/console/organizations/OrganizationsPage.d.ts +1 -1
  71. package/dist/console/organizations/manage/AcceptInvitationPage.d.ts +1 -1
  72. package/dist/console/organizations/manage/InvitationsPage.d.ts +1 -1
  73. package/dist/console/organizations/manage/InviteMemberDialog.d.ts +1 -1
  74. package/dist/console/organizations/manage/MembersPage.d.ts +1 -1
  75. package/dist/console/organizations/manage/OrganizationLayout.d.ts +1 -1
  76. package/dist/console/organizations/manage/SettingsPage.d.ts +1 -1
  77. package/dist/context/CommandPaletteProvider.d.ts +44 -0
  78. package/dist/context/CommandPaletteProvider.js +71 -0
  79. package/dist/context/FavoritesProvider.d.ts +1 -1
  80. package/dist/context/NavigationContext.d.ts +1 -1
  81. package/dist/context/RecentItemsProvider.d.ts +2 -2
  82. package/dist/context/UserStateAdapters.d.ts +1 -1
  83. package/dist/context/index.d.ts +2 -0
  84. package/dist/context/index.js +1 -0
  85. package/dist/hooks/index.d.ts +5 -2
  86. package/dist/hooks/index.js +4 -1
  87. package/dist/hooks/useActionModal.d.ts +53 -0
  88. package/dist/hooks/useActionModal.js +111 -0
  89. package/dist/hooks/useChatConversation.d.ts +137 -4
  90. package/dist/hooks/useChatConversation.js +316 -25
  91. package/dist/hooks/useConsoleActionRuntime.d.ts +70 -0
  92. package/dist/hooks/useConsoleActionRuntime.js +564 -0
  93. package/dist/hooks/useConversationList.js +61 -3
  94. package/dist/hooks/useHomeInbox.d.ts +13 -0
  95. package/dist/hooks/useHomeInbox.js +142 -0
  96. package/dist/hooks/useNavPins.js +17 -23
  97. package/dist/hooks/useNavigationSync.d.ts +33 -0
  98. package/dist/hooks/useNavigationSync.js +98 -12
  99. package/dist/hooks/useReconcileOnError.d.ts +40 -0
  100. package/dist/hooks/useReconcileOnError.js +37 -0
  101. package/dist/hooks/useRecordApprovals.d.ts +18 -19
  102. package/dist/hooks/useRecordApprovals.js +24 -40
  103. package/dist/hooks/useResponsiveSidebar.js +14 -5
  104. package/dist/hooks/useSettleSignal.d.ts +19 -0
  105. package/dist/hooks/useSettleSignal.js +20 -0
  106. package/dist/hooks/useTrackRouteAsRecent.js +35 -0
  107. package/dist/hooks/useUrlOverlay.d.ts +62 -0
  108. package/dist/hooks/useUrlOverlay.js +88 -0
  109. package/dist/index.d.ts +18 -8
  110. package/dist/index.js +17 -5
  111. package/dist/layout/ActivityFeed.d.ts +1 -1
  112. package/dist/layout/AppHeader.d.ts +3 -2
  113. package/dist/layout/AppHeader.js +237 -72
  114. package/dist/layout/AppSidebar.d.ts +2 -1
  115. package/dist/layout/AppSidebar.js +26 -46
  116. package/dist/layout/AppSwitcher.d.ts +2 -1
  117. package/dist/layout/AppSwitcher.js +9 -5
  118. package/dist/layout/AuthPageLayout.d.ts +1 -1
  119. package/dist/layout/ConnectionStatus.d.ts +1 -1
  120. package/dist/layout/ConnectionStatus.js +9 -6
  121. package/dist/layout/ConsoleChatbotFab.d.ts +19 -1
  122. package/dist/layout/ConsoleChatbotFab.js +16 -2
  123. package/dist/layout/ConsoleFloatingChatbot.d.ts +34 -2
  124. package/dist/layout/ConsoleFloatingChatbot.js +391 -41
  125. package/dist/layout/ConsoleLayout.d.ts +1 -1
  126. package/dist/layout/ConsoleLayout.js +27 -11
  127. package/dist/layout/ContextSelectors.d.ts +44 -0
  128. package/dist/layout/ContextSelectors.js +242 -0
  129. package/dist/layout/InboxPopover.d.ts +6 -1
  130. package/dist/layout/InboxPopover.js +25 -6
  131. package/dist/layout/LocaleSwitcher.d.ts +1 -1
  132. package/dist/layout/LocalizedSidebarTrigger.d.ts +2 -0
  133. package/dist/layout/LocalizedSidebarTrigger.js +15 -0
  134. package/dist/layout/MobileViewSwitcherContext.d.ts +1 -1
  135. package/dist/layout/ModeToggle.d.ts +1 -1
  136. package/dist/layout/PageHeader.d.ts +1 -1
  137. package/dist/layout/UnifiedSidebar.d.ts +2 -1
  138. package/dist/layout/UnifiedSidebar.js +116 -15
  139. package/dist/layout/agentPicker.d.ts +56 -0
  140. package/dist/layout/agentPicker.js +40 -0
  141. package/dist/observability/index.d.ts +1 -0
  142. package/dist/observability/index.js +1 -0
  143. package/dist/observability/settleSignal.d.ts +64 -0
  144. package/dist/observability/settleSignal.js +131 -0
  145. package/dist/preview/CommitTimeline.d.ts +15 -0
  146. package/dist/preview/CommitTimeline.js +82 -0
  147. package/dist/preview/DraftChangesPanel.d.ts +19 -0
  148. package/dist/preview/DraftChangesPanel.js +114 -0
  149. package/dist/preview/DraftPreviewBar.d.ts +8 -0
  150. package/dist/preview/DraftPreviewBar.js +86 -0
  151. package/dist/preview/PreviewDraftEmptyState.d.ts +16 -0
  152. package/dist/preview/PreviewDraftEmptyState.js +47 -0
  153. package/dist/preview/PreviewModeContext.d.ts +57 -0
  154. package/dist/preview/PreviewModeContext.js +99 -0
  155. package/dist/preview/UnpublishedAppBar.d.ts +8 -0
  156. package/dist/preview/UnpublishedAppBar.js +83 -0
  157. package/dist/preview/commitHistory.d.ts +28 -0
  158. package/dist/preview/commitHistory.js +48 -0
  159. package/dist/preview/draftStatus.d.ts +20 -0
  160. package/dist/preview/draftStatus.js +27 -0
  161. package/dist/preview/usePublishAllDrafts.d.ts +18 -0
  162. package/dist/preview/usePublishAllDrafts.js +106 -0
  163. package/dist/providers/AdapterProvider.d.ts +1 -1
  164. package/dist/providers/AdapterProvider.js +6 -1
  165. package/dist/providers/ExpressionProvider.d.ts +1 -1
  166. package/dist/providers/MetadataProvider.d.ts +17 -2
  167. package/dist/providers/MetadataProvider.js +192 -12
  168. package/dist/runtime-config.d.ts +46 -2
  169. package/dist/runtime-config.js +39 -2
  170. package/dist/services/builtinComponents.js +68 -59
  171. package/dist/skeletons/SkeletonDashboard.d.ts +1 -1
  172. package/dist/skeletons/SkeletonDetail.d.ts +1 -1
  173. package/dist/skeletons/SkeletonGrid.d.ts +1 -1
  174. package/dist/utils/appRoute.d.ts +21 -0
  175. package/dist/utils/appRoute.js +25 -0
  176. package/dist/utils/deriveRelatedLists.d.ts +54 -0
  177. package/dist/utils/deriveRelatedLists.js +91 -0
  178. package/dist/utils/index.d.ts +4 -0
  179. package/dist/utils/index.js +3 -0
  180. package/dist/utils/managedByEmptyState.d.ts +8 -1
  181. package/dist/utils/managedByEmptyState.js +13 -7
  182. package/dist/utils/preferLocal.d.ts +18 -0
  183. package/dist/utils/preferLocal.js +24 -0
  184. package/dist/views/ActionConfirmDialog.d.ts +1 -1
  185. package/dist/views/ActionConfirmDialog.js +3 -1
  186. package/dist/views/ActionParamDialog.d.ts +6 -1
  187. package/dist/views/ActionParamDialog.js +9 -3
  188. package/dist/views/ActionResultDialog.d.ts +13 -0
  189. package/dist/views/ActionResultDialog.js +134 -0
  190. package/dist/views/ComponentNavView.d.ts +14 -1
  191. package/dist/views/CreateViewDialog.d.ts +1 -1
  192. package/dist/views/DashboardConfigPanel.d.ts +28 -0
  193. package/dist/views/DashboardConfigPanel.js +81 -0
  194. package/dist/views/DashboardView.d.ts +4 -3
  195. package/dist/views/DashboardView.js +38 -239
  196. package/dist/views/FlowRunner.d.ts +31 -0
  197. package/dist/views/FlowRunner.js +121 -0
  198. package/dist/views/InterfaceListPage.d.ts +49 -0
  199. package/dist/views/InterfaceListPage.js +347 -0
  200. package/dist/views/MetadataInspector.d.ts +2 -2
  201. package/dist/views/ObjectView.d.ts +1 -1
  202. package/dist/views/ObjectView.js +209 -532
  203. package/dist/views/PageView.d.ts +8 -3
  204. package/dist/views/PageView.js +45 -32
  205. package/dist/views/RecordDetailView.d.ts +1 -1
  206. package/dist/views/RecordDetailView.js +363 -148
  207. package/dist/views/RecordFormPage.d.ts +1 -1
  208. package/dist/views/RecordFormPage.js +26 -1
  209. package/dist/views/ReportConfigPanel.d.ts +37 -0
  210. package/dist/views/ReportConfigPanel.js +85 -0
  211. package/dist/views/ReportView.d.ts +1 -1
  212. package/dist/views/ReportView.js +116 -7
  213. package/dist/views/RuntimeDraftBar.d.ts +30 -0
  214. package/dist/views/RuntimeDraftBar.js +112 -0
  215. package/dist/views/ScreenView.d.ts +70 -0
  216. package/dist/views/ScreenView.js +73 -0
  217. package/dist/views/SearchResultsPage.d.ts +1 -1
  218. package/dist/views/SearchResultsPage.js +8 -18
  219. package/dist/views/ViewConfigPanel.d.ts +24 -17
  220. package/dist/views/ViewConfigPanel.js +121 -77
  221. package/dist/views/index.d.ts +1 -1
  222. package/dist/views/index.js +1 -1
  223. package/dist/views/metadata-admin/AuditPanel.d.ts +28 -0
  224. package/dist/views/metadata-admin/AuditPanel.js +79 -0
  225. package/dist/views/metadata-admin/DiagnosticsPage.d.ts +20 -0
  226. package/dist/views/metadata-admin/DiagnosticsPage.js +69 -0
  227. package/dist/views/metadata-admin/DirectoryPage.d.ts +16 -1
  228. package/dist/views/metadata-admin/DirectoryPage.js +101 -24
  229. package/dist/views/metadata-admin/DraftReviewPanel.d.ts +33 -0
  230. package/dist/views/metadata-admin/DraftReviewPanel.js +77 -0
  231. package/dist/views/metadata-admin/EmbeddedItemEditor.d.ts +17 -1
  232. package/dist/views/metadata-admin/EmbeddedItemEditor.js +15 -8
  233. package/dist/views/metadata-admin/JsonSourceEditor.d.ts +39 -0
  234. package/dist/views/metadata-admin/JsonSourceEditor.js +196 -0
  235. package/dist/views/metadata-admin/LayeredDiff.d.ts +39 -1
  236. package/dist/views/metadata-admin/LayeredDiff.js +171 -5
  237. package/dist/views/metadata-admin/MetadataDetailDrawer.d.ts +15 -1
  238. package/dist/views/metadata-admin/MetadataTypeActions.d.ts +48 -0
  239. package/dist/views/metadata-admin/MetadataTypeActions.js +165 -0
  240. package/dist/views/metadata-admin/PackagesPage.d.ts +18 -0
  241. package/dist/views/metadata-admin/PackagesPage.js +403 -0
  242. package/dist/views/metadata-admin/PageShell.d.ts +1 -1
  243. package/dist/views/metadata-admin/PageShell.js +9 -4
  244. package/dist/views/metadata-admin/PermissionMatrixEditor.d.ts +35 -1
  245. package/dist/views/metadata-admin/QuickFind.d.ts +21 -1
  246. package/dist/views/metadata-admin/QuickFind.js +6 -3
  247. package/dist/views/metadata-admin/RelatedPanel.d.ts +24 -1
  248. package/dist/views/metadata-admin/RelatedPanel.js +20 -18
  249. package/dist/views/metadata-admin/ResourceEditPage.d.ts +40 -1
  250. package/dist/views/metadata-admin/ResourceEditPage.js +1250 -60
  251. package/dist/views/metadata-admin/ResourceHistoryPage.d.ts +39 -1
  252. package/dist/views/metadata-admin/ResourceHistoryPage.js +66 -16
  253. package/dist/views/metadata-admin/ResourceListPage.d.ts +13 -1
  254. package/dist/views/metadata-admin/ResourceListPage.js +258 -30
  255. package/dist/views/metadata-admin/ResourceRouter.d.ts +23 -1
  256. package/dist/views/metadata-admin/SchemaForm.d.ts +34 -1
  257. package/dist/views/metadata-admin/SchemaForm.js +559 -49
  258. package/dist/views/metadata-admin/StudioHomePage.d.ts +22 -0
  259. package/dist/views/metadata-admin/StudioHomePage.js +205 -0
  260. package/dist/views/metadata-admin/anchors.js +255 -24
  261. package/dist/views/metadata-admin/clientValidation.d.ts +50 -0
  262. package/dist/views/metadata-admin/clientValidation.js +169 -0
  263. package/dist/views/metadata-admin/color-variant-field.d.ts +30 -0
  264. package/dist/views/metadata-admin/color-variant-field.js +38 -0
  265. package/dist/views/metadata-admin/createDerive.d.ts +75 -0
  266. package/dist/views/metadata-admin/createDerive.js +179 -0
  267. package/dist/views/metadata-admin/dashboard-schema.d.ts +12 -0
  268. package/dist/views/metadata-admin/dashboard-schema.js +80 -0
  269. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.d.ts +35 -0
  270. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.js +327 -0
  271. package/dist/views/metadata-admin/datasource/register.d.ts +1 -0
  272. package/dist/views/metadata-admin/datasource/register.js +24 -0
  273. package/dist/views/metadata-admin/default-inspector-registry.d.ts +49 -0
  274. package/dist/views/metadata-admin/default-inspector-registry.js +8 -0
  275. package/dist/views/metadata-admin/default-schemas.js +115 -10
  276. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.d.ts +27 -0
  277. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.js +69 -0
  278. package/dist/views/metadata-admin/external/ImportObjectDialog.d.ts +27 -0
  279. package/dist/views/metadata-admin/external/ImportObjectDialog.js +77 -0
  280. package/dist/views/metadata-admin/external/SchemaBrowser.d.ts +16 -0
  281. package/dist/views/metadata-admin/external/SchemaBrowser.js +74 -0
  282. package/dist/views/metadata-admin/external/ValidationPanel.d.ts +16 -0
  283. package/dist/views/metadata-admin/external/ValidationPanel.js +68 -0
  284. package/dist/views/metadata-admin/external/api.d.ts +100 -0
  285. package/dist/views/metadata-admin/external/api.js +124 -0
  286. package/dist/views/metadata-admin/i18n.d.ts +1 -0
  287. package/dist/views/metadata-admin/i18n.js +1252 -2
  288. package/dist/views/metadata-admin/index.d.ts +8 -5
  289. package/dist/views/metadata-admin/index.js +12 -2
  290. package/dist/views/metadata-admin/inspector-registry.d.ts +51 -0
  291. package/dist/views/metadata-admin/inspector-registry.js +11 -0
  292. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.d.ts +30 -0
  293. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.js +180 -0
  294. package/dist/views/metadata-admin/inspectors/AppNavInspector.d.ts +16 -0
  295. package/dist/views/metadata-admin/inspectors/AppNavInspector.js +110 -0
  296. package/dist/views/metadata-admin/inspectors/ConditionBuilder.d.ts +29 -0
  297. package/dist/views/metadata-admin/inspectors/ConditionBuilder.js +154 -0
  298. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.d.ts +28 -0
  299. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.js +110 -0
  300. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.d.ts +18 -0
  301. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.js +139 -0
  302. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.d.ts +21 -0
  303. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.js +221 -0
  304. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.d.ts +16 -0
  305. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.js +126 -0
  306. package/dist/views/metadata-admin/inspectors/FlowInspector.d.ts +12 -0
  307. package/dist/views/metadata-admin/inspectors/FlowInspector.js +9 -0
  308. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.d.ts +30 -0
  309. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.js +125 -0
  310. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.d.ts +18 -0
  311. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.js +40 -0
  312. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.d.ts +14 -0
  313. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.js +205 -0
  314. package/dist/views/metadata-admin/inspectors/FlowObjectListField.d.ts +26 -0
  315. package/dist/views/metadata-admin/inspectors/FlowObjectListField.js +105 -0
  316. package/dist/views/metadata-admin/inspectors/FlowReferenceField.d.ts +83 -0
  317. package/dist/views/metadata-admin/inspectors/FlowReferenceField.js +181 -0
  318. package/dist/views/metadata-admin/inspectors/FlowStringListField.d.ts +21 -0
  319. package/dist/views/metadata-admin/inspectors/FlowStringListField.js +60 -0
  320. package/dist/views/metadata-admin/inspectors/InspectorComboField.d.ts +40 -0
  321. package/dist/views/metadata-admin/inspectors/InspectorComboField.js +61 -0
  322. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.d.ts +21 -0
  323. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.js +55 -0
  324. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.d.ts +23 -0
  325. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.js +365 -0
  326. package/dist/views/metadata-admin/inspectors/PageBlockInspector.d.ts +48 -0
  327. package/dist/views/metadata-admin/inspectors/PageBlockInspector.js +332 -0
  328. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.d.ts +58 -0
  329. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.js +218 -0
  330. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.d.ts +19 -0
  331. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.js +144 -0
  332. package/dist/views/metadata-admin/inspectors/ViewInspector.d.ts +19 -0
  333. package/dist/views/metadata-admin/inspectors/ViewInspector.js +21 -0
  334. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.d.ts +54 -0
  335. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.js +191 -0
  336. package/dist/views/metadata-admin/inspectors/_shared.d.ts +128 -0
  337. package/dist/views/metadata-admin/inspectors/_shared.js +113 -0
  338. package/dist/views/metadata-admin/inspectors/datasetFilterCondition.d.ts +24 -0
  339. package/dist/views/metadata-admin/inspectors/datasetFilterCondition.js +97 -0
  340. package/dist/views/metadata-admin/inspectors/expression-validate.d.ts +26 -0
  341. package/dist/views/metadata-admin/inspectors/expression-validate.js +66 -0
  342. package/dist/views/metadata-admin/inspectors/flow-node-config.d.ts +143 -0
  343. package/dist/views/metadata-admin/inspectors/flow-node-config.js +506 -0
  344. package/dist/views/metadata-admin/inspectors/index.d.ts +1 -0
  345. package/dist/views/metadata-admin/inspectors/index.js +45 -0
  346. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.d.ts +40 -0
  347. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.js +227 -0
  348. package/dist/views/metadata-admin/inspectors/useDatasetFields.d.ts +72 -0
  349. package/dist/views/metadata-admin/inspectors/useDatasetFields.js +0 -0
  350. package/dist/views/metadata-admin/issuePath.d.ts +22 -0
  351. package/dist/views/metadata-admin/issuePath.js +65 -0
  352. package/dist/views/metadata-admin/mergeServerFields.d.ts +65 -0
  353. package/dist/views/metadata-admin/mergeServerFields.js +56 -0
  354. package/dist/views/metadata-admin/package-scope.d.ts +26 -0
  355. package/dist/views/metadata-admin/package-scope.js +43 -0
  356. package/dist/views/metadata-admin/preview-registry.d.ts +55 -0
  357. package/dist/views/metadata-admin/previews/ActionPreview.d.ts +25 -0
  358. package/dist/views/metadata-admin/previews/ActionPreview.js +238 -0
  359. package/dist/views/metadata-admin/previews/AddWidgetPicker.d.ts +12 -0
  360. package/dist/views/metadata-admin/previews/AddWidgetPicker.js +56 -0
  361. package/dist/views/metadata-admin/previews/AgentPreview.d.ts +24 -0
  362. package/dist/views/metadata-admin/previews/AgentPreview.js +100 -0
  363. package/dist/views/metadata-admin/previews/AppNavCanvas.d.ts +31 -0
  364. package/dist/views/metadata-admin/previews/AppNavCanvas.js +260 -0
  365. package/dist/views/metadata-admin/previews/AppPreview.d.ts +16 -1
  366. package/dist/views/metadata-admin/previews/AppPreview.js +23 -14
  367. package/dist/views/metadata-admin/previews/BookPreview.d.ts +20 -0
  368. package/dist/views/metadata-admin/previews/BookPreview.js +132 -0
  369. package/dist/views/metadata-admin/previews/DashboardPreview.d.ts +16 -1
  370. package/dist/views/metadata-admin/previews/DashboardPreview.js +110 -8
  371. package/dist/views/metadata-admin/previews/DatasetPreview.d.ts +18 -0
  372. package/dist/views/metadata-admin/previews/DatasetPreview.js +105 -0
  373. package/dist/views/metadata-admin/previews/DatasourcePreview.d.ts +23 -0
  374. package/dist/views/metadata-admin/previews/DatasourcePreview.js +68 -0
  375. package/dist/views/metadata-admin/previews/EmailTemplatePreview.d.ts +14 -1
  376. package/dist/views/metadata-admin/previews/FieldStub.d.ts +30 -0
  377. package/dist/views/metadata-admin/previews/FieldStub.js +104 -0
  378. package/dist/views/metadata-admin/previews/FieldsListEditor.d.ts +50 -0
  379. package/dist/views/metadata-admin/previews/FieldsListEditor.js +97 -0
  380. package/dist/views/metadata-admin/previews/FlowCanvas.d.ts +49 -0
  381. package/dist/views/metadata-admin/previews/FlowCanvas.js +416 -0
  382. package/dist/views/metadata-admin/previews/FlowPreview.d.ts +20 -0
  383. package/dist/views/metadata-admin/previews/FlowPreview.js +120 -0
  384. package/dist/views/metadata-admin/previews/FlowRunsPanel.d.ts +46 -0
  385. package/dist/views/metadata-admin/previews/FlowRunsPanel.js +97 -0
  386. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.d.ts +25 -0
  387. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.js +204 -0
  388. package/dist/views/metadata-admin/previews/JobPreview.d.ts +28 -0
  389. package/dist/views/metadata-admin/previews/JobPreview.js +290 -0
  390. package/dist/views/metadata-admin/previews/ObjectFormCanvas.d.ts +30 -0
  391. package/dist/views/metadata-admin/previews/ObjectFormCanvas.js +547 -0
  392. package/dist/views/metadata-admin/previews/ObjectPreview.d.ts +14 -1
  393. package/dist/views/metadata-admin/previews/ObjectPreview.js +5 -30
  394. package/dist/views/metadata-admin/previews/OutlineStrip.d.ts +32 -0
  395. package/dist/views/metadata-admin/previews/OutlineStrip.js +8 -0
  396. package/dist/views/metadata-admin/previews/PageBlockCanvas.d.ts +49 -0
  397. package/dist/views/metadata-admin/previews/PageBlockCanvas.js +510 -0
  398. package/dist/views/metadata-admin/previews/PagePreview.d.ts +10 -1
  399. package/dist/views/metadata-admin/previews/PagePreview.js +200 -5
  400. package/dist/views/metadata-admin/previews/PermissionPreview.d.ts +27 -0
  401. package/dist/views/metadata-admin/previews/PermissionPreview.js +115 -0
  402. package/dist/views/metadata-admin/previews/PreviewShell.d.ts +29 -6
  403. package/dist/views/metadata-admin/previews/PreviewShell.js +16 -3
  404. package/dist/views/metadata-admin/previews/ReportPreview.d.ts +18 -1
  405. package/dist/views/metadata-admin/previews/ReportPreview.js +23 -15
  406. package/dist/views/metadata-admin/previews/RolePreview.d.ts +19 -0
  407. package/dist/views/metadata-admin/previews/RolePreview.js +14 -0
  408. package/dist/views/metadata-admin/previews/ScreenPreview.d.ts +38 -0
  409. package/dist/views/metadata-admin/previews/ScreenPreview.js +61 -0
  410. package/dist/views/metadata-admin/previews/SkillPreview.d.ts +22 -0
  411. package/dist/views/metadata-admin/previews/SkillPreview.js +34 -0
  412. package/dist/views/metadata-admin/previews/ToolPreview.d.ts +25 -0
  413. package/dist/views/metadata-admin/previews/ToolPreview.js +122 -0
  414. package/dist/views/metadata-admin/previews/TranslationPreview.d.ts +25 -0
  415. package/dist/views/metadata-admin/previews/TranslationPreview.js +52 -0
  416. package/dist/views/metadata-admin/previews/ValidationPreview.d.ts +27 -0
  417. package/dist/views/metadata-admin/previews/ValidationPreview.js +110 -0
  418. package/dist/views/metadata-admin/previews/ViewColumnPanes.d.ts +62 -0
  419. package/dist/views/metadata-admin/previews/ViewColumnPanes.js +140 -0
  420. package/dist/views/metadata-admin/previews/ViewPreview.d.ts +23 -1
  421. package/dist/views/metadata-admin/previews/ViewPreview.js +101 -73
  422. package/dist/views/metadata-admin/previews/block-config.d.ts +82 -0
  423. package/dist/views/metadata-admin/previews/block-config.js +324 -0
  424. package/dist/views/metadata-admin/previews/block-types.d.ts +40 -0
  425. package/dist/views/metadata-admin/previews/block-types.js +110 -0
  426. package/dist/views/metadata-admin/previews/field-types.d.ts +53 -0
  427. package/dist/views/metadata-admin/previews/field-types.js +97 -0
  428. package/dist/views/metadata-admin/previews/flow-canvas-layout.d.ts +102 -0
  429. package/dist/views/metadata-admin/previews/flow-canvas-layout.js +227 -0
  430. package/dist/views/metadata-admin/previews/flow-canvas-parts.d.ts +96 -0
  431. package/dist/views/metadata-admin/previews/flow-canvas-parts.js +373 -0
  432. package/dist/views/metadata-admin/previews/form-preview.d.ts +24 -0
  433. package/dist/views/metadata-admin/previews/form-preview.js +29 -0
  434. package/dist/views/metadata-admin/previews/index.js +43 -0
  435. package/dist/views/metadata-admin/previews/object-fields-bridge.d.ts +66 -0
  436. package/dist/views/metadata-admin/previews/object-fields-bridge.js +171 -0
  437. package/dist/views/metadata-admin/previews/object-fields-io.d.ts +130 -0
  438. package/dist/views/metadata-admin/previews/object-fields-io.js +243 -0
  439. package/dist/views/metadata-admin/previews/screen-spec.d.ts +43 -0
  440. package/dist/views/metadata-admin/previews/screen-spec.js +108 -0
  441. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.d.ts +102 -0
  442. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.js +2 -0
  443. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.d.ts +15 -0
  444. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.js +185 -0
  445. package/dist/views/metadata-admin/previews/simulator/flow-simulator.d.ts +73 -0
  446. package/dist/views/metadata-admin/previews/simulator/flow-simulator.js +426 -0
  447. package/dist/views/metadata-admin/previews/useDatasetCatalog.d.ts +47 -0
  448. package/dist/views/metadata-admin/previews/useDatasetCatalog.js +133 -0
  449. package/dist/views/metadata-admin/previews/useFlowNodePalette.d.ts +44 -0
  450. package/dist/views/metadata-admin/previews/useFlowNodePalette.js +124 -0
  451. package/dist/views/metadata-admin/previews/useMetaOptions.d.ts +8 -0
  452. package/dist/views/metadata-admin/previews/useMetaOptions.js +50 -0
  453. package/dist/views/metadata-admin/previews/useObjectFields.d.ts +23 -0
  454. package/dist/views/metadata-admin/previews/useObjectFields.js +79 -0
  455. package/dist/views/metadata-admin/previews/useObjectOptions.d.ts +8 -0
  456. package/dist/views/metadata-admin/previews/useObjectOptions.js +43 -0
  457. package/dist/views/metadata-admin/previews/view-column-io.d.ts +42 -0
  458. package/dist/views/metadata-admin/previews/view-column-io.js +73 -0
  459. package/dist/views/metadata-admin/previews/widget-types.d.ts +24 -0
  460. package/dist/views/metadata-admin/previews/widget-types.js +40 -0
  461. package/dist/views/metadata-admin/registry.d.ts +140 -19
  462. package/dist/views/metadata-admin/report-schema.d.ts +26 -0
  463. package/dist/views/metadata-admin/report-schema.js +121 -0
  464. package/dist/views/metadata-admin/useMetadata.d.ts +100 -2
  465. package/dist/views/metadata-admin/useMetadata.js +155 -4
  466. package/dist/views/metadata-admin/view-item-normalize.d.ts +20 -0
  467. package/dist/views/metadata-admin/view-item-normalize.js +68 -0
  468. package/dist/views/metadata-admin/view-schema.d.ts +16 -0
  469. package/dist/views/metadata-admin/view-schema.js +107 -0
  470. package/dist/views/metadata-admin/view-variant-model.d.ts +23 -0
  471. package/dist/views/metadata-admin/view-variant-model.js +64 -0
  472. package/dist/views/metadata-admin/widgets.d.ts +89 -1
  473. package/dist/views/metadata-admin/widgets.js +491 -17
  474. package/dist/views/runtime-metadata-persistence.d.ts +78 -0
  475. package/dist/views/runtime-metadata-persistence.js +89 -0
  476. package/dist/views/useOpenRecordList.d.ts +18 -0
  477. package/dist/views/useOpenRecordList.js +36 -0
  478. package/dist/views/userFilterUrlState.d.ts +15 -0
  479. package/dist/views/userFilterUrlState.js +53 -0
  480. package/dist/views/view-config-adapter.d.ts +38 -0
  481. package/dist/views/view-config-adapter.js +80 -0
  482. package/package.json +52 -34
  483. package/dist/views/DesignDrawer.d.ts +0 -28
  484. package/dist/views/DesignDrawer.js +0 -51
  485. package/dist/views/metadata-admin/DesignerEditorWrapper.d.ts +0 -68
  486. package/dist/views/metadata-admin/DesignerEditorWrapper.js +0 -158
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * ObjectUI
4
+ * Copyright (c) 2024-present ObjectStack Inc.
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ */
9
+ /**
10
+ * ADR-0037 — the draft preview's own empty/error states.
11
+ *
12
+ * A `?preview=draft` tree (the Live Canvas iframe, or a hand-opened preview
13
+ * URL) must NEVER fall through to the console's generic "No Apps Configured"
14
+ * screen: that screen tells the user nothing exists and offers "Create Your
15
+ * First App" — both wrong and disorienting inside a preview of an app the AI
16
+ * just drafted. Preview has exactly three honest non-happy states, all
17
+ * rendered here:
18
+ *
19
+ * - loading failed → say so, offer Retry (the overlay read errored);
20
+ * - app not in draft → the build likely failed or hasn't run — point the
21
+ * user back to the conversation, never to "create app";
22
+ * - nothing drafted → same message, generic (no app name in the URL).
23
+ *
24
+ * Deliberately CTA-free beyond Retry: the preview is a window owned by the
25
+ * build conversation; every corrective action lives there.
26
+ */
27
+ import { Eye, RefreshCw, TriangleAlert } from 'lucide-react';
28
+ import { Empty, EmptyTitle, EmptyDescription, Button } from '@object-ui/components';
29
+ import { useObjectTranslation } from '@object-ui/i18n';
30
+ export function PreviewDraftEmptyState({ appName, error, onRetry }) {
31
+ const { t } = useObjectTranslation();
32
+ const failed = Boolean(error);
33
+ return (_jsx("div", { className: "flex h-screen items-center justify-center", "data-testid": "preview-draft-empty-state", children: _jsxs(Empty, { children: [_jsx("div", { className: "mb-2 flex justify-center text-muted-foreground", "aria-hidden": "true", children: failed ? _jsx(TriangleAlert, { className: "h-8 w-8" }) : _jsx(Eye, { className: "h-8 w-8" }) }), _jsx(EmptyTitle, { children: failed
34
+ ? t('preview.empty.loadFailedTitle', { defaultValue: 'Draft preview failed to load' })
35
+ : appName
36
+ ? t('preview.empty.notReadyTitle', {
37
+ app: appName,
38
+ defaultValue: '“{{app}}” isn’t in the draft yet',
39
+ })
40
+ : t('preview.empty.nothingTitle', { defaultValue: 'Nothing to preview yet' }) }), _jsx(EmptyDescription, { children: failed
41
+ ? t('preview.empty.loadFailedDescription', {
42
+ defaultValue: 'The draft overlay could not be read. Retry, or check your connection.',
43
+ })
44
+ : t('preview.empty.notReadyDescription', {
45
+ defaultValue: 'The build may still be running, or it may have failed before this app was staged. Check the conversation for the build status — this pane refreshes as drafts land.',
46
+ }) }), _jsx("div", { className: "mt-4 flex justify-center", children: _jsxs(Button, { variant: "outline", onClick: onRetry, "data-testid": "preview-draft-retry", children: [_jsx(RefreshCw, { className: "mr-1.5 h-3.5 w-3.5" }), t('preview.empty.retry', { defaultValue: 'Retry' })] }) })] }) }));
47
+ }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ /**
9
+ * ADR-0037 Live Canvas — preview mode plumbing.
10
+ *
11
+ * One URL flag (`?preview=draft`) flips the whole renderer tree into
12
+ * "as-if-published" mode: metadata reads overlay pending ADR-0033 drafts on
13
+ * the active registry, so an unpublished app/view/dashboard renders exactly
14
+ * what Publish would make real. The canvas (and the Preview button in chat)
15
+ * navigate with this flag; everything below just reads the context.
16
+ *
17
+ * Read-only by design: preview changes the SOURCE of metadata reads, never
18
+ * writes, and Publish remains the single commit gate.
19
+ */
20
+ import { type ReactNode } from 'react';
21
+ /** Query flag that switches the console into draft-preview mode. */
22
+ export declare const PREVIEW_QUERY_FLAG = "preview";
23
+ export declare const PREVIEW_QUERY_VALUE = "draft";
24
+ /** True when `search` (a `location.search` string) carries `preview=draft`. */
25
+ export declare function isPreviewSearch(search: string): boolean;
26
+ /**
27
+ * Declare that the NEXT navigation is an intentional exit from draft preview.
28
+ * Call right before navigating away (e.g. the preview bar's Exit button);
29
+ * without it, the sticky keeper re-applies `?preview=draft` to in-app
30
+ * navigation so a click inside the previewed app can't silently drop the
31
+ * draft world mid-session.
32
+ */
33
+ export declare function markPreviewExit(): void;
34
+ /**
35
+ * Provides the preview-mode flag to the tree. Reads the router location
36
+ * LIVE, so entering/leaving `?preview=draft` flips consumers without a
37
+ * remount. `force` overrides the URL — the Live Canvas mounts its embedded
38
+ * renderer subtree with `force` so the canvas is always a draft window
39
+ * regardless of the host page's own URL.
40
+ *
41
+ * STICKY by design: preview is URL-keyed, but in-app navigation (the app's
42
+ * landing redirect, sidebar links, row clicks) builds URLs without the
43
+ * query string. Once the tree is in preview, this provider re-applies the
44
+ * flag (history REPLACE, no extra entry) to any same-session navigation
45
+ * that lost it — so the only way out of the draft world is the explicit
46
+ * Exit affordance ({@link markPreviewExit}), never an accidental click.
47
+ */
48
+ export declare function PreviewModeProvider({ force, children }: {
49
+ force?: boolean;
50
+ children: ReactNode;
51
+ }): import("react").JSX.Element;
52
+ /**
53
+ * Whether the current tree renders the draft-overlaid world. Defaults to
54
+ * false outside a provider, so surfaces that never mount preview (login,
55
+ * bare pages) keep reading published metadata only.
56
+ */
57
+ export declare function usePreviewDrafts(): boolean;
@@ -0,0 +1,99 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * ObjectUI
4
+ * Copyright (c) 2024-present ObjectStack Inc.
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ */
9
+ /**
10
+ * ADR-0037 Live Canvas — preview mode plumbing.
11
+ *
12
+ * One URL flag (`?preview=draft`) flips the whole renderer tree into
13
+ * "as-if-published" mode: metadata reads overlay pending ADR-0033 drafts on
14
+ * the active registry, so an unpublished app/view/dashboard renders exactly
15
+ * what Publish would make real. The canvas (and the Preview button in chat)
16
+ * navigate with this flag; everything below just reads the context.
17
+ *
18
+ * Read-only by design: preview changes the SOURCE of metadata reads, never
19
+ * writes, and Publish remains the single commit gate.
20
+ */
21
+ import { createContext, useContext, useEffect, useMemo, useState } from 'react';
22
+ import { useLocation, useNavigate } from 'react-router-dom';
23
+ const PreviewModeContext = createContext(false);
24
+ /** Query flag that switches the console into draft-preview mode. */
25
+ export const PREVIEW_QUERY_FLAG = 'preview';
26
+ export const PREVIEW_QUERY_VALUE = 'draft';
27
+ /** True when `search` (a `location.search` string) carries `preview=draft`. */
28
+ export function isPreviewSearch(search) {
29
+ return new URLSearchParams(search).get(PREVIEW_QUERY_FLAG) === PREVIEW_QUERY_VALUE;
30
+ }
31
+ // Set by markPreviewExit() for exactly one navigation: the user explicitly
32
+ // left preview (DraftPreviewBar's Exit / post-publish), so the keeper below
33
+ // must NOT re-stick the flag onto the next location.
34
+ let previewExitRequested = false;
35
+ /**
36
+ * Declare that the NEXT navigation is an intentional exit from draft preview.
37
+ * Call right before navigating away (e.g. the preview bar's Exit button);
38
+ * without it, the sticky keeper re-applies `?preview=draft` to in-app
39
+ * navigation so a click inside the previewed app can't silently drop the
40
+ * draft world mid-session.
41
+ */
42
+ export function markPreviewExit() {
43
+ previewExitRequested = true;
44
+ }
45
+ /**
46
+ * Provides the preview-mode flag to the tree. Reads the router location
47
+ * LIVE, so entering/leaving `?preview=draft` flips consumers without a
48
+ * remount. `force` overrides the URL — the Live Canvas mounts its embedded
49
+ * renderer subtree with `force` so the canvas is always a draft window
50
+ * regardless of the host page's own URL.
51
+ *
52
+ * STICKY by design: preview is URL-keyed, but in-app navigation (the app's
53
+ * landing redirect, sidebar links, row clicks) builds URLs without the
54
+ * query string. Once the tree is in preview, this provider re-applies the
55
+ * flag (history REPLACE, no extra entry) to any same-session navigation
56
+ * that lost it — so the only way out of the draft world is the explicit
57
+ * Exit affordance ({@link markPreviewExit}), never an accidental click.
58
+ */
59
+ export function PreviewModeProvider({ force, children }) {
60
+ const location = useLocation();
61
+ const navigate = useNavigate();
62
+ const fromUrl = useMemo(() => isPreviewSearch(location.search), [location.search]);
63
+ // Sticky state: stays true across the flag-less navigation window so the
64
+ // CONTEXT VALUE never flickers false mid-session. A flicker is not benign —
65
+ // it swaps the whole metadata source to published for one render, which
66
+ // (a) wastes a full refetch and (b) feeds cross-world diffs to effects
67
+ // like NavigationSyncEffect that must never see the two worlds as one
68
+ // timeline (that misread once WROTE nav changes from inside a preview).
69
+ const [sticky, setSticky] = useState(fromUrl);
70
+ useEffect(() => {
71
+ if (fromUrl) {
72
+ setSticky(true);
73
+ previewExitRequested = false;
74
+ return;
75
+ }
76
+ if (!sticky)
77
+ return;
78
+ if (previewExitRequested) {
79
+ previewExitRequested = false;
80
+ setSticky(false);
81
+ return;
82
+ }
83
+ // In-app navigation lost the flag without an explicit exit — restore it
84
+ // in place (history REPLACE, no extra entry) so a refresh/share of the
85
+ // URL stays in the draft world too.
86
+ const params = new URLSearchParams(location.search);
87
+ params.set(PREVIEW_QUERY_FLAG, PREVIEW_QUERY_VALUE);
88
+ navigate(`${location.pathname}?${params.toString()}${location.hash}`, { replace: true });
89
+ }, [fromUrl, sticky, location.pathname, location.search, location.hash, navigate]);
90
+ return (_jsx(PreviewModeContext.Provider, { value: force ?? (fromUrl || sticky), children: children }));
91
+ }
92
+ /**
93
+ * Whether the current tree renders the draft-overlaid world. Defaults to
94
+ * false outside a provider, so surfaces that never mount preview (login,
95
+ * bare pages) keep reading published metadata only.
96
+ */
97
+ export function usePreviewDrafts() {
98
+ return useContext(PreviewModeContext);
99
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ export declare function UnpublishedAppBar(): import("react").JSX.Element | null;
@@ -0,0 +1,83 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * ObjectUI
4
+ * Copyright (c) 2024-present ObjectStack Inc.
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ */
9
+ /**
10
+ * ADR-0045 — the "unpublished app" banner. Renders while the CURRENT app is
11
+ * materialized-but-unlisted (`app.hidden === true`): the app is fully real —
12
+ * tables, data, interactions — but end users can't see it (launchers exclude
13
+ * it; the REST gate strips it for non-builders). The banner narrates that
14
+ * state and offers the one action that matters: Publish, which simply flips
15
+ * visibility (`hidden: false`) — instant and reversible, per ADR-0045.
16
+ *
17
+ * Sibling of DraftPreviewBar (the ADR-0037 draft-overlay watermark): that bar
18
+ * owns mutation preview (`?preview=draft`); this one owns the materialize
19
+ * regime. In preview mode this bar yields — the draft bar already narrates.
20
+ */
21
+ import { useState } from 'react';
22
+ import { useLocation, useParams } from 'react-router-dom';
23
+ import { EyeOff, History, Rocket } from 'lucide-react';
24
+ import { toast } from 'sonner';
25
+ import { Button } from '@object-ui/components';
26
+ import { useObjectTranslation } from '@object-ui/i18n';
27
+ import { useMetadata } from '../providers/MetadataProvider';
28
+ import { matchAppBySegment } from '../utils/appRoute';
29
+ import { CommitTimeline } from './CommitTimeline';
30
+ import { usePreviewDrafts } from './PreviewModeContext';
31
+ export function UnpublishedAppBar() {
32
+ const preview = usePreviewDrafts();
33
+ const { appName } = useParams();
34
+ const location = useLocation();
35
+ const { apps, refresh } = useMetadata();
36
+ const { t } = useObjectTranslation();
37
+ const [publishing, setPublishing] = useState(false);
38
+ const [historyOpen, setHistoryOpen] = useState(false);
39
+ // The draft-preview watermark owns the preview tree; never stack both bars.
40
+ if (preview)
41
+ return null;
42
+ const routeApp = appName ?? location.pathname.match(/\/apps\/([^/?#]+)/)?.[1];
43
+ if (!routeApp)
44
+ return null;
45
+ const app = matchAppBySegment(apps ?? [], routeApp);
46
+ if (!app || app.hidden !== true)
47
+ return null;
48
+ // ADR-0067 — the package this app belongs to keys its commit timeline.
49
+ const packageId = app?.packageId ?? app?._packageId ?? null;
50
+ const publish = async () => {
51
+ setPublishing(true);
52
+ try {
53
+ // Publish = the ADR-0045 visibility flip: one metadata write, no
54
+ // lifecycle machinery. Body is the full current app with hidden:false
55
+ // (the meta save endpoint replaces the overlay row).
56
+ const res = await fetch(`/api/v1/meta/app/${encodeURIComponent(routeApp)}`, {
57
+ method: 'PUT',
58
+ credentials: 'include',
59
+ headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
60
+ body: JSON.stringify({ ...app, hidden: false }),
61
+ });
62
+ if (!res.ok) {
63
+ const payload = await res.json().catch(() => null);
64
+ throw new Error(payload?.error?.message ?? payload?.error ?? `HTTP ${res.status}`);
65
+ }
66
+ toast.success(t('preview.unpublishedBar.published', {
67
+ defaultValue: 'Published! The app is now visible to your users.',
68
+ }));
69
+ refresh?.();
70
+ }
71
+ catch (e) {
72
+ toast.error(`${t('preview.unpublishedBar.publishFailed', { defaultValue: 'Publish failed' })}: ${e.message}`);
73
+ }
74
+ finally {
75
+ setPublishing(false);
76
+ }
77
+ };
78
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "sticky top-0 z-40 flex items-center gap-3 border-b border-amber-300/70 bg-amber-50 px-4 py-2 text-sm text-amber-900 dark:border-amber-700/60 dark:bg-amber-950/40 dark:text-amber-200", "data-testid": "unpublished-app-bar", children: [_jsx(EyeOff, { className: "h-4 w-4 shrink-0" }), _jsx("p", { className: "min-w-0 flex-1 truncate", children: t('preview.unpublishedBar.message', {
79
+ defaultValue: 'Unpublished app — fully functional, but only builders can see it. Publish to make it visible to your users.',
80
+ }) }), packageId ? (_jsxs(Button, { size: "sm", variant: "outline", onClick: () => setHistoryOpen(true), "data-testid": "unpublished-app-history", children: [_jsx(History, { className: "mr-1 h-3.5 w-3.5" }), t('preview.history.button', { defaultValue: 'History' })] })) : null, _jsxs(Button, { size: "sm", onClick: publish, disabled: publishing, "data-testid": "unpublished-app-publish", children: [_jsx(Rocket, { className: "mr-1 h-3.5 w-3.5" }), publishing
81
+ ? t('preview.unpublishedBar.publishing', { defaultValue: 'Publishing…' })
82
+ : t('preview.unpublishedBar.publish', { defaultValue: 'Publish' })] })] }), packageId ? (_jsx(CommitTimeline, { open: historyOpen, onOpenChange: setHistoryOpen, packageId: packageId, onReverted: refresh })) : null] }));
83
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ /**
9
+ * ADR-0067 — package-scoped commit history reads/writes for the timeline.
10
+ *
11
+ * Each AI build (and Studio batch) lands as one revertible COMMIT on top of
12
+ * the metadata history. The history-not-confirm model: you don't approve each
13
+ * publish — you review this timeline and revert if a change was wrong. These
14
+ * helpers read the timeline (`GET /packages/:id/commits`) and revert one
15
+ * commit (`POST /packages/:id/commits/:cid/revert`). Cookie-authenticated like
16
+ * every console call; tolerant of the `{ data: ... }` / bare envelope shapes.
17
+ */
18
+ export interface CommitEntry {
19
+ id: string;
20
+ operation: 'apply' | 'revert';
21
+ message?: string;
22
+ actor?: string;
23
+ aiModel?: string;
24
+ itemCount: number;
25
+ createdAt?: string;
26
+ }
27
+ export declare function fetchCommits(packageId: string): Promise<CommitEntry[]>;
28
+ export declare function revertCommit(packageId: string, commitId: string): Promise<void>;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ export async function fetchCommits(packageId) {
9
+ const res = await fetch(`/api/v1/packages/${encodeURIComponent(packageId)}/commits`, {
10
+ credentials: 'include',
11
+ headers: { Accept: 'application/json' },
12
+ cache: 'no-store',
13
+ });
14
+ if (!res.ok)
15
+ throw new Error(`commits HTTP ${res.status}`);
16
+ const data = (await res.json());
17
+ const list = Array.isArray(data)
18
+ ? data
19
+ : data?.commits ??
20
+ data?.data?.commits ??
21
+ [];
22
+ return (Array.isArray(list) ? list : []).map((raw) => {
23
+ const c = raw;
24
+ return {
25
+ id: String(c.id),
26
+ operation: c.operation === 'revert' ? 'revert' : 'apply',
27
+ message: typeof c.message === 'string' ? c.message : undefined,
28
+ actor: typeof c.actor === 'string' ? c.actor : undefined,
29
+ aiModel: typeof c.aiModel === 'string' ? c.aiModel : undefined,
30
+ itemCount: typeof c.itemCount === 'number' ? c.itemCount : 0,
31
+ createdAt: typeof c.createdAt === 'string' ? c.createdAt : undefined,
32
+ };
33
+ });
34
+ }
35
+ export async function revertCommit(packageId, commitId) {
36
+ const res = await fetch(`/api/v1/packages/${encodeURIComponent(packageId)}/commits/${encodeURIComponent(commitId)}/revert`, {
37
+ method: 'POST',
38
+ credentials: 'include',
39
+ headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
40
+ body: '{}',
41
+ });
42
+ const payload = (await res.json().catch(() => null));
43
+ const inner = payload?.data ?? payload ?? undefined;
44
+ if (!res.ok || inner?.success === false) {
45
+ const err = payload?.error;
46
+ throw new Error((typeof err === 'object' ? err?.message : err) ?? `HTTP ${res.status}`);
47
+ }
48
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ /**
9
+ * Live draft-status read for the chat's draft cards (panel-as-source-of-truth,
10
+ * made literal): how many drafts are still PENDING in a package, straight from
11
+ * the ADR-0033 `_drafts` endpoint. The chat passes this to
12
+ * `fetchPendingDraftCount` so a card's Publish/Published affordance reflects
13
+ * the server's CURRENT state — across conversation reloads, other sessions'
14
+ * publishes, and later edits into the same package — instead of replaying the
15
+ * tool-result snapshot it was born with.
16
+ *
17
+ * Cookie-authenticated like every other console call; tolerant of both
18
+ * response shapes (`[...]` and `{ drafts: [...] }`).
19
+ */
20
+ export declare function fetchPendingDraftCount(packageId: string): Promise<number>;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ /**
9
+ * Live draft-status read for the chat's draft cards (panel-as-source-of-truth,
10
+ * made literal): how many drafts are still PENDING in a package, straight from
11
+ * the ADR-0033 `_drafts` endpoint. The chat passes this to
12
+ * `fetchPendingDraftCount` so a card's Publish/Published affordance reflects
13
+ * the server's CURRENT state — across conversation reloads, other sessions'
14
+ * publishes, and later edits into the same package — instead of replaying the
15
+ * tool-result snapshot it was born with.
16
+ *
17
+ * Cookie-authenticated like every other console call; tolerant of both
18
+ * response shapes (`[...]` and `{ drafts: [...] }`).
19
+ */
20
+ export async function fetchPendingDraftCount(packageId) {
21
+ const res = await fetch(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(packageId)}`, { credentials: 'include', headers: { Accept: 'application/json' }, cache: 'no-store' });
22
+ if (!res.ok)
23
+ throw new Error(`_drafts HTTP ${res.status}`);
24
+ const data = (await res.json());
25
+ const list = Array.isArray(data) ? data : data?.drafts ?? data?.data?.drafts ?? [];
26
+ return Array.isArray(list) ? list.length : 0;
27
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ type TranslateFn = (key: string, opts?: Record<string, unknown>) => string;
9
+ export interface PublishAllResult {
10
+ ok: boolean;
11
+ /** Count of drafts the call attempted to publish. */
12
+ attempted: number;
13
+ }
14
+ export declare function usePublishAllDrafts(t: TranslateFn): {
15
+ publishAll: () => Promise<PublishAllResult>;
16
+ publishing: boolean;
17
+ };
18
+ export {};
@@ -0,0 +1,106 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ /**
9
+ * One-click "publish everything pending" — shared by the Home pending-drafts
10
+ * banner and the ADR-0037 draft-preview bar, so both surfaces publish through
11
+ * the SAME governed path and report the SAME health.
12
+ *
13
+ * Package-bound drafts go through `POST /packages/:id/publish-drafts` — the
14
+ * path that orders structure-before-seeds server-side and runs the ADR-0038
15
+ * L3 runtime probes; findings surface as a loud warning toast instead of a
16
+ * blind "Published!". Package-less drafts fall back to by-reference publish
17
+ * (structure first, seeds last) so they never dead-end.
18
+ */
19
+ import { useCallback, useState } from 'react';
20
+ import { toast } from 'sonner';
21
+ import { publishHealthFromResponse } from '@object-ui/plugin-chatbot';
22
+ import { useMetadataClient } from '../views/metadata-admin/useMetadata';
23
+ export function usePublishAllDrafts(t) {
24
+ const client = useMetadataClient();
25
+ const [publishing, setPublishing] = useState(false);
26
+ const publishAll = useCallback(async () => {
27
+ setPublishing(true);
28
+ try {
29
+ const pending = ((await client.listDrafts?.({})) || [])
30
+ .filter((d) => d && typeof d.type === 'string' && typeof d.name === 'string')
31
+ .map((d) => ({
32
+ type: d.type,
33
+ name: d.name,
34
+ packageId: typeof d.packageId === 'string' && d.packageId ? d.packageId : null,
35
+ }));
36
+ if (pending.length === 0) {
37
+ toast.info(t('home.pendingDrafts.nothing', { defaultValue: 'Nothing to publish.' }));
38
+ return { ok: true, attempted: 0 };
39
+ }
40
+ const packageIds = [...new Set(pending.map((d) => d.packageId).filter((p) => p !== null))];
41
+ const orphans = pending.filter((d) => d.packageId === null);
42
+ const seedProblems = [];
43
+ const probeProblems = [];
44
+ let seededRows = 0;
45
+ const recordHealth = (health) => {
46
+ if (!health)
47
+ return;
48
+ if (health.seedError)
49
+ seedProblems.push(health.seedError);
50
+ if (typeof health.seededRows === 'number')
51
+ seededRows += health.seededRows;
52
+ for (const issue of health.issues ?? []) {
53
+ if (issue.severity === 'error')
54
+ probeProblems.push(issue.message);
55
+ }
56
+ };
57
+ for (const packageId of packageIds) {
58
+ const res = await fetch(`/api/v1/packages/${encodeURIComponent(packageId)}/publish-drafts`, {
59
+ method: 'POST',
60
+ credentials: 'include',
61
+ headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
62
+ body: '{}',
63
+ });
64
+ const payload = await res.json().catch(() => null);
65
+ if (!res.ok || payload?.success === false) {
66
+ throw new Error(payload?.error?.message || `HTTP ${res.status}`);
67
+ }
68
+ recordHealth(publishHealthFromResponse(payload));
69
+ }
70
+ const ordered = [
71
+ ...orphans.filter((d) => d.type !== 'seed'),
72
+ ...orphans.filter((d) => d.type === 'seed'),
73
+ ];
74
+ for (const d of ordered) {
75
+ const res = await client.publishDraft(d.type, d.name);
76
+ const seedApplied = res?.seedApplied;
77
+ if (seedApplied && seedApplied.success === false) {
78
+ seedProblems.push(seedApplied.error ?? `${d.name}: sample data failed to load`);
79
+ }
80
+ }
81
+ if (probeProblems.length > 0) {
82
+ toast.warning(t('home.pendingDrafts.probeWarn', { defaultValue: 'Published, but verification found problems.' }), { description: probeProblems[0] });
83
+ }
84
+ else if (seedProblems.length > 0) {
85
+ toast.warning(t('home.pendingDrafts.seedWarn', { defaultValue: 'Published, but some sample data failed to load.' }), { description: seedProblems[0] });
86
+ }
87
+ else {
88
+ toast.success(seededRows > 0
89
+ ? t('home.pendingDrafts.publishedVerified', {
90
+ count: seededRows,
91
+ defaultValue: 'Published & verified — {{count}} sample row(s) live.',
92
+ })
93
+ : t('home.pendingDrafts.published', { defaultValue: 'Published! Your changes are live.' }));
94
+ }
95
+ return { ok: true, attempted: pending.length };
96
+ }
97
+ catch (e) {
98
+ toast.error(`${t('home.pendingDrafts.publishFailed', { defaultValue: 'Publish failed' })}: ${e.message}`);
99
+ return { ok: false, attempted: 0 };
100
+ }
101
+ finally {
102
+ setPublishing(false);
103
+ }
104
+ }, [client, t]);
105
+ return { publishAll, publishing };
106
+ }
@@ -18,4 +18,4 @@ interface AdapterProviderProps {
18
18
  * Creates an ObjectStackAdapter, connects to the API, then provides it to children.
19
19
  * Shows nothing (returns null) until the adapter is ready.
20
20
  */
21
- export declare function AdapterProvider({ children, adapter: externalAdapter }: AdapterProviderProps): import("react/jsx-runtime").JSX.Element;
21
+ export declare function AdapterProvider({ children, adapter: externalAdapter }: AdapterProviderProps): import("react").JSX.Element;
@@ -11,6 +11,7 @@ import { useState, useEffect } from 'react';
11
11
  import { ObjectStackAdapter } from '@object-ui/data-objectstack';
12
12
  import { createAuthenticatedFetch } from '@object-ui/auth';
13
13
  import { AdapterCtx } from '@object-ui/react';
14
+ import { installSettleSignalGlobal, withSettleSignal } from '../observability/settleSignal';
14
15
  export { useAdapter } from '@object-ui/react';
15
16
  /**
16
17
  * Creates an ObjectStackAdapter, connects to the API, then provides it to children.
@@ -24,11 +25,15 @@ export function AdapterProvider({ children, adapter: externalAdapter }) {
24
25
  return;
25
26
  }
26
27
  let cancelled = false;
28
+ // Expose window.__objectui.{pendingRequests,idle,whenIdle} so an automated
29
+ // (AI) browser driver has one "is the app settled?" predicate (ADR-0054 C5).
30
+ installSettleSignalGlobal();
27
31
  async function init() {
28
32
  try {
29
33
  const a = new ObjectStackAdapter({
30
34
  baseUrl: import.meta.env.VITE_SERVER_URL || '',
31
- fetch: createAuthenticatedFetch(),
35
+ // Count every outbound request in the global in-flight signal (C5).
36
+ fetch: withSettleSignal(createAuthenticatedFetch()),
32
37
  autoReconnect: true,
33
38
  maxReconnectAttempts: 5,
34
39
  reconnectDelay: 1000,
@@ -41,7 +41,7 @@ interface ExpressionProviderProps {
41
41
  data?: Record<string, any>;
42
42
  features?: Record<string, any>;
43
43
  }
44
- export declare function ExpressionProvider({ children, user, app, data, features }: ExpressionProviderProps): import("react/jsx-runtime").JSX.Element;
44
+ export declare function ExpressionProvider({ children, user, app, data, features }: ExpressionProviderProps): React.JSX.Element;
45
45
  /**
46
46
  * Hook to access the expression context.
47
47
  * Returns the full context value or a default empty context.
@@ -1,5 +1,5 @@
1
1
  import { type ReactNode } from 'react';
2
- import type { ObjectStackAdapter } from '@object-ui/data-objectstack';
2
+ import { type ObjectStackAdapter } from '@object-ui/data-objectstack';
3
3
  import { useMetadata, type MetadataContextValue, type MetadataState } from '@object-ui/react';
4
4
  export type { MetadataState, MetadataContextValue };
5
5
  export { useMetadataItem } from '@object-ui/react';
@@ -10,7 +10,22 @@ interface MetadataProviderProps {
10
10
  adapter: ObjectStackAdapter;
11
11
  ttlMs?: number;
12
12
  }
13
- export declare function MetadataProvider({ children, adapter, ttlMs }: MetadataProviderProps): import("react/jsx-runtime").JSX.Element;
13
+ /** Exported for tests both metadata sources must normalize identically. */
14
+ export declare function extractItems(res: unknown): any[];
15
+ export declare function mergeViewsIntoObjects(objects: any[], views: any[]): any[];
16
+ /**
17
+ * Relationship-driven master-detail: a child object's `master_detail`/`lookup`
18
+ * field can carry `inlineEdit: true` to declare "edit me inline within my
19
+ * parent's form". This pass scans every object for such fields and merges the
20
+ * resulting child collections into each parent object's form view as
21
+ * `subforms` — so the parent's standard create/edit form renders an atomic
22
+ * master-detail form with NO view config and NO bespoke page. The intent lives
23
+ * in the data model (where it's defined once, e.g. by an AI modelling the
24
+ * schema); forms just follow. An explicit `form.subforms` entry for the same
25
+ * child overrides the model-derived one.
26
+ */
27
+ export declare function attachInlineSubforms(objects: any[]): any[];
28
+ export declare function MetadataProvider({ children, adapter, ttlMs }: MetadataProviderProps): import("react").JSX.Element;
14
29
  export declare function useMetadataType(type: string): {
15
30
  items: any[];
16
31
  loading: boolean;