@object-ui/app-shell 6.2.3 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. package/CHANGELOG.md +948 -0
  2. package/README.md +292 -0
  3. package/dist/assistant/assistantBus.d.ts +72 -0
  4. package/dist/assistant/assistantBus.js +133 -0
  5. package/dist/chrome/CommandPalette.d.ts +1 -1
  6. package/dist/chrome/CommandPalette.js +26 -22
  7. package/dist/chrome/ConditionalAuthWrapper.d.ts +1 -1
  8. package/dist/chrome/ConsoleToaster.d.ts +1 -1
  9. package/dist/chrome/ConsoleToaster.js +3 -1
  10. package/dist/chrome/ErrorBoundary.d.ts +1 -1
  11. package/dist/chrome/KeyboardShortcutsDialog.d.ts +1 -1
  12. package/dist/chrome/KeyboardShortcutsDialog.js +16 -5
  13. package/dist/chrome/LoadingScreen.d.ts +1 -1
  14. package/dist/chrome/LoadingScreen.js +22 -26
  15. package/dist/chrome/RouteFader.d.ts +1 -1
  16. package/dist/chrome/ThemeProvider.d.ts +1 -1
  17. package/dist/components/ManagedByBadge.d.ts +1 -1
  18. package/dist/console/AppContent.d.ts +1 -1
  19. package/dist/console/AppContent.js +170 -37
  20. package/dist/console/ConsoleShell.d.ts +7 -7
  21. package/dist/console/ConsoleShell.js +32 -3
  22. package/dist/console/ai/AiChatPage.d.ts +88 -1
  23. package/dist/console/ai/AiChatPage.js +743 -66
  24. package/dist/console/ai/ConversationsSidebar.d.ts +26 -1
  25. package/dist/console/ai/ConversationsSidebar.js +149 -34
  26. package/dist/console/ai/LiveCanvas.d.ts +22 -0
  27. package/dist/console/ai/LiveCanvas.js +78 -0
  28. package/dist/console/ai/reconcileTurn.d.ts +8 -0
  29. package/dist/console/ai/reconcileTurn.js +20 -0
  30. package/dist/console/auth/AuthPageLayout.d.ts +1 -1
  31. package/dist/console/auth/ForgotPasswordPage.d.ts +1 -1
  32. package/dist/console/auth/LoginPage.d.ts +1 -1
  33. package/dist/console/auth/RegisterPage.d.ts +1 -1
  34. package/dist/console/auth/RegisterPage.js +23 -3
  35. package/dist/console/cloud-connection/CloudConnectionPanel.d.ts +1 -0
  36. package/dist/console/cloud-connection/CloudConnectionPanel.js +169 -0
  37. package/dist/console/home/AppCard.d.ts +1 -1
  38. package/dist/console/home/AppCard.js +6 -12
  39. package/dist/console/home/HomeAppsStrip.d.ts +8 -0
  40. package/dist/console/home/HomeAppsStrip.js +61 -0
  41. package/dist/console/home/HomeLayout.d.ts +1 -1
  42. package/dist/console/home/HomeLayout.js +3 -1
  43. package/dist/console/home/HomePage.d.ts +1 -2
  44. package/dist/console/home/HomePage.js +149 -21
  45. package/dist/console/home/HomeRail.d.ts +22 -0
  46. package/dist/console/home/HomeRail.js +62 -0
  47. package/dist/console/home/QuickActions.d.ts +1 -1
  48. package/dist/console/home/QuickActions.js +3 -11
  49. package/dist/console/home/RecentApps.d.ts +1 -1
  50. package/dist/console/home/RecentApps.js +2 -2
  51. package/dist/console/home/StarredApps.d.ts +1 -1
  52. package/dist/console/home/StarredApps.js +2 -2
  53. package/dist/console/marketplace/InstalledListWidget.d.ts +1 -0
  54. package/dist/console/marketplace/InstalledListWidget.js +93 -0
  55. package/dist/console/marketplace/MarkdownText.d.ts +1 -1
  56. package/dist/console/marketplace/MarketplaceAccessDenied.d.ts +1 -1
  57. package/dist/console/marketplace/MarketplaceInstalledPage.d.ts +8 -14
  58. package/dist/console/marketplace/MarketplaceInstalledPage.js +14 -66
  59. package/dist/console/marketplace/MarketplacePackagePage.d.ts +1 -1
  60. package/dist/console/marketplace/MarketplacePackagePage.js +249 -8
  61. package/dist/console/marketplace/MarketplacePage.d.ts +1 -1
  62. package/dist/console/marketplace/MarketplacePage.js +60 -3
  63. package/dist/console/marketplace/PackageIcon.d.ts +1 -1
  64. package/dist/console/marketplace/PluginDisclosure.d.ts +14 -0
  65. package/dist/console/marketplace/PluginDisclosure.js +38 -0
  66. package/dist/console/marketplace/marketplaceApi.d.ts +123 -0
  67. package/dist/console/marketplace/marketplaceApi.js +254 -1
  68. package/dist/console/organizations/CreateWorkspaceDialog.d.ts +1 -1
  69. package/dist/console/organizations/OrganizationsLayout.d.ts +1 -1
  70. package/dist/console/organizations/OrganizationsPage.d.ts +1 -1
  71. package/dist/console/organizations/manage/AcceptInvitationPage.d.ts +1 -1
  72. package/dist/console/organizations/manage/InvitationsPage.d.ts +1 -1
  73. package/dist/console/organizations/manage/InviteMemberDialog.d.ts +1 -1
  74. package/dist/console/organizations/manage/MembersPage.d.ts +1 -1
  75. package/dist/console/organizations/manage/OrganizationLayout.d.ts +1 -1
  76. package/dist/console/organizations/manage/SettingsPage.d.ts +1 -1
  77. package/dist/context/CommandPaletteProvider.d.ts +44 -0
  78. package/dist/context/CommandPaletteProvider.js +71 -0
  79. package/dist/context/FavoritesProvider.d.ts +1 -1
  80. package/dist/context/NavigationContext.d.ts +1 -1
  81. package/dist/context/RecentItemsProvider.d.ts +2 -2
  82. package/dist/context/UserStateAdapters.d.ts +1 -1
  83. package/dist/context/index.d.ts +2 -0
  84. package/dist/context/index.js +1 -0
  85. package/dist/hooks/index.d.ts +5 -2
  86. package/dist/hooks/index.js +4 -1
  87. package/dist/hooks/useActionModal.d.ts +53 -0
  88. package/dist/hooks/useActionModal.js +111 -0
  89. package/dist/hooks/useChatConversation.d.ts +107 -4
  90. package/dist/hooks/useChatConversation.js +253 -25
  91. package/dist/hooks/useConsoleActionRuntime.d.ts +70 -0
  92. package/dist/hooks/useConsoleActionRuntime.js +560 -0
  93. package/dist/hooks/useConversationList.js +61 -3
  94. package/dist/hooks/useHomeInbox.d.ts +13 -0
  95. package/dist/hooks/useHomeInbox.js +142 -0
  96. package/dist/hooks/useNavPins.js +17 -23
  97. package/dist/hooks/useNavigationSync.d.ts +33 -0
  98. package/dist/hooks/useNavigationSync.js +98 -12
  99. package/dist/hooks/useReconcileOnError.d.ts +40 -0
  100. package/dist/hooks/useReconcileOnError.js +37 -0
  101. package/dist/hooks/useRecordApprovals.d.ts +18 -19
  102. package/dist/hooks/useRecordApprovals.js +24 -40
  103. package/dist/hooks/useResponsiveSidebar.js +14 -5
  104. package/dist/hooks/useSettleSignal.d.ts +19 -0
  105. package/dist/hooks/useSettleSignal.js +20 -0
  106. package/dist/hooks/useTrackRouteAsRecent.js +35 -0
  107. package/dist/hooks/useUrlOverlay.d.ts +62 -0
  108. package/dist/hooks/useUrlOverlay.js +88 -0
  109. package/dist/index.d.ts +16 -7
  110. package/dist/index.js +12 -4
  111. package/dist/layout/ActivityFeed.d.ts +1 -1
  112. package/dist/layout/AppHeader.d.ts +3 -2
  113. package/dist/layout/AppHeader.js +237 -72
  114. package/dist/layout/AppSidebar.d.ts +2 -1
  115. package/dist/layout/AppSidebar.js +26 -46
  116. package/dist/layout/AppSwitcher.d.ts +2 -1
  117. package/dist/layout/AppSwitcher.js +9 -5
  118. package/dist/layout/AuthPageLayout.d.ts +1 -1
  119. package/dist/layout/ConnectionStatus.d.ts +1 -1
  120. package/dist/layout/ConnectionStatus.js +9 -6
  121. package/dist/layout/ConsoleChatbotFab.d.ts +19 -1
  122. package/dist/layout/ConsoleChatbotFab.js +16 -2
  123. package/dist/layout/ConsoleFloatingChatbot.d.ts +32 -2
  124. package/dist/layout/ConsoleFloatingChatbot.js +374 -41
  125. package/dist/layout/ConsoleLayout.d.ts +1 -1
  126. package/dist/layout/ConsoleLayout.js +27 -11
  127. package/dist/layout/ContextSelectors.d.ts +44 -0
  128. package/dist/layout/ContextSelectors.js +218 -0
  129. package/dist/layout/InboxPopover.d.ts +6 -1
  130. package/dist/layout/InboxPopover.js +25 -6
  131. package/dist/layout/LocaleSwitcher.d.ts +1 -1
  132. package/dist/layout/LocalizedSidebarTrigger.d.ts +2 -0
  133. package/dist/layout/LocalizedSidebarTrigger.js +15 -0
  134. package/dist/layout/MobileViewSwitcherContext.d.ts +1 -1
  135. package/dist/layout/ModeToggle.d.ts +1 -1
  136. package/dist/layout/PageHeader.d.ts +1 -1
  137. package/dist/layout/UnifiedSidebar.d.ts +2 -1
  138. package/dist/layout/UnifiedSidebar.js +116 -15
  139. package/dist/observability/index.d.ts +1 -0
  140. package/dist/observability/index.js +1 -0
  141. package/dist/observability/settleSignal.d.ts +64 -0
  142. package/dist/observability/settleSignal.js +131 -0
  143. package/dist/preview/DraftChangesPanel.d.ts +19 -0
  144. package/dist/preview/DraftChangesPanel.js +114 -0
  145. package/dist/preview/DraftPreviewBar.d.ts +8 -0
  146. package/dist/preview/DraftPreviewBar.js +86 -0
  147. package/dist/preview/PreviewDraftEmptyState.d.ts +16 -0
  148. package/dist/preview/PreviewDraftEmptyState.js +47 -0
  149. package/dist/preview/PreviewModeContext.d.ts +57 -0
  150. package/dist/preview/PreviewModeContext.js +99 -0
  151. package/dist/preview/UnpublishedAppBar.d.ts +8 -0
  152. package/dist/preview/UnpublishedAppBar.js +79 -0
  153. package/dist/preview/draftStatus.d.ts +20 -0
  154. package/dist/preview/draftStatus.js +27 -0
  155. package/dist/preview/usePublishAllDrafts.d.ts +18 -0
  156. package/dist/preview/usePublishAllDrafts.js +106 -0
  157. package/dist/providers/AdapterProvider.d.ts +1 -1
  158. package/dist/providers/AdapterProvider.js +6 -1
  159. package/dist/providers/ExpressionProvider.d.ts +1 -1
  160. package/dist/providers/MetadataProvider.d.ts +17 -2
  161. package/dist/providers/MetadataProvider.js +183 -12
  162. package/dist/runtime-config.d.ts +46 -2
  163. package/dist/runtime-config.js +39 -2
  164. package/dist/services/builtinComponents.js +68 -59
  165. package/dist/skeletons/SkeletonDashboard.d.ts +1 -1
  166. package/dist/skeletons/SkeletonDetail.d.ts +1 -1
  167. package/dist/skeletons/SkeletonGrid.d.ts +1 -1
  168. package/dist/utils/appRoute.d.ts +21 -0
  169. package/dist/utils/appRoute.js +25 -0
  170. package/dist/utils/deriveRelatedLists.d.ts +54 -0
  171. package/dist/utils/deriveRelatedLists.js +91 -0
  172. package/dist/utils/index.d.ts +4 -0
  173. package/dist/utils/index.js +3 -0
  174. package/dist/utils/managedByEmptyState.d.ts +8 -1
  175. package/dist/utils/managedByEmptyState.js +13 -7
  176. package/dist/utils/preferLocal.d.ts +18 -0
  177. package/dist/utils/preferLocal.js +24 -0
  178. package/dist/views/ActionConfirmDialog.d.ts +1 -1
  179. package/dist/views/ActionConfirmDialog.js +3 -1
  180. package/dist/views/ActionParamDialog.d.ts +6 -1
  181. package/dist/views/ActionParamDialog.js +9 -3
  182. package/dist/views/ActionResultDialog.d.ts +13 -0
  183. package/dist/views/ActionResultDialog.js +134 -0
  184. package/dist/views/ComponentNavView.d.ts +14 -1
  185. package/dist/views/CreateViewDialog.d.ts +1 -1
  186. package/dist/views/DashboardConfigPanel.d.ts +28 -0
  187. package/dist/views/DashboardConfigPanel.js +81 -0
  188. package/dist/views/DashboardView.d.ts +4 -3
  189. package/dist/views/DashboardView.js +38 -239
  190. package/dist/views/FlowRunner.d.ts +59 -0
  191. package/dist/views/FlowRunner.js +153 -0
  192. package/dist/views/InterfaceListPage.d.ts +49 -0
  193. package/dist/views/InterfaceListPage.js +347 -0
  194. package/dist/views/MetadataInspector.d.ts +2 -2
  195. package/dist/views/ObjectView.d.ts +1 -1
  196. package/dist/views/ObjectView.js +209 -532
  197. package/dist/views/PageView.d.ts +8 -3
  198. package/dist/views/PageView.js +45 -32
  199. package/dist/views/RecordDetailView.d.ts +1 -1
  200. package/dist/views/RecordDetailView.js +363 -148
  201. package/dist/views/RecordFormPage.d.ts +1 -1
  202. package/dist/views/RecordFormPage.js +26 -1
  203. package/dist/views/ReportConfigPanel.d.ts +37 -0
  204. package/dist/views/ReportConfigPanel.js +85 -0
  205. package/dist/views/ReportView.d.ts +1 -1
  206. package/dist/views/ReportView.js +116 -7
  207. package/dist/views/RuntimeDraftBar.d.ts +30 -0
  208. package/dist/views/RuntimeDraftBar.js +112 -0
  209. package/dist/views/SearchResultsPage.d.ts +1 -1
  210. package/dist/views/SearchResultsPage.js +8 -18
  211. package/dist/views/ViewConfigPanel.d.ts +24 -17
  212. package/dist/views/ViewConfigPanel.js +121 -77
  213. package/dist/views/index.d.ts +1 -1
  214. package/dist/views/index.js +1 -1
  215. package/dist/views/metadata-admin/AuditPanel.d.ts +28 -0
  216. package/dist/views/metadata-admin/AuditPanel.js +79 -0
  217. package/dist/views/metadata-admin/DiagnosticsPage.d.ts +20 -0
  218. package/dist/views/metadata-admin/DiagnosticsPage.js +69 -0
  219. package/dist/views/metadata-admin/DirectoryPage.d.ts +16 -1
  220. package/dist/views/metadata-admin/DirectoryPage.js +113 -24
  221. package/dist/views/metadata-admin/DraftReviewPanel.d.ts +33 -0
  222. package/dist/views/metadata-admin/DraftReviewPanel.js +77 -0
  223. package/dist/views/metadata-admin/EmbeddedItemEditor.d.ts +17 -1
  224. package/dist/views/metadata-admin/EmbeddedItemEditor.js +15 -8
  225. package/dist/views/metadata-admin/JsonSourceEditor.d.ts +37 -0
  226. package/dist/views/metadata-admin/JsonSourceEditor.js +178 -0
  227. package/dist/views/metadata-admin/LayeredDiff.d.ts +39 -1
  228. package/dist/views/metadata-admin/LayeredDiff.js +171 -5
  229. package/dist/views/metadata-admin/MetadataDetailDrawer.d.ts +15 -1
  230. package/dist/views/metadata-admin/MetadataTypeActions.d.ts +48 -0
  231. package/dist/views/metadata-admin/MetadataTypeActions.js +165 -0
  232. package/dist/views/metadata-admin/PackagesPage.d.ts +18 -0
  233. package/dist/views/metadata-admin/PackagesPage.js +395 -0
  234. package/dist/views/metadata-admin/PageShell.d.ts +1 -1
  235. package/dist/views/metadata-admin/PageShell.js +9 -4
  236. package/dist/views/metadata-admin/PermissionMatrixEditor.d.ts +35 -1
  237. package/dist/views/metadata-admin/QuickFind.d.ts +21 -1
  238. package/dist/views/metadata-admin/QuickFind.js +6 -3
  239. package/dist/views/metadata-admin/RelatedPanel.d.ts +24 -1
  240. package/dist/views/metadata-admin/RelatedPanel.js +20 -18
  241. package/dist/views/metadata-admin/ResourceEditPage.d.ts +40 -1
  242. package/dist/views/metadata-admin/ResourceEditPage.js +1223 -60
  243. package/dist/views/metadata-admin/ResourceHistoryPage.d.ts +39 -1
  244. package/dist/views/metadata-admin/ResourceHistoryPage.js +66 -16
  245. package/dist/views/metadata-admin/ResourceListPage.d.ts +13 -1
  246. package/dist/views/metadata-admin/ResourceListPage.js +266 -30
  247. package/dist/views/metadata-admin/ResourceRouter.d.ts +23 -1
  248. package/dist/views/metadata-admin/SchemaForm.d.ts +34 -1
  249. package/dist/views/metadata-admin/SchemaForm.js +559 -49
  250. package/dist/views/metadata-admin/StudioHomePage.d.ts +22 -0
  251. package/dist/views/metadata-admin/StudioHomePage.js +213 -0
  252. package/dist/views/metadata-admin/anchors.js +237 -24
  253. package/dist/views/metadata-admin/clientValidation.d.ts +50 -0
  254. package/dist/views/metadata-admin/clientValidation.js +169 -0
  255. package/dist/views/metadata-admin/color-variant-field.d.ts +30 -0
  256. package/dist/views/metadata-admin/color-variant-field.js +38 -0
  257. package/dist/views/metadata-admin/createDerive.d.ts +75 -0
  258. package/dist/views/metadata-admin/createDerive.js +179 -0
  259. package/dist/views/metadata-admin/dashboard-schema.d.ts +12 -0
  260. package/dist/views/metadata-admin/dashboard-schema.js +80 -0
  261. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.d.ts +35 -0
  262. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.js +327 -0
  263. package/dist/views/metadata-admin/datasource/register.d.ts +1 -0
  264. package/dist/views/metadata-admin/datasource/register.js +24 -0
  265. package/dist/views/metadata-admin/default-inspector-registry.d.ts +49 -0
  266. package/dist/views/metadata-admin/default-inspector-registry.js +8 -0
  267. package/dist/views/metadata-admin/default-schemas.js +115 -10
  268. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.d.ts +27 -0
  269. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.js +69 -0
  270. package/dist/views/metadata-admin/external/ImportObjectDialog.d.ts +27 -0
  271. package/dist/views/metadata-admin/external/ImportObjectDialog.js +77 -0
  272. package/dist/views/metadata-admin/external/SchemaBrowser.d.ts +16 -0
  273. package/dist/views/metadata-admin/external/SchemaBrowser.js +74 -0
  274. package/dist/views/metadata-admin/external/ValidationPanel.d.ts +16 -0
  275. package/dist/views/metadata-admin/external/ValidationPanel.js +68 -0
  276. package/dist/views/metadata-admin/external/api.d.ts +100 -0
  277. package/dist/views/metadata-admin/external/api.js +124 -0
  278. package/dist/views/metadata-admin/i18n.d.ts +1 -0
  279. package/dist/views/metadata-admin/i18n.js +1166 -2
  280. package/dist/views/metadata-admin/index.d.ts +8 -5
  281. package/dist/views/metadata-admin/index.js +12 -2
  282. package/dist/views/metadata-admin/inspector-registry.d.ts +51 -0
  283. package/dist/views/metadata-admin/inspector-registry.js +11 -0
  284. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.d.ts +30 -0
  285. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.js +180 -0
  286. package/dist/views/metadata-admin/inspectors/AppNavInspector.d.ts +16 -0
  287. package/dist/views/metadata-admin/inspectors/AppNavInspector.js +110 -0
  288. package/dist/views/metadata-admin/inspectors/ConditionBuilder.d.ts +29 -0
  289. package/dist/views/metadata-admin/inspectors/ConditionBuilder.js +154 -0
  290. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.d.ts +28 -0
  291. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.js +110 -0
  292. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.d.ts +18 -0
  293. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.js +139 -0
  294. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.d.ts +21 -0
  295. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.js +107 -0
  296. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.d.ts +16 -0
  297. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.js +45 -0
  298. package/dist/views/metadata-admin/inspectors/FlowInspector.d.ts +12 -0
  299. package/dist/views/metadata-admin/inspectors/FlowInspector.js +9 -0
  300. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.d.ts +30 -0
  301. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.js +125 -0
  302. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.d.ts +18 -0
  303. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.js +40 -0
  304. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.d.ts +14 -0
  305. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.js +140 -0
  306. package/dist/views/metadata-admin/inspectors/FlowObjectListField.d.ts +26 -0
  307. package/dist/views/metadata-admin/inspectors/FlowObjectListField.js +105 -0
  308. package/dist/views/metadata-admin/inspectors/FlowReferenceField.d.ts +83 -0
  309. package/dist/views/metadata-admin/inspectors/FlowReferenceField.js +181 -0
  310. package/dist/views/metadata-admin/inspectors/FlowStringListField.d.ts +21 -0
  311. package/dist/views/metadata-admin/inspectors/FlowStringListField.js +60 -0
  312. package/dist/views/metadata-admin/inspectors/InspectorComboField.d.ts +40 -0
  313. package/dist/views/metadata-admin/inspectors/InspectorComboField.js +61 -0
  314. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.d.ts +21 -0
  315. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.js +54 -0
  316. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.d.ts +23 -0
  317. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.js +330 -0
  318. package/dist/views/metadata-admin/inspectors/PageBlockInspector.d.ts +48 -0
  319. package/dist/views/metadata-admin/inspectors/PageBlockInspector.js +332 -0
  320. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.d.ts +58 -0
  321. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.js +160 -0
  322. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.d.ts +19 -0
  323. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.js +144 -0
  324. package/dist/views/metadata-admin/inspectors/ViewInspector.d.ts +19 -0
  325. package/dist/views/metadata-admin/inspectors/ViewInspector.js +21 -0
  326. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.d.ts +54 -0
  327. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.js +191 -0
  328. package/dist/views/metadata-admin/inspectors/_shared.d.ts +124 -0
  329. package/dist/views/metadata-admin/inspectors/_shared.js +113 -0
  330. package/dist/views/metadata-admin/inspectors/expression-validate.d.ts +26 -0
  331. package/dist/views/metadata-admin/inspectors/expression-validate.js +66 -0
  332. package/dist/views/metadata-admin/inspectors/flow-node-config.d.ts +143 -0
  333. package/dist/views/metadata-admin/inspectors/flow-node-config.js +461 -0
  334. package/dist/views/metadata-admin/inspectors/index.d.ts +1 -0
  335. package/dist/views/metadata-admin/inspectors/index.js +45 -0
  336. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.d.ts +40 -0
  337. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.js +227 -0
  338. package/dist/views/metadata-admin/inspectors/useDatasetFields.d.ts +72 -0
  339. package/dist/views/metadata-admin/inspectors/useDatasetFields.js +0 -0
  340. package/dist/views/metadata-admin/mergeServerFields.d.ts +65 -0
  341. package/dist/views/metadata-admin/mergeServerFields.js +56 -0
  342. package/dist/views/metadata-admin/preview-registry.d.ts +55 -0
  343. package/dist/views/metadata-admin/previews/ActionPreview.d.ts +25 -0
  344. package/dist/views/metadata-admin/previews/ActionPreview.js +238 -0
  345. package/dist/views/metadata-admin/previews/AddWidgetPicker.d.ts +12 -0
  346. package/dist/views/metadata-admin/previews/AddWidgetPicker.js +56 -0
  347. package/dist/views/metadata-admin/previews/AgentPreview.d.ts +24 -0
  348. package/dist/views/metadata-admin/previews/AgentPreview.js +100 -0
  349. package/dist/views/metadata-admin/previews/AppNavCanvas.d.ts +31 -0
  350. package/dist/views/metadata-admin/previews/AppNavCanvas.js +260 -0
  351. package/dist/views/metadata-admin/previews/AppPreview.d.ts +16 -1
  352. package/dist/views/metadata-admin/previews/AppPreview.js +23 -14
  353. package/dist/views/metadata-admin/previews/BookPreview.d.ts +20 -0
  354. package/dist/views/metadata-admin/previews/BookPreview.js +132 -0
  355. package/dist/views/metadata-admin/previews/DashboardPreview.d.ts +16 -1
  356. package/dist/views/metadata-admin/previews/DashboardPreview.js +110 -8
  357. package/dist/views/metadata-admin/previews/DatasetPreview.d.ts +18 -0
  358. package/dist/views/metadata-admin/previews/DatasetPreview.js +89 -0
  359. package/dist/views/metadata-admin/previews/DatasourcePreview.d.ts +23 -0
  360. package/dist/views/metadata-admin/previews/DatasourcePreview.js +68 -0
  361. package/dist/views/metadata-admin/previews/EmailTemplatePreview.d.ts +14 -1
  362. package/dist/views/metadata-admin/previews/FieldStub.d.ts +30 -0
  363. package/dist/views/metadata-admin/previews/FieldStub.js +104 -0
  364. package/dist/views/metadata-admin/previews/FieldsListEditor.d.ts +50 -0
  365. package/dist/views/metadata-admin/previews/FieldsListEditor.js +97 -0
  366. package/dist/views/metadata-admin/previews/FlowCanvas.d.ts +43 -0
  367. package/dist/views/metadata-admin/previews/FlowCanvas.js +328 -0
  368. package/dist/views/metadata-admin/previews/FlowPreview.d.ts +20 -0
  369. package/dist/views/metadata-admin/previews/FlowPreview.js +92 -0
  370. package/dist/views/metadata-admin/previews/FlowRunsPanel.d.ts +46 -0
  371. package/dist/views/metadata-admin/previews/FlowRunsPanel.js +97 -0
  372. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.d.ts +25 -0
  373. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.js +170 -0
  374. package/dist/views/metadata-admin/previews/JobPreview.d.ts +28 -0
  375. package/dist/views/metadata-admin/previews/JobPreview.js +290 -0
  376. package/dist/views/metadata-admin/previews/ObjectFormCanvas.d.ts +30 -0
  377. package/dist/views/metadata-admin/previews/ObjectFormCanvas.js +547 -0
  378. package/dist/views/metadata-admin/previews/ObjectPreview.d.ts +14 -1
  379. package/dist/views/metadata-admin/previews/ObjectPreview.js +5 -30
  380. package/dist/views/metadata-admin/previews/OutlineStrip.d.ts +32 -0
  381. package/dist/views/metadata-admin/previews/OutlineStrip.js +8 -0
  382. package/dist/views/metadata-admin/previews/PageBlockCanvas.d.ts +49 -0
  383. package/dist/views/metadata-admin/previews/PageBlockCanvas.js +510 -0
  384. package/dist/views/metadata-admin/previews/PagePreview.d.ts +10 -1
  385. package/dist/views/metadata-admin/previews/PagePreview.js +90 -4
  386. package/dist/views/metadata-admin/previews/PermissionPreview.d.ts +27 -0
  387. package/dist/views/metadata-admin/previews/PermissionPreview.js +115 -0
  388. package/dist/views/metadata-admin/previews/PreviewShell.d.ts +29 -6
  389. package/dist/views/metadata-admin/previews/PreviewShell.js +16 -3
  390. package/dist/views/metadata-admin/previews/ReportPreview.d.ts +18 -1
  391. package/dist/views/metadata-admin/previews/ReportPreview.js +23 -15
  392. package/dist/views/metadata-admin/previews/RolePreview.d.ts +19 -0
  393. package/dist/views/metadata-admin/previews/RolePreview.js +14 -0
  394. package/dist/views/metadata-admin/previews/SkillPreview.d.ts +22 -0
  395. package/dist/views/metadata-admin/previews/SkillPreview.js +34 -0
  396. package/dist/views/metadata-admin/previews/ToolPreview.d.ts +25 -0
  397. package/dist/views/metadata-admin/previews/ToolPreview.js +122 -0
  398. package/dist/views/metadata-admin/previews/TranslationPreview.d.ts +25 -0
  399. package/dist/views/metadata-admin/previews/TranslationPreview.js +52 -0
  400. package/dist/views/metadata-admin/previews/ValidationPreview.d.ts +27 -0
  401. package/dist/views/metadata-admin/previews/ValidationPreview.js +110 -0
  402. package/dist/views/metadata-admin/previews/ViewColumnPanes.d.ts +62 -0
  403. package/dist/views/metadata-admin/previews/ViewColumnPanes.js +140 -0
  404. package/dist/views/metadata-admin/previews/ViewPreview.d.ts +23 -1
  405. package/dist/views/metadata-admin/previews/ViewPreview.js +101 -73
  406. package/dist/views/metadata-admin/previews/block-config.d.ts +82 -0
  407. package/dist/views/metadata-admin/previews/block-config.js +324 -0
  408. package/dist/views/metadata-admin/previews/block-types.d.ts +40 -0
  409. package/dist/views/metadata-admin/previews/block-types.js +110 -0
  410. package/dist/views/metadata-admin/previews/field-types.d.ts +53 -0
  411. package/dist/views/metadata-admin/previews/field-types.js +97 -0
  412. package/dist/views/metadata-admin/previews/flow-canvas-layout.d.ts +88 -0
  413. package/dist/views/metadata-admin/previews/flow-canvas-layout.js +190 -0
  414. package/dist/views/metadata-admin/previews/flow-canvas-parts.d.ts +88 -0
  415. package/dist/views/metadata-admin/previews/flow-canvas-parts.js +358 -0
  416. package/dist/views/metadata-admin/previews/form-preview.d.ts +24 -0
  417. package/dist/views/metadata-admin/previews/form-preview.js +29 -0
  418. package/dist/views/metadata-admin/previews/index.js +43 -0
  419. package/dist/views/metadata-admin/previews/object-fields-bridge.d.ts +66 -0
  420. package/dist/views/metadata-admin/previews/object-fields-bridge.js +171 -0
  421. package/dist/views/metadata-admin/previews/object-fields-io.d.ts +109 -0
  422. package/dist/views/metadata-admin/previews/object-fields-io.js +208 -0
  423. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.d.ts +91 -0
  424. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.js +2 -0
  425. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.d.ts +8 -0
  426. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.js +113 -0
  427. package/dist/views/metadata-admin/previews/simulator/flow-simulator.d.ts +44 -0
  428. package/dist/views/metadata-admin/previews/simulator/flow-simulator.js +316 -0
  429. package/dist/views/metadata-admin/previews/useDatasetCatalog.d.ts +47 -0
  430. package/dist/views/metadata-admin/previews/useDatasetCatalog.js +133 -0
  431. package/dist/views/metadata-admin/previews/useFlowNodePalette.d.ts +44 -0
  432. package/dist/views/metadata-admin/previews/useFlowNodePalette.js +124 -0
  433. package/dist/views/metadata-admin/previews/useMetaOptions.d.ts +8 -0
  434. package/dist/views/metadata-admin/previews/useMetaOptions.js +50 -0
  435. package/dist/views/metadata-admin/previews/useObjectFields.d.ts +23 -0
  436. package/dist/views/metadata-admin/previews/useObjectFields.js +79 -0
  437. package/dist/views/metadata-admin/previews/useObjectOptions.d.ts +8 -0
  438. package/dist/views/metadata-admin/previews/useObjectOptions.js +43 -0
  439. package/dist/views/metadata-admin/previews/view-column-io.d.ts +42 -0
  440. package/dist/views/metadata-admin/previews/view-column-io.js +73 -0
  441. package/dist/views/metadata-admin/previews/widget-types.d.ts +24 -0
  442. package/dist/views/metadata-admin/previews/widget-types.js +40 -0
  443. package/dist/views/metadata-admin/registry.d.ts +140 -19
  444. package/dist/views/metadata-admin/report-schema.d.ts +26 -0
  445. package/dist/views/metadata-admin/report-schema.js +121 -0
  446. package/dist/views/metadata-admin/useMetadata.d.ts +100 -2
  447. package/dist/views/metadata-admin/useMetadata.js +155 -4
  448. package/dist/views/metadata-admin/view-item-normalize.d.ts +20 -0
  449. package/dist/views/metadata-admin/view-item-normalize.js +68 -0
  450. package/dist/views/metadata-admin/view-schema.d.ts +16 -0
  451. package/dist/views/metadata-admin/view-schema.js +107 -0
  452. package/dist/views/metadata-admin/view-variant-model.d.ts +23 -0
  453. package/dist/views/metadata-admin/view-variant-model.js +64 -0
  454. package/dist/views/metadata-admin/widgets.d.ts +89 -1
  455. package/dist/views/metadata-admin/widgets.js +491 -17
  456. package/dist/views/runtime-metadata-persistence.d.ts +78 -0
  457. package/dist/views/runtime-metadata-persistence.js +89 -0
  458. package/dist/views/useOpenRecordList.d.ts +18 -0
  459. package/dist/views/useOpenRecordList.js +36 -0
  460. package/dist/views/userFilterUrlState.d.ts +15 -0
  461. package/dist/views/userFilterUrlState.js +53 -0
  462. package/dist/views/view-config-adapter.d.ts +38 -0
  463. package/dist/views/view-config-adapter.js +80 -0
  464. package/package.json +52 -34
  465. package/dist/views/DesignDrawer.d.ts +0 -28
  466. package/dist/views/DesignDrawer.js +0 -51
  467. package/dist/views/metadata-admin/DesignerEditorWrapper.d.ts +0 -68
  468. package/dist/views/metadata-admin/DesignerEditorWrapper.js +0 -158
