@object-ui/app-shell 6.2.3 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (486) hide show
  1. package/CHANGELOG.md +1229 -0
  2. package/README.md +292 -0
  3. package/dist/assistant/assistantBus.d.ts +72 -0
  4. package/dist/assistant/assistantBus.js +133 -0
  5. package/dist/chrome/CommandPalette.d.ts +1 -1
  6. package/dist/chrome/CommandPalette.js +26 -22
  7. package/dist/chrome/ConditionalAuthWrapper.d.ts +1 -1
  8. package/dist/chrome/ConsoleToaster.d.ts +1 -1
  9. package/dist/chrome/ConsoleToaster.js +3 -1
  10. package/dist/chrome/ErrorBoundary.d.ts +1 -1
  11. package/dist/chrome/KeyboardShortcutsDialog.d.ts +1 -1
  12. package/dist/chrome/KeyboardShortcutsDialog.js +16 -5
  13. package/dist/chrome/LoadingScreen.d.ts +1 -1
  14. package/dist/chrome/LoadingScreen.js +22 -26
  15. package/dist/chrome/RouteFader.d.ts +1 -1
  16. package/dist/chrome/ThemeProvider.d.ts +1 -1
  17. package/dist/components/ManagedByBadge.d.ts +1 -1
  18. package/dist/console/AppContent.d.ts +1 -1
  19. package/dist/console/AppContent.js +184 -39
  20. package/dist/console/ConsoleShell.d.ts +7 -7
  21. package/dist/console/ConsoleShell.js +32 -3
  22. package/dist/console/ai/AiChatPage.d.ts +88 -1
  23. package/dist/console/ai/AiChatPage.js +747 -66
  24. package/dist/console/ai/ConversationsSidebar.d.ts +26 -1
  25. package/dist/console/ai/ConversationsSidebar.js +149 -34
  26. package/dist/console/ai/LiveCanvas.d.ts +28 -0
  27. package/dist/console/ai/LiveCanvas.js +80 -0
  28. package/dist/console/ai/reconcileTurn.d.ts +8 -0
  29. package/dist/console/ai/reconcileTurn.js +20 -0
  30. package/dist/console/auth/AuthPageLayout.d.ts +1 -1
  31. package/dist/console/auth/ForgotPasswordPage.d.ts +1 -1
  32. package/dist/console/auth/LoginPage.d.ts +1 -1
  33. package/dist/console/auth/RegisterPage.d.ts +1 -1
  34. package/dist/console/auth/RegisterPage.js +23 -3
  35. package/dist/console/cloud-connection/CloudConnectionPanel.d.ts +1 -0
  36. package/dist/console/cloud-connection/CloudConnectionPanel.js +169 -0
  37. package/dist/console/home/AppCard.d.ts +1 -1
  38. package/dist/console/home/AppCard.js +6 -12
  39. package/dist/console/home/HomeAppsStrip.d.ts +8 -0
  40. package/dist/console/home/HomeAppsStrip.js +61 -0
  41. package/dist/console/home/HomeLayout.d.ts +1 -1
  42. package/dist/console/home/HomeLayout.js +3 -1
  43. package/dist/console/home/HomePage.d.ts +1 -2
  44. package/dist/console/home/HomePage.js +149 -21
  45. package/dist/console/home/HomeRail.d.ts +22 -0
  46. package/dist/console/home/HomeRail.js +62 -0
  47. package/dist/console/home/QuickActions.d.ts +1 -1
  48. package/dist/console/home/QuickActions.js +3 -11
  49. package/dist/console/home/RecentApps.d.ts +1 -1
  50. package/dist/console/home/RecentApps.js +2 -2
  51. package/dist/console/home/StarredApps.d.ts +1 -1
  52. package/dist/console/home/StarredApps.js +2 -2
  53. package/dist/console/marketplace/InstalledListWidget.d.ts +1 -0
  54. package/dist/console/marketplace/InstalledListWidget.js +93 -0
  55. package/dist/console/marketplace/MarkdownText.d.ts +1 -1
  56. package/dist/console/marketplace/MarketplaceAccessDenied.d.ts +1 -1
  57. package/dist/console/marketplace/MarketplaceInstalledPage.d.ts +8 -14
  58. package/dist/console/marketplace/MarketplaceInstalledPage.js +14 -66
  59. package/dist/console/marketplace/MarketplacePackagePage.d.ts +1 -1
  60. package/dist/console/marketplace/MarketplacePackagePage.js +249 -8
  61. package/dist/console/marketplace/MarketplacePage.d.ts +1 -1
  62. package/dist/console/marketplace/MarketplacePage.js +60 -3
  63. package/dist/console/marketplace/PackageIcon.d.ts +1 -1
  64. package/dist/console/marketplace/PluginDisclosure.d.ts +14 -0
  65. package/dist/console/marketplace/PluginDisclosure.js +38 -0
  66. package/dist/console/marketplace/marketplaceApi.d.ts +123 -0
  67. package/dist/console/marketplace/marketplaceApi.js +254 -1
  68. package/dist/console/organizations/CreateWorkspaceDialog.d.ts +1 -1
  69. package/dist/console/organizations/OrganizationsLayout.d.ts +1 -1
  70. package/dist/console/organizations/OrganizationsPage.d.ts +1 -1
  71. package/dist/console/organizations/manage/AcceptInvitationPage.d.ts +1 -1
  72. package/dist/console/organizations/manage/InvitationsPage.d.ts +1 -1
  73. package/dist/console/organizations/manage/InviteMemberDialog.d.ts +1 -1
  74. package/dist/console/organizations/manage/MembersPage.d.ts +1 -1
  75. package/dist/console/organizations/manage/OrganizationLayout.d.ts +1 -1
  76. package/dist/console/organizations/manage/SettingsPage.d.ts +1 -1
  77. package/dist/context/CommandPaletteProvider.d.ts +44 -0
  78. package/dist/context/CommandPaletteProvider.js +71 -0
  79. package/dist/context/FavoritesProvider.d.ts +1 -1
  80. package/dist/context/NavigationContext.d.ts +1 -1
  81. package/dist/context/RecentItemsProvider.d.ts +2 -2
  82. package/dist/context/UserStateAdapters.d.ts +1 -1
  83. package/dist/context/index.d.ts +2 -0
  84. package/dist/context/index.js +1 -0
  85. package/dist/hooks/index.d.ts +5 -2
  86. package/dist/hooks/index.js +4 -1
  87. package/dist/hooks/useActionModal.d.ts +53 -0
  88. package/dist/hooks/useActionModal.js +111 -0
  89. package/dist/hooks/useChatConversation.d.ts +137 -4
  90. package/dist/hooks/useChatConversation.js +316 -25
  91. package/dist/hooks/useConsoleActionRuntime.d.ts +70 -0
  92. package/dist/hooks/useConsoleActionRuntime.js +564 -0
  93. package/dist/hooks/useConversationList.js +61 -3
  94. package/dist/hooks/useHomeInbox.d.ts +13 -0
  95. package/dist/hooks/useHomeInbox.js +142 -0
  96. package/dist/hooks/useNavPins.js +17 -23
  97. package/dist/hooks/useNavigationSync.d.ts +33 -0
  98. package/dist/hooks/useNavigationSync.js +98 -12
  99. package/dist/hooks/useReconcileOnError.d.ts +40 -0
  100. package/dist/hooks/useReconcileOnError.js +37 -0
  101. package/dist/hooks/useRecordApprovals.d.ts +18 -19
  102. package/dist/hooks/useRecordApprovals.js +24 -40
  103. package/dist/hooks/useResponsiveSidebar.js +14 -5
  104. package/dist/hooks/useSettleSignal.d.ts +19 -0
  105. package/dist/hooks/useSettleSignal.js +20 -0
  106. package/dist/hooks/useTrackRouteAsRecent.js +35 -0
  107. package/dist/hooks/useUrlOverlay.d.ts +62 -0
  108. package/dist/hooks/useUrlOverlay.js +88 -0
  109. package/dist/index.d.ts +18 -8
  110. package/dist/index.js +17 -5
  111. package/dist/layout/ActivityFeed.d.ts +1 -1
  112. package/dist/layout/AppHeader.d.ts +3 -2
  113. package/dist/layout/AppHeader.js +237 -72
  114. package/dist/layout/AppSidebar.d.ts +2 -1
  115. package/dist/layout/AppSidebar.js +26 -46
  116. package/dist/layout/AppSwitcher.d.ts +2 -1
  117. package/dist/layout/AppSwitcher.js +9 -5
  118. package/dist/layout/AuthPageLayout.d.ts +1 -1
  119. package/dist/layout/ConnectionStatus.d.ts +1 -1
  120. package/dist/layout/ConnectionStatus.js +9 -6
  121. package/dist/layout/ConsoleChatbotFab.d.ts +19 -1
  122. package/dist/layout/ConsoleChatbotFab.js +16 -2
  123. package/dist/layout/ConsoleFloatingChatbot.d.ts +34 -2
  124. package/dist/layout/ConsoleFloatingChatbot.js +391 -41
  125. package/dist/layout/ConsoleLayout.d.ts +1 -1
  126. package/dist/layout/ConsoleLayout.js +27 -11
  127. package/dist/layout/ContextSelectors.d.ts +44 -0
  128. package/dist/layout/ContextSelectors.js +242 -0
  129. package/dist/layout/InboxPopover.d.ts +6 -1
  130. package/dist/layout/InboxPopover.js +25 -6
  131. package/dist/layout/LocaleSwitcher.d.ts +1 -1
  132. package/dist/layout/LocalizedSidebarTrigger.d.ts +2 -0
  133. package/dist/layout/LocalizedSidebarTrigger.js +15 -0
  134. package/dist/layout/MobileViewSwitcherContext.d.ts +1 -1
  135. package/dist/layout/ModeToggle.d.ts +1 -1
  136. package/dist/layout/PageHeader.d.ts +1 -1
  137. package/dist/layout/UnifiedSidebar.d.ts +2 -1
  138. package/dist/layout/UnifiedSidebar.js +116 -15
  139. package/dist/layout/agentPicker.d.ts +56 -0
  140. package/dist/layout/agentPicker.js +40 -0
  141. package/dist/observability/index.d.ts +1 -0
  142. package/dist/observability/index.js +1 -0
  143. package/dist/observability/settleSignal.d.ts +64 -0
  144. package/dist/observability/settleSignal.js +131 -0
  145. package/dist/preview/CommitTimeline.d.ts +15 -0
  146. package/dist/preview/CommitTimeline.js +82 -0
  147. package/dist/preview/DraftChangesPanel.d.ts +19 -0
  148. package/dist/preview/DraftChangesPanel.js +114 -0
  149. package/dist/preview/DraftPreviewBar.d.ts +8 -0
  150. package/dist/preview/DraftPreviewBar.js +86 -0
  151. package/dist/preview/PreviewDraftEmptyState.d.ts +16 -0
  152. package/dist/preview/PreviewDraftEmptyState.js +47 -0
  153. package/dist/preview/PreviewModeContext.d.ts +57 -0
  154. package/dist/preview/PreviewModeContext.js +99 -0
  155. package/dist/preview/UnpublishedAppBar.d.ts +8 -0
  156. package/dist/preview/UnpublishedAppBar.js +83 -0
  157. package/dist/preview/commitHistory.d.ts +28 -0
  158. package/dist/preview/commitHistory.js +48 -0
  159. package/dist/preview/draftStatus.d.ts +20 -0
  160. package/dist/preview/draftStatus.js +27 -0
  161. package/dist/preview/usePublishAllDrafts.d.ts +18 -0
  162. package/dist/preview/usePublishAllDrafts.js +106 -0
  163. package/dist/providers/AdapterProvider.d.ts +1 -1
  164. package/dist/providers/AdapterProvider.js +6 -1
  165. package/dist/providers/ExpressionProvider.d.ts +1 -1
  166. package/dist/providers/MetadataProvider.d.ts +17 -2
  167. package/dist/providers/MetadataProvider.js +192 -12
  168. package/dist/runtime-config.d.ts +46 -2
  169. package/dist/runtime-config.js +39 -2
  170. package/dist/services/builtinComponents.js +68 -59
  171. package/dist/skeletons/SkeletonDashboard.d.ts +1 -1
  172. package/dist/skeletons/SkeletonDetail.d.ts +1 -1
  173. package/dist/skeletons/SkeletonGrid.d.ts +1 -1
  174. package/dist/utils/appRoute.d.ts +21 -0
  175. package/dist/utils/appRoute.js +25 -0
  176. package/dist/utils/deriveRelatedLists.d.ts +54 -0
  177. package/dist/utils/deriveRelatedLists.js +91 -0
  178. package/dist/utils/index.d.ts +4 -0
  179. package/dist/utils/index.js +3 -0
  180. package/dist/utils/managedByEmptyState.d.ts +8 -1
  181. package/dist/utils/managedByEmptyState.js +13 -7
  182. package/dist/utils/preferLocal.d.ts +18 -0
  183. package/dist/utils/preferLocal.js +24 -0
  184. package/dist/views/ActionConfirmDialog.d.ts +1 -1
  185. package/dist/views/ActionConfirmDialog.js +3 -1
  186. package/dist/views/ActionParamDialog.d.ts +6 -1
  187. package/dist/views/ActionParamDialog.js +9 -3
  188. package/dist/views/ActionResultDialog.d.ts +13 -0
  189. package/dist/views/ActionResultDialog.js +134 -0
  190. package/dist/views/ComponentNavView.d.ts +14 -1
  191. package/dist/views/CreateViewDialog.d.ts +1 -1
  192. package/dist/views/DashboardConfigPanel.d.ts +28 -0
  193. package/dist/views/DashboardConfigPanel.js +81 -0
  194. package/dist/views/DashboardView.d.ts +4 -3
  195. package/dist/views/DashboardView.js +38 -239
  196. package/dist/views/FlowRunner.d.ts +31 -0
  197. package/dist/views/FlowRunner.js +121 -0
  198. package/dist/views/InterfaceListPage.d.ts +49 -0
  199. package/dist/views/InterfaceListPage.js +347 -0
  200. package/dist/views/MetadataInspector.d.ts +2 -2
  201. package/dist/views/ObjectView.d.ts +1 -1
  202. package/dist/views/ObjectView.js +209 -532
  203. package/dist/views/PageView.d.ts +8 -3
  204. package/dist/views/PageView.js +45 -32
  205. package/dist/views/RecordDetailView.d.ts +1 -1
  206. package/dist/views/RecordDetailView.js +363 -148
  207. package/dist/views/RecordFormPage.d.ts +1 -1
  208. package/dist/views/RecordFormPage.js +26 -1
  209. package/dist/views/ReportConfigPanel.d.ts +37 -0
  210. package/dist/views/ReportConfigPanel.js +85 -0
  211. package/dist/views/ReportView.d.ts +1 -1
  212. package/dist/views/ReportView.js +116 -7
  213. package/dist/views/RuntimeDraftBar.d.ts +30 -0
  214. package/dist/views/RuntimeDraftBar.js +112 -0
  215. package/dist/views/ScreenView.d.ts +70 -0
  216. package/dist/views/ScreenView.js +73 -0
  217. package/dist/views/SearchResultsPage.d.ts +1 -1
  218. package/dist/views/SearchResultsPage.js +8 -18
  219. package/dist/views/ViewConfigPanel.d.ts +24 -17
  220. package/dist/views/ViewConfigPanel.js +121 -77
  221. package/dist/views/index.d.ts +1 -1
  222. package/dist/views/index.js +1 -1
  223. package/dist/views/metadata-admin/AuditPanel.d.ts +28 -0
  224. package/dist/views/metadata-admin/AuditPanel.js +79 -0
  225. package/dist/views/metadata-admin/DiagnosticsPage.d.ts +20 -0
  226. package/dist/views/metadata-admin/DiagnosticsPage.js +69 -0
  227. package/dist/views/metadata-admin/DirectoryPage.d.ts +16 -1
  228. package/dist/views/metadata-admin/DirectoryPage.js +101 -24
  229. package/dist/views/metadata-admin/DraftReviewPanel.d.ts +33 -0
  230. package/dist/views/metadata-admin/DraftReviewPanel.js +77 -0
  231. package/dist/views/metadata-admin/EmbeddedItemEditor.d.ts +17 -1
  232. package/dist/views/metadata-admin/EmbeddedItemEditor.js +15 -8
  233. package/dist/views/metadata-admin/JsonSourceEditor.d.ts +39 -0
  234. package/dist/views/metadata-admin/JsonSourceEditor.js +196 -0
  235. package/dist/views/metadata-admin/LayeredDiff.d.ts +39 -1
  236. package/dist/views/metadata-admin/LayeredDiff.js +171 -5
  237. package/dist/views/metadata-admin/MetadataDetailDrawer.d.ts +15 -1
  238. package/dist/views/metadata-admin/MetadataTypeActions.d.ts +48 -0
  239. package/dist/views/metadata-admin/MetadataTypeActions.js +165 -0
  240. package/dist/views/metadata-admin/PackagesPage.d.ts +18 -0
  241. package/dist/views/metadata-admin/PackagesPage.js +403 -0
  242. package/dist/views/metadata-admin/PageShell.d.ts +1 -1
  243. package/dist/views/metadata-admin/PageShell.js +9 -4
  244. package/dist/views/metadata-admin/PermissionMatrixEditor.d.ts +35 -1
  245. package/dist/views/metadata-admin/QuickFind.d.ts +21 -1
  246. package/dist/views/metadata-admin/QuickFind.js +6 -3
  247. package/dist/views/metadata-admin/RelatedPanel.d.ts +24 -1
  248. package/dist/views/metadata-admin/RelatedPanel.js +20 -18
  249. package/dist/views/metadata-admin/ResourceEditPage.d.ts +40 -1
  250. package/dist/views/metadata-admin/ResourceEditPage.js +1250 -60
  251. package/dist/views/metadata-admin/ResourceHistoryPage.d.ts +39 -1
  252. package/dist/views/metadata-admin/ResourceHistoryPage.js +66 -16
  253. package/dist/views/metadata-admin/ResourceListPage.d.ts +13 -1
  254. package/dist/views/metadata-admin/ResourceListPage.js +258 -30
  255. package/dist/views/metadata-admin/ResourceRouter.d.ts +23 -1
  256. package/dist/views/metadata-admin/SchemaForm.d.ts +34 -1
  257. package/dist/views/metadata-admin/SchemaForm.js +559 -49
  258. package/dist/views/metadata-admin/StudioHomePage.d.ts +22 -0
  259. package/dist/views/metadata-admin/StudioHomePage.js +205 -0
  260. package/dist/views/metadata-admin/anchors.js +255 -24
  261. package/dist/views/metadata-admin/clientValidation.d.ts +50 -0
  262. package/dist/views/metadata-admin/clientValidation.js +169 -0
  263. package/dist/views/metadata-admin/color-variant-field.d.ts +30 -0
  264. package/dist/views/metadata-admin/color-variant-field.js +38 -0
  265. package/dist/views/metadata-admin/createDerive.d.ts +75 -0
  266. package/dist/views/metadata-admin/createDerive.js +179 -0
  267. package/dist/views/metadata-admin/dashboard-schema.d.ts +12 -0
  268. package/dist/views/metadata-admin/dashboard-schema.js +80 -0
  269. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.d.ts +35 -0
  270. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.js +327 -0
  271. package/dist/views/metadata-admin/datasource/register.d.ts +1 -0
  272. package/dist/views/metadata-admin/datasource/register.js +24 -0
  273. package/dist/views/metadata-admin/default-inspector-registry.d.ts +49 -0
  274. package/dist/views/metadata-admin/default-inspector-registry.js +8 -0
  275. package/dist/views/metadata-admin/default-schemas.js +115 -10
  276. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.d.ts +27 -0
  277. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.js +69 -0
  278. package/dist/views/metadata-admin/external/ImportObjectDialog.d.ts +27 -0
  279. package/dist/views/metadata-admin/external/ImportObjectDialog.js +77 -0
  280. package/dist/views/metadata-admin/external/SchemaBrowser.d.ts +16 -0
  281. package/dist/views/metadata-admin/external/SchemaBrowser.js +74 -0
  282. package/dist/views/metadata-admin/external/ValidationPanel.d.ts +16 -0
  283. package/dist/views/metadata-admin/external/ValidationPanel.js +68 -0
  284. package/dist/views/metadata-admin/external/api.d.ts +100 -0
  285. package/dist/views/metadata-admin/external/api.js +124 -0
  286. package/dist/views/metadata-admin/i18n.d.ts +1 -0
  287. package/dist/views/metadata-admin/i18n.js +1252 -2
  288. package/dist/views/metadata-admin/index.d.ts +8 -5
  289. package/dist/views/metadata-admin/index.js +12 -2
  290. package/dist/views/metadata-admin/inspector-registry.d.ts +51 -0
  291. package/dist/views/metadata-admin/inspector-registry.js +11 -0
  292. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.d.ts +30 -0
  293. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.js +180 -0
  294. package/dist/views/metadata-admin/inspectors/AppNavInspector.d.ts +16 -0
  295. package/dist/views/metadata-admin/inspectors/AppNavInspector.js +110 -0
  296. package/dist/views/metadata-admin/inspectors/ConditionBuilder.d.ts +29 -0
  297. package/dist/views/metadata-admin/inspectors/ConditionBuilder.js +154 -0
  298. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.d.ts +28 -0
  299. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.js +110 -0
  300. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.d.ts +18 -0
  301. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.js +139 -0
  302. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.d.ts +21 -0
  303. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.js +221 -0
  304. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.d.ts +16 -0
  305. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.js +126 -0
  306. package/dist/views/metadata-admin/inspectors/FlowInspector.d.ts +12 -0
  307. package/dist/views/metadata-admin/inspectors/FlowInspector.js +9 -0
  308. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.d.ts +30 -0
  309. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.js +125 -0
  310. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.d.ts +18 -0
  311. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.js +40 -0
  312. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.d.ts +14 -0
  313. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.js +205 -0
  314. package/dist/views/metadata-admin/inspectors/FlowObjectListField.d.ts +26 -0
  315. package/dist/views/metadata-admin/inspectors/FlowObjectListField.js +105 -0
  316. package/dist/views/metadata-admin/inspectors/FlowReferenceField.d.ts +83 -0
  317. package/dist/views/metadata-admin/inspectors/FlowReferenceField.js +181 -0
  318. package/dist/views/metadata-admin/inspectors/FlowStringListField.d.ts +21 -0
  319. package/dist/views/metadata-admin/inspectors/FlowStringListField.js +60 -0
  320. package/dist/views/metadata-admin/inspectors/InspectorComboField.d.ts +40 -0
  321. package/dist/views/metadata-admin/inspectors/InspectorComboField.js +61 -0
  322. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.d.ts +21 -0
  323. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.js +55 -0
  324. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.d.ts +23 -0
  325. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.js +365 -0
  326. package/dist/views/metadata-admin/inspectors/PageBlockInspector.d.ts +48 -0
  327. package/dist/views/metadata-admin/inspectors/PageBlockInspector.js +332 -0
  328. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.d.ts +58 -0
  329. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.js +218 -0
  330. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.d.ts +19 -0
  331. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.js +144 -0
  332. package/dist/views/metadata-admin/inspectors/ViewInspector.d.ts +19 -0
  333. package/dist/views/metadata-admin/inspectors/ViewInspector.js +21 -0
  334. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.d.ts +54 -0
  335. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.js +191 -0
  336. package/dist/views/metadata-admin/inspectors/_shared.d.ts +128 -0
  337. package/dist/views/metadata-admin/inspectors/_shared.js +113 -0
  338. package/dist/views/metadata-admin/inspectors/datasetFilterCondition.d.ts +24 -0
  339. package/dist/views/metadata-admin/inspectors/datasetFilterCondition.js +97 -0
  340. package/dist/views/metadata-admin/inspectors/expression-validate.d.ts +26 -0
  341. package/dist/views/metadata-admin/inspectors/expression-validate.js +66 -0
  342. package/dist/views/metadata-admin/inspectors/flow-node-config.d.ts +143 -0
  343. package/dist/views/metadata-admin/inspectors/flow-node-config.js +506 -0
  344. package/dist/views/metadata-admin/inspectors/index.d.ts +1 -0
  345. package/dist/views/metadata-admin/inspectors/index.js +45 -0
  346. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.d.ts +40 -0
  347. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.js +227 -0
  348. package/dist/views/metadata-admin/inspectors/useDatasetFields.d.ts +72 -0
  349. package/dist/views/metadata-admin/inspectors/useDatasetFields.js +0 -0
  350. package/dist/views/metadata-admin/issuePath.d.ts +22 -0
  351. package/dist/views/metadata-admin/issuePath.js +65 -0
  352. package/dist/views/metadata-admin/mergeServerFields.d.ts +65 -0
  353. package/dist/views/metadata-admin/mergeServerFields.js +56 -0
  354. package/dist/views/metadata-admin/package-scope.d.ts +26 -0
  355. package/dist/views/metadata-admin/package-scope.js +43 -0
  356. package/dist/views/metadata-admin/preview-registry.d.ts +55 -0
  357. package/dist/views/metadata-admin/previews/ActionPreview.d.ts +25 -0
  358. package/dist/views/metadata-admin/previews/ActionPreview.js +238 -0
  359. package/dist/views/metadata-admin/previews/AddWidgetPicker.d.ts +12 -0
  360. package/dist/views/metadata-admin/previews/AddWidgetPicker.js +56 -0
  361. package/dist/views/metadata-admin/previews/AgentPreview.d.ts +24 -0
  362. package/dist/views/metadata-admin/previews/AgentPreview.js +100 -0
  363. package/dist/views/metadata-admin/previews/AppNavCanvas.d.ts +31 -0
  364. package/dist/views/metadata-admin/previews/AppNavCanvas.js +260 -0
  365. package/dist/views/metadata-admin/previews/AppPreview.d.ts +16 -1
  366. package/dist/views/metadata-admin/previews/AppPreview.js +23 -14
  367. package/dist/views/metadata-admin/previews/BookPreview.d.ts +20 -0
  368. package/dist/views/metadata-admin/previews/BookPreview.js +132 -0
  369. package/dist/views/metadata-admin/previews/DashboardPreview.d.ts +16 -1
  370. package/dist/views/metadata-admin/previews/DashboardPreview.js +110 -8
  371. package/dist/views/metadata-admin/previews/DatasetPreview.d.ts +18 -0
  372. package/dist/views/metadata-admin/previews/DatasetPreview.js +105 -0
  373. package/dist/views/metadata-admin/previews/DatasourcePreview.d.ts +23 -0
  374. package/dist/views/metadata-admin/previews/DatasourcePreview.js +68 -0
  375. package/dist/views/metadata-admin/previews/EmailTemplatePreview.d.ts +14 -1
  376. package/dist/views/metadata-admin/previews/FieldStub.d.ts +30 -0
  377. package/dist/views/metadata-admin/previews/FieldStub.js +104 -0
  378. package/dist/views/metadata-admin/previews/FieldsListEditor.d.ts +50 -0
  379. package/dist/views/metadata-admin/previews/FieldsListEditor.js +97 -0
  380. package/dist/views/metadata-admin/previews/FlowCanvas.d.ts +49 -0
  381. package/dist/views/metadata-admin/previews/FlowCanvas.js +416 -0
  382. package/dist/views/metadata-admin/previews/FlowPreview.d.ts +20 -0
  383. package/dist/views/metadata-admin/previews/FlowPreview.js +120 -0
  384. package/dist/views/metadata-admin/previews/FlowRunsPanel.d.ts +46 -0
  385. package/dist/views/metadata-admin/previews/FlowRunsPanel.js +97 -0
  386. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.d.ts +25 -0
  387. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.js +204 -0
  388. package/dist/views/metadata-admin/previews/JobPreview.d.ts +28 -0
  389. package/dist/views/metadata-admin/previews/JobPreview.js +290 -0
  390. package/dist/views/metadata-admin/previews/ObjectFormCanvas.d.ts +30 -0
  391. package/dist/views/metadata-admin/previews/ObjectFormCanvas.js +547 -0
  392. package/dist/views/metadata-admin/previews/ObjectPreview.d.ts +14 -1
  393. package/dist/views/metadata-admin/previews/ObjectPreview.js +5 -30
  394. package/dist/views/metadata-admin/previews/OutlineStrip.d.ts +32 -0
  395. package/dist/views/metadata-admin/previews/OutlineStrip.js +8 -0
  396. package/dist/views/metadata-admin/previews/PageBlockCanvas.d.ts +49 -0
  397. package/dist/views/metadata-admin/previews/PageBlockCanvas.js +510 -0
  398. package/dist/views/metadata-admin/previews/PagePreview.d.ts +10 -1
  399. package/dist/views/metadata-admin/previews/PagePreview.js +200 -5
  400. package/dist/views/metadata-admin/previews/PermissionPreview.d.ts +27 -0
  401. package/dist/views/metadata-admin/previews/PermissionPreview.js +115 -0
  402. package/dist/views/metadata-admin/previews/PreviewShell.d.ts +29 -6
  403. package/dist/views/metadata-admin/previews/PreviewShell.js +16 -3
  404. package/dist/views/metadata-admin/previews/ReportPreview.d.ts +18 -1
  405. package/dist/views/metadata-admin/previews/ReportPreview.js +23 -15
  406. package/dist/views/metadata-admin/previews/RolePreview.d.ts +19 -0
  407. package/dist/views/metadata-admin/previews/RolePreview.js +14 -0
  408. package/dist/views/metadata-admin/previews/ScreenPreview.d.ts +38 -0
  409. package/dist/views/metadata-admin/previews/ScreenPreview.js +61 -0
  410. package/dist/views/metadata-admin/previews/SkillPreview.d.ts +22 -0
  411. package/dist/views/metadata-admin/previews/SkillPreview.js +34 -0
  412. package/dist/views/metadata-admin/previews/ToolPreview.d.ts +25 -0
  413. package/dist/views/metadata-admin/previews/ToolPreview.js +122 -0
  414. package/dist/views/metadata-admin/previews/TranslationPreview.d.ts +25 -0
  415. package/dist/views/metadata-admin/previews/TranslationPreview.js +52 -0
  416. package/dist/views/metadata-admin/previews/ValidationPreview.d.ts +27 -0
  417. package/dist/views/metadata-admin/previews/ValidationPreview.js +110 -0
  418. package/dist/views/metadata-admin/previews/ViewColumnPanes.d.ts +62 -0
  419. package/dist/views/metadata-admin/previews/ViewColumnPanes.js +140 -0
  420. package/dist/views/metadata-admin/previews/ViewPreview.d.ts +23 -1
  421. package/dist/views/metadata-admin/previews/ViewPreview.js +101 -73
  422. package/dist/views/metadata-admin/previews/block-config.d.ts +82 -0
  423. package/dist/views/metadata-admin/previews/block-config.js +324 -0
  424. package/dist/views/metadata-admin/previews/block-types.d.ts +40 -0
  425. package/dist/views/metadata-admin/previews/block-types.js +110 -0
  426. package/dist/views/metadata-admin/previews/field-types.d.ts +53 -0
  427. package/dist/views/metadata-admin/previews/field-types.js +97 -0
  428. package/dist/views/metadata-admin/previews/flow-canvas-layout.d.ts +102 -0
  429. package/dist/views/metadata-admin/previews/flow-canvas-layout.js +227 -0
  430. package/dist/views/metadata-admin/previews/flow-canvas-parts.d.ts +96 -0
  431. package/dist/views/metadata-admin/previews/flow-canvas-parts.js +373 -0
  432. package/dist/views/metadata-admin/previews/form-preview.d.ts +24 -0
  433. package/dist/views/metadata-admin/previews/form-preview.js +29 -0
  434. package/dist/views/metadata-admin/previews/index.js +43 -0
  435. package/dist/views/metadata-admin/previews/object-fields-bridge.d.ts +66 -0
  436. package/dist/views/metadata-admin/previews/object-fields-bridge.js +171 -0
  437. package/dist/views/metadata-admin/previews/object-fields-io.d.ts +130 -0
  438. package/dist/views/metadata-admin/previews/object-fields-io.js +243 -0
  439. package/dist/views/metadata-admin/previews/screen-spec.d.ts +43 -0
  440. package/dist/views/metadata-admin/previews/screen-spec.js +108 -0
  441. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.d.ts +102 -0
  442. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.js +2 -0
  443. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.d.ts +15 -0
  444. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.js +185 -0
  445. package/dist/views/metadata-admin/previews/simulator/flow-simulator.d.ts +73 -0
  446. package/dist/views/metadata-admin/previews/simulator/flow-simulator.js +426 -0
  447. package/dist/views/metadata-admin/previews/useDatasetCatalog.d.ts +47 -0
  448. package/dist/views/metadata-admin/previews/useDatasetCatalog.js +133 -0
  449. package/dist/views/metadata-admin/previews/useFlowNodePalette.d.ts +44 -0
  450. package/dist/views/metadata-admin/previews/useFlowNodePalette.js +124 -0
  451. package/dist/views/metadata-admin/previews/useMetaOptions.d.ts +8 -0
  452. package/dist/views/metadata-admin/previews/useMetaOptions.js +50 -0
  453. package/dist/views/metadata-admin/previews/useObjectFields.d.ts +23 -0
  454. package/dist/views/metadata-admin/previews/useObjectFields.js +79 -0
  455. package/dist/views/metadata-admin/previews/useObjectOptions.d.ts +8 -0
  456. package/dist/views/metadata-admin/previews/useObjectOptions.js +43 -0
  457. package/dist/views/metadata-admin/previews/view-column-io.d.ts +42 -0
  458. package/dist/views/metadata-admin/previews/view-column-io.js +73 -0
  459. package/dist/views/metadata-admin/previews/widget-types.d.ts +24 -0
  460. package/dist/views/metadata-admin/previews/widget-types.js +40 -0
  461. package/dist/views/metadata-admin/registry.d.ts +140 -19
  462. package/dist/views/metadata-admin/report-schema.d.ts +26 -0
  463. package/dist/views/metadata-admin/report-schema.js +121 -0
  464. package/dist/views/metadata-admin/useMetadata.d.ts +100 -2
  465. package/dist/views/metadata-admin/useMetadata.js +155 -4
  466. package/dist/views/metadata-admin/view-item-normalize.d.ts +20 -0
  467. package/dist/views/metadata-admin/view-item-normalize.js +68 -0
  468. package/dist/views/metadata-admin/view-schema.d.ts +16 -0
  469. package/dist/views/metadata-admin/view-schema.js +107 -0
  470. package/dist/views/metadata-admin/view-variant-model.d.ts +23 -0
  471. package/dist/views/metadata-admin/view-variant-model.js +64 -0
  472. package/dist/views/metadata-admin/widgets.d.ts +89 -1
  473. package/dist/views/metadata-admin/widgets.js +491 -17
  474. package/dist/views/runtime-metadata-persistence.d.ts +78 -0
  475. package/dist/views/runtime-metadata-persistence.js +89 -0
  476. package/dist/views/useOpenRecordList.d.ts +18 -0
  477. package/dist/views/useOpenRecordList.js +36 -0
  478. package/dist/views/userFilterUrlState.d.ts +15 -0
  479. package/dist/views/userFilterUrlState.js +53 -0
  480. package/dist/views/view-config-adapter.d.ts +38 -0
  481. package/dist/views/view-config-adapter.js +80 -0
  482. package/package.json +52 -34
  483. package/dist/views/DesignDrawer.d.ts +0 -28
  484. package/dist/views/DesignDrawer.js +0 -51
  485. package/dist/views/metadata-admin/DesignerEditorWrapper.d.ts +0 -68
  486. package/dist/views/metadata-admin/DesignerEditorWrapper.js +0 -158
