@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,196 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * ObjectUI
4
+ * Copyright (c) 2024-present ObjectStack Inc.
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ */
9
+ /**
10
+ * JsonSourceEditor — Monaco-backed JSON editor for the metadata
11
+ * designer's "Source" tab. Replaces the old textarea so power users
12
+ * get syntax highlighting, bracket matching, folding, and inline
13
+ * error squigglies driven by the server-side `_diagnostics` payload.
14
+ *
15
+ * Markers: `issues[]` use dotted (or array) JSON paths matching the
16
+ * Zod issue shape. We resolve each path to a Monaco range with
17
+ * `jsonc-parser` so the squiggle lands on the offending value (or
18
+ * the property key when the value is absent). Unresolved paths fall
19
+ * back to a marker on line 1, so nothing is silently lost.
20
+ */
21
+ import React from 'react';
22
+ import { Skeleton } from '@object-ui/components';
23
+ import * as jsonc from 'jsonc-parser';
24
+ import { detectLocale, t } from './i18n';
25
+ // Lazy: Monaco's React wrapper itself pulls in the editor core
26
+ // (~3MB), so we keep it out of the initial app-shell chunk.
27
+ const LazyMonaco = React.lazy(async () => {
28
+ const mod = await import('@monaco-editor/react');
29
+ return { default: mod.default };
30
+ });
31
+ function stringify(v) {
32
+ try {
33
+ return JSON.stringify(v ?? {}, null, 2);
34
+ }
35
+ catch {
36
+ return '{}';
37
+ }
38
+ }
39
+ /** Parse a dotted JSON path like `fields.owner.0.type` to segments. */
40
+ function splitPath(p) {
41
+ if (!p)
42
+ return [];
43
+ return p.split('.').map((seg) => {
44
+ const n = Number(seg);
45
+ return Number.isInteger(n) && String(n) === seg ? n : seg;
46
+ });
47
+ }
48
+ export function JsonSourceEditor({ value, onChange, readOnly, issues, height = '60vh', fallbackDelayMs = 4000, }) {
49
+ const locale = React.useMemo(() => detectLocale(), []);
50
+ const [text, setText] = React.useState(() => stringify(value));
51
+ const [parseError, setParseError] = React.useState(null);
52
+ const lastCommittedRef = React.useRef(text);
53
+ // Hold onto Monaco's editor + namespace so we can repaint markers
54
+ // when either the source text or the issues prop changes.
55
+ const editorRef = React.useRef(null);
56
+ const monacoRef = React.useRef(null);
57
+ // Monaco's core is fetched lazily and, by default, from a public CDN, and it
58
+ // also spins up web workers. When any of that is blocked — offline /
59
+ // air-gapped / CSP-restricted installs — the editor mounts an empty shell
60
+ // with no error and the Source tab looks blank. Detect "nothing actually
61
+ // painted" via the rendered `.view-line` rows and fall back to a plain
62
+ // textarea so the source is always readable and editable.
63
+ const containerRef = React.useRef(null);
64
+ const [monacoUnavailable, setMonacoUnavailable] = React.useState(false);
65
+ React.useEffect(() => {
66
+ if (monacoUnavailable)
67
+ return;
68
+ const id = setTimeout(() => {
69
+ const el = containerRef.current;
70
+ if (!el || !el.querySelector('.view-line'))
71
+ setMonacoUnavailable(true);
72
+ }, fallbackDelayMs);
73
+ return () => clearTimeout(id);
74
+ }, [monacoUnavailable, fallbackDelayMs]);
75
+ // Match against the dark class our app-shell toggles on <html>; pick
76
+ // a Monaco theme that doesn't fight the rest of the chrome.
77
+ const [theme, setTheme] = React.useState(() => {
78
+ if (typeof document === 'undefined')
79
+ return 'light';
80
+ return document.documentElement.classList.contains('dark') ? 'vs-dark' : 'light';
81
+ });
82
+ React.useEffect(() => {
83
+ if (typeof document === 'undefined')
84
+ return;
85
+ const root = document.documentElement;
86
+ const update = () => setTheme(root.classList.contains('dark') ? 'vs-dark' : 'light');
87
+ const obs = new MutationObserver(update);
88
+ obs.observe(root, { attributes: true, attributeFilter: ['class'] });
89
+ return () => obs.disconnect();
90
+ }, []);
91
+ // Push markers from `issues` onto Monaco's model. We rebuild on
92
+ // every relevant change rather than diffing — sweeping `setModelMarkers`
93
+ // is cheap and avoids stale squigglies when issues drop off.
94
+ const applyMarkers = React.useCallback(() => {
95
+ const editor = editorRef.current;
96
+ const monaco = monacoRef.current;
97
+ if (!editor || !monaco)
98
+ return;
99
+ const model = editor.getModel();
100
+ if (!model)
101
+ return;
102
+ if (!issues || issues.length === 0) {
103
+ monaco.editor.setModelMarkers(model, 'objectui-diagnostics', []);
104
+ return;
105
+ }
106
+ let tree;
107
+ try {
108
+ tree = jsonc.parseTree(text);
109
+ }
110
+ catch {
111
+ tree = undefined;
112
+ }
113
+ const markers = issues.map((iss) => {
114
+ const segs = splitPath(iss.path);
115
+ let startLine = 1;
116
+ let startCol = 1;
117
+ let endLine = 1;
118
+ let endCol = 2;
119
+ const node = tree ? jsonc.findNodeAtLocation(tree, segs) : undefined;
120
+ if (node) {
121
+ const start = model.getPositionAt(node.offset);
122
+ const end = model.getPositionAt(node.offset + node.length);
123
+ startLine = start.lineNumber;
124
+ startCol = start.column;
125
+ endLine = end.lineNumber;
126
+ endCol = end.column;
127
+ }
128
+ const sev = iss.severity === 'warning'
129
+ ? monaco.MarkerSeverity.Warning
130
+ : monaco.MarkerSeverity.Error;
131
+ return {
132
+ severity: sev,
133
+ message: iss.path ? `${iss.path}: ${iss.message}` : iss.message,
134
+ startLineNumber: startLine,
135
+ startColumn: startCol,
136
+ endLineNumber: endLine,
137
+ endColumn: endCol,
138
+ source: 'metadata',
139
+ };
140
+ });
141
+ monaco.editor.setModelMarkers(model, 'objectui-diagnostics', markers);
142
+ }, [issues, text]);
143
+ React.useEffect(() => {
144
+ applyMarkers();
145
+ }, [applyMarkers]);
146
+ // Resync the buffer when the parent draft changes externally (Save,
147
+ // Reset, inspector-driven patches). Only sync when the upstream
148
+ // value differs from what we last committed so user keystrokes
149
+ // aren't clobbered while typing.
150
+ React.useEffect(() => {
151
+ const next = stringify(value);
152
+ if (next !== lastCommittedRef.current) {
153
+ setText(next);
154
+ lastCommittedRef.current = next;
155
+ setParseError(null);
156
+ }
157
+ }, [value]);
158
+ const handleChange = (next) => {
159
+ const v = next ?? '';
160
+ setText(v);
161
+ try {
162
+ const parsed = JSON.parse(v);
163
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
164
+ setParseError(null);
165
+ lastCommittedRef.current = v;
166
+ onChange(parsed);
167
+ }
168
+ else {
169
+ setParseError(t('engine.form.rootJsonObject', locale));
170
+ }
171
+ }
172
+ catch (err) {
173
+ setParseError(err?.message ?? t('engine.form.invalidJson', locale));
174
+ }
175
+ };
176
+ const handleMount = (editor, monaco) => {
177
+ editorRef.current = editor;
178
+ monacoRef.current = monaco;
179
+ // Defer one tick so the model has settled before the first paint.
180
+ setTimeout(applyMarkers, 0);
181
+ };
182
+ return (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx("div", { ref: containerRef, "data-testid": "source-editor", className: "border rounded overflow-hidden bg-background", style: { height: typeof height === 'number' ? `${height}px` : height }, children: monacoUnavailable ? (_jsx("textarea", { value: text, onChange: (e) => handleChange(e.target.value), readOnly: readOnly, spellCheck: false, "aria-label": "JSON source", className: "w-full h-full resize-none bg-background p-3 font-mono text-xs leading-relaxed outline-none" })) : (_jsx(React.Suspense, { fallback: _jsx(Skeleton, { className: "w-full h-full" }), children: _jsx(LazyMonaco, { value: text, language: "json", theme: theme, onChange: handleChange, onMount: handleMount, options: {
183
+ readOnly,
184
+ minimap: { enabled: false },
185
+ fontSize: 12,
186
+ lineNumbers: 'on',
187
+ scrollBeyondLastLine: false,
188
+ automaticLayout: true,
189
+ folding: true,
190
+ wordWrap: 'on',
191
+ tabSize: 2,
192
+ renderLineHighlight: 'line',
193
+ scrollbar: { verticalScrollbarSize: 10, horizontalScrollbarSize: 10 },
194
+ } }) })) }), parseError && (_jsxs("div", { className: "text-xs text-destructive flex items-start gap-1.5", children: [_jsx("span", { "aria-hidden": true, children: "\u26A0" }), _jsx("span", { children: parseError })] }))] }));
195
+ }
196
+ export default JsonSourceEditor;
@@ -1,6 +1,44 @@
1
+ /**
2
+ * LayeredDiff — visualizes how the runtime resolves a two-tier metadata item.
3
+ *
4
+ * Tabs:
5
+ * • Diff (default) — field-level table comparing Code (artifact) vs
6
+ * Effective (merged). Highlights modified / added / removed top-level
7
+ * fields with color coding so admins can see at a glance what their
8
+ * overlay actually changes.
9
+ * • Code — pretty-printed JSON of the artifact baseline.
10
+ * • Overlay — pretty-printed JSON of just the deltas they've saved.
11
+ * • Effective — the merged value the runtime serves.
12
+ *
13
+ * Backed by `client.layered(type, name)` (Phase 3a `?layers=true`).
14
+ *
15
+ * Diff scope: top-level keys only. Nested objects/arrays are compared by
16
+ * JSON-stringify equality. Drilling into nested diffs is a future
17
+ * enhancement; the overlay deltas we ship in practice are flat.
18
+ */
19
+ import * as React from 'react';
1
20
  import type { MetadataLayered } from '@object-ui/data-objectstack';