@@ -0,0 +1,347 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Interface List Page — ADR-0047 interface mode.
4
+ *
5
+ * Renders a page whose `interfaceConfig` binds a single source view into an
6
+ * author-curated list surface. Where ObjectView (data mode) shows ALL of an
7
+ * object's list views as switcher tabs and lets users create views, this
8
+ * surface is deliberately closed:
9
+ *
10
+ * • the page REFERENCES one view (`interfaceConfig.sourceView`) — columns,
11
+ * base filter and sort are inherited, never restated (the iron rule);
12
+ * • end users get exactly the `userFilters` the author enabled;
13
+ * • the visualization comes from `appearance.allowedVisualizations`
14
+ * (a single entry renders no switcher);
15
+ * • `userActions` toggles map onto the toolbar — advanced filtering and
16
+ * view management are absent by default.
17
+ */
18
+ import * as React from 'react';
19
+ import { useSearchParams, useNavigate } from 'react-router-dom';
20
+ import { ListView } from '@object-ui/plugin-list';
21
+ import { useAdapter, SchemaRenderer, useNavigationOverlay } from '@object-ui/react';
22
+ import { Empty, EmptyTitle, EmptyDescription, NavigationOverlay } from '@object-ui/components';
23
+ import { Database } from 'lucide-react';
24
+ import { useObjectTranslation } from '@object-ui/i18n';
25
+ import { useMetadata } from '../providers/MetadataProvider';
26
+ import { parseUserFilterParams, applyUserFilterParams } from './userFilterUrlState';
27
+ import { RecordDetailView } from './RecordDetailView';
28
+ /**
29
+ * Resolve the source list view from the merged object definition.
30
+ * Views merged from ADR-0017 ViewItems are keyed `<object>.<key>`;
31
+ * the page author writes the bare key (`sourceView: 'default'`).
32
+ */
33
+ /** A view "carries columns" only when its column list is actually non-empty. */
34
+ function hasColumns(v) {
35
+ return Array.isArray(v?.columns) && v.columns.length > 0;
36
+ }
37
+ function resolveSourceView(objectDef, sourceView) {
38
+ const views = objectDef?.listViews || objectDef?.list_views || {};
39
+ // ADR-0017 expansion can serve a default-view item with an empty config
40
+ // while the full body lives on `objectDef.list` — prefer candidates that
41
+ // actually carry columns over hollow name matches. An empty `columns: []`
42
+ // is truthy in JS but renders a column-less grid, so check for non-empty.
43
+ const candidates = sourceView
44
+ ? [
45
+ views[`${objectDef?.name}.${sourceView}`],
46
+ views[sourceView],
47
+ ...(sourceView === 'default' || sourceView === 'list' ? [objectDef?.list] : []),
48
+ ]
49
+ : [objectDef?.list, ...Object.values(views)];
50
+ const present = candidates.filter(Boolean);
51
+ return present.find(hasColumns) ?? present[0];
52
+ }
53
+ /**
54
+ * Default column set when the resolved view carries none — mirrors
55
+ * ObjectView's data-mode fallback so an interface page never renders a
56
+ * column-less grid. Priority: curated `compactLayout`, else the first
57
+ * business fields (system/audit columns excluded).
58
+ */
59
+ const SYSTEM_FIELDS = new Set([
60
+ 'id', 'created_at', 'createdAt', 'updated_at', 'updatedAt',
61
+ 'deleted_at', 'deletedAt', 'created_by', 'createdBy',
62
+ 'updated_by', 'updatedBy', '_version', '_rev',
63
+ ]);
64
+ function defaultColumnsFromObject(objectDef) {
65
+ if (Array.isArray(objectDef?.compactLayout) && objectDef.compactLayout.length > 0) {
66
+ return objectDef.compactLayout.filter((n) => objectDef.fields?.[n]);
67
+ }
68
+ const fields = objectDef?.fields;
69
+ if (fields && typeof fields === 'object') {
70
+ return Object.entries(fields)
71
+ .filter(([name, f]) => f && !f.hidden && !SYSTEM_FIELDS.has(name))
72
+ .map(([name]) => name)
73
+ .slice(0, 6);
74
+ }
75
+ return [];
76
+ }
77
+ /**
78
+ * Default visualization bindings derived from the object's fields.
79
+ *
80
+ * ADR-0047: an interface page sets `appearance.allowedVisualizations` to
81
+ * whitelist renderers, but a viz only renders when its field binding
82
+ * resolves (kanban needs a group field, calendar a date, gallery a cover).
83
+ * The page config has nowhere to set those, so — like `defaultColumnsFromObject`
84
+ * — we auto-pick a sensible binding from the object (Airtable does the same
85
+ * when you switch to Kanban). Without this, a whitelisted kanban is silently
86
+ * dropped from the switcher and the author gets no feedback.
87
+ */
88
+ function firstFieldMatching(objectDef, pred) {
89
+ const fields = objectDef?.fields;
90
+ if (!fields || typeof fields !== 'object')
91
+ return undefined;
92
+ const hit = Object.entries(fields).find(([name, f]) => f && !f.hidden && !SYSTEM_FIELDS.has(name) && pred(name, f));
93
+ return hit?.[0];
94
+ }
95
+ const SELECT_TYPES = new Set(['select', 'multiselect', 'radio', 'enum', 'boolean']);
96
+ const DATE_TYPES = new Set(['date', 'datetime', 'time']);
97
+ const IMAGE_TYPES = new Set(['image', 'file', 'attachment', 'avatar', 'photo']);
98
+ export function defaultKanbanFromObject(objectDef) {
99
+ const field = firstFieldMatching(objectDef, (_n, f) => SELECT_TYPES.has(f.type)) ??
100
+ firstFieldMatching(objectDef, (n) => /status|stage|state|priority|category|kind/i.test(n));
101
+ // ListView reads `groupField` to render and `groupByField || groupField`
102
+ // to decide the viz is available — set both so it resolves either way.
103
+ return field ? { groupField: field, groupByField: field } : undefined;
104
+ }
105
+ function defaultDateField(objectDef) {
106
+ return (firstFieldMatching(objectDef, (_n, f) => DATE_TYPES.has(f.type)) ??
107
+ firstFieldMatching(objectDef, (n) => /date|due|start|end|deadline|schedule/i.test(n)));
108
+ }
109
+ export function defaultCalendarFromObject(objectDef) {
110
+ const field = defaultDateField(objectDef);
111
+ return field ? { startDateField: field } : undefined;
112
+ }
113
+ export function defaultGalleryFromObject(objectDef) {
114
+ const field = firstFieldMatching(objectDef, (_n, f) => IMAGE_TYPES.has(f.type));
115
+ return field ? { coverField: field } : undefined;
116
+ }
117
+ const LOCATION_TYPES = new Set(['location', 'geo', 'geolocation', 'geopoint', 'point']);
118
+ // Gantt needs BOTH a start and an end date. Prefer name-disambiguated fields
119
+ // (start_date / end_date / due_date), else fall back to the first two date
120
+ // fields. Returns undefined unless two distinct dates resolve.
121
+ export function defaultGanttFromObject(objectDef) {
122
+ const start = firstFieldMatching(objectDef, (n, f) => DATE_TYPES.has(f.type) && /start|begin|kickoff/i.test(n)) ??
123
+ firstFieldMatching(objectDef, (_n, f) => DATE_TYPES.has(f.type));
124
+ if (!start)
125
+ return undefined;
126
+ const end = firstFieldMatching(objectDef, (n, f) => DATE_TYPES.has(f.type) && n !== start && /end|due|finish|deadline|close/i.test(n)) ??
127
+ firstFieldMatching(objectDef, (_n, f) => DATE_TYPES.has(f.type) && _n !== start);
128
+ if (!end)
129
+ return undefined;
130
+ const progress = firstFieldMatching(objectDef, (n, f) => (f.type === 'number' || f.type === 'percent') && /progress|percent|complete/i.test(n));
131
+ return { startDateField: start, endDateField: end, ...(progress ? { progressField: progress } : {}) };
132
+ }
133
+ // Map needs a location/geo field (or address). Auto-derive from a location-typed
134
+ // field, else a field whose name looks geographic.
135
+ export function defaultMapFromObject(objectDef) {
136
+ const field = firstFieldMatching(objectDef, (_n, f) => LOCATION_TYPES.has(f.type)) ??
137
+ firstFieldMatching(objectDef, (n) => /location|address|geo|coords?|place|venue/i.test(n));
138
+ return field ? { locationField: field } : undefined;
139
+ }
140
+ export function InterfaceListPage({ page, className, onConfigChange, reserveEditAffordance }) {
141
+ const { t } = useObjectTranslation();
142
+ const { objects } = useMetadata();
143
+ const dataSource = useAdapter();
144
+ const navigate = useNavigate();
145
+ const [searchParams, setSearchParams] = useSearchParams();
146
+ // ADR-0047 filter persistence: restore `uf_*` URL params once at mount,
147
+ // mirror every selection change back (replace — no history spam).
148
+ const [initialUfSelections] = React.useState(() => parseUserFilterParams(new URLSearchParams(window.location.search)));
149
+ const handleUserFilterSelectionsChange = React.useCallback((selections) => {
150
+ setSearchParams(prev => applyUserFilterParams(prev, selections), { replace: true });
151
+ }, [setSearchParams]);
152
+ const cfg = page?.interfaceConfig || {};
153
+ const objectDef = React.useMemo(() => (objects || []).find((o) => o.name === cfg.source), [objects, cfg.source]);
154
+ const resolvedView = React.useMemo(() => resolveSourceView(objectDef, cfg.sourceView), [objectDef, cfg.sourceView]);
155
+ // ── Record open behavior (ADR-0047) — how clicking a record opens its detail.
156
+ // 'drawer' (default) = right-side peek panel rendering the record's detail
157
+ // page; 'page' = full-page navigate to the record route; 'none' = not
158
+ // clickable. Restores record-opening on interface pages (previously a no-op)
159
+ // and makes it author-configurable.
160
+ const recordAction = cfg.recordAction === 'page' || cfg.recordAction === 'modal' || cfg.recordAction === 'none'
161
+ ? cfg.recordAction
162
+ : 'drawer';
163
+ const recordUrl = React.useCallback((id) => {
164
+ const seg = window.location.pathname.split('/');
165
+ const appSeg = seg[2] || '';
166
+ return `/apps/${appSeg}/${cfg.source}/record/${encodeURIComponent(String(id))}`;
167
+ }, [cfg.source]);
168
+ const navOverlay = useNavigationOverlay({
169
+ navigation: { mode: recordAction === 'none' ? 'none' : recordAction },
170
+ objectName: cfg.source,
171
+ onNavigate: (id) => navigate(recordUrl(id)),
172
+ });
173
+ const drawerRecordId = searchParams.get('recordId');
174
+ const handleRecordClick = React.useCallback((record, event) => {
175
+ if (recordAction === 'none')
176
+ return;
177
+ const id = record?.id ?? record?._id;
178
+ const isMod = !!(event && (event.metaKey || event.ctrlKey || event.button === 1));
179
+ if (isMod && id != null) {
180
+ window.open(recordUrl(id), '_blank');
181
+ return;
182
+ }
183
+ // Overlay modes are URL-driven (?recordId=…) so the drawer is shareable
184
+ // and survives refresh — same convention as ObjectView.
185
+ if ((recordAction === 'drawer' || recordAction === 'modal') && id != null) {
186
+ setSearchParams((prev) => { const n = new URLSearchParams(prev); n.set('recordId', String(id)); return n; });
187
+ return;
188
+ }
189
+ navOverlay.handleClick(record, event);
190
+ }, [recordAction, recordUrl, navOverlay, setSearchParams]);
191
+ const closeRecordDrawer = React.useCallback(() => {
192
+ setSearchParams((prev) => { const n = new URLSearchParams(prev); n.delete('recordId'); return n; });
193
+ }, [setSearchParams]);
194
+ React.useEffect(() => {
195
+ if (drawerRecordId && !navOverlay.isOpen)
196
+ navOverlay.open({ id: drawerRecordId });
197
+ else if (!drawerRecordId && navOverlay.isOpen)
198
+ navOverlay.close();
199
+ // eslint-disable-next-line react-hooks/exhaustive-deps
200
+ }, [drawerRecordId]);
201
+ // The view list endpoint can serve hollow expansion items (no columns);
202
+ // the full body lives behind the per-view overlay API — the same
203
+ // hydration ObjectView performs. Only fetch when the resolution came up
204
+ // hollow.
205
+ //
206
+ // IMPORTANT: the deps are SCALARS, not the objectDef/resolvedView object
207
+ // identities. `useMetadata().objects` is rebuilt per render, so identity
208
+ // deps re-fire this effect on every render — and the unconditional
209
+ // `setHydratedView(null)` then ping-pongs with the async `setHydratedView
210
+ // (full)` into an infinite render/refetch loop the moment anything (e.g.
211
+ // a `uf_*` URL write) re-renders this component after hydration settled.
212
+ const objectDefName = objectDef?.name;
213
+ // Hollow = no *non-empty* column list. An empty `columns: []` reads as
214
+ // truthy but renders nothing, so it must still trigger hydration.
215
+ const resolvedViewHollow = !!resolvedView && !hasColumns(resolvedView);
216
+ const resolvedViewKey = resolvedView?.name
217
+ ?? (cfg.sourceView ? `${cfg.source}.${cfg.sourceView}` : undefined);
218
+ const [hydratedView, setHydratedView] = React.useState(null);
219
+ React.useEffect(() => {
220
+ let cancelled = false;
221
+ setHydratedView(null);
222
+ if (!objectDefName || !cfg.source || !resolvedViewHollow || !resolvedViewKey)
223
+ return;
224
+ (async () => {
225
+ try {
226
+ const ds = dataSource;
227
+ let full = null;
228
+ if (typeof ds?.listViewOverrides === 'function') {
229
+ const all = await ds.listViewOverrides(cfg.source);
230
+ full = all?.[resolvedViewKey] ?? null;
231
+ }
232
+ if (!hasColumns(full) && typeof ds?.getView === 'function') {
233
+ full = await ds.getView(cfg.source, resolvedViewKey);
234
+ }
235
+ if (!cancelled && full && typeof full === 'object')
236
+ setHydratedView(full);
237
+ }
238
+ catch { /* hollow view stays hollow — renderer falls back to defaults */ }
239
+ })();
240
+ return () => { cancelled = true; };
241
+ }, [objectDefName, cfg.source, cfg.sourceView, resolvedViewHollow, resolvedViewKey, dataSource]);
242
+ const viewDef = React.useMemo(() => (hydratedView ? { ...resolvedView, ...hydratedView } : resolvedView), [resolvedView, hydratedView]);
243
+ // Key the schema on CONTENT, not object identity — `objects` (and thus
244
+ // objectDef/resolvedView) are rebuilt per render, and a new schema
245
+ // identity makes ListView refetch. The serialized view config is small.
246
+ const viewDefJson = JSON.stringify(viewDef ?? null);
247
+ const schema = React.useMemo(() => {
248
+ if (!objectDef)
249
+ return undefined;
250
+ const view = viewDef || {};
251
+ const appearance = cfg.appearance ?? view.appearance;
252
+ const allowed = appearance?.allowedVisualizations || [];
253
+ const allowedSet = new Set(allowed);
254
+ const userActions = cfg.userActions || {};
255
+ // Viz field bindings: the referenced view's config wins; otherwise, when
256
+ // the author whitelisted a viz, derive a sensible default binding from the
257
+ // object so the switcher actually offers (and renders) it. Only derive for
258
+ // whitelisted types — an un-whitelisted viz is never reachable.
259
+ const kanban = view.kanban ?? (allowedSet.has('kanban') ? defaultKanbanFromObject(objectDef) : undefined);
260
+ const calendar = view.calendar ?? (allowedSet.has('calendar') ? defaultCalendarFromObject(objectDef) : undefined);
261
+ const timeline = view.timeline ?? (allowedSet.has('timeline') ? defaultCalendarFromObject(objectDef) : undefined);
262
+ const gallery = view.gallery ?? (allowedSet.has('gallery') ? defaultGalleryFromObject(objectDef) : undefined);
263
+ const gantt = view.gantt ?? (allowedSet.has('gantt') ? defaultGanttFromObject(objectDef) : undefined);
264
+ // Map binding lives under options.map (locationField); auto-derive when
265
+ // whitelisted so a map interface page renders without hand-wiring.
266
+ const mapCfg = view.options?.map ?? (allowedSet.has('map') ? defaultMapFromObject(objectDef) : undefined);
267
+ // Data semantics — ADR-0047 (revised): the PAGE owns its view metadata.
268
+ // Precedence everywhere: the page's own config → legacy sourceView view
269
+ // (back-compat) → a sensible default derived from the object.
270
+ const filters = [
271
+ ...(Array.isArray(view.filter) ? view.filter : []),
272
+ ...(Array.isArray(cfg.filterBy) ? cfg.filterBy : []),
273
+ ];
274
+ // Columns: the page's own `columns` win; else the legacy referenced view's;
275
+ // else a default from the object so the grid never renders just the
276
+ // row-number column.
277
+ const columns = hasColumns(cfg)
278
+ ? cfg.columns
279
+ : hasColumns(view)
280
+ ? view.columns
281
+ : defaultColumnsFromObject(objectDef);
282
+ // Sort: the page's own first, then the legacy view's.
283
+ const sort = Array.isArray(cfg.sort) && cfg.sort.length ? cfg.sort : view.sort;
284
+ return {
285
+ type: 'list-view',
286
+ objectName: objectDef.name,
287
+ viewType: (allowed[0] ?? view.type ?? 'grid'),
288
+ fields: columns,
289
+ ...(filters.length ? { filters } : {}),
290
+ ...(sort?.length ? { sort } : {}),
291
+ grouping: view.grouping,
292
+ rowColor: view.rowColor,
293
+ pagination: view.pagination,
294
+ searchableFields: view.searchableFields,
295
+ emptyState: view.emptyState,
296
+ kanban,
297
+ calendar,
298
+ gallery,
299
+ timeline,
300
+ gantt,
301
+ ...((mapCfg || view.options) ? { options: { ...(view.options ?? {}), ...(mapCfg ? { map: mapCfg } : {}) } } : {}),
302
+ // Presentation policy — the page layer (ADR-0047).
303
+ userFilters: cfg.userFilters ?? view.userFilters,
304
+ appearance,
305
+ showViewSwitcher: allowed.length > 1,
306
+ showRecordCount: cfg.showRecordCount,
307
+ // Add-record entry point (ListView gates the button on addRecord.enabled,
308
+ // independent of the active visualization). Without forwarding this, the
309
+ // panel's "Add Record" config silently did nothing at runtime.
310
+ addRecord: cfg.addRecord,
311
+ // userActions toggles → toolbar flags. Interface mode is closed by
312
+ // default: the advanced filter builder and view-management tools are
313
+ // only present when the author opted in.
314
+ showSearch: userActions.search !== false,
315
+ showSort: userActions.sort !== false,
316
+ showFilters: userActions.filter === true,
317
+ showDensity: userActions.rowHeight === true,
318
+ showHideFields: false,
319
+ showGroup: false,
320
+ showColor: false,
321
+ allowExport: false,
322
+ inlineEdit: false,
323
+ };
324
+ // eslint-disable-next-line react-hooks/exhaustive-deps
325
+ }, [objectDefName, viewDefJson, cfg]);
326
+ if (!objectDef || !schema) {
327
+ return (_jsx("div", { className: "h-full flex items-center justify-center p-8", children: _jsxs(Empty, { children: [_jsx("div", { className: "mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-muted", children: _jsx(Database, { className: "h-6 w-6 text-muted-foreground" }) }), _jsx(EmptyTitle, { children: t('empty.objectNotFound', { defaultValue: 'Source object not found' }) }), _jsx(EmptyDescription, { children: t('empty.interfacePageSourceMissing', {
328
+ defaultValue: 'This interface page references "{{name}}", which is not available.',
329
+ name: cfg.source || '?',
330
+ }) })] }) }));
331
+ }
332
+ // Toolbar buttons ARE object actions (ADR-0047): resolve the configured
333
+ // action names against the source object's ActionSchema and render them via
334
+ // the shared action:bar (which handles execution).
335
+ const buttonActions = Array.isArray(cfg.buttons) && cfg.buttons.length
336
+ ? cfg.buttons
337
+ .map((name) => (objectDef.actions || []).find((a) => a?.name === name))
338
+ .filter(Boolean)
339
+ // The author explicitly chose these as page buttons, so surface them in
340
+ // the toolbar regardless of the action's own `locations` (the action:bar
341
+ // filters by location).
342
+ .map((a) => ({ ...a, locations: ['list_toolbar'] }))
343
+ : [];
344
+ return (_jsxs("div", { className: className ?? 'h-full flex flex-col', "data-testid": "interface-list-page", children: [_jsxs("div", { className: `pl-4 pt-4 pb-2 shrink-0 flex items-start justify-between gap-3 ${reserveEditAffordance ? 'pr-12' : 'pr-4'}`, children: [_jsxs("div", { className: "min-w-0", children: [_jsx("h1", { className: "text-lg font-semibold leading-tight", children: typeof page.label === 'string' ? page.label : page.name }), typeof page.description === 'string' && page.description && (_jsx("p", { className: "text-sm text-muted-foreground mt-0.5", children: page.description }))] }), buttonActions.length > 0 && (_jsx("div", { className: "shrink-0", "data-testid": "interface-page-buttons", children: _jsx(SchemaRenderer, { schema: { type: 'action:bar', location: 'list_toolbar', actions: buttonActions, size: 'sm', variant: 'outline' } }) }))] }), _jsx("div", { className: "flex-1 min-h-0 overflow-auto", children: _jsx(ListView, { schema: schema, dataSource: dataSource, userFilterSelections: initialUfSelections, onUserFilterSelectionsChange: handleUserFilterSelectionsChange, onSortChange: onConfigChange ? (sort) => onConfigChange({ sort }) : undefined, onColumnStateChange: onConfigChange ? (st) => { if (st?.order?.length)
345
+ onConfigChange({ columns: st.order }); } : undefined, onRowClick: recordAction === 'none' ? undefined : handleRecordClick }) }), navOverlay.isOverlay && (_jsx(NavigationOverlay, { ...navOverlay, setIsOpen: (o) => { if (!o)
346
+ closeRecordDrawer(); }, title: typeof page.label === 'string' ? page.label : (cfg.source || 'Record'), children: (record) => (_jsx(RecordDetailView, { objectNameOverride: cfg.source, recordIdOverride: String(record?.id ?? record?._id ?? drawerRecordId ?? ''), embedded: true, dataSource: dataSource, objects: objects, onEdit: () => { } })) }))] }));
347
+ }
@@ -24,11 +24,11 @@ export declare function MetadataToggle({ open, onToggle, className }: {
24
24
  open: boolean;
25
25
  onToggle: () => void;
26
26
  className?: string;
27
- }): import("react/jsx-runtime").JSX.Element;
27
+ }): import("react").JSX.Element;
28
28
  /**
29
29
  * The side panel that renders JSON metadata sections.
30
30
  */
31
- export declare function MetadataPanel({ sections, open }: Omit<MetadataInspectorProps, 'onToggle'>): import("react/jsx-runtime").JSX.Element | null;
31
+ export declare function MetadataPanel({ sections, open }: Omit<MetadataInspectorProps, 'onToggle'>): import("react").JSX.Element | null;
32
32
  /**
33
33
  * Hook to manage MetadataInspector open/close state.
34
34
  * Automatically opens when `?__debug` URL parameter is present.
@@ -8,4 +8,4 @@
8
8
  * - useObjectActions for toolbar create button
9
9
  * - ListView delegation for non-grid view types (kanban, calendar, chart, etc.)
10
10
  */
11
- export declare function ObjectView({ dataSource, objects, onEdit, externalRefreshKey }: any): import("react/jsx-runtime").JSX.Element;
11
+ export declare function ObjectView({ dataSource, objects, onEdit, externalRefreshKey }: any): import("react").JSX.Element;