@@ -0,0 +1,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;
@@ -0,0 +1,24 @@
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 function preferLocal(list, name, ownerPackageId) {
16
+ if (!list || name == null)
17
+ return undefined;
18
+ if (ownerPackageId) {
19
+ const local = list.find((x) => x.name === name && x._packageId === ownerPackageId);
20
+ if (local)
21
+ return local;
22
+ }
23
+ return list.find((x) => x.name === name);
24
+ }
@@ -18,5 +18,5 @@ interface ActionConfirmDialogProps {
18
18
  state: ConfirmDialogState;
19
19
  onOpenChange: (open: boolean) => void;
20
20
  }
21
- export declare function ActionConfirmDialog({ state, onOpenChange }: ActionConfirmDialogProps): import("react/jsx-runtime").JSX.Element;
21
+ export declare function ActionConfirmDialog({ state, onOpenChange }: ActionConfirmDialogProps): import("react").JSX.Element;
22
22
  export {};
@@ -6,7 +6,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
6
  * confirmation dialog. Renders only when state.open is true.
7
7
  */
8
8
  import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '@object-ui/components';
9
+ import { useObjectTranslation } from '@object-ui/i18n';
9
10
  export function ActionConfirmDialog({ state, onOpenChange }) {
11
+ const { t } = useObjectTranslation();
10
12
  const handleConfirm = () => {
11
13
  state.resolve?.(true);
12
14
  onOpenChange(false);
@@ -18,5 +20,5 @@ export function ActionConfirmDialog({ state, onOpenChange }) {
18
20
  return (_jsx(AlertDialog, { open: state.open, onOpenChange: (open) => {
19
21
  if (!open)
20
22
  handleCancel();
21
- }, children: _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: state.options?.title || 'Confirm Action' }), _jsx(AlertDialogDescription, { children: state.message })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { onClick: handleCancel, children: state.options?.cancelText || 'Cancel' }), _jsx(AlertDialogAction, { onClick: handleConfirm, children: state.options?.confirmText || 'Continue' })] })] }) }));
23
+ }, children: _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: state.options?.title || t('actionConfirm.title') }), _jsx(AlertDialogDescription, { children: state.message })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { onClick: handleCancel, children: state.options?.cancelText || t('actionConfirm.cancel') }), _jsx(AlertDialogAction, { onClick: handleConfirm, children: state.options?.confirmText || t('actionConfirm.confirm') })] })] }) }));
22
24
  }
