@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
@@ -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;
@@ -0,0 +1,81 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
3
+ /**
4
+ * DashboardConfigPanel — the runtime DashboardView's right-rail
5
+ * "dashboard editor".
6
+ *
7
+ * MIGRATED: this single panel replaces BOTH legacy `plugin-dashboard`
8
+ * panels (the dashboard-level `DashboardConfigPanel` and the per-widget
9
+ * `WidgetConfigPanel`). Instead of the `buildWidgetSchema` /
10
+ * `ConfigPanelRenderer` engine it hosts the studio's spec-driven
11
+ * inspectors so the runtime and the metadata studio share ONE
12
+ * dashboard-editing surface:
13
+ *
14
+ * - no widget selected → {@link DashboardDefaultInspector} (dashboard level)
15
+ * - widget selected → {@link DashboardWidgetInspector} (widget level)
16
+ *
17
+ * It lives in `app-shell` (next to the studio inspectors) rather than in
18
+ * `plugin-dashboard`: `app-shell` depends on `plugin-dashboard`, so hosting
19
+ * the inspectors here avoids the circular import a plugin-side panel would
20
+ * need.
21
+ *
22
+ * Unlike the legacy panel, this component is CONTROLLED: it holds no draft
23
+ * state of its own. Both inspectors edit the FULL nested dashboard `schema`
24
+ * (`{...,widgets:[{id,...}]}`) directly — the dashboard-level inspector via a
25
+ * shallow top-level `onPatch`, the widget inspector by addressing
26
+ * `schema.widgets` by `w.id`. Because the inspectors work on the spec-shaped
27
+ * draft, the runtime's old flatten / unflatten / extract adapters are gone.
28
+ */
29
+ import { useCallback, useMemo, useState } from 'react';
30
+ import { Button } from '@object-ui/components';
31
+ import { useObjectTranslation } from '@object-ui/i18n';
32
+ import { ArrowLeft, Trash2, X } from 'lucide-react';
33
+ import { DashboardDefaultInspector } from './metadata-admin/inspectors/DashboardDefaultInspector';
34
+ import { DashboardWidgetInspector } from './metadata-admin/inspectors/DashboardWidgetInspector';
35
+ import { RuntimeDraftBar } from './RuntimeDraftBar';
36
+ import { detectLocale } from './metadata-admin/i18n';
37
+ export function DashboardConfigPanel({ open, onClose, schema, selectedWidgetId, onSelectWidget, onSave, onChange, onRemoveWidget, name: artifactName, metadataClient, onAfterChange, }) {
38
+ const { t } = useObjectTranslation();
39
+ const locale = useMemo(() => detectLocale(), []);
40
+ // Unsaved-edits flag — gates Publish (mirrors studio's "save first"). The
41
+ // panel unmounts on close, so this resets to false on each open.
42
+ const [dirty, setDirty] = useState(false);
43
+ // Bumped on save so the draft chrome surfaces the indicator immediately.
44
+ const [savedSignal, setSavedSignal] = useState(0);
45
+ // Controlled: merge an inspector patch into the current schema and bubble it
46
+ // back up. No local draft state — `schema` is the single source of truth.
47
+ const handlePatch = useCallback((patch) => {
48
+ setDirty(true);
49
+ onChange({ ...(schema ?? {}), ...patch });
50
+ }, [schema, onChange]);
51
+ // ADR-0034 (#1515): resume a pending draft into the editor on open
52
+ // (flag-ON only). The dashboard document IS the controlled schema, so push
53
+ // it up as a live edit (preview only — no save) and treat it as the clean
54
+ // baseline.
55
+ const handleResumeDraft = useCallback((body) => {
56
+ onChange(body);
57
+ setDirty(false);
58
+ }, [onChange]);
59
+ const handleSelectionChange = useCallback((sel) => {
60
+ onSelectWidget(sel && sel.kind === 'widget' ? sel.id : null);
61
+ }, [onSelectWidget]);
62
+ const widgets = Array.isArray(schema?.widgets) ? schema.widgets : [];
63
+ const selectedWidget = selectedWidgetId
64
+ ? widgets.find((w) => w?.id === selectedWidgetId)
65
+ : null;
66
+ if (!open)
67
+ return null;
68
+ const name = typeof schema?.name === 'string' ? schema.name : '';
69
+ const title = selectedWidget
70
+ ? t('widget.editor.title', { defaultValue: 'Edit widget' })
71
+ : t('dashboard.editor.title', { defaultValue: 'Edit dashboard' });
72
+ return (_jsxs("aside", { className: "hidden sm:flex w-[440px] shrink-0 flex-col border-l bg-background h-full", "data-testid": "dashboard-config-panel", role: "complementary", "aria-label": title, children: [_jsxs("div", { className: "flex items-center justify-between gap-2 border-b px-4 py-2.5 shrink-0", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-1.5", children: [selectedWidget && (_jsx(Button, { variant: "ghost", size: "sm", onClick: () => onSelectWidget(null), className: "h-7 w-7 p-0", "aria-label": t('dashboard.editor.backToDashboard', {
73
+ defaultValue: 'Back to dashboard',
74
+ }), title: t('dashboard.editor.backToDashboard', {
75
+ defaultValue: 'Back to dashboard',
76
+ }), "data-testid": "dashboard-config-back", children: _jsx(ArrowLeft, { className: "h-4 w-4" }) })), _jsx("div", { className: "text-sm font-medium truncate", children: title })] }), _jsxs("div", { className: "flex items-center gap-1 shrink-0", children: [selectedWidget && onRemoveWidget && (_jsx(Button, { variant: "ghost", size: "sm", onClick: () => onRemoveWidget(selectedWidgetId), className: "h-7 w-7 p-0 text-destructive hover:text-destructive", "aria-label": t('widget.editor.delete', { defaultValue: 'Delete widget' }), title: t('widget.editor.delete', { defaultValue: 'Delete widget' }), "data-testid": "widget-delete-button", children: _jsx(Trash2, { className: "h-3.5 w-3.5" }) })), _jsx(Button, { variant: "ghost", size: "sm", onClick: onClose, className: "h-7 w-7 p-0", "aria-label": t('common.close', { defaultValue: 'Close' }), "data-testid": "dashboard-config-close", children: _jsx(X, { className: "h-4 w-4" }) })] })] }), _jsx("div", { className: "min-h-0 flex-1 overflow-auto p-4", children: selectedWidget ? (_jsx(DashboardWidgetInspector, { type: "dashboard", name: name, draft: schema ?? {}, selection: { kind: 'widget', id: selectedWidgetId }, onPatch: handlePatch, onClearSelection: () => onSelectWidget(null), onSelectionChange: handleSelectionChange, readOnly: false, locale: locale })) : (_jsx(DashboardDefaultInspector, { type: "dashboard", name: name, draft: schema ?? {}, onPatch: handlePatch, onSelectionChange: handleSelectionChange, readOnly: false, locale: locale })) }), _jsxs("div", { "data-testid": "dashboard-config-footer", className: "flex items-center justify-end gap-2 border-t px-4 py-2.5 shrink-0", children: [_jsx(RuntimeDraftBar, { type: "dashboard", name: artifactName || name || undefined, metadataClient: metadataClient, dirty: dirty, onResume: handleResumeDraft, savedSignal: savedSignal, onAfterChange: onAfterChange }), _jsx(Button, { size: "sm", onClick: () => {
77
+ onSave((schema ?? {}));
78
+ setDirty(false);
79
+ setSavedSignal((s) => s + 1);
80
+ }, "data-testid": "dashboard-config-save", children: t('common.save', { defaultValue: 'Save' }) })] })] }));
81
+ }
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * Dashboard View Component
3
3
  * Renders a dashboard based on the dashboardName parameter.
4
- * Edit mode shows an inline config panel (DashboardConfigPanel / WidgetConfigPanel)
5
- * on the right side, following the same pattern as ListView.
4
+ * Edit mode shows a single inline config panel (DashboardConfigPanel) on the
5
+ * right side that hosts the studio's dashboard / widget inspectors, following
6
+ * the same pattern as ReportView.
6
7
  */
7
8
  export declare function DashboardView({ dataSource }: {
8
9
  dataSource?: any;
9
- }): import("react/jsx-runtime").JSX.Element;
10
+ }): import("react").JSX.Element;