@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
@@ -1,6 +1,10 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useState, useEffect, useCallback, useRef, useMemo, } from 'react';
3
+ import { MetadataClient } from '@object-ui/data-objectstack';
4
+ import { resolveInlineMode } from '@object-ui/plugin-form';
3
5
  import { MetadataCtx, useMetadata } from '@object-ui/react';
6
+ import { usePreviewDrafts } from '../preview/PreviewModeContext';
7
+ import { subscribeCanvasInvalidate, subscribeMetadataRefresh } from '../assistant/assistantBus';
4
8
  export { useMetadataItem } from '@object-ui/react';
5
9
  export { useMetadata };
6
10
  // ---------------------------------------------------------------------------
@@ -41,7 +45,15 @@ function debug(...args) {
41
45
  // ---------------------------------------------------------------------------
42
46
  // Helpers
43
47
  // ---------------------------------------------------------------------------
44
- function extractItems(res) {
48
+ /** Exported for tests — both metadata sources must normalize identically. */
49
+ export function extractItems(res) {
50
+ // Both source shapes must parse: the adapter SDK returns the wrapped
51
+ // `{ type, items: [...] }` envelope, while the ADR-0037 preview path's
52
+ // MetadataClient.list() returns the already-unwrapped array. Dropping the
53
+ // bare-array shape silently emptied the ENTIRE draft-preview world (every
54
+ // type read 0 items), stranding the Live Canvas on "No Apps Configured".
55
+ if (Array.isArray(res))
56
+ return res;
45
57
  if (res && typeof res === 'object' && 'items' in res && Array.isArray(res.items)) {
46
58
  return res.items;
47
59
  }
@@ -61,14 +73,54 @@ function isNamedItem(item) {
61
73
  'name' in item &&
62
74
  typeof item.name === 'string');
63
75
  }
64
- function mergeViewsIntoObjects(objects, views) {
76
+ /** A first-class ViewItem carries a `viewKind` discriminant + `object` binding. */
77
+ function isViewItem(view) {
78
+ return !!view && typeof view === 'object' && !!view.viewKind && !!view.object;
79
+ }
80
+ export function mergeViewsIntoObjects(objects, views) {
81
+ var _a;
65
82
  if (!objects.length || !views.length)
66
83
  return objects;
67
84
  const byObject = {};
85
+ // Objects that received expanded ViewItems — their legacy aggregated
86
+ // container (also present in the `view` list) is superseded and skipped.
87
+ const hasViewItems = new Set();
88
+ for (const view of views) {
89
+ if (isViewItem(view))
90
+ hasViewItems.add(view.object);
91
+ }
68
92
  for (const view of views) {
93
+ // ── New protocol: independent ViewItem ({ name, object, viewKind, config }) ──
94
+ if (isViewItem(view)) {
95
+ const bucket = (byObject[_a = view.object] || (byObject[_a] = { listViews: {}, formViews: {} }));
96
+ // Canonical `<object>.<key>` name doubles as the view id, so `/view/<name>`
97
+ // URLs resolve directly against the switcher tab ids.
98
+ const key = view.name || `${view.object}.${view.viewKind}`;
99
+ const body = view.config && typeof view.config === 'object' ? view.config : {};
100
+ // Flatten `config` to the legacy NamedListView/FormView shape the
101
+ // renderer consumes (type/data/columns/sections at top level); carry the
102
+ // item-level label/isDefault and stamp `name` so primary-view promotion
103
+ // (which matches on `list.name`) finds this entry by its listViews key.
104
+ const entry = { ...body, name: key, label: view.label ?? body.label, isDefault: !!view.isDefault };
105
+ if (view.viewKind === 'form') {
106
+ bucket.formViews[key] = entry;
107
+ if (view.isDefault || !bucket.form)
108
+ bucket.form = entry;
109
+ }
110
+ else {
111
+ bucket.listViews[key] = entry;
112
+ if (view.isDefault)
113
+ bucket.primary = entry;
114
+ }
115
+ continue;
116
+ }
117
+ // ── Legacy aggregated container ({ list, form, listViews, formViews }) ──
69
118
  const objName = view?.name || view?.list?.data?.object || view?.form?.data?.object;
70
119
  if (!objName)
71
120
  continue;
121
+ // Expanded ViewItems supersede the bare container for this object.
122
+ if (hasViewItems.has(objName))
123
+ continue;
72
124
  const bucket = (byObject[objName] || (byObject[objName] = { listViews: {}, formViews: {} }));
73
125
  if (view.list) {
74
126
  // Preserve the primary list view as `obj.list` per @objectstack/spec
@@ -115,6 +167,67 @@ function mergeViewsIntoObjects(objects, views) {
115
167
  return merged;
116
168
  });
117
169
  }
170
+ /**
171
+ * Relationship-driven master-detail: a child object's `master_detail`/`lookup`
172
+ * field can carry `inlineEdit: true` to declare "edit me inline within my
173
+ * parent's form". This pass scans every object for such fields and merges the
174
+ * resulting child collections into each parent object's form view as
175
+ * `subforms` — so the parent's standard create/edit form renders an atomic
176
+ * master-detail form with NO view config and NO bespoke page. The intent lives
177
+ * in the data model (where it's defined once, e.g. by an AI modelling the
178
+ * schema); forms just follow. An explicit `form.subforms` entry for the same
179
+ * child overrides the model-derived one.
180
+ */
181
+ export function attachInlineSubforms(objects) {
182
+ if (!objects?.length)
183
+ return objects;
184
+ const inlineByParent = {};
185
+ for (const child of objects) {
186
+ const fields = child?.fields;
187
+ if (!fields)
188
+ continue;
189
+ const entries = Array.isArray(fields)
190
+ ? fields.map((f) => [f?.name, f])
191
+ : Object.entries(fields);
192
+ for (const [fname, fdef] of entries) {
193
+ const d = fdef;
194
+ if (!fname || !d?.inlineEdit)
195
+ continue;
196
+ if (d.type !== 'master_detail' && d.type !== 'lookup')
197
+ continue;
198
+ const parent = d.reference;
199
+ if (!parent)
200
+ continue;
201
+ (inlineByParent[parent] || (inlineByParent[parent] = [])).push({
202
+ childObject: child.name,
203
+ relationshipField: fname,
204
+ // Resolve the inline-edit form factor (grid vs per-row form) from the
205
+ // declared value, falling back to the smart default by child shape.
206
+ inlineMode: resolveInlineMode(child, d.inlineEdit, { relationshipField: fname }),
207
+ ...(d.inlineTitle ? { title: d.inlineTitle } : {}),
208
+ ...(Array.isArray(d.inlineColumns) ? { columns: d.inlineColumns } : {}),
209
+ ...(typeof d.inlineAmountField === 'string' ? { amountField: d.inlineAmountField } : {}),
210
+ });
211
+ }
212
+ }
213
+ if (!Object.keys(inlineByParent).length)
214
+ return objects;
215
+ return objects.map((obj) => {
216
+ const derived = inlineByParent[obj.name];
217
+ if (!derived?.length)
218
+ return obj;
219
+ const form = { ...(obj.form || { type: 'simple' }) };
220
+ const explicit = Array.isArray(form.subforms) ? form.subforms : [];
221
+ const explicitChildren = new Set(explicit.map((s) => s.childObject));
222
+ // Model-derived first; an explicit view subform for the same child wins.
223
+ form.subforms = [...derived.filter((d) => !explicitChildren.has(d.childObject)), ...explicit];
224
+ const next = { ...obj, form };
225
+ if (obj.formViews?.default) {
226
+ next.formViews = { ...obj.formViews, default: { ...obj.formViews.default, subforms: form.subforms } };
227
+ }
228
+ return next;
229
+ });
230
+ }
118
231
  function emptyEntry() {
119
232
  return {
120
233
  status: 'idle',
@@ -157,6 +270,20 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
157
270
  const itemPromisesRef = useRef(new Map());
158
271
  const adapterRef = useRef(adapter);
159
272
  adapterRef.current = adapter;
273
+ // ADR-0037 Live Canvas: when the tree is in draft-preview mode, metadata
274
+ // reads come from the REST `?preview=draft` overlay (pending ADR-0033
275
+ // drafts win over active) instead of the adapter SDK. The MetadataClient
276
+ // is used because the SDK's meta API doesn't carry the preview flag; same
277
+ // endpoints, same cookie auth. Reads only — every write path is unchanged.
278
+ const previewDrafts = usePreviewDrafts();
279
+ const previewClient = useMemo(() => {
280
+ if (!previewDrafts)
281
+ return null;
282
+ const baseUrl = (typeof import.meta !== 'undefined' && import.meta.env?.VITE_SERVER_URL) || '';
283
+ return new MetadataClient({ baseUrl, previewDrafts: true });
284
+ }, [previewDrafts]);
285
+ const previewClientRef = useRef(previewClient);
286
+ previewClientRef.current = previewClient;
160
287
  const [version, setVersion] = useState(0);
161
288
  // Defer state bumps so they never occur synchronously during a consumer's
162
289
  // render phase. `ensureType` may be invoked from inside `useMemo` getters
@@ -171,6 +298,14 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
171
298
  Promise.resolve().then(() => setVersion(v => v + 1));
172
299
  }
173
300
  }, []);
301
+ // Entering/leaving preview swaps the entire metadata source — the published
302
+ // and draft-overlaid worlds must never mix in one cache. Drop everything and
303
+ // let consumers refetch through the new source.
304
+ useEffect(() => {
305
+ cacheRef.current.clear();
306
+ itemPromisesRef.current.clear();
307
+ bump();
308
+ }, [previewDrafts, bump]);
174
309
  const getEntry = useCallback((type) => {
175
310
  let entry = cacheRef.current.get(type);
176
311
  if (!entry) {
@@ -190,9 +325,13 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
190
325
  const started = Date.now();
191
326
  entry.status = 'loading';
192
327
  entry.error = null;
193
- const client = adapterRef.current.getClient();
194
- const promise = client.meta
195
- .getItems(type)
328
+ // Preview mode reads the draft-overlaid world (`?preview=draft`);
329
+ // normal mode reads the adapter SDK as before.
330
+ const preview = previewClientRef.current;
331
+ const fetchItems = preview
332
+ ? preview.list(type)
333
+ : adapterRef.current.getClient().meta.getItems(type);
334
+ const promise = fetchItems
196
335
  .then((res) => {
197
336
  const items = extractItems(res);
198
337
  entry.items = items;
@@ -206,7 +345,9 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
206
345
  entry.byName.set(it.name, it);
207
346
  }
208
347
  }
209
- if (type === 'app')
348
+ // Never let the draft-overlaid world poison the published session
349
+ // cache — preview is ephemeral by design.
350
+ if (type === 'app' && !preview)
210
351
  saveToSession(type, items);
211
352
  debug(`fetched type=${type} items=${items.length} in ${Date.now() - started}ms`);
212
353
  bump();
@@ -243,9 +384,11 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
243
384
  if (existing)
244
385
  return existing;
245
386
  const started = Date.now();
246
- const client = adapterRef.current.getClient();
247
- const promise = client.meta
248
- .getItem(type, name)
387
+ const preview = previewClientRef.current;
388
+ const fetchItem = preview
389
+ ? preview.get(type, name)
390
+ : adapterRef.current.getClient().meta.getItem(type, name);
391
+ const promise = fetchItem
249
392
  .then((res) => {
250
393
  const item = extractItem(res);
251
394
  if (item)
@@ -297,11 +440,44 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
297
440
  }
298
441
  bump();
299
442
  }, [bump]);
443
+ // ADR-0037 P2.5 — same-document live refresh: while this tree renders the
444
+ // draft overlay, chat hosts announce each drafted artifact on the assistant
445
+ // bus; drop that type's cache entry so the next read refetches the updated
446
+ // draft world. Published-mode trees ignore the events entirely.
447
+ useEffect(() => {
448
+ if (!previewDrafts)
449
+ return;
450
+ return subscribeCanvasInvalidate(({ type }) => {
451
+ invalidate(type);
452
+ });
453
+ }, [previewDrafts, invalidate]);
454
+ // Live-metadata-changed refresh: a publish (drafts → live) or a marketplace
455
+ // install changed the registry out-of-band, so the schema this tree cached
456
+ // is stale. Refetch every loaded type — open forms/views/nav then reflect
457
+ // the new live world without a manual page reload (the chat-card "Publish"
458
+ // and Browse-page install paths do not reload, unlike the DraftPreviewBar).
459
+ // NOT gated to preview-drafts mode: the live world every tree reads changed.
460
+ useEffect(() => {
461
+ return subscribeMetadataRefresh(() => {
462
+ // The adapter keeps its OWN object-schema cache (getObjectSchema) that the
463
+ // context refresh below does not touch. A publish/install just changed the
464
+ // live schema, so drop it too — otherwise create/edit forms (which read
465
+ // the adapter's getObjectSchema, NOT this context) keep showing the
466
+ // pre-publish field set until the adapter cache's 5-minute TTL lapses.
467
+ try {
468
+ adapterRef.current?.clearCache?.();
469
+ }
470
+ catch { /* adapter mid-swap */ }
471
+ void refresh();
472
+ });
473
+ }, [refresh]);
300
474
  const [initialLoading, setInitialLoading] = useState(true);
301
475
  const [initialError, setInitialError] = useState(null);
302
476
  useEffect(() => {
303
477
  let cancelled = false;
304
- const cached = loadFromSession('app');
478
+ // Session-cached apps are PUBLISHED-world data — seeding them while in
479
+ // draft preview would flash the wrong universe before the fetch lands.
480
+ const cached = previewDrafts ? null : loadFromSession('app');
305
481
  if (cached) {
306
482
  const entry = getEntry('app');
307
483
  entry.items = cached;
@@ -334,7 +510,7 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
334
510
  return () => {
335
511
  cancelled = true;
336
512
  };
337
- }, [adapter, ensureType, getEntry, bump]);
513
+ }, [adapter, ensureType, getEntry, bump, previewDrafts]);
338
514
  const value = useMemo(() => {
339
515
  void version;
340
516
  const readType = (type) => {
@@ -350,7 +526,8 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
350
526
  get objects() {
351
527
  const objs = readType(TYPE_BY_STATE_KEY.objects);
352
528
  const views = readType('view');
353
- return views.length ? mergeViewsIntoObjects(objs, views) : objs;
529
+ const merged = views.length ? mergeViewsIntoObjects(objs, views) : objs;
530
+ return attachInlineSubforms(merged);
354
531
  },
355
532
  get dashboards() {
356
533
  return readType(TYPE_BY_STATE_KEY.dashboards);
@@ -368,6 +545,9 @@ export function MetadataProvider({ children, adapter, ttlMs = DEFAULT_TTL_MS })
368
545
  ensureType,
369
546
  getItem,
370
547
  getItemsByType,
548
+ // Pure read — must NOT kick a fetch, so render-phase status checks
549
+ // can't recurse into ensureType.
550
+ getTypeStatus: (type) => getEntry(type).status,
371
551
  };
372
552
  return base;
373
553
  }, [version, initialLoading, initialError, ensureType, getItem, getEntry, refresh, invalidate]);
@@ -9,8 +9,8 @@
9
9
  * those don't reflect the runtime the SPA is actually attached to (e.g.
10
10
  * a tenant ObjectOS runtime pointing at a separate cloud control plane).
11
11
  *
12
- * Mirrors `apps/studio/src/lib/config.ts` but lives in app-shell because
13
- * the Console SPA in `apps/console` consumes app-shell code.
12
+ * The runtime-config shape lives in app-shell because the Console SPA in
13
+ * `apps/console` consumes app-shell code.
14
14
  *
15
15
  * Server-side: see
16
16
  * cloud/packages/service-cloud/src/multi-environment-plugins.ts
@@ -22,6 +22,41 @@ export interface RuntimeFeatures {
22
22
  installLocal: boolean;
23
23
  /** `/api/v1/marketplace/*` is reachable from this runtime. */
24
24
  marketplace: boolean;
25
+ /**
26
+ * AI-driven metadata authoring ("online development") is offered by this
27
+ * runtime. Default true; the capability is still gated server-side by the
28
+ * presence of the metadata-authoring agent. When false, the SPA hides the
29
+ * AI authoring affordances (generic data-chat assistant is unaffected).
30
+ */
31
+ aiStudio: boolean;
32
+ /**
33
+ * Auto-publish AI-built apps in the author's own environment. When true, the
34
+ * Studio chat fires the publish-drafts call automatically the moment the
35
+ * agent drafts an app, so the user refreshes and sees it live WITH its sample
36
+ * data — no manual "go home and publish" step. Server-derived from the plan
37
+ * (env-revertible via `OS_AI_AUTOPUBLISH_DISABLED`). Default true.
38
+ */
39
+ autoPublishAiBuilds: boolean;
40
+ /**
41
+ * Branded subdomains + custom (BYO-DNS) domains are available on this
42
+ * environment's plan. Optional commercial flag — absent on self-hosted /
43
+ * vanilla runtimes (treated as off). When false the SPA hides custom-domain
44
+ * settings (or shows them as an upgrade affordance). Server-derived from the
45
+ * plan entitlements (cloud ADR-0011/0012).
46
+ */
47
+ customDomain?: boolean;
48
+ /**
49
+ * SSO / SAML enterprise login is available on this environment's plan.
50
+ * Optional commercial flag — absent on self-hosted / vanilla runtimes
51
+ * (treated as off). Server-derived from the plan entitlements.
52
+ */
53
+ sso?: boolean;
54
+ }
55
+ export interface RuntimeBranding {
56
+ /** Product name shown in browser title, splash, account chrome. */
57
+ productName: string;
58
+ /** Short variant for PWA shortName / compact spots. */
59
+ productShortName: string;
25
60
  }
26
61
  export interface RuntimeConfig {
27
62
  /**
@@ -35,6 +70,7 @@ export interface RuntimeConfig {
35
70
  defaultOrgId?: string | null;
36
71
  defaultEnvironmentId?: string | null;
37
72
  features: RuntimeFeatures;
73
+ branding: RuntimeBranding;
38
74
  }
39
75
  /**
40
76
  * Fetch the server-pushed runtime config and merge it into the singleton.
@@ -49,6 +85,14 @@ export interface RuntimeConfig {
49
85
  export declare function initRuntimeConfig(baseUrl?: string): Promise<void>;
50
86
  /** Read-only accessor. Returns the current snapshot. */
51
87
  export declare function getRuntimeConfig(): RuntimeConfig;
88
+ /**
89
+ * Product name shown in browser title, splash, account chrome.
90
+ * Falls back to `'ObjectOS'` when the server hasn't been contacted yet.
91
+ * Operators override via `OS_PRODUCT_NAME` env var or
92
+ * `new RuntimeConfigPlugin({ productName: 'Acme Studio' })`.
93
+ */
94
+ export declare function getProductName(): string;
95
+ export declare function getProductShortName(): string;
52
96
  /** Whether `initRuntimeConfig()` has run at least once. */
53
97
  export declare function isRuntimeConfigInitialised(): boolean;
54
98
  /**
@@ -4,7 +4,8 @@ const defaults = {
4
4
  singleEnvironment: false,
5
5
  defaultOrgId: null,
6
6
  defaultEnvironmentId: null,
7
- features: { installLocal: false, marketplace: true },
7
+ features: { installLocal: false, marketplace: true, aiStudio: true, autoPublishAiBuilds: true, customDomain: false, sso: false },
8
+ branding: { productName: 'ObjectOS', productShortName: 'ObjectOS' },
8
9
  };
9
10
  let current = { ...defaults };
10
11
  let initialised = false;
@@ -17,6 +18,10 @@ function applyUpdate(patch) {
17
18
  ...current.features,
18
19
  ...(patch.features ?? {}),
19
20
  },
21
+ branding: {
22
+ ...current.branding,
23
+ ...(patch.branding ?? {}),
24
+ },
20
25
  };
21
26
  }
22
27
  /**
@@ -50,8 +55,24 @@ export async function initRuntimeConfig(baseUrl = '') {
50
55
  ? {
51
56
  installLocal: !!body.features.installLocal,
52
57
  marketplace: body.features.marketplace !== false,
58
+ aiStudio: body.features.aiStudio !== false,
59
+ autoPublishAiBuilds: body.features.autoPublishAiBuilds !== false,
60
+ // Commercial flags default OFF unless the server explicitly grants
61
+ // them — never show a paid surface on an unknown/older runtime.
62
+ customDomain: body.features.customDomain === true,
63
+ sso: body.features.sso === true,
53
64
  }
54
65
  : current.features,
66
+ branding: body.branding
67
+ ? {
68
+ productName: typeof body.branding.productName === 'string' && body.branding.productName.trim()
69
+ ? body.branding.productName.trim()
70
+ : current.branding.productName,
71
+ productShortName: typeof body.branding.productShortName === 'string' && body.branding.productShortName.trim()
72
+ ? body.branding.productShortName.trim()
73
+ : current.branding.productShortName,
74
+ }
75
+ : current.branding,
55
76
  });
56
77
  }
57
78
  catch {
@@ -66,6 +87,18 @@ export async function initRuntimeConfig(baseUrl = '') {
66
87
  export function getRuntimeConfig() {
67
88
  return current;
68
89
  }
90
+ /**
91
+ * Product name shown in browser title, splash, account chrome.
92
+ * Falls back to `'ObjectOS'` when the server hasn't been contacted yet.
93
+ * Operators override via `OS_PRODUCT_NAME` env var or
94
+ * `new RuntimeConfigPlugin({ productName: 'Acme Studio' })`.
95
+ */
96
+ export function getProductName() {
97
+ return current.branding?.productName || 'ObjectOS';
98
+ }
99
+ export function getProductShortName() {
100
+ return current.branding?.productShortName || getProductName();
101
+ }
69
102
  /** Whether `initRuntimeConfig()` has run at least once. */
70
103
  export function isRuntimeConfigInitialised() {
71
104
  return initialised;
@@ -81,6 +114,10 @@ export function getCloudBase() {
81
114
  }
82
115
  /** Test/dev helper. */
83
116
  export function resetRuntimeConfigForTesting() {
84
- current = { ...defaults, features: { ...defaults.features } };
117
+ current = {
118
+ ...defaults,
119
+ features: { ...defaults.features },
120
+ branding: { ...defaults.branding },
121
+ };
85
122
  initialised = false;
86
123
  }
@@ -1,4 +1,3 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
1
  // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
3
2
  /**
4
3
  * Built-in component registrations — Phase 3b + 3c.
@@ -7,21 +6,18 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
6
  * own admin UI is registered with the ComponentRegistry before
8
7
  * AppContent mounts the first `<Route path="component/...">`.
9
8
  *
10
- * Plugins follow the same pattern: their package entry point imports
11
- * a similar registration module, so `import '@object-ui/plugin-foo'`
12
- * is enough to make the plugin's component refs reachable from app
13
- * metadata.
14
- *
15
- * Phase 3c — also registers the new generic metadata admin engine and
16
- * pre-wires specialised editors for `object` and `field` so admins
17
- * still get the polished ObjectManager / FieldDesigner experience
18
- * inside the unified Setup-app shell.
9
+ * Registers the generic metadata admin engine and a specialised
10
+ * permission-matrix editor for `permission`. The previous View /
11
+ * Dashboard / Page bespoke "designer" tabs were removed: they never
12
+ * produced usable output and confused authors. Those types now use the
13
+ * same JSONSchema-driven Form + Preview experience as every other
14
+ * metadata type.
19
15
  */
20
- import { lazy, Suspense } from 'react';
21
16
  import { registerAppComponent } from './componentRegistry';
22
17
  import { MetadataDirectoryPage, MetadataResourceRouter, registerMetadataResource, } from '../views/metadata-admin';
23
18
  import { PermissionMatrixEditPage } from '../views/metadata-admin/PermissionMatrixEditor';
24
- import { DesignerEditorBody } from '../views/metadata-admin/DesignerEditorWrapper';
19
+ import { PackagesPage } from '../views/metadata-admin/PackagesPage';
20
+ import { isAggregatedViewContainer, viewDisplayType, } from '../views/metadata-admin/view-item-normalize';
25
21
  /* -------------------------------------------------------------------------- */
26
22
  /* 1) Top-level admin pages — bound to `metadata:directory` + `metadata:resource` */
27
23
  /* -------------------------------------------------------------------------- */
@@ -35,18 +31,16 @@ registerAppComponent({
35
31
  ref: 'metadata:resource',
36
32
  label: 'Metadata Resource',
37
33
  source: '@object-ui/app-shell',
38
- // The router switches between list / new / edit / history based on
39
- // the sub-path under `/component/metadata/resource/...`.
40
34
  component: MetadataResourceRouter,
41
35
  });
36
+ registerAppComponent({
37
+ ref: 'developer:packages',
38
+ label: 'Packages',
39
+ source: '@object-ui/app-shell',
40
+ component: PackagesPage,
41
+ });
42
42
  /* -------------------------------------------------------------------------- */
43
- /* 2) Specialised editors for flagship types opt the generic engine */
44
- /* out for the types that already have polished bespoke surfaces. */
45
- /* */
46
- /* Note: `object` and `field` intentionally use the generic engine so the */
47
- /* Metadata Directory has a consistent list/edit experience across every */
48
- /* type (only `permission`, `view`, `dashboard`, `page` keep bespoke */
49
- /* editors below — those are visual designers, not list/form pages). */
43
+ /* 2) Generic resources list + JSONSchema-driven form for every type. */
50
44
  /* -------------------------------------------------------------------------- */
51
45
  registerMetadataResource({
52
46
  type: 'object',
@@ -96,58 +90,42 @@ registerMetadataResource({
96
90
  ],
97
91
  });
98
92
  /* -------------------------------------------------------------------------- */
99
- /* 4) Bespoke designers wired through DesignerEditorWrapper (Phase 3d). */
100
- /* These types continue to use the generic AutoForm-style list and */
101
- /* history pages but swap the edit page for the existing visual designer. */
93
+ /* 4) UI metadata types list + form. No bespoke visual designers: views, */
94
+ /* dashboards and pages are authored as JSON metadata; the Preview tab */
95
+ /* renders them live for verification. */
102
96
  /* -------------------------------------------------------------------------- */
103
- const ObjectViewConfigurator = lazy(() => import('@object-ui/plugin-designer').then((m) => ({ default: m.ObjectViewConfigurator })));
104
- const DashboardEditor = lazy(() => import('@object-ui/plugin-designer').then((m) => ({ default: m.DashboardEditor })));
105
- const PageCanvasEditor = lazy(() => import('@object-ui/plugin-designer').then((m) => ({ default: m.PageCanvasEditor })));
106
- function ViewEditPage(props) {
107
- return (_jsx(DesignerEditorBody, { ...props, fromMetadata: (raw) => {
108
- // Normalize backend view metadata into the shape ObjectViewConfigurator expects.
109
- // Built-in views may omit `columns` or use legacy field names.
110
- const base = raw && typeof raw === 'object' ? raw : {};
111
- return {
112
- viewType: base.viewType ?? base.type ?? 'grid',
113
- columns: Array.isArray(base.columns) ? base.columns : [],
114
- filters: Array.isArray(base.filters) ? base.filters : [],
115
- sorts: Array.isArray(base.sorts) ? base.sorts : [],
116
- pageSize: typeof base.pageSize === 'number' ? base.pageSize : 25,
117
- ...base,
118
- };
119
- }, renderDesigner: (value, onChange, readOnly) => (_jsx(Suspense, { fallback: _jsx(DesignerFallback, { label: "view designer" }), children: _jsx(ObjectViewConfigurator, { config: value, onChange: (next) => onChange(next), readOnly: readOnly }) })) }));
120
- }
121
- function DashboardEditPage(props) {
122
- return (_jsx(DesignerEditorBody, { ...props, renderDesigner: (value, onChange, readOnly) => (_jsx(Suspense, { fallback: _jsx(DesignerFallback, { label: "dashboard editor" }), children: _jsx(DashboardEditor, { schema: value, onChange: (next) => onChange(next), readOnly: readOnly }) })) }));
123
- }
124
- function PageEditPage(props) {
125
- return (_jsx(DesignerEditorBody, { ...props, renderDesigner: (value, onChange, readOnly) => (_jsx(Suspense, { fallback: _jsx(DesignerFallback, { label: "page canvas" }), children: _jsx(PageCanvasEditor, { schema: value, onChange: (next) => onChange(next), readOnly: readOnly }) })) }));
126
- }
127
- function DesignerFallback({ label }) {
128
- return (_jsxs("div", { className: "p-6 text-sm text-muted-foreground", children: ["Loading ", label, "\u2026"] }));
129
- }
130
97
  registerMetadataResource({
131
98
  type: 'view',
132
99
  label: 'Views',
133
100
  description: 'Saved list / kanban / calendar / gantt configurations on top of an object.',
134
101
  domain: 'ui',
135
- DesignerTab: ViewEditPage,
136
- designerTabLabel: 'View designer',
137
102
  listColumns: [
138
103
  { key: 'name', label: 'Name', width: '30%' },
139
104
  { key: 'object', label: 'Object', width: '20%' },
140
- { key: 'type', label: 'Type', width: '15%' },
105
+ {
106
+ key: 'type',
107
+ label: 'Type',
108
+ width: '15%',
109
+ // Expanded ViewItems keep their display type under `config.type`
110
+ // and only the list/form family at the top level — derive it so the
111
+ // column shows "calendar" / "grid" / "form" instead of "—".
112
+ render: (_v, item) => viewDisplayType(item) ?? '—',
113
+ },
141
114
  { key: 'label', label: 'Label' },
142
115
  ],
116
+ // ADR-0017 — the framework exposes each view as a canonical first-class
117
+ // ViewItem ({ name, object, viewKind, label, config }). The inspector and
118
+ // preview read that shape directly (`draft.config`), so NO toDraft/fromDraft
119
+ // adapter is wired here — the canonical shape round-trips untouched.
120
+ // Hide the bare aggregated container the framework keeps for runtime
121
+ // dual-read — its views are already listed as expanded ViewItems.
122
+ listFilter: (item) => !isAggregatedViewContainer(item),
143
123
  });
144
124
  registerMetadataResource({
145
125
  type: 'dashboard',
146
126
  label: 'Dashboards',
147
127
  description: 'Composed dashboards with charts, KPIs, and tables.',
148
128
  domain: 'ui',
149
- DesignerTab: DashboardEditPage,
150
- designerTabLabel: 'Dashboard designer',
151
129
  listColumns: [
152
130
  { key: 'name', label: 'Name', width: '30%' },
153
131
  { key: 'label', label: 'Label', width: '30%' },
@@ -157,13 +135,44 @@ registerMetadataResource({
157
135
  registerMetadataResource({
158
136
  type: 'page',
159
137
  label: 'Pages',
160
- description: 'Visual page layouts authored in the Page Canvas editor.',
138
+ description: 'Visual page layouts authored as JSON metadata.',
161
139
  domain: 'ui',
162
- DesignerTab: PageEditPage,
163
- designerTabLabel: 'Page canvas',
164
140
  listColumns: [
165
141
  { key: 'name', label: 'Name', width: '30%' },
166
142
  { key: 'label', label: 'Label', width: '30%' },
167
143
  { key: 'route', label: 'Route' },
168
144
  ],
169
145
  });
146
+ /* -------------------------------------------------------------------------- */
147
+ /* 5) Documentation — the `book` navigation spine (ADR-0046 §6). A book is an */
148
+ /* ordered set of groups whose membership over docs is DERIVED from each */
149
+ /* group's include rule; the Preview tab renders that spine for authoring. */
150
+ /* -------------------------------------------------------------------------- */
151
+ registerMetadataResource({
152
+ type: 'book',
153
+ label: 'Documentation Books',
154
+ description: 'Documentation navigation spine — ordered groups with membership derived over docs (glob/tag rules), plus an explicit pages override for curated order.',
155
+ domain: 'system',
156
+ searchableFields: ['name', 'label', 'description', 'slug'],
157
+ listColumns: [
158
+ { key: 'name', label: 'Name', width: '25%' },
159
+ { key: 'label', label: 'Label', width: '25%' },
160
+ {
161
+ key: 'audience',
162
+ label: 'Audience',
163
+ width: '12%',
164
+ render: (v) => v == null
165
+ ? 'org'
166
+ : typeof v === 'object' && v && 'profile' in v
167
+ ? `profile: ${v.profile}`
168
+ : String(v),
169
+ },
170
+ {
171
+ key: 'groups',
172
+ label: 'Groups',
173
+ width: '10%',
174
+ render: (v) => (Array.isArray(v) ? String(v.length) : '0'),
175
+ },
176
+ { key: 'description', label: 'Description' },
177
+ ],
178
+ });
@@ -9,5 +9,5 @@ interface SkeletonDashboardProps {
9
9
  /** Number of widget cards to render */
10
10
  cards?: number;
11
11
  }
12
- export declare function SkeletonDashboard({ cards }: SkeletonDashboardProps): import("react/jsx-runtime").JSX.Element;
12
+ export declare function SkeletonDashboard({ cards }: SkeletonDashboardProps): import("react").JSX.Element;
13
13
  export {};
@@ -11,5 +11,5 @@ interface SkeletonDetailProps {
11
11
  /** Number of columns */
12
12
  columns?: number;
13
13
  }
14
- export declare function SkeletonDetail({ fields, columns }: SkeletonDetailProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function SkeletonDetail({ fields, columns }: SkeletonDetailProps): import("react").JSX.Element;
15
15
  export {};
@@ -11,5 +11,5 @@ interface SkeletonGridProps {
11
11
  /** Number of columns to render */
12
12
  columns?: number;
13
13
  }
14
- export declare function SkeletonGrid({ rows, columns }: SkeletonGridProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function SkeletonGrid({ rows, columns }: SkeletonGridProps): import("react").JSX.Element;
15
15
  export {};