@object-ui/app-shell 6.2.3 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. package/CHANGELOG.md +948 -0
  2. package/README.md +292 -0
  3. package/dist/assistant/assistantBus.d.ts +72 -0
  4. package/dist/assistant/assistantBus.js +133 -0
  5. package/dist/chrome/CommandPalette.d.ts +1 -1
  6. package/dist/chrome/CommandPalette.js +26 -22
  7. package/dist/chrome/ConditionalAuthWrapper.d.ts +1 -1
  8. package/dist/chrome/ConsoleToaster.d.ts +1 -1
  9. package/dist/chrome/ConsoleToaster.js +3 -1
  10. package/dist/chrome/ErrorBoundary.d.ts +1 -1
  11. package/dist/chrome/KeyboardShortcutsDialog.d.ts +1 -1
  12. package/dist/chrome/KeyboardShortcutsDialog.js +16 -5
  13. package/dist/chrome/LoadingScreen.d.ts +1 -1
  14. package/dist/chrome/LoadingScreen.js +22 -26
  15. package/dist/chrome/RouteFader.d.ts +1 -1
  16. package/dist/chrome/ThemeProvider.d.ts +1 -1
  17. package/dist/components/ManagedByBadge.d.ts +1 -1
  18. package/dist/console/AppContent.d.ts +1 -1
  19. package/dist/console/AppContent.js +170 -37
  20. package/dist/console/ConsoleShell.d.ts +7 -7
  21. package/dist/console/ConsoleShell.js +32 -3
  22. package/dist/console/ai/AiChatPage.d.ts +88 -1
  23. package/dist/console/ai/AiChatPage.js +743 -66
  24. package/dist/console/ai/ConversationsSidebar.d.ts +26 -1
  25. package/dist/console/ai/ConversationsSidebar.js +149 -34
  26. package/dist/console/ai/LiveCanvas.d.ts +22 -0
  27. package/dist/console/ai/LiveCanvas.js +78 -0
  28. package/dist/console/ai/reconcileTurn.d.ts +8 -0
  29. package/dist/console/ai/reconcileTurn.js +20 -0
  30. package/dist/console/auth/AuthPageLayout.d.ts +1 -1
  31. package/dist/console/auth/ForgotPasswordPage.d.ts +1 -1
  32. package/dist/console/auth/LoginPage.d.ts +1 -1
  33. package/dist/console/auth/RegisterPage.d.ts +1 -1
  34. package/dist/console/auth/RegisterPage.js +23 -3
  35. package/dist/console/cloud-connection/CloudConnectionPanel.d.ts +1 -0
  36. package/dist/console/cloud-connection/CloudConnectionPanel.js +169 -0
  37. package/dist/console/home/AppCard.d.ts +1 -1
  38. package/dist/console/home/AppCard.js +6 -12
  39. package/dist/console/home/HomeAppsStrip.d.ts +8 -0
  40. package/dist/console/home/HomeAppsStrip.js +61 -0
  41. package/dist/console/home/HomeLayout.d.ts +1 -1
  42. package/dist/console/home/HomeLayout.js +3 -1
  43. package/dist/console/home/HomePage.d.ts +1 -2
  44. package/dist/console/home/HomePage.js +149 -21
  45. package/dist/console/home/HomeRail.d.ts +22 -0
  46. package/dist/console/home/HomeRail.js +62 -0
  47. package/dist/console/home/QuickActions.d.ts +1 -1
  48. package/dist/console/home/QuickActions.js +3 -11
  49. package/dist/console/home/RecentApps.d.ts +1 -1
  50. package/dist/console/home/RecentApps.js +2 -2
  51. package/dist/console/home/StarredApps.d.ts +1 -1
  52. package/dist/console/home/StarredApps.js +2 -2
  53. package/dist/console/marketplace/InstalledListWidget.d.ts +1 -0
  54. package/dist/console/marketplace/InstalledListWidget.js +93 -0
  55. package/dist/console/marketplace/MarkdownText.d.ts +1 -1
  56. package/dist/console/marketplace/MarketplaceAccessDenied.d.ts +1 -1
  57. package/dist/console/marketplace/MarketplaceInstalledPage.d.ts +8 -14
  58. package/dist/console/marketplace/MarketplaceInstalledPage.js +14 -66
  59. package/dist/console/marketplace/MarketplacePackagePage.d.ts +1 -1
  60. package/dist/console/marketplace/MarketplacePackagePage.js +249 -8
  61. package/dist/console/marketplace/MarketplacePage.d.ts +1 -1
  62. package/dist/console/marketplace/MarketplacePage.js +60 -3
  63. package/dist/console/marketplace/PackageIcon.d.ts +1 -1
  64. package/dist/console/marketplace/PluginDisclosure.d.ts +14 -0
  65. package/dist/console/marketplace/PluginDisclosure.js +38 -0
  66. package/dist/console/marketplace/marketplaceApi.d.ts +123 -0
  67. package/dist/console/marketplace/marketplaceApi.js +254 -1
  68. package/dist/console/organizations/CreateWorkspaceDialog.d.ts +1 -1
  69. package/dist/console/organizations/OrganizationsLayout.d.ts +1 -1
  70. package/dist/console/organizations/OrganizationsPage.d.ts +1 -1
  71. package/dist/console/organizations/manage/AcceptInvitationPage.d.ts +1 -1
  72. package/dist/console/organizations/manage/InvitationsPage.d.ts +1 -1
  73. package/dist/console/organizations/manage/InviteMemberDialog.d.ts +1 -1
  74. package/dist/console/organizations/manage/MembersPage.d.ts +1 -1
  75. package/dist/console/organizations/manage/OrganizationLayout.d.ts +1 -1
  76. package/dist/console/organizations/manage/SettingsPage.d.ts +1 -1
  77. package/dist/context/CommandPaletteProvider.d.ts +44 -0
  78. package/dist/context/CommandPaletteProvider.js +71 -0
  79. package/dist/context/FavoritesProvider.d.ts +1 -1
  80. package/dist/context/NavigationContext.d.ts +1 -1
  81. package/dist/context/RecentItemsProvider.d.ts +2 -2
  82. package/dist/context/UserStateAdapters.d.ts +1 -1
  83. package/dist/context/index.d.ts +2 -0
  84. package/dist/context/index.js +1 -0
  85. package/dist/hooks/index.d.ts +5 -2
  86. package/dist/hooks/index.js +4 -1
  87. package/dist/hooks/useActionModal.d.ts +53 -0
  88. package/dist/hooks/useActionModal.js +111 -0
  89. package/dist/hooks/useChatConversation.d.ts +107 -4
  90. package/dist/hooks/useChatConversation.js +253 -25
  91. package/dist/hooks/useConsoleActionRuntime.d.ts +70 -0
  92. package/dist/hooks/useConsoleActionRuntime.js +560 -0
  93. package/dist/hooks/useConversationList.js +61 -3
  94. package/dist/hooks/useHomeInbox.d.ts +13 -0
  95. package/dist/hooks/useHomeInbox.js +142 -0
  96. package/dist/hooks/useNavPins.js +17 -23
  97. package/dist/hooks/useNavigationSync.d.ts +33 -0
  98. package/dist/hooks/useNavigationSync.js +98 -12
  99. package/dist/hooks/useReconcileOnError.d.ts +40 -0
  100. package/dist/hooks/useReconcileOnError.js +37 -0
  101. package/dist/hooks/useRecordApprovals.d.ts +18 -19
  102. package/dist/hooks/useRecordApprovals.js +24 -40
  103. package/dist/hooks/useResponsiveSidebar.js +14 -5
  104. package/dist/hooks/useSettleSignal.d.ts +19 -0
  105. package/dist/hooks/useSettleSignal.js +20 -0
  106. package/dist/hooks/useTrackRouteAsRecent.js +35 -0
  107. package/dist/hooks/useUrlOverlay.d.ts +62 -0
  108. package/dist/hooks/useUrlOverlay.js +88 -0
  109. package/dist/index.d.ts +16 -7
  110. package/dist/index.js +12 -4
  111. package/dist/layout/ActivityFeed.d.ts +1 -1
  112. package/dist/layout/AppHeader.d.ts +3 -2
  113. package/dist/layout/AppHeader.js +237 -72
  114. package/dist/layout/AppSidebar.d.ts +2 -1
  115. package/dist/layout/AppSidebar.js +26 -46
  116. package/dist/layout/AppSwitcher.d.ts +2 -1
  117. package/dist/layout/AppSwitcher.js +9 -5
  118. package/dist/layout/AuthPageLayout.d.ts +1 -1
  119. package/dist/layout/ConnectionStatus.d.ts +1 -1
  120. package/dist/layout/ConnectionStatus.js +9 -6
  121. package/dist/layout/ConsoleChatbotFab.d.ts +19 -1
  122. package/dist/layout/ConsoleChatbotFab.js +16 -2
  123. package/dist/layout/ConsoleFloatingChatbot.d.ts +32 -2
  124. package/dist/layout/ConsoleFloatingChatbot.js +374 -41
  125. package/dist/layout/ConsoleLayout.d.ts +1 -1
  126. package/dist/layout/ConsoleLayout.js +27 -11
  127. package/dist/layout/ContextSelectors.d.ts +44 -0
  128. package/dist/layout/ContextSelectors.js +218 -0
  129. package/dist/layout/InboxPopover.d.ts +6 -1
  130. package/dist/layout/InboxPopover.js +25 -6
  131. package/dist/layout/LocaleSwitcher.d.ts +1 -1
  132. package/dist/layout/LocalizedSidebarTrigger.d.ts +2 -0
  133. package/dist/layout/LocalizedSidebarTrigger.js +15 -0
  134. package/dist/layout/MobileViewSwitcherContext.d.ts +1 -1
  135. package/dist/layout/ModeToggle.d.ts +1 -1
  136. package/dist/layout/PageHeader.d.ts +1 -1
  137. package/dist/layout/UnifiedSidebar.d.ts +2 -1
  138. package/dist/layout/UnifiedSidebar.js +116 -15
  139. package/dist/observability/index.d.ts +1 -0
  140. package/dist/observability/index.js +1 -0
  141. package/dist/observability/settleSignal.d.ts +64 -0
  142. package/dist/observability/settleSignal.js +131 -0
  143. package/dist/preview/DraftChangesPanel.d.ts +19 -0
  144. package/dist/preview/DraftChangesPanel.js +114 -0
  145. package/dist/preview/DraftPreviewBar.d.ts +8 -0
  146. package/dist/preview/DraftPreviewBar.js +86 -0
  147. package/dist/preview/PreviewDraftEmptyState.d.ts +16 -0
  148. package/dist/preview/PreviewDraftEmptyState.js +47 -0
  149. package/dist/preview/PreviewModeContext.d.ts +57 -0
  150. package/dist/preview/PreviewModeContext.js +99 -0
  151. package/dist/preview/UnpublishedAppBar.d.ts +8 -0
  152. package/dist/preview/UnpublishedAppBar.js +79 -0
  153. package/dist/preview/draftStatus.d.ts +20 -0
  154. package/dist/preview/draftStatus.js +27 -0
  155. package/dist/preview/usePublishAllDrafts.d.ts +18 -0
  156. package/dist/preview/usePublishAllDrafts.js +106 -0
  157. package/dist/providers/AdapterProvider.d.ts +1 -1
  158. package/dist/providers/AdapterProvider.js +6 -1
  159. package/dist/providers/ExpressionProvider.d.ts +1 -1
  160. package/dist/providers/MetadataProvider.d.ts +17 -2
  161. package/dist/providers/MetadataProvider.js +183 -12
  162. package/dist/runtime-config.d.ts +46 -2
  163. package/dist/runtime-config.js +39 -2
  164. package/dist/services/builtinComponents.js +68 -59
  165. package/dist/skeletons/SkeletonDashboard.d.ts +1 -1
  166. package/dist/skeletons/SkeletonDetail.d.ts +1 -1
  167. package/dist/skeletons/SkeletonGrid.d.ts +1 -1
  168. package/dist/utils/appRoute.d.ts +21 -0
  169. package/dist/utils/appRoute.js +25 -0
  170. package/dist/utils/deriveRelatedLists.d.ts +54 -0
  171. package/dist/utils/deriveRelatedLists.js +91 -0
  172. package/dist/utils/index.d.ts +4 -0
  173. package/dist/utils/index.js +3 -0
  174. package/dist/utils/managedByEmptyState.d.ts +8 -1
  175. package/dist/utils/managedByEmptyState.js +13 -7
  176. package/dist/utils/preferLocal.d.ts +18 -0
  177. package/dist/utils/preferLocal.js +24 -0
  178. package/dist/views/ActionConfirmDialog.d.ts +1 -1
  179. package/dist/views/ActionConfirmDialog.js +3 -1
  180. package/dist/views/ActionParamDialog.d.ts +6 -1
  181. package/dist/views/ActionParamDialog.js +9 -3
  182. package/dist/views/ActionResultDialog.d.ts +13 -0
  183. package/dist/views/ActionResultDialog.js +134 -0
  184. package/dist/views/ComponentNavView.d.ts +14 -1
  185. package/dist/views/CreateViewDialog.d.ts +1 -1
  186. package/dist/views/DashboardConfigPanel.d.ts +28 -0
  187. package/dist/views/DashboardConfigPanel.js +81 -0
  188. package/dist/views/DashboardView.d.ts +4 -3
  189. package/dist/views/DashboardView.js +38 -239
  190. package/dist/views/FlowRunner.d.ts +59 -0
  191. package/dist/views/FlowRunner.js +153 -0
  192. package/dist/views/InterfaceListPage.d.ts +49 -0
  193. package/dist/views/InterfaceListPage.js +347 -0
  194. package/dist/views/MetadataInspector.d.ts +2 -2
  195. package/dist/views/ObjectView.d.ts +1 -1
  196. package/dist/views/ObjectView.js +209 -532
  197. package/dist/views/PageView.d.ts +8 -3
  198. package/dist/views/PageView.js +45 -32
  199. package/dist/views/RecordDetailView.d.ts +1 -1
  200. package/dist/views/RecordDetailView.js +363 -148
  201. package/dist/views/RecordFormPage.d.ts +1 -1
  202. package/dist/views/RecordFormPage.js +26 -1
  203. package/dist/views/ReportConfigPanel.d.ts +37 -0
  204. package/dist/views/ReportConfigPanel.js +85 -0
  205. package/dist/views/ReportView.d.ts +1 -1
  206. package/dist/views/ReportView.js +116 -7
  207. package/dist/views/RuntimeDraftBar.d.ts +30 -0
  208. package/dist/views/RuntimeDraftBar.js +112 -0
  209. package/dist/views/SearchResultsPage.d.ts +1 -1
  210. package/dist/views/SearchResultsPage.js +8 -18
  211. package/dist/views/ViewConfigPanel.d.ts +24 -17
  212. package/dist/views/ViewConfigPanel.js +121 -77
  213. package/dist/views/index.d.ts +1 -1
  214. package/dist/views/index.js +1 -1
  215. package/dist/views/metadata-admin/AuditPanel.d.ts +28 -0
  216. package/dist/views/metadata-admin/AuditPanel.js +79 -0
  217. package/dist/views/metadata-admin/DiagnosticsPage.d.ts +20 -0
  218. package/dist/views/metadata-admin/DiagnosticsPage.js +69 -0
  219. package/dist/views/metadata-admin/DirectoryPage.d.ts +16 -1
  220. package/dist/views/metadata-admin/DirectoryPage.js +113 -24
  221. package/dist/views/metadata-admin/DraftReviewPanel.d.ts +33 -0
  222. package/dist/views/metadata-admin/DraftReviewPanel.js +77 -0
  223. package/dist/views/metadata-admin/EmbeddedItemEditor.d.ts +17 -1
  224. package/dist/views/metadata-admin/EmbeddedItemEditor.js +15 -8
  225. package/dist/views/metadata-admin/JsonSourceEditor.d.ts +37 -0
  226. package/dist/views/metadata-admin/JsonSourceEditor.js +178 -0
  227. package/dist/views/metadata-admin/LayeredDiff.d.ts +39 -1
  228. package/dist/views/metadata-admin/LayeredDiff.js +171 -5
  229. package/dist/views/metadata-admin/MetadataDetailDrawer.d.ts +15 -1
  230. package/dist/views/metadata-admin/MetadataTypeActions.d.ts +48 -0
  231. package/dist/views/metadata-admin/MetadataTypeActions.js +165 -0
  232. package/dist/views/metadata-admin/PackagesPage.d.ts +18 -0
  233. package/dist/views/metadata-admin/PackagesPage.js +395 -0
  234. package/dist/views/metadata-admin/PageShell.d.ts +1 -1
  235. package/dist/views/metadata-admin/PageShell.js +9 -4
  236. package/dist/views/metadata-admin/PermissionMatrixEditor.d.ts +35 -1
  237. package/dist/views/metadata-admin/QuickFind.d.ts +21 -1
  238. package/dist/views/metadata-admin/QuickFind.js +6 -3
  239. package/dist/views/metadata-admin/RelatedPanel.d.ts +24 -1
  240. package/dist/views/metadata-admin/RelatedPanel.js +20 -18
  241. package/dist/views/metadata-admin/ResourceEditPage.d.ts +40 -1
  242. package/dist/views/metadata-admin/ResourceEditPage.js +1223 -60
  243. package/dist/views/metadata-admin/ResourceHistoryPage.d.ts +39 -1
  244. package/dist/views/metadata-admin/ResourceHistoryPage.js +66 -16
  245. package/dist/views/metadata-admin/ResourceListPage.d.ts +13 -1
  246. package/dist/views/metadata-admin/ResourceListPage.js +266 -30
  247. package/dist/views/metadata-admin/ResourceRouter.d.ts +23 -1
  248. package/dist/views/metadata-admin/SchemaForm.d.ts +34 -1
  249. package/dist/views/metadata-admin/SchemaForm.js +559 -49
  250. package/dist/views/metadata-admin/StudioHomePage.d.ts +22 -0
  251. package/dist/views/metadata-admin/StudioHomePage.js +213 -0
  252. package/dist/views/metadata-admin/anchors.js +237 -24
  253. package/dist/views/metadata-admin/clientValidation.d.ts +50 -0
  254. package/dist/views/metadata-admin/clientValidation.js +169 -0
  255. package/dist/views/metadata-admin/color-variant-field.d.ts +30 -0
  256. package/dist/views/metadata-admin/color-variant-field.js +38 -0
  257. package/dist/views/metadata-admin/createDerive.d.ts +75 -0
  258. package/dist/views/metadata-admin/createDerive.js +179 -0
  259. package/dist/views/metadata-admin/dashboard-schema.d.ts +12 -0
  260. package/dist/views/metadata-admin/dashboard-schema.js +80 -0
  261. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.d.ts +35 -0
  262. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.js +327 -0
  263. package/dist/views/metadata-admin/datasource/register.d.ts +1 -0
  264. package/dist/views/metadata-admin/datasource/register.js +24 -0
  265. package/dist/views/metadata-admin/default-inspector-registry.d.ts +49 -0
  266. package/dist/views/metadata-admin/default-inspector-registry.js +8 -0
  267. package/dist/views/metadata-admin/default-schemas.js +115 -10
  268. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.d.ts +27 -0
  269. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.js +69 -0
  270. package/dist/views/metadata-admin/external/ImportObjectDialog.d.ts +27 -0
  271. package/dist/views/metadata-admin/external/ImportObjectDialog.js +77 -0
  272. package/dist/views/metadata-admin/external/SchemaBrowser.d.ts +16 -0
  273. package/dist/views/metadata-admin/external/SchemaBrowser.js +74 -0
  274. package/dist/views/metadata-admin/external/ValidationPanel.d.ts +16 -0
  275. package/dist/views/metadata-admin/external/ValidationPanel.js +68 -0
  276. package/dist/views/metadata-admin/external/api.d.ts +100 -0
  277. package/dist/views/metadata-admin/external/api.js +124 -0
  278. package/dist/views/metadata-admin/i18n.d.ts +1 -0
  279. package/dist/views/metadata-admin/i18n.js +1166 -2
  280. package/dist/views/metadata-admin/index.d.ts +8 -5
  281. package/dist/views/metadata-admin/index.js +12 -2
  282. package/dist/views/metadata-admin/inspector-registry.d.ts +51 -0
  283. package/dist/views/metadata-admin/inspector-registry.js +11 -0
  284. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.d.ts +30 -0
  285. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.js +180 -0
  286. package/dist/views/metadata-admin/inspectors/AppNavInspector.d.ts +16 -0
  287. package/dist/views/metadata-admin/inspectors/AppNavInspector.js +110 -0
  288. package/dist/views/metadata-admin/inspectors/ConditionBuilder.d.ts +29 -0
  289. package/dist/views/metadata-admin/inspectors/ConditionBuilder.js +154 -0
  290. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.d.ts +28 -0
  291. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.js +110 -0
  292. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.d.ts +18 -0
  293. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.js +139 -0
  294. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.d.ts +21 -0
  295. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.js +107 -0
  296. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.d.ts +16 -0
  297. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.js +45 -0
  298. package/dist/views/metadata-admin/inspectors/FlowInspector.d.ts +12 -0
  299. package/dist/views/metadata-admin/inspectors/FlowInspector.js +9 -0
  300. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.d.ts +30 -0
  301. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.js +125 -0
  302. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.d.ts +18 -0
  303. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.js +40 -0
  304. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.d.ts +14 -0
  305. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.js +140 -0
  306. package/dist/views/metadata-admin/inspectors/FlowObjectListField.d.ts +26 -0
  307. package/dist/views/metadata-admin/inspectors/FlowObjectListField.js +105 -0
  308. package/dist/views/metadata-admin/inspectors/FlowReferenceField.d.ts +83 -0
  309. package/dist/views/metadata-admin/inspectors/FlowReferenceField.js +181 -0
  310. package/dist/views/metadata-admin/inspectors/FlowStringListField.d.ts +21 -0
  311. package/dist/views/metadata-admin/inspectors/FlowStringListField.js +60 -0
  312. package/dist/views/metadata-admin/inspectors/InspectorComboField.d.ts +40 -0
  313. package/dist/views/metadata-admin/inspectors/InspectorComboField.js +61 -0
  314. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.d.ts +21 -0
  315. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.js +54 -0
  316. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.d.ts +23 -0
  317. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.js +330 -0
  318. package/dist/views/metadata-admin/inspectors/PageBlockInspector.d.ts +48 -0
  319. package/dist/views/metadata-admin/inspectors/PageBlockInspector.js +332 -0
  320. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.d.ts +58 -0
  321. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.js +160 -0
  322. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.d.ts +19 -0
  323. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.js +144 -0
  324. package/dist/views/metadata-admin/inspectors/ViewInspector.d.ts +19 -0
  325. package/dist/views/metadata-admin/inspectors/ViewInspector.js +21 -0
  326. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.d.ts +54 -0
  327. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.js +191 -0
  328. package/dist/views/metadata-admin/inspectors/_shared.d.ts +124 -0
  329. package/dist/views/metadata-admin/inspectors/_shared.js +113 -0
  330. package/dist/views/metadata-admin/inspectors/expression-validate.d.ts +26 -0
  331. package/dist/views/metadata-admin/inspectors/expression-validate.js +66 -0
  332. package/dist/views/metadata-admin/inspectors/flow-node-config.d.ts +143 -0
  333. package/dist/views/metadata-admin/inspectors/flow-node-config.js +461 -0
  334. package/dist/views/metadata-admin/inspectors/index.d.ts +1 -0
  335. package/dist/views/metadata-admin/inspectors/index.js +45 -0
  336. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.d.ts +40 -0
  337. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.js +227 -0
  338. package/dist/views/metadata-admin/inspectors/useDatasetFields.d.ts +72 -0
  339. package/dist/views/metadata-admin/inspectors/useDatasetFields.js +0 -0
  340. package/dist/views/metadata-admin/mergeServerFields.d.ts +65 -0
  341. package/dist/views/metadata-admin/mergeServerFields.js +56 -0
  342. package/dist/views/metadata-admin/preview-registry.d.ts +55 -0
  343. package/dist/views/metadata-admin/previews/ActionPreview.d.ts +25 -0
  344. package/dist/views/metadata-admin/previews/ActionPreview.js +238 -0
  345. package/dist/views/metadata-admin/previews/AddWidgetPicker.d.ts +12 -0
  346. package/dist/views/metadata-admin/previews/AddWidgetPicker.js +56 -0
  347. package/dist/views/metadata-admin/previews/AgentPreview.d.ts +24 -0
  348. package/dist/views/metadata-admin/previews/AgentPreview.js +100 -0
  349. package/dist/views/metadata-admin/previews/AppNavCanvas.d.ts +31 -0
  350. package/dist/views/metadata-admin/previews/AppNavCanvas.js +260 -0
  351. package/dist/views/metadata-admin/previews/AppPreview.d.ts +16 -1
  352. package/dist/views/metadata-admin/previews/AppPreview.js +23 -14
  353. package/dist/views/metadata-admin/previews/BookPreview.d.ts +20 -0
  354. package/dist/views/metadata-admin/previews/BookPreview.js +132 -0
  355. package/dist/views/metadata-admin/previews/DashboardPreview.d.ts +16 -1
  356. package/dist/views/metadata-admin/previews/DashboardPreview.js +110 -8
  357. package/dist/views/metadata-admin/previews/DatasetPreview.d.ts +18 -0
  358. package/dist/views/metadata-admin/previews/DatasetPreview.js +89 -0
  359. package/dist/views/metadata-admin/previews/DatasourcePreview.d.ts +23 -0
  360. package/dist/views/metadata-admin/previews/DatasourcePreview.js +68 -0
  361. package/dist/views/metadata-admin/previews/EmailTemplatePreview.d.ts +14 -1
  362. package/dist/views/metadata-admin/previews/FieldStub.d.ts +30 -0
  363. package/dist/views/metadata-admin/previews/FieldStub.js +104 -0
  364. package/dist/views/metadata-admin/previews/FieldsListEditor.d.ts +50 -0
  365. package/dist/views/metadata-admin/previews/FieldsListEditor.js +97 -0
  366. package/dist/views/metadata-admin/previews/FlowCanvas.d.ts +43 -0
  367. package/dist/views/metadata-admin/previews/FlowCanvas.js +328 -0
  368. package/dist/views/metadata-admin/previews/FlowPreview.d.ts +20 -0
  369. package/dist/views/metadata-admin/previews/FlowPreview.js +92 -0
  370. package/dist/views/metadata-admin/previews/FlowRunsPanel.d.ts +46 -0
  371. package/dist/views/metadata-admin/previews/FlowRunsPanel.js +97 -0
  372. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.d.ts +25 -0
  373. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.js +170 -0
  374. package/dist/views/metadata-admin/previews/JobPreview.d.ts +28 -0
  375. package/dist/views/metadata-admin/previews/JobPreview.js +290 -0
  376. package/dist/views/metadata-admin/previews/ObjectFormCanvas.d.ts +30 -0
  377. package/dist/views/metadata-admin/previews/ObjectFormCanvas.js +547 -0
  378. package/dist/views/metadata-admin/previews/ObjectPreview.d.ts +14 -1
  379. package/dist/views/metadata-admin/previews/ObjectPreview.js +5 -30
  380. package/dist/views/metadata-admin/previews/OutlineStrip.d.ts +32 -0
  381. package/dist/views/metadata-admin/previews/OutlineStrip.js +8 -0
  382. package/dist/views/metadata-admin/previews/PageBlockCanvas.d.ts +49 -0
  383. package/dist/views/metadata-admin/previews/PageBlockCanvas.js +510 -0
  384. package/dist/views/metadata-admin/previews/PagePreview.d.ts +10 -1
  385. package/dist/views/metadata-admin/previews/PagePreview.js +90 -4
  386. package/dist/views/metadata-admin/previews/PermissionPreview.d.ts +27 -0
  387. package/dist/views/metadata-admin/previews/PermissionPreview.js +115 -0
  388. package/dist/views/metadata-admin/previews/PreviewShell.d.ts +29 -6
  389. package/dist/views/metadata-admin/previews/PreviewShell.js +16 -3
  390. package/dist/views/metadata-admin/previews/ReportPreview.d.ts +18 -1
  391. package/dist/views/metadata-admin/previews/ReportPreview.js +23 -15
  392. package/dist/views/metadata-admin/previews/RolePreview.d.ts +19 -0
  393. package/dist/views/metadata-admin/previews/RolePreview.js +14 -0
  394. package/dist/views/metadata-admin/previews/SkillPreview.d.ts +22 -0
  395. package/dist/views/metadata-admin/previews/SkillPreview.js +34 -0
  396. package/dist/views/metadata-admin/previews/ToolPreview.d.ts +25 -0
  397. package/dist/views/metadata-admin/previews/ToolPreview.js +122 -0
  398. package/dist/views/metadata-admin/previews/TranslationPreview.d.ts +25 -0
  399. package/dist/views/metadata-admin/previews/TranslationPreview.js +52 -0
  400. package/dist/views/metadata-admin/previews/ValidationPreview.d.ts +27 -0
  401. package/dist/views/metadata-admin/previews/ValidationPreview.js +110 -0
  402. package/dist/views/metadata-admin/previews/ViewColumnPanes.d.ts +62 -0
  403. package/dist/views/metadata-admin/previews/ViewColumnPanes.js +140 -0
  404. package/dist/views/metadata-admin/previews/ViewPreview.d.ts +23 -1
  405. package/dist/views/metadata-admin/previews/ViewPreview.js +101 -73
  406. package/dist/views/metadata-admin/previews/block-config.d.ts +82 -0
  407. package/dist/views/metadata-admin/previews/block-config.js +324 -0
  408. package/dist/views/metadata-admin/previews/block-types.d.ts +40 -0
  409. package/dist/views/metadata-admin/previews/block-types.js +110 -0
  410. package/dist/views/metadata-admin/previews/field-types.d.ts +53 -0
  411. package/dist/views/metadata-admin/previews/field-types.js +97 -0
  412. package/dist/views/metadata-admin/previews/flow-canvas-layout.d.ts +88 -0
  413. package/dist/views/metadata-admin/previews/flow-canvas-layout.js +190 -0
  414. package/dist/views/metadata-admin/previews/flow-canvas-parts.d.ts +88 -0
  415. package/dist/views/metadata-admin/previews/flow-canvas-parts.js +358 -0
  416. package/dist/views/metadata-admin/previews/form-preview.d.ts +24 -0
  417. package/dist/views/metadata-admin/previews/form-preview.js +29 -0
  418. package/dist/views/metadata-admin/previews/index.js +43 -0
  419. package/dist/views/metadata-admin/previews/object-fields-bridge.d.ts +66 -0
  420. package/dist/views/metadata-admin/previews/object-fields-bridge.js +171 -0
  421. package/dist/views/metadata-admin/previews/object-fields-io.d.ts +109 -0
  422. package/dist/views/metadata-admin/previews/object-fields-io.js +208 -0
  423. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.d.ts +91 -0
  424. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.js +2 -0
  425. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.d.ts +8 -0
  426. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.js +113 -0
  427. package/dist/views/metadata-admin/previews/simulator/flow-simulator.d.ts +44 -0
  428. package/dist/views/metadata-admin/previews/simulator/flow-simulator.js +316 -0
  429. package/dist/views/metadata-admin/previews/useDatasetCatalog.d.ts +47 -0
  430. package/dist/views/metadata-admin/previews/useDatasetCatalog.js +133 -0
  431. package/dist/views/metadata-admin/previews/useFlowNodePalette.d.ts +44 -0
  432. package/dist/views/metadata-admin/previews/useFlowNodePalette.js +124 -0
  433. package/dist/views/metadata-admin/previews/useMetaOptions.d.ts +8 -0
  434. package/dist/views/metadata-admin/previews/useMetaOptions.js +50 -0
  435. package/dist/views/metadata-admin/previews/useObjectFields.d.ts +23 -0
  436. package/dist/views/metadata-admin/previews/useObjectFields.js +79 -0
  437. package/dist/views/metadata-admin/previews/useObjectOptions.d.ts +8 -0
  438. package/dist/views/metadata-admin/previews/useObjectOptions.js +43 -0
  439. package/dist/views/metadata-admin/previews/view-column-io.d.ts +42 -0
  440. package/dist/views/metadata-admin/previews/view-column-io.js +73 -0
  441. package/dist/views/metadata-admin/previews/widget-types.d.ts +24 -0
  442. package/dist/views/metadata-admin/previews/widget-types.js +40 -0
  443. package/dist/views/metadata-admin/registry.d.ts +140 -19
  444. package/dist/views/metadata-admin/report-schema.d.ts +26 -0
  445. package/dist/views/metadata-admin/report-schema.js +121 -0
  446. package/dist/views/metadata-admin/useMetadata.d.ts +100 -2
  447. package/dist/views/metadata-admin/useMetadata.js +155 -4
  448. package/dist/views/metadata-admin/view-item-normalize.d.ts +20 -0
  449. package/dist/views/metadata-admin/view-item-normalize.js +68 -0
  450. package/dist/views/metadata-admin/view-schema.d.ts +16 -0
  451. package/dist/views/metadata-admin/view-schema.js +107 -0
  452. package/dist/views/metadata-admin/view-variant-model.d.ts +23 -0
  453. package/dist/views/metadata-admin/view-variant-model.js +64 -0
  454. package/dist/views/metadata-admin/widgets.d.ts +89 -1
  455. package/dist/views/metadata-admin/widgets.js +491 -17
  456. package/dist/views/runtime-metadata-persistence.d.ts +78 -0
  457. package/dist/views/runtime-metadata-persistence.js +89 -0
  458. package/dist/views/useOpenRecordList.d.ts +18 -0
  459. package/dist/views/useOpenRecordList.js +36 -0
  460. package/dist/views/userFilterUrlState.d.ts +15 -0
  461. package/dist/views/userFilterUrlState.js +53 -0
  462. package/dist/views/view-config-adapter.d.ts +38 -0
  463. package/dist/views/view-config-adapter.js +80 -0
  464. package/package.json +52 -34
  465. package/dist/views/DesignDrawer.d.ts +0 -28
  466. package/dist/views/DesignDrawer.js +0 -51
  467. package/dist/views/metadata-admin/DesignerEditorWrapper.d.ts +0 -68
  468. package/dist/views/metadata-admin/DesignerEditorWrapper.js +0 -158