@@ -13,11 +13,16 @@ import type { ActionParamDef } from '@object-ui/core';
13
13
  export interface ParamDialogState {
14
14
  open: boolean;
15
15
  params: ActionParamDef[];
16
+ /** Dialog title — defaults to the generic "Action parameters" label when
17
+ * absent. Callers pass the action's own label (e.g. "Create environment")
18
+ * so the dialog reads as the task, not a generic param prompt. */
19
+ title?: string;
20
+ description?: string;
16
21
  resolve?: (value: Record<string, any> | null) => void;
17
22
  }
18
23
  interface ActionParamDialogProps {
19
24
  state: ParamDialogState;
20
25
  onOpenChange: (open: boolean) => void;
21
26
  }
22
- export declare function ActionParamDialog({ state, onOpenChange }: ActionParamDialogProps): import("react/jsx-runtime").JSX.Element;
27
+ export declare function ActionParamDialog({ state, onOpenChange }: ActionParamDialogProps): import("react").JSX.Element;
23
28
  export {};
@@ -12,10 +12,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
12
  */
13
13
  import { useState, useEffect } from 'react';
14
14
  import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, Button, Input, Label, Textarea, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Checkbox, } from '@object-ui/components';
15
- import { useObjectTranslation } from '@object-ui/i18n';
15
+ import { useObjectTranslation, pickLocalized } from '@object-ui/i18n';
16
16
  import { LookupField } from '@object-ui/fields';