21
+ import { type SupportedLocale } from './i18n';
2
22
  export interface LayeredDiffProps {
3
23
  layered: MetadataLayered<Record<string, unknown>> | null;
4
24
  loading?: boolean;
25
+ locale?: SupportedLocale | string;
5
26
  }
6
- export declare function LayeredDiff({ layered, loading }: LayeredDiffProps): import("react/jsx-runtime").JSX.Element;
27
+ export type DiffStatus = 'unchanged' | 'modified' | 'added' | 'removed';
28
+ export interface DiffRow {
29
+ key: string;
30
+ status: DiffStatus;
31
+ codeValue: unknown;
32
+ effectiveValue: unknown;
33
+ }
34
+ export declare function computeDiffRows(code: unknown, effective: unknown): DiffRow[];
35
+ /**
36
+ * Count of top-level fields where the overlay actually changes the
37
+ * effective value vs the artifact baseline. Used by the editor's
38
+ * Layers tab trigger to show e.g. "3 overlaid" next to the label.
39
+ *
40
+ * Returns 0 when there is no baseline (pure-runtime item) or the two
41
+ * payloads are identical.
42
+ */
43
+ export declare function countOverlaidFields(code: unknown, effective: unknown): number;
44
+ export declare function LayeredDiff({ layered, loading, locale }: LayeredDiffProps): React.JSX.Element;
@@ -1,15 +1,181 @@
1
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
+ * LayeredDiff — visualizes how the runtime resolves a two-tier metadata item.
5
+ *
6
+ * Tabs:
7
+ * • Diff (default) — field-level table comparing Code (artifact) vs
8
+ * Effective (merged). Highlights modified / added / removed top-level
9
+ * fields with color coding so admins can see at a glance what their
10
+ * overlay actually changes.
11
+ * • Code — pretty-printed JSON of the artifact baseline.
12
+ * • Overlay — pretty-printed JSON of just the deltas they've saved.
13
+ * • Effective — the merged value the runtime serves.
14
+ *
15
+ * Backed by `client.layered(type, name)` (Phase 3a `?layers=true`).
16
+ *
17
+ * Diff scope: top-level keys only. Nested objects/arrays are compared by
18
+ * JSON-stringify equality. Drilling into nested diffs is a future
19
+ * enhancement; the overlay deltas we ship in practice are flat.
20
+ */
21
+ import * as React from 'react';
2
22
  import { Tabs, TabsContent, TabsList, TabsTrigger, } from '@object-ui/components';