@@ -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 {};
@@ -0,0 +1,21 @@
1
+ /**
2
+ * ADR-0048 (option A) — the `/apps/<segment>` route is keyed on the **package
3
+ * id** (reverse-domain, globally unique), not the app's display name. This makes
4
+ * two vendors' same-named apps unambiguous and self-describing in the URL.
5
+ *
6
+ * - `appRouteSegment(app)` — the canonical route segment for linking TO an app
7
+ * (its package id; falls back to `name` for runtime/DB apps with no
8
+ * `_packageId`).
9
+ * - `matchAppBySegment(apps, seg)` — resolve a route segment back to its app,
10
+ * preferring the package id and falling back to the app name. The name
11
+ * fallback doubles as a per-tenant friendly alias and keeps legacy
12
+ * name-based URLs/bookmarks working. Callers keep their own
13
+ * default/first-app fallback around this match.
14
+ */
15
+ type AppLike = {
16
+ name?: unknown;
17
+ _packageId?: unknown;
18
+ } & Record<string, unknown>;
19
+ export declare function appRouteSegment(app: AppLike | null | undefined): string | undefined;
20
+ export declare function matchAppBySegment<T extends AppLike>(apps: readonly T[] | null | undefined, seg: string | null | undefined): T | undefined;
21
+ export {};
@@ -0,0 +1,25 @@
1
+ /**
2
+ * ADR-0048 (option A) — the `/apps/<segment>` route is keyed on the **package
3
+ * id** (reverse-domain, globally unique), not the app's display name. This makes
4
+ * two vendors' same-named apps unambiguous and self-describing in the URL.
5
+ *
6
+ * - `appRouteSegment(app)` — the canonical route segment for linking TO an app
7
+ * (its package id; falls back to `name` for runtime/DB apps with no
8
+ * `_packageId`).
9
+ * - `matchAppBySegment(apps, seg)` — resolve a route segment back to its app,
10
+ * preferring the package id and falling back to the app name. The name
11
+ * fallback doubles as a per-tenant friendly alias and keeps legacy
12
+ * name-based URLs/bookmarks working. Callers keep their own
13
+ * default/first-app fallback around this match.
14
+ */
15
+ export function appRouteSegment(app) {
16
+ if (!app)
17
+ return undefined;
18
+ const seg = app._packageId ?? app.name;
19
+ return seg ?? undefined;
20
+ }
21
+ export function matchAppBySegment(apps, seg) {
22
+ if (!apps || seg == null)
23
+ return undefined;
24
+ return apps.find((a) => a?._packageId === seg) ?? apps.find((a) => a?.name === seg);
25
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * deriveRelatedLists — the read-side mirror of `attachInlineSubforms`.
3
+ *
4
+ * Where `inlineEdit: true` on a child's `master_detail`/`lookup` field pulls
5
+ * that child INTO the parent's entry form (write side), the detail-page
6
+ * RELATED LIST is the read-side counterpart: a child collection surfaced on the
7
+ * parent's record DETAIL page. Both intents live on the relationship in the
8
+ * data model — not in a hand-authored page.
9
+ *
10
+ * This helper scans every object for fields whose `reference`/`reference_to`
11
+ * points back at the parent object and produces one related-list descriptor per
12
+ * child collection. The detail page (`RecordDetailView`) feeds these into the
13
+ * `record:related_list` renderers (and the legacy `DetailView.related`).
14
+ *
15
+ * Rules (kept in lockstep with the relationship-level `relatedList` spec flag):
16
+ * - Owned children (`master_detail`) and `lookup` children are SHOWN by
17
+ * default. Set `relatedList: false` on the FK field to suppress a noisy
18
+ * association/audit link.
19
+ * - `relatedListTitle` / `relatedListColumns` on the FK field override the
20
+ * derived title / columns.
21
+ * - Audit FKs (`created_by` / `updated_by` / `owner_id`) are skipped — they
22
+ * exist on virtually every object and would balloon the detail page into
23
+ * dozens of duplicate cards.
24
+ * - One related list per child object (deduped by child object name): the
25
+ * first non-audit, non-suppressed FK wins.
26
+ * - Owned (`master_detail`) children are ordered before plain `lookup`
27
+ * children, preserving discovery order within each group.
28
+ */
29
+ export interface DerivedRelatedList {
30
+ /** Child object name (the `api` for the related list query). */
31
+ childObject: string;
32
+ /** Best-effort human label for the child object. */
33
+ childLabel: string;
34
+ /** FK field on the child pointing back at this parent. */
35
+ referenceField: string;
36
+ /** Title override from `relatedListTitle` (else derive from the object label). */
37
+ title?: string;
38
+ /** Explicit columns override from `relatedListColumns` (else auto-derived by the renderer). */
39
+ columns?: any[];
40
+ /** True when the child→parent link is a `master_detail` (owned) relationship. */
41
+ isOwned: boolean;
42
+ }
43
+ interface ObjectLike {
44
+ name?: string;
45
+ label?: string;
46
+ fields?: Record<string, any> | any[];
47
+ }
48
+ /**
49
+ * Derive the detail-page related lists for `objectDef` from the full object
50
+ * registry. Returns owned (`master_detail`) children first, then `lookup`
51
+ * children; deterministic and side-effect free (safe to memoize).
52
+ */
53
+ export declare function deriveRelatedLists(objectDef: ObjectLike | null | undefined, objects: ObjectLike[] | null | undefined): DerivedRelatedList[];
54
+ export {};
@@ -0,0 +1,91 @@
1
+ /**
2
+ * deriveRelatedLists — the read-side mirror of `attachInlineSubforms`.
3
+ *
4
+ * Where `inlineEdit: true` on a child's `master_detail`/`lookup` field pulls
5
+ * that child INTO the parent's entry form (write side), the detail-page
6
+ * RELATED LIST is the read-side counterpart: a child collection surfaced on the
7
+ * parent's record DETAIL page. Both intents live on the relationship in the
8
+ * data model — not in a hand-authored page.
9
+ *
10
+ * This helper scans every object for fields whose `reference`/`reference_to`
11
+ * points back at the parent object and produces one related-list descriptor per
12
+ * child collection. The detail page (`RecordDetailView`) feeds these into the
13
+ * `record:related_list` renderers (and the legacy `DetailView.related`).
14
+ *
15
+ * Rules (kept in lockstep with the relationship-level `relatedList` spec flag):
16
+ * - Owned children (`master_detail`) and `lookup` children are SHOWN by
17
+ * default. Set `relatedList: false` on the FK field to suppress a noisy
18
+ * association/audit link.
19
+ * - `relatedListTitle` / `relatedListColumns` on the FK field override the
20
+ * derived title / columns.
21
+ * - Audit FKs (`created_by` / `updated_by` / `owner_id`) are skipped — they
22
+ * exist on virtually every object and would balloon the detail page into
23
+ * dozens of duplicate cards.
24
+ * - One related list per child object (deduped by child object name): the
25
+ * first non-audit, non-suppressed FK wins.
26
+ * - Owned (`master_detail`) children are ordered before plain `lookup`
27
+ * children, preserving discovery order within each group.
28
+ */
29
+ /** Audit/ownership FKs that exist on nearly every object — never related lists. */
30
+ const AUDIT_FK_FIELDS = new Set(['created_by', 'updated_by', 'owner_id']);
31
+ /** Normalize an object's `fields` (record or array) into `[name, def]` pairs. */
32
+ function fieldEntries(fields) {
33
+ if (!fields)
34
+ return [];
35
+ if (Array.isArray(fields)) {
36
+ return fields
37
+ .filter((f) => f && (f.name != null))
38
+ .map((f) => [String(f.name), f]);
39
+ }
40
+ return Object.entries(fields);
41
+ }
42
+ /**
43
+ * Derive the detail-page related lists for `objectDef` from the full object
44
+ * registry. Returns owned (`master_detail`) children first, then `lookup`
45
+ * children; deterministic and side-effect free (safe to memoize).
46
+ */
47
+ export function deriveRelatedLists(objectDef, objects) {
48
+ if (!objectDef?.name || !Array.isArray(objects) || objects.length === 0)
49
+ return [];
50
+ const parentName = objectDef.name;
51
+ const owned = [];
52
+ const referenced = [];
53
+ const seenChild = new Set();
54
+ for (const child of objects) {
55
+ if (!child?.name || child.name === parentName)
56
+ continue;
57
+ for (const [fieldName, fieldDef] of fieldEntries(child.fields)) {
58
+ if (!fieldDef)
59
+ continue;
60
+ const type = fieldDef.type;
61
+ if (type !== 'lookup' && type !== 'master_detail')
62
+ continue;
63
+ if ((fieldDef.reference_to || fieldDef.reference) !== parentName)
64
+ continue;
65
+ if (AUDIT_FK_FIELDS.has(fieldName))
66
+ continue;
67
+ // Explicit opt-out lives on the relationship.
68
+ if (fieldDef.relatedList === false)
69
+ continue;
70
+ // One related list per child object — the first eligible FK wins.
71
+ if (seenChild.has(child.name))
72
+ continue;
73
+ seenChild.add(child.name);
74
+ const entry = {
75
+ childObject: child.name,
76
+ childLabel: child.label || child.name,
77
+ referenceField: fieldName,
78
+ isOwned: type === 'master_detail',
79
+ ...(typeof fieldDef.relatedListTitle === 'string' && fieldDef.relatedListTitle
80
+ ? { title: fieldDef.relatedListTitle }
81
+ : {}),
82
+ ...(Array.isArray(fieldDef.relatedListColumns) && fieldDef.relatedListColumns.length > 0
83
+ ? { columns: fieldDef.relatedListColumns }
84
+ : {}),
85
+ };
86
+ (entry.isOwned ? owned : referenced).push(entry);
87
+ break; // move on to the next child object
88
+ }
89
+ }
90
+ return [...owned, ...referenced];
91
+ }
@@ -3,6 +3,10 @@
3
3
  */
4
4
  export { resolveRecordFormTarget, } from './recordFormNavigation';
5
5
  export type { ObjectDefinitionForNavigation, RecordFormTarget, } from './recordFormNavigation';
6
+ export { deriveRelatedLists } from './deriveRelatedLists';
7
+ export type { DerivedRelatedList } from './deriveRelatedLists';
8
+ export { preferLocal } from './preferLocal';
9
+ export { appRouteSegment, matchAppBySegment } from './appRoute';
6
10
  /**
7
11
  * Resolves an I18nLabel to a plain string.
8
12
  * I18nLabel can be either a string or an object { key, defaultValue?, params? }.
@@ -2,6 +2,9 @@
2
2
  * Utility functions for ObjectStack Console
3
3
  */
4
4
  export { resolveRecordFormTarget, } from './recordFormNavigation';
5
+ export { deriveRelatedLists } from './deriveRelatedLists';
6
+ export { preferLocal } from './preferLocal';
7
+ export { appRouteSegment, matchAppBySegment } from './appRoute';
5
8
  /**
6
9
  * Resolves an I18nLabel to a plain string.
7
10
  * I18nLabel can be either a string or an object { key, defaultValue?, params? }.
@@ -26,4 +26,11 @@ export interface ManagedByEmptyState {
26
26
  message: string;
27
27
  icon: string;
28
28
  }
29
- export declare function resolveManagedByEmptyState(managedBy: string | undefined | null): ManagedByEmptyState | undefined;
29
+ /**
30
+ * Translator function, structurally compatible with the `t` returned by
31
+ * `useObjectTranslation()`. Accepts a key and optional options (including a
32
+ * `defaultValue` used as the English fallback when a locale lacks the key).
33
+ */
34
+ type TranslateFn = (key: string, options?: Record<string, unknown>) => string;
35
+ export declare function resolveManagedByEmptyState(managedBy: string | undefined | null, t: TranslateFn): ManagedByEmptyState | undefined;
36
+ export {};
@@ -1,22 +1,28 @@
1
- export function resolveManagedByEmptyState(managedBy) {
1
+ export function resolveManagedByEmptyState(managedBy, t) {
2
2
  switch (managedBy) {
3
3
  case 'system':
4
4
  return {
5
5
  icon: 'Lock',
6
- title: 'Nothing here yet',
7
- message: 'Entries appear automatically when their source action runs (e.g. Submit for Approval, Share, Invite). Trigger one of those on a source record to create a row.',
6
+ title: t('list.managedBy.system.title', { defaultValue: 'Nothing here yet' }),
7
+ message: t('list.managedBy.system.message', {
8
+ defaultValue: 'Entries appear automatically when their source action runs (e.g. Submit for Approval, Share, Invite). Trigger one of those on a source record to create a row.',
9
+ }),
8
10
  };
9
11
  case 'append-only':
10
12
  return {
11
13
  icon: 'Archive',
12
- title: 'No events recorded',
13
- message: 'This is an immutable audit log. Rows are written by the platform when events occur — you can export the history but cannot create entries from here.',
14
+ title: t('list.managedBy.appendOnly.title', { defaultValue: 'No events recorded' }),
15
+ message: t('list.managedBy.appendOnly.message', {
16
+ defaultValue: 'This is an immutable audit log. Rows are written by the platform when events occur — you can export the history but cannot create entries from here.',
17
+ }),
14
18
  };
15
19
  case 'better-auth':
16
20
  return {
17
21
  icon: 'ShieldAlert',
18
- title: 'No identity records',
19
- message: 'Identity rows are managed by the authentication provider. Use the dedicated identity workflows (Invite User, Reset Password, …) to create new entries.',
22
+ title: t('list.managedBy.betterAuth.title', { defaultValue: 'No identity records' }),
23
+ message: t('list.managedBy.betterAuth.message', {
24
+ defaultValue: 'Identity rows are managed by the authentication provider. Use the dedicated identity workflows (Invite User, Reset Password, …) to create new entries.',
25
+ }),
20
26
  };
21
27
  default:
22
28
  return undefined;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * ADR-0048 Phase 2 — prefer-local (container-scoped) metadata resolution.
3
+ *
4
+ * Two installed packages may legitimately ship the same bare name (e.g. a
5
+ * `page` named `home`) — the install-time namespace gate keeps their namespaces
6
+ * distinct, and resolution disambiguates them by container. When resolving a
7
+ * bare name we prefer the item owned by the *current* container (the active
8
+ * app's package), so a user inside `/apps/crm` sees crm's `home`, not whichever
9
+ * package's `home` happened to load first.
10
+ *
11
+ * Falls back to the first name match when the container owns no such item or
12
+ * its owning package is unknown (runtime/DB apps with no `_packageId`), so this
13
+ * never regresses the prior first-match behaviour.
14
+ */
15
+ export declare function preferLocal<T extends {
16
+ name?: unknown;
17
+ _packageId?: unknown;
18
+ }>(list: readonly T[] | undefined | null, name: string | undefined | null, ownerPackageId?: unknown): T | undefined;