17
17
  export function ActionParamDialog({ state, onOpenChange }) {
18
- const { t } = useObjectTranslation();
18
+ const { t, language } = useObjectTranslation();
19
19
  const [values, setValues] = useState({});
20
20
  const [errors, setErrors] = useState({});
21
21
  // Reset values when params change
@@ -69,7 +69,13 @@ export function ActionParamDialog({ state, onOpenChange }) {
69
69
  return (_jsx(Dialog, { open: state.open, onOpenChange: (open) => {
70
70
  if (!open)
71
71
  handleCancel();
72
- }, children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: t('actionDialog.title') }), _jsx(DialogDescription, { children: t('actionDialog.description') })] }), _jsx("div", { className: "grid gap-4 py-4", children: state.params.map((param) => {
72
+ }, children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: state.title || t('actionDialog.title') }), _jsx(DialogDescription, { children: state.description || t('actionDialog.description') })] }), _jsx("div", { className: "grid gap-4 py-4", children: state.params.map((rawParam) => {
73
+ const param = {
74
+ ...rawParam,
75
+ label: pickLocalized(rawParam.label, language),
76
+ helpText: rawParam.helpText != null ? pickLocalized(rawParam.helpText, language) : rawParam.helpText,
77
+ options: rawParam.options?.map((o) => ({ ...o, label: pickLocalized(o.label, language) })),
78
+ };
73
79
  const isBooleanParam = param.type === 'boolean' || param.type === 'checkbox';
74
80
  // Boolean → render as inline checkbox row (label sits beside the
75
81
  // control instead of above it; help text appears underneath).
@@ -0,0 +1,13 @@
1
+ import type { ResultDialogSpec } from '@object-ui/core';
2
+ export interface ResultDialogState {
3
+ open: boolean;
4
+ spec?: ResultDialogSpec;
5
+ data?: unknown;
6
+ resolve?: () => void;
7
+ }
8
+ interface ActionResultDialogProps {
9
+ state: ResultDialogState;
10
+ onAcknowledge: () => void;
11
+ }
12
+ export declare function ActionResultDialog({ state, onAcknowledge }: ActionResultDialogProps): import("react").JSX.Element;
13
+ export {};
@@ -0,0 +1,134 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * ActionResultDialog — One-shot reveal of an action's API response.
4
+ *
5
+ * Rendered when an action completes successfully AND its spec declares a
6
+ * `resultDialog`. Used for values the user MUST copy now because the
7
+ * server will not surface them again: 2FA TOTP URI + backup codes,
8
+ * freshly minted OAuth client_secret, regenerated recovery codes.
9
+ *
10
+ * Contract (mirrors `Action.resultDialog` in @objectstack/spec):
11
+ * - `spec.fields[]` selects what to render. Each entry has a dot `path`
12
+ * into `data` and an optional `format` (qrcode/code-list/secret/
13
+ * text/json). When `fields` is omitted, the dialog renders the whole
14
+ * payload as JSON.
15
+ * - The dialog has NO close button — the user must click acknowledge.
16
+ * This is the whole point: a toast would let them dismiss the value
17
+ * before reading it.
18
+ * - The handler installed by ObjectView/RecordDetailView is
19
+ * promise-based, mirroring the ActionParamDialog pattern.
20
+ */
21
+ import { useEffect, useMemo, useState } from 'react';
22
+ import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, Button, } from '@object-ui/components';
23
+ import { useObjectTranslation } from '@object-ui/i18n';
24
+ import { Copy, Eye, EyeOff, Check } from 'lucide-react';
25
+ import { toCanvas } from 'qrcode';
26
+ function readPath(root, path) {
27
+ if (root == null)
28
+ return undefined;
29
+ return path.split('.').reduce((acc, key) => {
30
+ if (acc == null)
31
+ return undefined;
32
+ return acc[key];
33
+ }, root);
34
+ }
35
+ export function ActionResultDialog({ state, onAcknowledge }) {
36
+ const { t } = useObjectTranslation();
37
+ const { spec, data } = state;
38
+ // Synthesise a single-field render plan when the action did not declare
39
+ // explicit fields — keeps the dialog body uniform.
40
+ const fields = useMemo(() => {
41
+ if (spec?.fields && spec.fields.length > 0)
42
+ return spec.fields;
43
+ return [{ path: '', label: undefined, format: spec?.format ?? 'json' }];
44
+ }, [spec]);
45
+ return (_jsx(Dialog, { open: state.open,
46
+ // Block click-outside / Escape: the user must explicitly acknowledge.
47
+ onOpenChange: (open) => { if (open === false)
48
+ return; /* swallow */ }, children: _jsxs(DialogContent
49
+ // Block the X close button's intent too.
50
+ , {
51
+ // Block the X close button's intent too.
52
+ onPointerDownOutside: (e) => e.preventDefault(), onEscapeKeyDown: (e) => e.preventDefault(), className: "max-w-lg", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: spec?.title || t('actions.resultDialog.defaultTitle') || 'Save this value now' }), spec?.description ? (_jsx(DialogDescription, { children: spec.description })) : null] }), _jsx("div", { className: "space-y-4 py-2", children: fields.map((field, idx) => (_jsx(ResultField, { field: field, value: field.path === '' ? data : readPath(data, field.path), defaultFormat: spec?.format }, `${field.path}-${idx}`))) }), _jsx(DialogFooter, { children: _jsx(Button, { onClick: onAcknowledge, children: spec?.acknowledge || t('actions.resultDialog.acknowledge') || 'I have saved this' }) })] }) }));
53
+ }
54
+ function ResultField({ field, value, defaultFormat, }) {
55
+ const format = field.format ?? defaultFormat ?? 'json';
56
+ const label = field.label;
57
+ // Type-guard each renderer rather than crash if the server returned an
58
+ // unexpected shape (e.g. format=qrcode but value is undefined). We
59
+ // degrade gracefully to JSON so the user can still recover the value.
60
+ const safeFormat = (() => {
61
+ if (format === 'qrcode' && typeof value !== 'string')
62
+ return 'json';
63
+ if (format === 'code-list' && !Array.isArray(value))
64
+ return 'json';
65
+ if ((format === 'secret' || format === 'text') && typeof value !== 'string')
66
+ return 'json';
67
+ return format;
68
+ })();
69
+ return (_jsxs("div", { className: "space-y-1.5", children: [label ? (_jsx("div", { className: "text-sm font-medium text-foreground/80", children: label })) : null, safeFormat === 'qrcode' ? _jsx(QrcodeBlock, { value: value }) : null, safeFormat === 'code-list' ? _jsx(CodeListBlock, { value: value }) : null, safeFormat === 'secret' ? _jsx(SecretBlock, { value: value }) : null, safeFormat === 'text' ? _jsx(TextBlock, { value: value }) : null, safeFormat === 'json' ? _jsx(JsonBlock, { value: value }) : null] }));
70
+ }
71
+ function useCopy(value) {
72
+ const [copied, setCopied] = useState(false);
73
+ useEffect(() => {
74
+ if (!copied)
75
+ return;
76
+ const id = setTimeout(() => setCopied(false), 1500);
77
+ return () => clearTimeout(id);
78
+ }, [copied]);
79
+ const copy = async () => {
80
+ if (value == null)
81
+ return;
82
+ try {
83
+ await navigator.clipboard.writeText(value);
84
+ setCopied(true);
85
+ }
86
+ catch {
87
+ // ignore — typically denied permission. The plaintext is already
88
+ // visible in the dialog so the user can manually copy.
89
+ }
90
+ };
91
+ return { copy, copied };
92
+ }
93
+ function CopyButton({ value, label }) {
94
+ const { copy, copied } = useCopy(value);
95
+ return (_jsxs(Button, { type: "button", variant: "outline", size: "sm", onClick: copy, children: [copied ? _jsx(Check, { className: "w-4 h-4" }) : _jsx(Copy, { className: "w-4 h-4" }), label ? _jsx("span", { className: "ml-2", children: label }) : null] }));
96
+ }
97
+ function QrcodeBlock({ value }) {
98
+ // QR codes for 2FA carry the shared secret. Render entirely client-side
99
+ // (toCanvas writes into a local <canvas>) — never round-trip to a third
100
+ // party. Falls back to plaintext if rendering fails (e.g. value too long
101
+ // for QR encoding).
102
+ const [error, setError] = useState(null);
103
+ const canvasRef = (node) => {
104
+ if (!node || !value)
105
+ return;
106
+ toCanvas(node, value, { width: 200, margin: 1 }, (err) => {
107
+ if (err)
108
+ setError(err.message);
109
+ });
110
+ };
111
+ return (_jsxs("div", { className: "space-y-2", children: [_jsx("div", { className: "flex justify-center rounded-md border bg-white p-3", children: error ? (_jsx("span", { className: "text-sm text-destructive", children: error })) : (_jsx("canvas", { ref: canvasRef })) }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("code", { className: "flex-1 truncate rounded bg-muted px-2 py-1 text-xs font-mono", children: value }), _jsx(CopyButton, { value: value })] })] }));
112
+ }
113
+ function CodeListBlock({ value }) {
114
+ const joined = value.join('\n');
115
+ return (_jsxs("div", { className: "space-y-2", children: [_jsx("div", { className: "rounded-md border bg-muted/40 p-2", children: _jsx("ul", { className: "space-y-1", children: value.map((code, i) => (_jsxs("li", { className: "flex items-center gap-2", children: [_jsx("code", { className: "flex-1 rounded bg-background px-2 py-1 text-sm font-mono", children: code }), _jsx(CopyButton, { value: code })] }, `${i}-${code}`))) }) }), _jsx("div", { className: "flex justify-end", children: _jsx(CopyButton, { value: joined, label: "Copy all" }) })] }));
116
+ }
117
+ function SecretBlock({ value }) {
118
+ const [revealed, setRevealed] = useState(false);
119
+ return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("code", { className: "flex-1 rounded bg-muted px-2 py-1 text-sm font-mono break-all", children: revealed ? value : value.replace(/./g, '•') }), _jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: () => setRevealed((v) => !v), children: revealed ? _jsx(EyeOff, { className: "w-4 h-4" }) : _jsx(Eye, { className: "w-4 h-4" }) }), _jsx(CopyButton, { value: value })] }));
120
+ }
121
+ function TextBlock({ value }) {
122
+ return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("code", { className: "flex-1 rounded bg-muted px-2 py-1 text-sm font-mono break-all", children: value }), _jsx(CopyButton, { value: value })] }));
123
+ }
124
+ function JsonBlock({ value }) {
125
+ const text = useMemo(() => {
126
+ try {
127
+ return JSON.stringify(value, null, 2);
128
+ }
129
+ catch {
130
+ return String(value);
131
+ }
132
+ }, [value]);
133
+ return (_jsxs("div", { className: "space-y-2", children: [_jsx("pre", { className: "max-h-80 overflow-auto rounded-md border bg-muted/40 p-3 text-xs font-mono", children: text }), _jsx("div", { className: "flex justify-end", children: _jsx(CopyButton, { value: text }) })] }));
134
+ }
@@ -1,6 +1,19 @@
1
+ /**
2
+ * ComponentNavView — route target for `<Route path="component/:ns/:name/*">`.
3
+ *
4
+ * Phase 3b: resolves the colon-joined registry key (e.g. `metadata:resource`)
5
+ * from `:ns/:name` URL segments, looks it up in the ComponentRegistry,
6
+ * and renders the matching component. Props are the union of the URL
7
+ * query string and any extra props passed by the parent route element.
8
+ *
9
+ * If no component is registered for the ref, we render a structured empty
10
+ * state that tells the operator which plugin is likely missing — much
11
+ * better than a blank screen or a thrown error.
12
+ */
13
+ import React from 'react';
1
14
  export interface ComponentNavViewProps {
2
15
  /** Extra props injected by the parent route element (typically empty). */
3
16
  extraProps?: Record<string, unknown>;
4
17
  }