3
- import { Badge } from '@object-ui/components';
4
- export function LayeredDiff({ layered, loading }) {
23
+ import { Badge, Switch } from '@object-ui/components';
24
+ import { cn } from '@object-ui/components';
25
+ import { t, tFormat } from './i18n';
26
+ const STATUS_STYLE = {
27
+ unchanged: {
28
+ badge: 'bg-muted text-muted-foreground border border-border',
29
+ row: '',
30
+ },
31
+ modified: {
32
+ badge: 'bg-amber-100 text-amber-900 border border-amber-300 dark:bg-amber-950/60 dark:text-amber-200 dark:border-amber-800',
33
+ row: 'bg-amber-50/50 dark:bg-amber-950/20',
34
+ },
35
+ added: {
36
+ badge: 'bg-emerald-100 text-emerald-900 border border-emerald-300 dark:bg-emerald-950/60 dark:text-emerald-200 dark:border-emerald-800',
37
+ row: 'bg-emerald-50/50 dark:bg-emerald-950/20',
38
+ },
39
+ removed: {
40
+ badge: 'bg-rose-100 text-rose-900 border border-rose-300 dark:bg-rose-950/60 dark:text-rose-200 dark:border-rose-800',
41
+ row: 'bg-rose-50/50 dark:bg-rose-950/20',
42
+ },
43
+ };
44
+ export function computeDiffRows(code, effective) {
45
+ const codeObj = isPlainObject(code) ? code : {};
46
+ const effObj = isPlainObject(effective) ? effective : {};
47
+ const allKeys = new Set([
48
+ ...Object.keys(codeObj),
49
+ ...Object.keys(effObj),
50
+ ]);
51
+ const rows = [];
52
+ for (const key of allKeys) {
53
+ const inCode = key in codeObj;
54
+ const inEff = key in effObj;
55
+ const codeValue = codeObj[key];
56
+ const effectiveValue = effObj[key];
57
+ let status;
58
+ if (inCode && !inEff) {
59
+ status = 'removed';
60
+ }
61
+ else if (!inCode && inEff) {
62
+ status = 'added';
63
+ }
64
+ else if (stableStringify(codeValue) !== stableStringify(effectiveValue)) {
65
+ status = 'modified';
66
+ }
67
+ else {
68
+ status = 'unchanged';
69
+ }
70
+ rows.push({ key, status, codeValue, effectiveValue });
71
+ }
72
+ // Sort: changed first (modified, added, removed), then unchanged; alpha within each.
73
+ const order = {
74
+ modified: 0,
75
+ added: 1,
76
+ removed: 2,
77
+ unchanged: 3,
78
+ };
79
+ rows.sort((a, b) => {
80
+ if (order[a.status] !== order[b.status])
81
+ return order[a.status] - order[b.status];
82
+ return a.key.localeCompare(b.key);
83
+ });
84
+ return rows;
85
+ }
86
+ function isPlainObject(v) {
87
+ return typeof v === 'object' && v !== null && !Array.isArray(v);
88
+ }
89
+ function stableStringify(v) {
90
+ try {
91
+ return JSON.stringify(v, (_k, val) => {
92
+ if (isPlainObject(val)) {
93
+ return Object.keys(val).sort().reduce((acc, k) => {
94
+ acc[k] = val[k];
95
+ return acc;
96
+ }, {});
97
+ }
98
+ return val;
99
+ });
100
+ }
101
+ catch {
102
+ return String(v);
103
+ }
104
+ }
105
+ function formatCell(v) {
106
+ if (v === undefined)
107
+ return '—';
108
+ if (v === null)
109
+ return 'null';
110
+ if (typeof v === 'string')
111
+ return v;
112
+ if (typeof v === 'number' || typeof v === 'boolean')
113
+ return String(v);
114
+ try {
115
+ return JSON.stringify(v);
116
+ }
117
+ catch {
118
+ return String(v);
119
+ }
120
+ }
121
+ /**
122
+ * Count of top-level fields where the overlay actually changes the
123
+ * effective value vs the artifact baseline. Used by the editor's
124
+ * Layers tab trigger to show e.g. "3 overlaid" next to the label.
125
+ *
126
+ * Returns 0 when there is no baseline (pure-runtime item) or the two
127
+ * payloads are identical.
128
+ */
129
+ export function countOverlaidFields(code, effective) {
130
+ if (code == null)
131
+ return 0;
132
+ let n = 0;
133
+ for (const row of computeDiffRows(code, effective)) {
134
+ if (row.status !== 'unchanged')
135
+ n += 1;
136
+ }
137
+ return n;
138
+ }
139
+ export function LayeredDiff({ layered, loading, locale }) {
5
140
  if (loading) {
6
- return (_jsx("div", { className: "p-4 text-sm text-muted-foreground", children: "Loading layers\u2026" }));
141
+ return (_jsx("div", { className: "p-4 text-sm text-muted-foreground", children: t('engine.edit.loading', locale) }));
7
142
  }
8
143
  if (!layered) {
9
- return (_jsx("div", { className: "p-4 text-sm text-muted-foreground", children: "Layered view unavailable for this item." }));
144
+ return (_jsx("div", { className: "p-4 text-sm text-muted-foreground", children: t('engine.layers.diff.noBaseline', locale) }));
10
145
  }
11
146
  const hasOverlay = layered.overlay != null;
12
- return (_jsxs(Tabs, { defaultValue: "effective", className: "w-full", children: [_jsxs(TabsList, { className: "grid grid-cols-3 w-fit", children: [_jsxs(TabsTrigger, { value: "code", children: ["Code", _jsx(Badge, { variant: "outline", className: "ml-1.5 text-[10px]", children: "artifact" })] }), _jsxs(TabsTrigger, { value: "overlay", children: ["Overlay", hasOverlay ? (_jsx(Badge, { className: "ml-1.5 text-[10px] bg-emerald-600 text-emerald-50", children: layered.overlayScope ?? 'set' })) : (_jsx(Badge, { variant: "outline", className: "ml-1.5 text-[10px] text-muted-foreground", children: "none" }))] }), _jsxs(TabsTrigger, { value: "effective", children: ["Effective", _jsx(Badge, { variant: "outline", className: "ml-1.5 text-[10px]", children: "merged" })] })] }), _jsx(TabsContent, { value: "code", className: "mt-3", children: _jsx(LayerPanel, { payload: layered.code, emptyHint: "No code-level artifact for this item. It may have been created at runtime as a pure overlay." }) }), _jsx(TabsContent, { value: "overlay", className: "mt-3", children: _jsx(LayerPanel, { payload: layered.overlay, emptyHint: "No overlay set. The runtime is using the code-level value as-is." }) }), _jsx(TabsContent, { value: "effective", className: "mt-3", children: _jsx(LayerPanel, { payload: layered.effective, emptyHint: "No effective value resolved." }) })] }));
147
+ return (_jsxs(Tabs, { defaultValue: "diff", className: "w-full", children: [_jsxs(TabsList, { className: "grid grid-cols-4 w-fit", children: [_jsx(TabsTrigger, { value: "diff", children: t('engine.layers.diff', locale) }), _jsxs(TabsTrigger, { value: "code", children: [t('engine.layers.code', locale), _jsx(Badge, { variant: "outline", className: "ml-1.5 text-[10px]", children: "artifact" })] }), _jsxs(TabsTrigger, { value: "overlay", children: [t('engine.layers.overlay', locale), hasOverlay ? (_jsx(Badge, { className: "ml-1.5 text-[10px] bg-emerald-600 text-emerald-50", children: layered.overlayScope ?? 'set' })) : (_jsx(Badge, { variant: "outline", className: "ml-1.5 text-[10px] text-muted-foreground", children: "none" }))] }), _jsxs(TabsTrigger, { value: "effective", children: [t('engine.layers.effective', locale), _jsx(Badge, { variant: "outline", className: "ml-1.5 text-[10px]", children: "merged" })] })] }), _jsx(TabsContent, { value: "diff", className: "mt-3", children: _jsx(DiffTable, { code: layered.code, effective: layered.effective, locale: locale }) }), _jsx(TabsContent, { value: "code", className: "mt-3", children: _jsx(LayerPanel, { payload: layered.code, emptyHint: t('engine.layers.diff.noBaseline', locale) }) }), _jsx(TabsContent, { value: "overlay", className: "mt-3", children: _jsx(LayerPanel, { payload: layered.overlay, emptyHint: t('engine.layers.diff.noChanges', locale) }) }), _jsx(TabsContent, { value: "effective", className: "mt-3", children: _jsx(LayerPanel, { payload: layered.effective, emptyHint: "No effective value resolved." }) })] }));
148
+ }
149
+ function DiffTable({ code, effective, locale, }) {
150
+ const [showUnchanged, setShowUnchanged] = React.useState(false);
151
+ // No baseline = pure runtime overlay; the diff table has nothing to compare.
152
+ if (code == null) {
153
+ return (_jsx("div", { className: "rounded border bg-muted/30 p-4 text-xs text-muted-foreground", children: t('engine.layers.diff.noBaseline', locale) }));
154
+ }
155
+ const rows = React.useMemo(() => computeDiffRows(code, effective), [code, effective]);
156
+ const counts = React.useMemo(() => {
157
+ return rows.reduce((acc, r) => {
158
+ acc[r.status] += 1;
159
+ return acc;
160
+ }, { unchanged: 0, modified: 0, added: 0, removed: 0 });
161
+ }, [rows]);
162
+ const visibleRows = showUnchanged
163
+ ? rows
164
+ : rows.filter((r) => r.status !== 'unchanged');
165
+ const hasAnyChange = counts.modified > 0 || counts.added > 0 || counts.removed > 0;
166
+ return (_jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-3 flex-wrap", children: [_jsx("div", { className: "text-xs text-muted-foreground", children: tFormat('engine.layers.diff.summary', locale, {
167
+ modified: counts.modified,
168
+ added: counts.added,
169
+ removed: counts.removed,
170
+ }) }), _jsxs("label", { className: "flex items-center gap-2 text-xs text-muted-foreground cursor-pointer select-none", children: [_jsx(Switch, { checked: showUnchanged, onCheckedChange: setShowUnchanged, "aria-label": t('engine.layers.diff.showUnchanged', locale) }), t('engine.layers.diff.showUnchanged', locale), _jsx(Badge, { variant: "outline", className: "ml-1 text-[10px]", children: counts.unchanged })] })] }), !hasAnyChange && !showUnchanged ? (_jsx("div", { className: "rounded border bg-muted/30 p-4 text-xs text-muted-foreground", children: t('engine.layers.diff.noChanges', locale) })) : (_jsxs("div", { className: "rounded border overflow-hidden", children: [_jsxs("div", { className: "grid grid-cols-[minmax(140px,1fr)_minmax(160px,1.4fr)_minmax(160px,1.4fr)_auto] bg-muted/50 text-[11px] font-medium uppercase tracking-wide text-muted-foreground", children: [_jsx("div", { className: "px-3 py-2", children: t('engine.layers.diff.field', locale) }), _jsx("div", { className: "px-3 py-2", children: t('engine.layers.diff.code', locale) }), _jsx("div", { className: "px-3 py-2", children: t('engine.layers.diff.effective', locale) }), _jsx("div", { className: "px-3 py-2", children: t('engine.layers.diff.status', locale) })] }), _jsx("div", { className: "divide-y", children: visibleRows.map((row) => {
171
+ const style = STATUS_STYLE[row.status];
172
+ return (_jsxs("div", { className: cn('grid grid-cols-[minmax(140px,1fr)_minmax(160px,1.4fr)_minmax(160px,1.4fr)_auto] text-xs', style.row), children: [_jsx("div", { className: "px-3 py-2 font-mono text-foreground truncate", title: row.key, children: row.key }), _jsx(DiffValueCell, { value: row.codeValue, muted: row.status === 'added' }), _jsx(DiffValueCell, { value: row.effectiveValue, muted: row.status === 'removed' }), _jsx("div", { className: "px-3 py-2", children: _jsx("span", { className: cn('inline-flex items-center rounded px-1.5 py-0.5 text-[10px] font-medium', style.badge), children: t(`engine.layers.diff.${row.status}`, locale) }) })] }, row.key));
173
+ }) })] }))] }));
174
+ }
175
+ function DiffValueCell({ value, muted }) {
176
+ const text = formatCell(value);
177
+ const isMissing = value === undefined;
178
+ return (_jsx("div", { className: cn('px-3 py-2 font-mono break-all', muted || isMissing ? 'text-muted-foreground italic' : 'text-foreground'), title: text.length > 200 ? text : undefined, children: text.length > 200 ? `${text.slice(0, 200)}…` : text }));
13
179
  }
