@object-ui/app-shell 6.2.2 → 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 +967 -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
@@ -25,6 +25,35 @@
25
25
  * `sys_metadata_history`).
26
26
  */
27
27
  import type { ComponentType, ReactNode } from 'react';
28
+ /**
29
+ * Live field-to-field derivation rule used by the generic create form.
30
+ * See {@link MetadataResourceConfig.createDerive}.
31
+ */
32
+ export interface CreateDeriveRule {
33
+ /** Source field path (top-level key in the draft). */
34
+ from: string;
35
+ /** Target field path (top-level key in the draft). */
36
+ to: string;
37
+ /**
38
+ * Named transform applied to `from`'s value. Closed set on purpose:
39
+ *
40
+ * - `slugify` — "Sales Order" → `sales_order`. ASCII letters,
41
+ * digits, and `_`; CJK / non-Latin scripts yield
42
+ * empty (caller must enter `name` manually).
43
+ * - `plural-en` — naive English plural ("Order" → "Orders",
44
+ * "Box" → "Boxes", "Category" → "Categories").
45
+ * Non-Latin inputs returned unchanged.
46
+ * - `titlecase` — "sales_order" → "Sales Order".
47
+ * - `first-token` — strip everything past the first separator.
48
+ */
49
+ transform: 'slugify' | 'plural-en' | 'titlecase' | 'first-token';
50
+ /**
51
+ * When true (default), the rule stops firing once the user manually
52
+ * edits the `to` field. Lets us auto-suggest a name and then get out
53
+ * of the way as soon as the operator takes over.
54
+ */
55
+ untilUserEdits?: boolean;
56
+ }
28
57
  export type MetadataDomain = 'data' | 'ui' | 'automation' | 'ai' | 'system' | 'platform' | 'identity' | 'security' | 'other';
29
58
  /**
30
59
  * One row in the registry — describes how the generic engine should
@@ -46,6 +75,15 @@ export interface MetadataResourceConfig {
46
75
  primaryKey?: string;
47
76
  /** Fields searched by the free-text filter. Default `['name','label','description']`. */
48
77
  searchableFields?: string[];
78
+ /**
79
+ * Optional client-side list predicate — return `false` to HIDE a row
80
+ * from the resource list page. Runs against the unwrapped item shape
81
+ * after search / source / package filters. Use this to drop back-compat
82
+ * or synthetic rows (e.g. `view` hides the bare aggregated container the
83
+ * framework keeps for runtime dual-read, since its views are listed
84
+ * individually as expanded ViewItems). Pure function; keep it cheap.
85
+ */
86
+ listFilter?: (item: Record<string, unknown>) => boolean;
49
87
  /** Columns rendered in the list page. */