5
- export declare function ComponentNavView({ extraProps }?: ComponentNavViewProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare function ComponentNavView({ extraProps }?: ComponentNavViewProps): React.JSX.Element;
6
19
  export default ComponentNavView;
@@ -41,4 +41,4 @@ export interface CreateViewDialogProps {
41
41
  [key: string]: any;
42
42
  };
43
43
  }
44
- export declare function CreateViewDialog({ open, onOpenChange, onCreate, existingLabels, availableTypes, objectDef, }: CreateViewDialogProps): import("react/jsx-runtime").JSX.Element;
44
+ export declare function CreateViewDialog({ open, onOpenChange, onCreate, existingLabels, availableTypes, objectDef, }: CreateViewDialogProps): import("react").JSX.Element;
@@ -0,0 +1,28 @@
1
+ export interface DashboardConfigPanelProps<T extends Record<string, any> = Record<string, any>> {
2
+ /** Whether the panel is open. */
3
+ open: boolean;
4
+ /** Close callback. */
5
+ onClose: () => void;
6
+ /** The current dashboard definition (full nested spec Dashboard document). */
7
+ schema: T | null;
8
+ /** The id of the widget selected on the canvas, or null for dashboard level. */
9
+ selectedWidgetId: string | null;
10
+ /** Switch the selected widget (null returns to the dashboard-level panel). */
11
+ onSelectWidget: (id: string | null) => void;
12
+ /** Persist the current schema. */
13
+ onSave: (schema: T) => void;
14
+ /** Called on every edit so the host can drive a live preview / autosave. */
15
+ onChange: (schema: T) => void;
16
+ /** Remove the given widget (used by the widget-level header trash button). */
17
+ onRemoveWidget?: (id: string) => void;
18
+ /** Dashboard artifact name — the `:name` for the draft/publish chrome. */
19
+ name?: string;
20
+ /**
21
+ * Studio metadata client — drives the ADR-0034 draft/publish chrome
22
+ * ({@link RuntimeDraftBar}).
23
+ */
24
+ metadataClient?: any;
25
+ /** Called after a publish / discard so the host can refresh its read. */
26
+ onAfterChange?: () => void;
27
+ }
28
+ export declare function DashboardConfigPanel<T extends Record<string, any> = Record<string, any>>({ open, onClose, schema, selectedWidgetId, onSelectWidget, onSave, onChange, onRemoveWidget, name: artifactName, metadataClient, onAfterChange, }: DashboardConfigPanelProps<T>): import("react").JSX.Element | null;