14
180
  function LayerPanel({ payload, emptyHint, }) {
15
181
  if (payload == null) {
@@ -1,3 +1,17 @@
1
+ /**
2
+ * MetadataDetailDrawer — slide-over editor for a related metadata item.
3
+ *
4
+ * Opens from the parent's Related tab without taking the user away
5
+ * from the parent's context. Internally we mount the same
6
+ * `MetadataResourceEditPage` used by the full-page route, so all the
7
+ * Save / Reset / Validate behaviour is shared. The drawer just frames
8
+ * it and adds a "Open full page ↗" affordance.
9
+ *
10
+ * Width is wide enough for forms (max 1100px) but capped at 92vw to
11
+ * leave a thin strip of the parent visible behind, reinforcing the
12
+ * "still in the same object" feel.
13
+ */
14
+ import * as React from 'react';
1
15
  import type { RelatedTarget } from './RelatedPanel';
2
16
  export interface MetadataDetailDrawerProps {
3
17
  /** When non-null, drawer is open and shows this target. */
@@ -10,4 +24,4 @@ export interface MetadataDetailDrawerProps {
10
24
  name: string;
11
25
  };
12
26
  }
13
- export declare function MetadataDetailDrawer({ target, onClose, parentContext, }: MetadataDetailDrawerProps): import("react/jsx-runtime").JSX.Element;
27
+ export declare function MetadataDetailDrawer({ target, onClose, parentContext, }: MetadataDetailDrawerProps): React.JSX.Element;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * `MetadataTypeActions` — renders the declarative, **type-level** actions a
3
+ * metadata type carries (GAP-1) using the same button affordance business
4
+ * objects use for their `actions`.
5
+ *
6
+ * The framework's `/meta/types` endpoint emits these on each rich entry as
7
+ * spec `ActionSchema` objects (see `MetadataTypeAction` in `useMetadata`).
8
+ * The canonical first consumer is the `datasource` type, which declares a
9
+ * "Test connection" action (`type:'api'`, `POST
10
+ * /api/v1/datasources/${ctx.recordId}/test`). Rendering happens in two
11
+ * chrome slots:
12
+ *
13
+ * • ResourceEditPage → `location='record_header'`, `recordId` = item name.
14
+ * • ResourceListPage → `location='list_toolbar'` (no recordId).
15
+ *
16
+ * Execution path mirrors ObjectView's auth-aware `apiHandler` rather than the
17
+ * core ActionRunner's bare `fetch`: the metadata API endpoints require the
18
+ * better-auth session cookie + bearer token, which only ride along through
19
+ * `createAuthenticatedFetch` (and matter in split-origin dev where the SPA is
20
+ * on :5180 and the backend on :3000). `${ctx.recordId}` / `${param.X}` tokens
21
+ * in `target` are resolved here, exactly as the spec mandates renderers do.
22
+ *
23
+ * Dialogs: actions that declare an array of `params` collect them from the
24
+ * user in the shared {@link ActionParamDialog} before running (same UX as
25
+ * business-object actions); actions that declare a `resultDialog` render the
26
+ * API response in {@link ActionResultDialog}. `confirmText` still gates the run.
27
+ *
28
+ * Only `type:'api'` is wired today; other types surface a toast so a
29
+ * misconfigured action fails loud instead of silent.
30
+ */
31
+ import * as React from 'react';
32
+ import type { RichMetadataTypeEntry } from './useMetadata';
33
+ export interface MetadataTypeActionsProps {
34
+ /** The rich type entry whose `actions` to render. */
35
+ entry?: Pick<RichMetadataTypeEntry, 'actions'> | undefined;
36
+ /** Which chrome slot is asking — actions are filtered by their `locations`. */
37
+ location: string;
38
+ /** Current item name, exposed to actions as `${ctx.recordId}`. */
39
+ recordId?: string;
40
+ /** Called after a successful action when `refreshAfter` is set. */
41
+ onAfter?: () => void;
42
+ }
43
+ /**
44
+ * Render the location-filtered type-level actions. Returns `null` when the
45
+ * type declares none for this slot, so callers can drop it straight into an
46
+ * existing toolbar `<>…</>` without conditionals.
47
+ */
48
+ export declare function MetadataTypeActions({ entry, location, recordId, onAfter }: MetadataTypeActionsProps): React.ReactElement | null;