50
88
  listColumns?: Array<{
51
89
  key: string;
@@ -66,30 +104,12 @@ export interface MetadataResourceConfig {
66
104
  * Fully custom edit page. Receives `{ type, name }`.
67
105
  *
68
106
  * Use this when the bespoke editor replaces the JSONSchema form entirely
69
- * (e.g. PermissionMatrix grid). For visual designers that should coexist
70
- * with the generic Form/Layers/References tabs, prefer `DesignerTab`.
107
+ * (e.g. PermissionMatrix grid).
71
108
  */
72
109
  EditPage?: ComponentType<{
73
110
  type: string;
74
111
  name: string;
75
112
  }>;
76
- /**
77
- * Optional visual designer that renders inside its own dedicated tab on
78
- * the generic edit page, alongside Form / Layers / References. Receives
79
- * `{ type, name }` and should render without an outer `PageShell` — the
80
- * generic engine owns the chrome.
81
- *
82
- * When both `EditPage` and `DesignerTab` are provided, `EditPage` wins
83
- * (full takeover); the tab variant is only used when `EditPage` is unset.
84
- */
85
- DesignerTab?: ComponentType<{
86
- type: string;
87
- name: string;
88
- }>;
89
- /**
90
- * Optional label for the Designer tab. Defaults to "Designer".
91
- */
92
- designerTabLabel?: string;
93
113
  /**
94
114
  * Fully custom create page. Receives `{ type }`.
95
115
  */
@@ -100,6 +120,107 @@ export interface MetadataResourceConfig {
100
120
  hiddenFields?: string[];
101
121
  /** Suggested form field order (top to bottom). */
102
122
  fieldOrder?: string[];
123
+ /**
124
+ * Field paths shown in the create form. Order is preserved.
125
+ *
126
+ * - When omitted, the engine falls back to: every `required` field
127
+ * from the JSONSchema, plus `name` and `label` if present.
128
+ * - Fields not in this list are still sent on save (after
129
+ * `createDefaults` merge), they're just not asked for.
130
+ *
131
+ * Example: `['label', 'pluralLabel', 'name', 'description']`.
132
+ */
133
+ createFields?: string[];
134
+ /**
135
+ * Live derivation rules — typically used to auto-fill `name` from
136
+ * `label` (slug) and an English plural from a singular label. Each
137
+ * rule transforms the value at `from` and writes it to `to`. When
138
+ * `untilUserEdits` is true (default) the rule stops firing once the
139
+ * user edits the target field directly.
140
+ *
141
+ * Transforms are intentionally a small closed set so the contract
142
+ * stays declarative — adding "smart" behavior should mean adding a
143
+ * named transform here, not embedding code in registry entries.
144
+ */
145
+ createDerive?: CreateDeriveRule[];
146
+ /**
147
+ * Shallow-merged into the saved body before PUT. Use this for the
148
+ * "empty content" shape that lets the user land in the designer
149
+ * (e.g. `{ fields: {} }` for object, `{ sections: [] }` for page).
150
+ */
151
+ createDefaults?: Record<string, unknown>;
152
+ /**
153
+ * Optional body builder. When present, takes precedence over
154
+ * `createDefaults`: receives the user's `createFields` draft and
155
+ * returns the full body to PUT. Use this when the wire shape isn't
156
+ * a flat merge — e.g. `view` nests user-picked `object` inside
157
+ * `{ list: { data: { object } } }`, or `validation` picks the
158
+ * variant's required fields based on `draft.type`.
159
+ *
160
+ * Returned body should include the `identityField` (defaults to
161
+ * `name`) — the engine still re-injects it from the URL slug, but
162
+ * having it in the body keeps things explicit.
163
+ */
164
+ createBuildBody?: (draft: Record<string, unknown>) => Record<string, unknown>;
165
+ /**
166
+ * Async create-time body augmentation that needs runtime context the pure
167
+ * {@link createBuildBody} can't reach — e.g. fetching another metadata item.
168
+ * Its returned fields are merged into the create body AFTER `createBuildBody`
169
+ * / `createDefaults`. Best-effort: errors are swallowed (the create still
170
+ * proceeds with the un-augmented body). Used by `page` to seed a record
171
+ * page's `regions` from the bound object's synthesized default detail page,
172
+ * so authoring starts from the auto-generated layout instead of blank.
173
+ */
174
+ createSeed?: (draft: Record<string, unknown>, ctx: {
175
+ client: any;
176
+ }) => Record<string, unknown> | Promise<Record<string, unknown>>;
177
+ /**
178
+ * Optional load-time normaliser: the wire item returned by the server
179
+ * (`layered.effective` / a pending draft) → the draft shape the editor
180
+ * (SchemaForm / inspector / preview) expects. Applied on initial load
181
+ * AND after every save-refresh, so the editor always sees the canonical
182
+ * draft shape. Must be a pure function and a no-op for shapes it does
183
+ * not recognise. Pair with {@link fromDraft} for the save round-trip.
184
+ *
185
+ * Example: `view` unwraps an expanded ViewItem's `config` into the
186
+ * `{ list | form }` family key the View inspector reads.
187
+ */
188
+ toDraft?: (item: Record<string, unknown>) => Record<string, unknown>;
189
+ /**
190
+ * Optional save-time serialiser — the inverse of {@link toDraft}. The
191
+ * editor draft → the wire shape PUT back to the server. Applied to the
192
+ * body just before save (edit mode). Must be a pure function and a
193
+ * no-op for drafts it does not recognise.
194
+ */
195
+ fromDraft?: (draft: Record<string, unknown>) => Record<string, unknown>;
196
+ /**
197
+ * Optional schema override for create mode only. When present, the
198
+ * engine uses this schema (instead of the server's edit schema) to
199
+ * render the create form and validate the draft. The saved body still
200
+ * goes through `createBuildBody` / `createDefaults`, so this schema
201
+ * just describes the simplified create-time input.
202
+ *
203
+ * Use this for wrapper types like `view` whose top-level schema has
204
+ * no flat identity fields (only `{list,form,listViews,formViews}`):
205
+ * a `createSchema` lets us ask for `{name,label,object}` up front,
206
+ * then `createBuildBody` wraps them into the right nested shape.
207
+ */
208
+ createSchema?: Record<string, unknown>;
209
+ /**
210
+ * Field path used as the metadata's identity — the URL slug AND
211
+ * the key on the saved body. Defaults to `'name'`. Override when
212
+ * the spec uses a different identifier (e.g. `permission` uses `id`
213
+ * in 7.1+). The engine reads the identity out of the draft / body
214
+ * at that path and writes it back at save time, so URL routing
215
+ * stays stable across types.
216
+ */
217
+ identityField?: string;
218
+ /**
219
+ * One-line copy shown above the create form. Defaults to a generic
220
+ * "Create a new <type>". When set to the empty string, the hint row
221
+ * is suppressed.
222
+ */
223
+ createHint?: string;
103
224
  /** Whether the type opts in to the history tab. Default true. */
104
225
  supportsHistory?: boolean;
105
226
  /**
@@ -0,0 +1,26 @@
1
+ import type { FormViewSpec } from './SchemaForm';
2
+ type JsonSchema = Record<string, any>;
3
+ /** JSONSchema for the whole (flat) Report document. */
4
+ export declare function getReportSchema(): JsonSchema | undefined;
5
+ /**
6
+ * The canonical authoring FormView, with the fields the curated inspector
7
+ * owns directly (dataset / values / rows / name) pruned from every section so
8
+ * they are not double-rendered. Everything else — including the type-
9
+ * conditional joined-blocks section — flows through verbatim from the spec.
10
+ *
11
+ * Two alignment passes on top of the verbatim clone:
12
+ *
13
+ * 1. Fields the form declares but the *schema* no longer carries are pruned.
14
+ * The 9.0 single-form cutover removed the query-form fields (`objectName` /
15
+ * `columns` / `groupingsDown` / `groupingsAcross` / `filter`) from
16
+ * `ReportSchema`, but the bundled `reportForm` may still declare them (the
17
+ * spec-side form fix ships separately) — rendering controls whose output
18
+ * the schema strips at parse time. The schema is the source of truth; the
19
+ * pass is a no-op once the bundled form catches up.
20
+ *
21
+ * 2. `runtimeFilter` (which replaced `filter` in 9.0) is appended when the
22
+ * schema carries it and no section declares it, so the render-time scope
23
+ * filter stays editable in the meantime.
24
+ */
25
+ export declare function getReportForm(): FormViewSpec | undefined;
26
+ export {};
@@ -0,0 +1,121 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ /**
3
+ * report-schema.ts — the SINGLE source of truth for Report authoring
4
+ * metadata, sourced directly from `@objectstack/spec` (the protocol) rather
5
+ * than hand-written field lists. Mirrors {@link ./view-schema.ts}.
6
+ *
7
+ * Why: the Report inspector must render the CORRECT config fields for EVERY
8
+ * report type (tabular / summary / matrix / joined) without hardcoding them.
9
+ * The spec already describes this:
10
+ *
11
+ * • `reportForm` — the canonical authoring FormView: sections for basics,
12
+ * columns, groupings, joined blocks, filter & chart, and
13
+ * advanced. One section (joined blocks) is type-
14
+ * conditional via a `visibleOn` CEL predicate.
15
+ * • `ReportSchema` — the zod schema for the whole (flat) Report document.
16
+ *
17
+ * We convert the zod schema to JSONSchema once (memoised) via zod 4's native
18
+ * `z.toJSONSchema`, and feed `{ form, schema }` straight into the existing
19
+ * {@link SchemaForm}. Adding a new report type or config prop to the spec
20
+ * therefore flows through automatically — zero code changes here.
21
+ */
22
+ import { z } from 'zod';
23
+ import { ReportSchema, reportForm as specReportForm } from '@objectstack/spec/ui';
24
+ const TO_JSON_OPTS = { io: 'input', unrepresentable: 'any' };
25
+ /** Fields the curated inspector owns directly, pruned from the spec form. */
26
+ const FORM_FIELDS_OWNED_ELSEWHERE = new Set([
27
+ 'dataset', // dataset binding rendered as a dedicated picker
28
+ 'values', // managed by the dedicated measures list
29
+ 'rows', // managed by the dedicated dimensions list
30
+ 'columns', // matrix across-dimensions — dedicated list (ADR-0021 D2)
31
+ 'name', // record identity — not user-editable here
32
+ ]);
33
+ let _reportDocSchema;
34
+ let _reportDocFailed = false;
35
+ /** JSONSchema for the whole (flat) Report document. */
36
+ export function getReportSchema() {
37
+ if (_reportDocSchema || _reportDocFailed)
38
+ return _reportDocSchema;
39
+ try {
40
+ _reportDocSchema = z.toJSONSchema(ReportSchema, TO_JSON_OPTS);
41
+ }
42
+ catch (err) {
43
+ _reportDocFailed = true;
44
+ if (typeof console !== 'undefined') {
45
+ console.warn('[report-schema] failed to derive Report JSONSchema from spec', err);
46
+ }
47
+ }
48
+ return _reportDocSchema;
49
+ }
50
+ let _reportForm;
51
+ /**
52
+ * The canonical authoring FormView, with the fields the curated inspector
53
+ * owns directly (dataset / values / rows / name) pruned from every section so
54
+ * they are not double-rendered. Everything else — including the type-
55
+ * conditional joined-blocks section — flows through verbatim from the spec.
56
+ *
57
+ * Two alignment passes on top of the verbatim clone:
58
+ *
59
+ * 1. Fields the form declares but the *schema* no longer carries are pruned.
60
+ * The 9.0 single-form cutover removed the query-form fields (`objectName` /
61
+ * `columns` / `groupingsDown` / `groupingsAcross` / `filter`) from
62
+ * `ReportSchema`, but the bundled `reportForm` may still declare them (the
63
+ * spec-side form fix ships separately) — rendering controls whose output
64
+ * the schema strips at parse time. The schema is the source of truth; the
65
+ * pass is a no-op once the bundled form catches up.
66
+ *
67
+ * 2. `runtimeFilter` (which replaced `filter` in 9.0) is appended when the
68
+ * schema carries it and no section declares it, so the render-time scope
69
+ * filter stays editable in the meantime.
70
+ */
71
+ export function getReportForm() {
72
+ if (_reportForm)
73
+ return _reportForm;
74
+ if (!specReportForm || typeof specReportForm !== 'object')
75
+ return undefined;
76
+ try {
77
+ const clone = JSON.parse(JSON.stringify(specReportForm));
78
+ const schemaProps = getReportSchema()?.properties;
79
+ for (const section of clone.sections ?? []) {
80
+ section.fields = (section.fields ?? []).filter((f) => {
81
+ const name = typeof f === 'string' ? f : f?.field;
82
+ if (FORM_FIELDS_OWNED_ELSEWHERE.has(name))
83
+ return false;
84
+ // Schema-subset pass: drop form fields the schema no longer carries.
85
+ if (schemaProps && !(name in schemaProps))
86
+ return false;
87
+ return true;
88
+ });
89
+ }
90
+ if (schemaProps && 'runtimeFilter' in schemaProps) {
91
+ const declared = new Set();
92
+ for (const s of clone.sections ?? []) {
93
+ for (const f of s.fields ?? []) {
94
+ declared.add(typeof f === 'string' ? f : f?.field);
95
+ }
96
+ }
97
+ if (!declared.has('runtimeFilter')) {
98
+ clone.sections = [
99
+ ...(clone.sections ?? []),
100
+ {
101
+ label: 'Filter',
102
+ description: 'Render-time scope filter, ANDed at query time.',
103
+ collapsible: true,
104
+ collapsed: true,
105
+ fields: [{ field: 'runtimeFilter', widget: 'json' }],
106
+ },
107
+ ];
108
+ }
109
+ }
110
+ // Drop now-empty sections so we don't render bare headers.
111
+ clone.sections = (clone.sections ?? []).filter((s) => (s.fields ?? []).length > 0);
112
+ _reportForm = clone;
113
+ }
114
+ catch (err) {
115
+ if (typeof console !== 'undefined') {
116
+ console.warn('[report-schema] failed to prepare reportForm from spec', err);
117
+ }
118
+ return undefined;
119
+ }
120
+ return _reportForm;
121
+ }
@@ -1,10 +1,63 @@
1
- import { MetadataClient } from '@object-ui/data-objectstack';
1
+ import { MetadataClient, type MetadataDiagnosticsSummary, type MetadataDiagnosticsEntry } from '@object-ui/data-objectstack';
2
+ /**
3
+ * A declarative **type-level** action surfaced on a metadata type by the
4
+ * framework's `/meta/types` endpoint (spec `ActionSchema`). Mirrors how a
5
+ * business object carries `actions`, but scoped to the metadata type itself
6
+ * (e.g. datasource → "Test connection"). The metadata-admin engine renders
7
+ * these with the same button mechanism objects use — see `MetadataTypeActions`.
8
+ */
9
+ export interface MetadataTypeAction {
10
+ /** Machine name (lowercase snake_case) — stable key. */
11
+ name: string;
12
+ /** Display label (plain string; framework already localised it). */
13
+ label?: string;
14
+ /** Interaction type. Only `'api'` is wired in the engine today. */
15
+ type?: string;
16
+ /**
17
+ * URL / endpoint. Supports `${ctx.X}` and `${param.X}` interpolation —
18
+ * the engine resolves `${ctx.recordId}` to the current item name.
19
+ */
20
+ target?: string;
21
+ /** HTTP method for `type:'api'` (defaults to POST). */
22
+ method?: string;
23
+ /** Lucide icon name. */
24
+ icon?: string;
25
+ /** Button visual variant. */
26
+ variant?: 'primary' | 'secondary' | 'danger' | 'ghost' | 'link';
27
+ /** Locations where this action is visible (list_toolbar, record_header, …). */
28
+ locations?: string[];
29
+ /** Confirmation prompt shown before execution. */
30
+ confirmText?: string;
31
+ /** Reload the view after a successful run. */
32
+ refreshAfter?: boolean;
33
+ /**
34
+ * Inputs. Either an array of ActionParam descriptors (collected from the user
35
+ * in a dialog before running — same as business-object actions), or a static
36
+ * key→value bag forwarded as the request body.
37
+ */
38
+ params?: Record<string, unknown> | unknown[];
39
+ /** Success toast message (when no resultDialog). */
40
+ successMessage?: string;
41
+ /** Error toast prefix shown when the action fails. */
42
+ errorMessage?: string;
43
+ /** Render the API response in a result dialog (spec Action.resultDialog). */
44
+ resultDialog?: Record<string, unknown>;
45
+ }
2
46
  export interface RichMetadataTypeEntry {
3
47
  type: string;
4
48
  label?: string;
5
49
  description?: string;
6
50
  domain?: string;
7
51
  allowOrgOverride?: boolean;
52
+ /** Declarative type-level actions (GAP-1). Rendered by `MetadataTypeActions`. */
53
+ actions?: MetadataTypeAction[];
54
+ /**
55
+ * Two-tier model (PR-10d.7): brand-new items of this type can be
56
+ * authored at runtime even when `allowOrgOverride` is false. UI
57
+ * affordances ("+ New", Save, Delete on DB-only items) should
58
+ * activate when either flag is true.
59
+ */
60
+ allowRuntimeCreate?: boolean;
8
61
  /** 'registry' = ADR opt-in; 'env' = unlocked via OBJECTSTACK_METADATA_WRITABLE. */
9
62
  overrideSource?: 'registry' | 'env';
10
63
  supportsOverlay?: boolean;
@@ -16,7 +69,15 @@ export interface RichMetadataTypeEntry {
16
69
  /** UI hints (icon, color, etc.) the framework may include. */
17
70
  ui?: Record<string, unknown>;
18
71
  }
19
- /** Use a single MetadataClient for the whole admin engine. */
72
+ /**
73
+ * Use a single MetadataClient for the whole admin engine.
74
+ *
75
+ * The base resolves to `VITE_SERVER_URL` so `/meta/*` writes reach the backend
76
+ * even when the SPA and API are served from different origins (the split-origin
77
+ * `pnpm dev` setup: SPA on :5180, backend on :3000). In same-origin production
78
+ * `VITE_SERVER_URL` is unset → falls back to `''` (relative, current origin),
79
+ * matching every other client in the app (see `apps/console/src/main.tsx`).
80
+ */
20
81
  export declare function useMetadataClient(environmentId?: string): MetadataClient;
21
82
  /**
22
83
  * Fetch and cache the rich `/meta/types` registry response. Most pages
@@ -35,3 +96,40 @@ export declare function useMetadataTypes(client: MetadataClient): {
35
96
  export declare function useTypesIndex(entries: RichMetadataTypeEntry[]): Record<string, RichMetadataTypeEntry>;
36
97
  /** Free-text filter helper used by list pages + QuickFind. */
37
98
  export declare function matchesQuery(item: Record<string, unknown>, query: string, fields?: string[]): boolean;
99
+ /**
100
+ * Fetch the cross-type `/meta/diagnostics` sweep once and expose
101
+ * both the raw entry list and a per-type aggregate (used by the
102
+ * directory page tiles + the governance overview page).
103
+ *
104
+ * `severity` defaults to `'error'` — pass `'warning'` to include
105
+ * warning-only entries in the count.
106
+ *
107
+ * `packageId` (optional) scopes the whole sweep to a single software
108
+ * package: the server then reports per-package counts/packages, so tile
109
+ * numbers match the scoped list pages. Omit for a global sweep.
110
+ */
111
+ export declare function useGlobalDiagnostics(client: MetadataClient, severity?: 'error' | 'warning', packageId?: string): {
112
+ loading: boolean;
113
+ error: string | null;
114
+ summary: MetadataDiagnosticsSummary;
115
+ byType: Record<string, number>;
116
+ /**
117
+ * Per-type warning-only count. Only populated when `severity` is
118
+ * `'warning'` (server omits warnings when severity is `'error'`).
119
+ */
120
+ warnByType: Record<string, number>;
121
+ /** Per-type item count (from server-side sweep). Empty on older servers. */
122
+ countsByType: Record<string, number>;
123
+ /** Per-type *locked* item count (where `_lock` ≠ `none`). Empty on older servers. */
124
+ lockedByType: Record<string, number>;
125
+ /** Per-type list of contributing packages. Empty on older servers. */
126
+ packagesByType: Record<string, string[]>;
127
+ /** Sorted, deduped union of all packages seen across all types. */
128
+ allPackages: string[];
129
+ reload: () => void;
130
+ };
131
+ /**
132
+ * Re-export so consumers can type their callbacks without reaching
133
+ * into the data-objectstack package directly.
134
+ */
135
+ export type { MetadataDiagnosticsEntry, MetadataDiagnosticsSummary };
@@ -15,12 +15,45 @@
15
15
  */
16
16
  import { useEffect, useMemo, useState } from 'react';
17
17
  import { MetadataClient } from '@object-ui/data-objectstack';
18
- /** Use a single MetadataClient for the whole admin engine. */
18
+ import { usePreviewDrafts } from '../../preview/PreviewModeContext';
19
+ /**
20
+ * Use a single MetadataClient for the whole admin engine.
21
+ *
22
+ * The base resolves to `VITE_SERVER_URL` so `/meta/*` writes reach the backend
23
+ * even when the SPA and API are served from different origins (the split-origin
24
+ * `pnpm dev` setup: SPA on :5180, backend on :3000). In same-origin production
25
+ * `VITE_SERVER_URL` is unset → falls back to `''` (relative, current origin),
26
+ * matching every other client in the app (see `apps/console/src/main.tsx`).
27
+ */
19
28
  export function useMetadataClient(environmentId) {
29
+ // ADR-0037: inside a draft-preview tree (?preview=draft), reads overlay
30
+ // pending drafts on the active registry. Writes are unaffected.
31
+ const previewDrafts = usePreviewDrafts();
20
32
  return useMemo(() => {
21
- const c = new MetadataClient({ baseUrl: '' });
33
+ const baseUrl = (typeof import.meta !== 'undefined' &&
34
+ import.meta.env?.VITE_SERVER_URL) ||
35
+ '';
36
+ const c = new MetadataClient({ baseUrl, previewDrafts });
22
37
  return environmentId ? c.withEnvironment(environmentId) : c;
23
- }, [environmentId]);
38
+ }, [environmentId, previewDrafts]);
39
+ }
40
+ /**
41
+ * Drop camelCase aliases when the registry also exposes a snake_case
42
+ * sibling. The framework's `/meta/types` endpoint surfaces both forms
43
+ * for some 7.1 system types (e.g. `analytics_cube` + `analyticsCube`,
44
+ * `sharing_rule` + `sharingRule`) and we don't want the directory to
45
+ * render the same logical type twice. Keep the snake_case row because
46
+ * it matches our `TYPE_LABELS_*` keys and the framework's preferred
47
+ * file naming convention.
48
+ */
49
+ function dedupeCamelAliases(list) {
50
+ const have = new Set(list.map((e) => e.type));
51
+ return list.filter((e) => {
52
+ if (!/[A-Z]/.test(e.type))
53
+ return true;
54
+ const snake = e.type.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`);
55
+ return !(snake !== e.type && have.has(snake));
56
+ });
24
57
  }
25
58
  /**
26
59
  * Fetch and cache the rich `/meta/types` registry response. Most pages
@@ -52,7 +85,7 @@ export function useMetadataTypes(client) {
52
85
  }
53
86
  }
54
87
  if (!cancelled) {
55
- setEntries(list);
88
+ setEntries(dedupeCamelAliases(list));
56
89
  setLoading(false);
57
90
  }
58
91
  }
@@ -94,3 +127,121 @@ export function matchesQuery(item, query, fields = ['name', 'label', 'descriptio
94
127
  }
95
128
  return false;
96
129
  }
130
+ /**
131
+ * Fetch the cross-type `/meta/diagnostics` sweep once and expose
132
+ * both the raw entry list and a per-type aggregate (used by the
133
+ * directory page tiles + the governance overview page).
134
+ *
135
+ * `severity` defaults to `'error'` — pass `'warning'` to include
136
+ * warning-only entries in the count.
137
+ *
138
+ * `packageId` (optional) scopes the whole sweep to a single software
139
+ * package: the server then reports per-package counts/packages, so tile
140
+ * numbers match the scoped list pages. Omit for a global sweep.
141
+ */
142
+ export function useGlobalDiagnostics(client, severity = 'error', packageId) {
143
+ const [loading, setLoading] = useState(true);
144
+ const [error, setError] = useState(null);
145
+ const [summary, setSummary] = useState({
146
+ entries: [],
147
+ total: 0,
148
+ scannedTypes: 0,
149
+ scannedItems: 0,
150
+ stats: {},
151
+ });
152
+ const [tick, setTick] = useState(0);
153
+ useEffect(() => {
154
+ let cancelled = false;
155
+ setLoading(true);
156
+ setError(null);
157
+ (async () => {
158
+ try {
159
+ const res = await client.diagnostics(packageId ? { severity, packageId } : { severity });
160
+ if (cancelled)
161
+ return;
162
+ setSummary(res);
163
+ setLoading(false);
164
+ }
165
+ catch (err) {
166
+ if (cancelled)
167
+ return;
168
+ // Older servers without /meta/diagnostics: surface as empty,
169
+ // not as a fatal error — the directory page should still load.
170
+ setError(err?.message ?? String(err));
171
+ setSummary({ entries: [], total: 0, scannedTypes: 0, scannedItems: 0, stats: {} });
172
+ setLoading(false);
173
+ }
174
+ })();
175
+ return () => {
176
+ cancelled = true;
177
+ };
178
+ }, [client, severity, packageId, tick]);
179
+ const byType = useMemo(() => {
180
+ const c = {};
181
+ for (const e of summary.entries) {
182
+ // Only count entries that actually have errors — when severity is
183
+ // 'warning' the server returns BOTH error and warning-only rows
184
+ // in the same list, and we want a strict error count here so
185
+ // headline numbers stay consistent across severity modes.
186
+ if ((e.diagnostics?.errors?.length ?? 0) > 0) {
187
+ c[e.type] = (c[e.type] ?? 0) + 1;
188
+ }
189
+ }
190
+ return c;
191
+ }, [summary]);
192
+ const warnByType = useMemo(() => {
193
+ const c = {};
194
+ for (const e of summary.entries) {
195
+ const errs = e.diagnostics?.errors?.length ?? 0;
196
+ const warns = e.diagnostics?.warnings?.length ?? 0;
197
+ // "Warn-only" = no errors, ≥1 warning. Items with errors are
198
+ // already counted in `byType` and the louder tier dominates the
199
+ // UI badge — surfacing them under both would be noisy.
200
+ if (errs === 0 && warns > 0) {
201
+ c[e.type] = (c[e.type] ?? 0) + 1;
202
+ }
203
+ }
204
+ return c;
205
+ }, [summary]);
206
+ const countsByType = useMemo(() => {
207
+ const c = {};
208
+ for (const [t, s] of Object.entries(summary.stats ?? {}))
209
+ c[t] = s.count;
210
+ return c;
211
+ }, [summary]);
212
+ const lockedByType = useMemo(() => {
213
+ const c = {};
214
+ for (const [t, s] of Object.entries(summary.stats ?? {})) {
215
+ if (typeof s.locked === 'number' && s.locked > 0) {
216
+ c[t] = s.locked;
217
+ }
218
+ }
219
+ return c;
220
+ }, [summary]);
221
+ const packagesByType = useMemo(() => {
222
+ const c = {};
223
+ for (const [t, s] of Object.entries(summary.stats ?? {}))
224
+ c[t] = s.packages ?? [];
225
+ return c;
226
+ }, [summary]);
227
+ const allPackages = useMemo(() => {
228
+ const set = new Set();
229
+ for (const s of Object.values(summary.stats ?? {})) {
230
+ for (const p of s.packages ?? [])
231
+ set.add(p);
232
+ }
233
+ return [...set].sort();
234
+ }, [summary]);
235
+ return {
236
+ loading,
237
+ error,
238
+ summary,
239
+ byType,
240
+ warnByType,
241
+ countsByType,
242
+ lockedByType,
243
+ packagesByType,
244
+ allPackages,
245
+ reload: () => setTick((n) => n + 1),
246
+ };
247
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * True when `item` is a **bare aggregated view container** — the legacy
3
+ * per-object `defineView({ list, form, listViews, formViews })` document
4
+ * the framework still registers under the bare `<object>` key for runtime
5
+ * back-compat (dual-read). It carries NO `viewKind` discriminant and holds
6
+ * at least one of the aggregate buckets.
7
+ *
8
+ * Studio expands every such container into independent `<object>.<viewKey>`
9
+ * ViewItems (including the defaults), so the container row is fully
10
+ * redundant in the metadata list and should be hidden there.
11
+ */
12
+ export declare function isAggregatedViewContainer(item: unknown): boolean;
13
+ /**
14
+ * Derive the display "type" of a view list row. Expanded ViewItems keep
15
+ * their display type under `config.type` (`grid` / `calendar` / `kanban`
16
+ * / …) and only the list/form *family* at the top level (`viewKind`); a
17
+ * legacy flat view carries `type` directly. Returns `undefined` when
18
+ * nothing is resolvable (e.g. an aggregated container).
19
+ */
20
+ export declare function viewDisplayType(item: unknown): string | undefined;