@object-ui/app-shell 6.2.3 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (486) hide show
  1. package/CHANGELOG.md +1229 -0
  2. package/README.md +292 -0
  3. package/dist/assistant/assistantBus.d.ts +72 -0
  4. package/dist/assistant/assistantBus.js +133 -0
  5. package/dist/chrome/CommandPalette.d.ts +1 -1
  6. package/dist/chrome/CommandPalette.js +26 -22
  7. package/dist/chrome/ConditionalAuthWrapper.d.ts +1 -1
  8. package/dist/chrome/ConsoleToaster.d.ts +1 -1
  9. package/dist/chrome/ConsoleToaster.js +3 -1
  10. package/dist/chrome/ErrorBoundary.d.ts +1 -1
  11. package/dist/chrome/KeyboardShortcutsDialog.d.ts +1 -1
  12. package/dist/chrome/KeyboardShortcutsDialog.js +16 -5
  13. package/dist/chrome/LoadingScreen.d.ts +1 -1
  14. package/dist/chrome/LoadingScreen.js +22 -26
  15. package/dist/chrome/RouteFader.d.ts +1 -1
  16. package/dist/chrome/ThemeProvider.d.ts +1 -1
  17. package/dist/components/ManagedByBadge.d.ts +1 -1
  18. package/dist/console/AppContent.d.ts +1 -1
  19. package/dist/console/AppContent.js +184 -39
  20. package/dist/console/ConsoleShell.d.ts +7 -7
  21. package/dist/console/ConsoleShell.js +32 -3
  22. package/dist/console/ai/AiChatPage.d.ts +88 -1
  23. package/dist/console/ai/AiChatPage.js +747 -66
  24. package/dist/console/ai/ConversationsSidebar.d.ts +26 -1
  25. package/dist/console/ai/ConversationsSidebar.js +149 -34
  26. package/dist/console/ai/LiveCanvas.d.ts +28 -0
  27. package/dist/console/ai/LiveCanvas.js +80 -0
  28. package/dist/console/ai/reconcileTurn.d.ts +8 -0
  29. package/dist/console/ai/reconcileTurn.js +20 -0
  30. package/dist/console/auth/AuthPageLayout.d.ts +1 -1
  31. package/dist/console/auth/ForgotPasswordPage.d.ts +1 -1
  32. package/dist/console/auth/LoginPage.d.ts +1 -1
  33. package/dist/console/auth/RegisterPage.d.ts +1 -1
  34. package/dist/console/auth/RegisterPage.js +23 -3
  35. package/dist/console/cloud-connection/CloudConnectionPanel.d.ts +1 -0
  36. package/dist/console/cloud-connection/CloudConnectionPanel.js +169 -0
  37. package/dist/console/home/AppCard.d.ts +1 -1
  38. package/dist/console/home/AppCard.js +6 -12
  39. package/dist/console/home/HomeAppsStrip.d.ts +8 -0
  40. package/dist/console/home/HomeAppsStrip.js +61 -0
  41. package/dist/console/home/HomeLayout.d.ts +1 -1
  42. package/dist/console/home/HomeLayout.js +3 -1
  43. package/dist/console/home/HomePage.d.ts +1 -2
  44. package/dist/console/home/HomePage.js +149 -21
  45. package/dist/console/home/HomeRail.d.ts +22 -0
  46. package/dist/console/home/HomeRail.js +62 -0
  47. package/dist/console/home/QuickActions.d.ts +1 -1
  48. package/dist/console/home/QuickActions.js +3 -11
  49. package/dist/console/home/RecentApps.d.ts +1 -1
  50. package/dist/console/home/RecentApps.js +2 -2
  51. package/dist/console/home/StarredApps.d.ts +1 -1
  52. package/dist/console/home/StarredApps.js +2 -2
  53. package/dist/console/marketplace/InstalledListWidget.d.ts +1 -0
  54. package/dist/console/marketplace/InstalledListWidget.js +93 -0
  55. package/dist/console/marketplace/MarkdownText.d.ts +1 -1
  56. package/dist/console/marketplace/MarketplaceAccessDenied.d.ts +1 -1
  57. package/dist/console/marketplace/MarketplaceInstalledPage.d.ts +8 -14
  58. package/dist/console/marketplace/MarketplaceInstalledPage.js +14 -66
  59. package/dist/console/marketplace/MarketplacePackagePage.d.ts +1 -1
  60. package/dist/console/marketplace/MarketplacePackagePage.js +249 -8
  61. package/dist/console/marketplace/MarketplacePage.d.ts +1 -1
  62. package/dist/console/marketplace/MarketplacePage.js +60 -3
  63. package/dist/console/marketplace/PackageIcon.d.ts +1 -1
  64. package/dist/console/marketplace/PluginDisclosure.d.ts +14 -0
  65. package/dist/console/marketplace/PluginDisclosure.js +38 -0
  66. package/dist/console/marketplace/marketplaceApi.d.ts +123 -0
  67. package/dist/console/marketplace/marketplaceApi.js +254 -1
  68. package/dist/console/organizations/CreateWorkspaceDialog.d.ts +1 -1
  69. package/dist/console/organizations/OrganizationsLayout.d.ts +1 -1
  70. package/dist/console/organizations/OrganizationsPage.d.ts +1 -1
  71. package/dist/console/organizations/manage/AcceptInvitationPage.d.ts +1 -1
  72. package/dist/console/organizations/manage/InvitationsPage.d.ts +1 -1
  73. package/dist/console/organizations/manage/InviteMemberDialog.d.ts +1 -1
  74. package/dist/console/organizations/manage/MembersPage.d.ts +1 -1
  75. package/dist/console/organizations/manage/OrganizationLayout.d.ts +1 -1
  76. package/dist/console/organizations/manage/SettingsPage.d.ts +1 -1
  77. package/dist/context/CommandPaletteProvider.d.ts +44 -0
  78. package/dist/context/CommandPaletteProvider.js +71 -0
  79. package/dist/context/FavoritesProvider.d.ts +1 -1
  80. package/dist/context/NavigationContext.d.ts +1 -1
  81. package/dist/context/RecentItemsProvider.d.ts +2 -2
  82. package/dist/context/UserStateAdapters.d.ts +1 -1
  83. package/dist/context/index.d.ts +2 -0
  84. package/dist/context/index.js +1 -0
  85. package/dist/hooks/index.d.ts +5 -2
  86. package/dist/hooks/index.js +4 -1
  87. package/dist/hooks/useActionModal.d.ts +53 -0
  88. package/dist/hooks/useActionModal.js +111 -0
  89. package/dist/hooks/useChatConversation.d.ts +137 -4
  90. package/dist/hooks/useChatConversation.js +316 -25
  91. package/dist/hooks/useConsoleActionRuntime.d.ts +70 -0
  92. package/dist/hooks/useConsoleActionRuntime.js +564 -0
  93. package/dist/hooks/useConversationList.js +61 -3
  94. package/dist/hooks/useHomeInbox.d.ts +13 -0
  95. package/dist/hooks/useHomeInbox.js +142 -0
  96. package/dist/hooks/useNavPins.js +17 -23
  97. package/dist/hooks/useNavigationSync.d.ts +33 -0
  98. package/dist/hooks/useNavigationSync.js +98 -12
  99. package/dist/hooks/useReconcileOnError.d.ts +40 -0
  100. package/dist/hooks/useReconcileOnError.js +37 -0
  101. package/dist/hooks/useRecordApprovals.d.ts +18 -19
  102. package/dist/hooks/useRecordApprovals.js +24 -40
  103. package/dist/hooks/useResponsiveSidebar.js +14 -5
  104. package/dist/hooks/useSettleSignal.d.ts +19 -0
  105. package/dist/hooks/useSettleSignal.js +20 -0
  106. package/dist/hooks/useTrackRouteAsRecent.js +35 -0
  107. package/dist/hooks/useUrlOverlay.d.ts +62 -0
  108. package/dist/hooks/useUrlOverlay.js +88 -0
  109. package/dist/index.d.ts +18 -8
  110. package/dist/index.js +17 -5
  111. package/dist/layout/ActivityFeed.d.ts +1 -1
  112. package/dist/layout/AppHeader.d.ts +3 -2
  113. package/dist/layout/AppHeader.js +237 -72
  114. package/dist/layout/AppSidebar.d.ts +2 -1
  115. package/dist/layout/AppSidebar.js +26 -46
  116. package/dist/layout/AppSwitcher.d.ts +2 -1
  117. package/dist/layout/AppSwitcher.js +9 -5
  118. package/dist/layout/AuthPageLayout.d.ts +1 -1
  119. package/dist/layout/ConnectionStatus.d.ts +1 -1
  120. package/dist/layout/ConnectionStatus.js +9 -6
  121. package/dist/layout/ConsoleChatbotFab.d.ts +19 -1
  122. package/dist/layout/ConsoleChatbotFab.js +16 -2
  123. package/dist/layout/ConsoleFloatingChatbot.d.ts +34 -2
  124. package/dist/layout/ConsoleFloatingChatbot.js +391 -41
  125. package/dist/layout/ConsoleLayout.d.ts +1 -1
  126. package/dist/layout/ConsoleLayout.js +27 -11
  127. package/dist/layout/ContextSelectors.d.ts +44 -0
  128. package/dist/layout/ContextSelectors.js +242 -0
  129. package/dist/layout/InboxPopover.d.ts +6 -1
  130. package/dist/layout/InboxPopover.js +25 -6
  131. package/dist/layout/LocaleSwitcher.d.ts +1 -1
  132. package/dist/layout/LocalizedSidebarTrigger.d.ts +2 -0
  133. package/dist/layout/LocalizedSidebarTrigger.js +15 -0
  134. package/dist/layout/MobileViewSwitcherContext.d.ts +1 -1
  135. package/dist/layout/ModeToggle.d.ts +1 -1
  136. package/dist/layout/PageHeader.d.ts +1 -1
  137. package/dist/layout/UnifiedSidebar.d.ts +2 -1
  138. package/dist/layout/UnifiedSidebar.js +116 -15
  139. package/dist/layout/agentPicker.d.ts +56 -0
  140. package/dist/layout/agentPicker.js +40 -0
  141. package/dist/observability/index.d.ts +1 -0
  142. package/dist/observability/index.js +1 -0
  143. package/dist/observability/settleSignal.d.ts +64 -0
  144. package/dist/observability/settleSignal.js +131 -0
  145. package/dist/preview/CommitTimeline.d.ts +15 -0
  146. package/dist/preview/CommitTimeline.js +82 -0
  147. package/dist/preview/DraftChangesPanel.d.ts +19 -0
  148. package/dist/preview/DraftChangesPanel.js +114 -0
  149. package/dist/preview/DraftPreviewBar.d.ts +8 -0
  150. package/dist/preview/DraftPreviewBar.js +86 -0
  151. package/dist/preview/PreviewDraftEmptyState.d.ts +16 -0
  152. package/dist/preview/PreviewDraftEmptyState.js +47 -0
  153. package/dist/preview/PreviewModeContext.d.ts +57 -0
  154. package/dist/preview/PreviewModeContext.js +99 -0
  155. package/dist/preview/UnpublishedAppBar.d.ts +8 -0
  156. package/dist/preview/UnpublishedAppBar.js +83 -0
  157. package/dist/preview/commitHistory.d.ts +28 -0
  158. package/dist/preview/commitHistory.js +48 -0
  159. package/dist/preview/draftStatus.d.ts +20 -0
  160. package/dist/preview/draftStatus.js +27 -0
  161. package/dist/preview/usePublishAllDrafts.d.ts +18 -0
  162. package/dist/preview/usePublishAllDrafts.js +106 -0
  163. package/dist/providers/AdapterProvider.d.ts +1 -1
  164. package/dist/providers/AdapterProvider.js +6 -1
  165. package/dist/providers/ExpressionProvider.d.ts +1 -1
  166. package/dist/providers/MetadataProvider.d.ts +17 -2
  167. package/dist/providers/MetadataProvider.js +192 -12
  168. package/dist/runtime-config.d.ts +46 -2
  169. package/dist/runtime-config.js +39 -2
  170. package/dist/services/builtinComponents.js +68 -59
  171. package/dist/skeletons/SkeletonDashboard.d.ts +1 -1
  172. package/dist/skeletons/SkeletonDetail.d.ts +1 -1
  173. package/dist/skeletons/SkeletonGrid.d.ts +1 -1
  174. package/dist/utils/appRoute.d.ts +21 -0
  175. package/dist/utils/appRoute.js +25 -0
  176. package/dist/utils/deriveRelatedLists.d.ts +54 -0
  177. package/dist/utils/deriveRelatedLists.js +91 -0
  178. package/dist/utils/index.d.ts +4 -0
  179. package/dist/utils/index.js +3 -0
  180. package/dist/utils/managedByEmptyState.d.ts +8 -1
  181. package/dist/utils/managedByEmptyState.js +13 -7
  182. package/dist/utils/preferLocal.d.ts +18 -0
  183. package/dist/utils/preferLocal.js +24 -0
  184. package/dist/views/ActionConfirmDialog.d.ts +1 -1
  185. package/dist/views/ActionConfirmDialog.js +3 -1
  186. package/dist/views/ActionParamDialog.d.ts +6 -1
  187. package/dist/views/ActionParamDialog.js +9 -3
  188. package/dist/views/ActionResultDialog.d.ts +13 -0
  189. package/dist/views/ActionResultDialog.js +134 -0
  190. package/dist/views/ComponentNavView.d.ts +14 -1
  191. package/dist/views/CreateViewDialog.d.ts +1 -1
  192. package/dist/views/DashboardConfigPanel.d.ts +28 -0
  193. package/dist/views/DashboardConfigPanel.js +81 -0
  194. package/dist/views/DashboardView.d.ts +4 -3
  195. package/dist/views/DashboardView.js +38 -239
  196. package/dist/views/FlowRunner.d.ts +31 -0
  197. package/dist/views/FlowRunner.js +121 -0
  198. package/dist/views/InterfaceListPage.d.ts +49 -0
  199. package/dist/views/InterfaceListPage.js +347 -0
  200. package/dist/views/MetadataInspector.d.ts +2 -2
  201. package/dist/views/ObjectView.d.ts +1 -1
  202. package/dist/views/ObjectView.js +209 -532
  203. package/dist/views/PageView.d.ts +8 -3
  204. package/dist/views/PageView.js +45 -32
  205. package/dist/views/RecordDetailView.d.ts +1 -1
  206. package/dist/views/RecordDetailView.js +363 -148
  207. package/dist/views/RecordFormPage.d.ts +1 -1
  208. package/dist/views/RecordFormPage.js +26 -1
  209. package/dist/views/ReportConfigPanel.d.ts +37 -0
  210. package/dist/views/ReportConfigPanel.js +85 -0
  211. package/dist/views/ReportView.d.ts +1 -1
  212. package/dist/views/ReportView.js +116 -7
  213. package/dist/views/RuntimeDraftBar.d.ts +30 -0
  214. package/dist/views/RuntimeDraftBar.js +112 -0
  215. package/dist/views/ScreenView.d.ts +70 -0
  216. package/dist/views/ScreenView.js +73 -0
  217. package/dist/views/SearchResultsPage.d.ts +1 -1
  218. package/dist/views/SearchResultsPage.js +8 -18
  219. package/dist/views/ViewConfigPanel.d.ts +24 -17
  220. package/dist/views/ViewConfigPanel.js +121 -77
  221. package/dist/views/index.d.ts +1 -1
  222. package/dist/views/index.js +1 -1
  223. package/dist/views/metadata-admin/AuditPanel.d.ts +28 -0
  224. package/dist/views/metadata-admin/AuditPanel.js +79 -0
  225. package/dist/views/metadata-admin/DiagnosticsPage.d.ts +20 -0
  226. package/dist/views/metadata-admin/DiagnosticsPage.js +69 -0
  227. package/dist/views/metadata-admin/DirectoryPage.d.ts +16 -1
  228. package/dist/views/metadata-admin/DirectoryPage.js +101 -24
  229. package/dist/views/metadata-admin/DraftReviewPanel.d.ts +33 -0
  230. package/dist/views/metadata-admin/DraftReviewPanel.js +77 -0
  231. package/dist/views/metadata-admin/EmbeddedItemEditor.d.ts +17 -1
  232. package/dist/views/metadata-admin/EmbeddedItemEditor.js +15 -8
  233. package/dist/views/metadata-admin/JsonSourceEditor.d.ts +39 -0
  234. package/dist/views/metadata-admin/JsonSourceEditor.js +196 -0
  235. package/dist/views/metadata-admin/LayeredDiff.d.ts +39 -1
  236. package/dist/views/metadata-admin/LayeredDiff.js +171 -5
  237. package/dist/views/metadata-admin/MetadataDetailDrawer.d.ts +15 -1
  238. package/dist/views/metadata-admin/MetadataTypeActions.d.ts +48 -0
  239. package/dist/views/metadata-admin/MetadataTypeActions.js +165 -0
  240. package/dist/views/metadata-admin/PackagesPage.d.ts +18 -0
  241. package/dist/views/metadata-admin/PackagesPage.js +403 -0
  242. package/dist/views/metadata-admin/PageShell.d.ts +1 -1
  243. package/dist/views/metadata-admin/PageShell.js +9 -4
  244. package/dist/views/metadata-admin/PermissionMatrixEditor.d.ts +35 -1
  245. package/dist/views/metadata-admin/QuickFind.d.ts +21 -1
  246. package/dist/views/metadata-admin/QuickFind.js +6 -3
  247. package/dist/views/metadata-admin/RelatedPanel.d.ts +24 -1
  248. package/dist/views/metadata-admin/RelatedPanel.js +20 -18
  249. package/dist/views/metadata-admin/ResourceEditPage.d.ts +40 -1
  250. package/dist/views/metadata-admin/ResourceEditPage.js +1250 -60
  251. package/dist/views/metadata-admin/ResourceHistoryPage.d.ts +39 -1
  252. package/dist/views/metadata-admin/ResourceHistoryPage.js +66 -16
  253. package/dist/views/metadata-admin/ResourceListPage.d.ts +13 -1
  254. package/dist/views/metadata-admin/ResourceListPage.js +258 -30
  255. package/dist/views/metadata-admin/ResourceRouter.d.ts +23 -1
  256. package/dist/views/metadata-admin/SchemaForm.d.ts +34 -1
  257. package/dist/views/metadata-admin/SchemaForm.js +559 -49
  258. package/dist/views/metadata-admin/StudioHomePage.d.ts +22 -0
  259. package/dist/views/metadata-admin/StudioHomePage.js +205 -0
  260. package/dist/views/metadata-admin/anchors.js +255 -24
  261. package/dist/views/metadata-admin/clientValidation.d.ts +50 -0
  262. package/dist/views/metadata-admin/clientValidation.js +169 -0
  263. package/dist/views/metadata-admin/color-variant-field.d.ts +30 -0
  264. package/dist/views/metadata-admin/color-variant-field.js +38 -0
  265. package/dist/views/metadata-admin/createDerive.d.ts +75 -0
  266. package/dist/views/metadata-admin/createDerive.js +179 -0
  267. package/dist/views/metadata-admin/dashboard-schema.d.ts +12 -0
  268. package/dist/views/metadata-admin/dashboard-schema.js +80 -0
  269. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.d.ts +35 -0
  270. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.js +327 -0
  271. package/dist/views/metadata-admin/datasource/register.d.ts +1 -0
  272. package/dist/views/metadata-admin/datasource/register.js +24 -0
  273. package/dist/views/metadata-admin/default-inspector-registry.d.ts +49 -0
  274. package/dist/views/metadata-admin/default-inspector-registry.js +8 -0
  275. package/dist/views/metadata-admin/default-schemas.js +115 -10
  276. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.d.ts +27 -0
  277. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.js +69 -0
  278. package/dist/views/metadata-admin/external/ImportObjectDialog.d.ts +27 -0
  279. package/dist/views/metadata-admin/external/ImportObjectDialog.js +77 -0
  280. package/dist/views/metadata-admin/external/SchemaBrowser.d.ts +16 -0
  281. package/dist/views/metadata-admin/external/SchemaBrowser.js +74 -0
  282. package/dist/views/metadata-admin/external/ValidationPanel.d.ts +16 -0
  283. package/dist/views/metadata-admin/external/ValidationPanel.js +68 -0
  284. package/dist/views/metadata-admin/external/api.d.ts +100 -0
  285. package/dist/views/metadata-admin/external/api.js +124 -0
  286. package/dist/views/metadata-admin/i18n.d.ts +1 -0
  287. package/dist/views/metadata-admin/i18n.js +1252 -2
  288. package/dist/views/metadata-admin/index.d.ts +8 -5
  289. package/dist/views/metadata-admin/index.js +12 -2
  290. package/dist/views/metadata-admin/inspector-registry.d.ts +51 -0
  291. package/dist/views/metadata-admin/inspector-registry.js +11 -0
  292. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.d.ts +30 -0
  293. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.js +180 -0
  294. package/dist/views/metadata-admin/inspectors/AppNavInspector.d.ts +16 -0
  295. package/dist/views/metadata-admin/inspectors/AppNavInspector.js +110 -0
  296. package/dist/views/metadata-admin/inspectors/ConditionBuilder.d.ts +29 -0
  297. package/dist/views/metadata-admin/inspectors/ConditionBuilder.js +154 -0
  298. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.d.ts +28 -0
  299. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.js +110 -0
  300. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.d.ts +18 -0
  301. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.js +139 -0
  302. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.d.ts +21 -0
  303. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.js +221 -0
  304. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.d.ts +16 -0
  305. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.js +126 -0
  306. package/dist/views/metadata-admin/inspectors/FlowInspector.d.ts +12 -0
  307. package/dist/views/metadata-admin/inspectors/FlowInspector.js +9 -0
  308. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.d.ts +30 -0
  309. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.js +125 -0
  310. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.d.ts +18 -0
  311. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.js +40 -0
  312. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.d.ts +14 -0
  313. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.js +205 -0
  314. package/dist/views/metadata-admin/inspectors/FlowObjectListField.d.ts +26 -0
  315. package/dist/views/metadata-admin/inspectors/FlowObjectListField.js +105 -0
  316. package/dist/views/metadata-admin/inspectors/FlowReferenceField.d.ts +83 -0
  317. package/dist/views/metadata-admin/inspectors/FlowReferenceField.js +181 -0
  318. package/dist/views/metadata-admin/inspectors/FlowStringListField.d.ts +21 -0
  319. package/dist/views/metadata-admin/inspectors/FlowStringListField.js +60 -0
  320. package/dist/views/metadata-admin/inspectors/InspectorComboField.d.ts +40 -0
  321. package/dist/views/metadata-admin/inspectors/InspectorComboField.js +61 -0
  322. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.d.ts +21 -0
  323. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.js +55 -0
  324. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.d.ts +23 -0
  325. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.js +365 -0
  326. package/dist/views/metadata-admin/inspectors/PageBlockInspector.d.ts +48 -0
  327. package/dist/views/metadata-admin/inspectors/PageBlockInspector.js +332 -0
  328. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.d.ts +58 -0
  329. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.js +218 -0
  330. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.d.ts +19 -0
  331. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.js +144 -0
  332. package/dist/views/metadata-admin/inspectors/ViewInspector.d.ts +19 -0
  333. package/dist/views/metadata-admin/inspectors/ViewInspector.js +21 -0
  334. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.d.ts +54 -0
  335. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.js +191 -0
  336. package/dist/views/metadata-admin/inspectors/_shared.d.ts +128 -0
  337. package/dist/views/metadata-admin/inspectors/_shared.js +113 -0
  338. package/dist/views/metadata-admin/inspectors/datasetFilterCondition.d.ts +24 -0
  339. package/dist/views/metadata-admin/inspectors/datasetFilterCondition.js +97 -0
  340. package/dist/views/metadata-admin/inspectors/expression-validate.d.ts +26 -0
  341. package/dist/views/metadata-admin/inspectors/expression-validate.js +66 -0
  342. package/dist/views/metadata-admin/inspectors/flow-node-config.d.ts +143 -0
  343. package/dist/views/metadata-admin/inspectors/flow-node-config.js +506 -0
  344. package/dist/views/metadata-admin/inspectors/index.d.ts +1 -0
  345. package/dist/views/metadata-admin/inspectors/index.js +45 -0
  346. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.d.ts +40 -0
  347. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.js +227 -0
  348. package/dist/views/metadata-admin/inspectors/useDatasetFields.d.ts +72 -0
  349. package/dist/views/metadata-admin/inspectors/useDatasetFields.js +0 -0
  350. package/dist/views/metadata-admin/issuePath.d.ts +22 -0
  351. package/dist/views/metadata-admin/issuePath.js +65 -0
  352. package/dist/views/metadata-admin/mergeServerFields.d.ts +65 -0
  353. package/dist/views/metadata-admin/mergeServerFields.js +56 -0
  354. package/dist/views/metadata-admin/package-scope.d.ts +26 -0
  355. package/dist/views/metadata-admin/package-scope.js +43 -0
  356. package/dist/views/metadata-admin/preview-registry.d.ts +55 -0
  357. package/dist/views/metadata-admin/previews/ActionPreview.d.ts +25 -0
  358. package/dist/views/metadata-admin/previews/ActionPreview.js +238 -0
  359. package/dist/views/metadata-admin/previews/AddWidgetPicker.d.ts +12 -0
  360. package/dist/views/metadata-admin/previews/AddWidgetPicker.js +56 -0
  361. package/dist/views/metadata-admin/previews/AgentPreview.d.ts +24 -0
  362. package/dist/views/metadata-admin/previews/AgentPreview.js +100 -0
  363. package/dist/views/metadata-admin/previews/AppNavCanvas.d.ts +31 -0
  364. package/dist/views/metadata-admin/previews/AppNavCanvas.js +260 -0
  365. package/dist/views/metadata-admin/previews/AppPreview.d.ts +16 -1
  366. package/dist/views/metadata-admin/previews/AppPreview.js +23 -14
  367. package/dist/views/metadata-admin/previews/BookPreview.d.ts +20 -0
  368. package/dist/views/metadata-admin/previews/BookPreview.js +132 -0
  369. package/dist/views/metadata-admin/previews/DashboardPreview.d.ts +16 -1
  370. package/dist/views/metadata-admin/previews/DashboardPreview.js +110 -8
  371. package/dist/views/metadata-admin/previews/DatasetPreview.d.ts +18 -0
  372. package/dist/views/metadata-admin/previews/DatasetPreview.js +105 -0
  373. package/dist/views/metadata-admin/previews/DatasourcePreview.d.ts +23 -0
  374. package/dist/views/metadata-admin/previews/DatasourcePreview.js +68 -0
  375. package/dist/views/metadata-admin/previews/EmailTemplatePreview.d.ts +14 -1
  376. package/dist/views/metadata-admin/previews/FieldStub.d.ts +30 -0
  377. package/dist/views/metadata-admin/previews/FieldStub.js +104 -0
  378. package/dist/views/metadata-admin/previews/FieldsListEditor.d.ts +50 -0
  379. package/dist/views/metadata-admin/previews/FieldsListEditor.js +97 -0
  380. package/dist/views/metadata-admin/previews/FlowCanvas.d.ts +49 -0
  381. package/dist/views/metadata-admin/previews/FlowCanvas.js +416 -0
  382. package/dist/views/metadata-admin/previews/FlowPreview.d.ts +20 -0
  383. package/dist/views/metadata-admin/previews/FlowPreview.js +120 -0
  384. package/dist/views/metadata-admin/previews/FlowRunsPanel.d.ts +46 -0
  385. package/dist/views/metadata-admin/previews/FlowRunsPanel.js +97 -0
  386. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.d.ts +25 -0
  387. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.js +204 -0
  388. package/dist/views/metadata-admin/previews/JobPreview.d.ts +28 -0
  389. package/dist/views/metadata-admin/previews/JobPreview.js +290 -0
  390. package/dist/views/metadata-admin/previews/ObjectFormCanvas.d.ts +30 -0
  391. package/dist/views/metadata-admin/previews/ObjectFormCanvas.js +547 -0
  392. package/dist/views/metadata-admin/previews/ObjectPreview.d.ts +14 -1
  393. package/dist/views/metadata-admin/previews/ObjectPreview.js +5 -30
  394. package/dist/views/metadata-admin/previews/OutlineStrip.d.ts +32 -0
  395. package/dist/views/metadata-admin/previews/OutlineStrip.js +8 -0
  396. package/dist/views/metadata-admin/previews/PageBlockCanvas.d.ts +49 -0
  397. package/dist/views/metadata-admin/previews/PageBlockCanvas.js +510 -0
  398. package/dist/views/metadata-admin/previews/PagePreview.d.ts +10 -1
  399. package/dist/views/metadata-admin/previews/PagePreview.js +200 -5
  400. package/dist/views/metadata-admin/previews/PermissionPreview.d.ts +27 -0
  401. package/dist/views/metadata-admin/previews/PermissionPreview.js +115 -0
  402. package/dist/views/metadata-admin/previews/PreviewShell.d.ts +29 -6
  403. package/dist/views/metadata-admin/previews/PreviewShell.js +16 -3
  404. package/dist/views/metadata-admin/previews/ReportPreview.d.ts +18 -1
  405. package/dist/views/metadata-admin/previews/ReportPreview.js +23 -15
  406. package/dist/views/metadata-admin/previews/RolePreview.d.ts +19 -0
  407. package/dist/views/metadata-admin/previews/RolePreview.js +14 -0
  408. package/dist/views/metadata-admin/previews/ScreenPreview.d.ts +38 -0
  409. package/dist/views/metadata-admin/previews/ScreenPreview.js +61 -0
  410. package/dist/views/metadata-admin/previews/SkillPreview.d.ts +22 -0
  411. package/dist/views/metadata-admin/previews/SkillPreview.js +34 -0
  412. package/dist/views/metadata-admin/previews/ToolPreview.d.ts +25 -0
  413. package/dist/views/metadata-admin/previews/ToolPreview.js +122 -0
  414. package/dist/views/metadata-admin/previews/TranslationPreview.d.ts +25 -0
  415. package/dist/views/metadata-admin/previews/TranslationPreview.js +52 -0
  416. package/dist/views/metadata-admin/previews/ValidationPreview.d.ts +27 -0
  417. package/dist/views/metadata-admin/previews/ValidationPreview.js +110 -0
  418. package/dist/views/metadata-admin/previews/ViewColumnPanes.d.ts +62 -0
  419. package/dist/views/metadata-admin/previews/ViewColumnPanes.js +140 -0
  420. package/dist/views/metadata-admin/previews/ViewPreview.d.ts +23 -1
  421. package/dist/views/metadata-admin/previews/ViewPreview.js +101 -73
  422. package/dist/views/metadata-admin/previews/block-config.d.ts +82 -0
  423. package/dist/views/metadata-admin/previews/block-config.js +324 -0
  424. package/dist/views/metadata-admin/previews/block-types.d.ts +40 -0
  425. package/dist/views/metadata-admin/previews/block-types.js +110 -0
  426. package/dist/views/metadata-admin/previews/field-types.d.ts +53 -0
  427. package/dist/views/metadata-admin/previews/field-types.js +97 -0
  428. package/dist/views/metadata-admin/previews/flow-canvas-layout.d.ts +102 -0
  429. package/dist/views/metadata-admin/previews/flow-canvas-layout.js +227 -0
  430. package/dist/views/metadata-admin/previews/flow-canvas-parts.d.ts +96 -0
  431. package/dist/views/metadata-admin/previews/flow-canvas-parts.js +373 -0
  432. package/dist/views/metadata-admin/previews/form-preview.d.ts +24 -0
  433. package/dist/views/metadata-admin/previews/form-preview.js +29 -0
  434. package/dist/views/metadata-admin/previews/index.js +43 -0
  435. package/dist/views/metadata-admin/previews/object-fields-bridge.d.ts +66 -0
  436. package/dist/views/metadata-admin/previews/object-fields-bridge.js +171 -0
  437. package/dist/views/metadata-admin/previews/object-fields-io.d.ts +130 -0
  438. package/dist/views/metadata-admin/previews/object-fields-io.js +243 -0
  439. package/dist/views/metadata-admin/previews/screen-spec.d.ts +43 -0
  440. package/dist/views/metadata-admin/previews/screen-spec.js +108 -0
  441. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.d.ts +102 -0
  442. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.js +2 -0
  443. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.d.ts +15 -0
  444. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.js +185 -0
  445. package/dist/views/metadata-admin/previews/simulator/flow-simulator.d.ts +73 -0
  446. package/dist/views/metadata-admin/previews/simulator/flow-simulator.js +426 -0
  447. package/dist/views/metadata-admin/previews/useDatasetCatalog.d.ts +47 -0
  448. package/dist/views/metadata-admin/previews/useDatasetCatalog.js +133 -0
  449. package/dist/views/metadata-admin/previews/useFlowNodePalette.d.ts +44 -0
  450. package/dist/views/metadata-admin/previews/useFlowNodePalette.js +124 -0
  451. package/dist/views/metadata-admin/previews/useMetaOptions.d.ts +8 -0
  452. package/dist/views/metadata-admin/previews/useMetaOptions.js +50 -0
  453. package/dist/views/metadata-admin/previews/useObjectFields.d.ts +23 -0
  454. package/dist/views/metadata-admin/previews/useObjectFields.js +79 -0
  455. package/dist/views/metadata-admin/previews/useObjectOptions.d.ts +8 -0
  456. package/dist/views/metadata-admin/previews/useObjectOptions.js +43 -0
  457. package/dist/views/metadata-admin/previews/view-column-io.d.ts +42 -0
  458. package/dist/views/metadata-admin/previews/view-column-io.js +73 -0
  459. package/dist/views/metadata-admin/previews/widget-types.d.ts +24 -0
  460. package/dist/views/metadata-admin/previews/widget-types.js +40 -0
  461. package/dist/views/metadata-admin/registry.d.ts +140 -19
  462. package/dist/views/metadata-admin/report-schema.d.ts +26 -0
  463. package/dist/views/metadata-admin/report-schema.js +121 -0
  464. package/dist/views/metadata-admin/useMetadata.d.ts +100 -2
  465. package/dist/views/metadata-admin/useMetadata.js +155 -4
  466. package/dist/views/metadata-admin/view-item-normalize.d.ts +20 -0
  467. package/dist/views/metadata-admin/view-item-normalize.js +68 -0
  468. package/dist/views/metadata-admin/view-schema.d.ts +16 -0
  469. package/dist/views/metadata-admin/view-schema.js +107 -0
  470. package/dist/views/metadata-admin/view-variant-model.d.ts +23 -0
  471. package/dist/views/metadata-admin/view-variant-model.js +64 -0
  472. package/dist/views/metadata-admin/widgets.d.ts +89 -1
  473. package/dist/views/metadata-admin/widgets.js +491 -17
  474. package/dist/views/runtime-metadata-persistence.d.ts +78 -0
  475. package/dist/views/runtime-metadata-persistence.js +89 -0
  476. package/dist/views/useOpenRecordList.d.ts +18 -0
  477. package/dist/views/useOpenRecordList.js +36 -0
  478. package/dist/views/userFilterUrlState.d.ts +15 -0
  479. package/dist/views/userFilterUrlState.js +53 -0
  480. package/dist/views/view-config-adapter.d.ts +38 -0
  481. package/dist/views/view-config-adapter.js +80 -0
  482. package/package.json +52 -34
  483. package/dist/views/DesignDrawer.d.ts +0 -28
  484. package/dist/views/DesignDrawer.js +0 -51
  485. package/dist/views/metadata-admin/DesignerEditorWrapper.d.ts +0 -68
  486. package/dist/views/metadata-admin/DesignerEditorWrapper.js +0 -158
@@ -0,0 +1,140 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
3
+ /**
4
+ * Compact controls for the View column bar.
5
+ *
6
+ * • ColumnChip — a single draggable column "pill": click to
7
+ * select (→ inspector), drag to reorder, × to remove. Designed to
8
+ * sit in a one-line toolbar above the live grid preview so the
9
+ * preview — not the field manager — owns the canvas.
10
+ *
11
+ * • AddFieldPopover — an Airtable/Notion-style "+ Add field" button
12
+ * that opens a searchable checklist of the bound Object's fields.
13
+ * Click a field to append it as a column. Already-used fields are
14
+ * tagged "Added" but stay clickable (a table may show a field
15
+ * twice). Removal is explicit via the chip × so column-level config
16
+ * (label, width, sortable…) is never silently dropped.
17
+ */
18
+ import * as React from 'react';
19
+ import { GripVertical, Plus, Search, X } from 'lucide-react';
20
+ import { Badge, Popover, PopoverContent, PopoverTrigger, } from '@object-ui/components';
21
+ import { resolveFieldTypeMeta, resolveCategoryTone } from './field-types';
22
+ import { detectLocale, t, tFormat } from '../i18n';
23
+ const DND_MIME = 'text/x-objectui-viewcol';
24
+ function FieldIcon({ type }) {
25
+ const meta = resolveFieldTypeMeta(type);
26
+ const tone = resolveCategoryTone(type);
27
+ const Icon = meta.Icon;
28
+ return _jsx(Icon, { className: `h-3.5 w-3.5 shrink-0 ${tone.icon}` });
29
+ }
30
+ /* ───────────────────────────── Column chip ────────────────────────────── */
31
+ export function ColumnChip({ index, label, fieldType, selected, canEdit, dragging, dropBefore, onSelect, onRemove, onDragStart, onDragEnd, onDragOverChip, onDropChip, }) {
32
+ return (_jsxs("div", { className: "relative flex items-stretch", children: [dropBefore && (_jsx("span", { className: "pointer-events-none absolute -left-1 top-0 h-full w-0.5 rounded bg-primary" })), _jsxs("div", { role: "button", tabIndex: 0, draggable: canEdit, "aria-pressed": selected, onDragStart: (e) => {
33
+ if (!canEdit)
34
+ return;
35
+ e.dataTransfer.effectAllowed = 'move';
36
+ e.dataTransfer.setData(DND_MIME, String(index));
37
+ onDragStart();
38
+ }, onDragEnd: onDragEnd, onDragOver: (e) => {
39
+ if (!canEdit || !dragging)
40
+ return;
41
+ if (!e.dataTransfer.types.includes(DND_MIME))
42
+ return;
43
+ e.preventDefault();
44
+ e.dataTransfer.dropEffect = 'move';
45
+ onDragOverChip();
46
+ }, onDrop: (e) => {
47
+ if (!canEdit)
48
+ return;
49
+ if (!e.dataTransfer.types.includes(DND_MIME))
50
+ return;
51
+ e.preventDefault();
52
+ e.stopPropagation();
53
+ onDropChip();
54
+ }, onClick: onSelect, onKeyDown: (e) => {
55
+ if (e.key === 'Enter' || e.key === ' ') {
56
+ e.preventDefault();
57
+ onSelect();
58
+ }
59
+ }, className: 'group inline-flex items-center gap-1.5 rounded-md border bg-card py-1 pl-1.5 pr-1 text-xs transition-colors hover:border-primary/40 ' +
60
+ (selected ? 'border-primary ring-1 ring-primary' : 'border-border') +
61
+ (canEdit ? ' cursor-grab active:cursor-grabbing' : ''), children: [canEdit && (_jsx(GripVertical, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground/40 group-hover:text-muted-foreground" })), _jsx(FieldIcon, { type: fieldType }), _jsx("span", { className: "max-w-[12rem] truncate font-medium", children: label }), canEdit && (_jsx("span", { role: "button", tabIndex: 0, "aria-label": `Remove ${label}`, onClick: (e) => {
62
+ e.stopPropagation();
63
+ onRemove();
64
+ }, onKeyDown: (e) => {
65
+ if (e.key === 'Enter' || e.key === ' ') {
66
+ e.preventDefault();
67
+ e.stopPropagation();
68
+ onRemove();
69
+ }
70
+ }, className: "inline-flex h-4 w-4 shrink-0 items-center justify-center rounded text-muted-foreground/60 hover:bg-destructive/10 hover:text-destructive", children: _jsx(X, { className: "h-3 w-3" }) }))] })] }));
71
+ }
72
+ /* ───────────────────────── Field list row (vertical) ──────────────────── */
73
+ /**
74
+ * FieldListRow — a full-width, vertically-stacked variant of {@link ColumnChip}
75
+ * for the right-panel Fields list. Same HTML5 drag-and-drop contract (click to
76
+ * select, drag the handle to reorder, × to remove) but laid out as a list row
77
+ * (icon · label · machine name · remove) so it reads like a mainstream
78
+ * low-code field manager rather than a horizontal toolbar.
79
+ */
80
+ export function FieldListRow({ index, label, fieldName, fieldType, selected, canEdit, dragging, dropBefore, onSelect, onRemove, onDragStart, onDragEnd, onDragOverRow, onDropRow, }) {
81
+ return (_jsxs("div", { className: "relative", children: [dropBefore && (_jsx("span", { className: "pointer-events-none absolute -top-0.5 left-0 right-0 h-0.5 rounded bg-primary" })), _jsxs("div", { role: "button", tabIndex: 0, draggable: canEdit, "aria-pressed": selected, onDragStart: (e) => {
82
+ if (!canEdit)
83
+ return;
84
+ e.dataTransfer.effectAllowed = 'move';
85
+ e.dataTransfer.setData(DND_MIME, String(index));
86
+ onDragStart();
87
+ }, onDragEnd: onDragEnd, onDragOver: (e) => {
88
+ if (!canEdit || !dragging)
89
+ return;
90
+ if (!e.dataTransfer.types.includes(DND_MIME))
91
+ return;
92
+ e.preventDefault();
93
+ e.dataTransfer.dropEffect = 'move';
94
+ onDragOverRow();
95
+ }, onDrop: (e) => {
96
+ if (!canEdit)
97
+ return;
98
+ if (!e.dataTransfer.types.includes(DND_MIME))
99
+ return;
100
+ e.preventDefault();
101
+ e.stopPropagation();
102
+ onDropRow();
103
+ }, onClick: onSelect, onKeyDown: (e) => {
104
+ if (e.key === 'Enter' || e.key === ' ') {
105
+ e.preventDefault();
106
+ onSelect();
107
+ }
108
+ }, className: 'group flex items-center gap-2 rounded-md border bg-card px-2 py-1.5 text-xs transition-colors hover:border-primary/40 ' +
109
+ (selected ? 'border-primary ring-1 ring-primary ' : 'border-border ') +
110
+ (canEdit ? 'cursor-grab active:cursor-grabbing' : ''), children: [canEdit && (_jsx(GripVertical, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground/40 group-hover:text-muted-foreground" })), _jsx(FieldIcon, { type: fieldType }), _jsx("span", { className: "min-w-0 flex-1 truncate font-medium", children: label }), fieldName && fieldName !== label && (_jsx("code", { className: "max-w-[7rem] shrink-0 truncate text-[10px] text-muted-foreground", children: fieldName })), canEdit && (_jsx("span", { role: "button", tabIndex: 0, "aria-label": `Remove ${label}`, onClick: (e) => {
111
+ e.stopPropagation();
112
+ onRemove();
113
+ }, onKeyDown: (e) => {
114
+ if (e.key === 'Enter' || e.key === ' ') {
115
+ e.preventDefault();
116
+ e.stopPropagation();
117
+ onRemove();
118
+ }
119
+ }, className: "inline-flex h-4 w-4 shrink-0 items-center justify-center rounded text-muted-foreground/60 hover:bg-destructive/10 hover:text-destructive", children: _jsx(X, { className: "h-3 w-3" }) }))] })] }));
120
+ }
121
+ /* ─────────────────────────── Add-field popover ────────────────────────── */
122
+ export function AddFieldPopover({ fields, usedNames, loading, error, onAdd, }) {
123
+ const locale = React.useMemo(() => detectLocale(), []);
124
+ const [open, setOpen] = React.useState(false);
125
+ const [query, setQuery] = React.useState('');
126
+ const filtered = React.useMemo(() => {
127
+ const q = query.trim().toLowerCase();
128
+ if (!q)
129
+ return fields;
130
+ return fields.filter((f) => f.name.toLowerCase().includes(q) || f.label.toLowerCase().includes(q));
131
+ }, [fields, query]);
132
+ return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: "inline-flex items-center gap-1 rounded-md border border-dashed px-2 py-1 text-xs text-muted-foreground hover:border-primary/40 hover:bg-accent/40 hover:text-foreground", children: [_jsx(Plus, { className: "h-3.5 w-3.5" }), " ", t('engine.form.addFieldPlain', locale)] }) }), _jsxs(PopoverContent, { align: "start", className: "w-72 p-0", children: [_jsxs("div", { className: "relative border-b p-2", children: [_jsx(Search, { className: "pointer-events-none absolute left-4 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground" }), _jsx("input", { autoFocus: true, value: query, onChange: (e) => setQuery(e.target.value), placeholder: t('engine.form.searchFields', locale), className: "h-8 w-full rounded border border-input bg-background pl-7 pr-2 text-xs outline-none focus:border-primary" })] }), _jsx("div", { className: "max-h-72 overflow-auto p-1", children: loading ? (_jsx(Hint, { children: t('engine.form.loadingFields', locale) })) : error ? (_jsx(Hint, { tone: "warn", children: tFormat('engine.form.noObjectFields', locale, { error }) })) : filtered.length === 0 ? (_jsx(Hint, { children: query ? t('engine.form.noMatchingFields', locale) : t('engine.form.noFieldsOnObject', locale) })) : (filtered.map((f) => {
133
+ const used = usedNames.has(f.name);
134
+ return (_jsxs("button", { type: "button", onClick: () => onAdd(f), className: "flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-xs hover:bg-accent", children: [_jsx(FieldIcon, { type: f.type }), _jsx("span", { className: "min-w-0 flex-1 truncate font-medium", children: f.label }), f.name !== f.label && (_jsx("code", { className: "max-w-[6rem] truncate text-[10px] text-muted-foreground", children: f.name })), used && (_jsx(Badge, { variant: "secondary", className: "px-1 py-0 text-[9px]", children: t('engine.form.added', locale) }))] }, f.name));
135
+ })) })] })] }));
136
+ }
137
+ function Hint({ children, tone }) {
138
+ return (_jsx("div", { className: 'px-2 py-4 text-center text-[11px] ' +
139
+ (tone === 'warn' ? 'text-amber-600 dark:text-amber-300' : 'text-muted-foreground'), children: children }));
140
+ }
@@ -1,2 +1,24 @@
1
+ /**
2
+ * ViewPreview — renders a View metadata draft using the same `object-view`
3
+ * SchemaRenderer the runtime ObjectView route uses, with the draft's own
4
+ * `config` body injected as a named `listView` so the preview reflects the
5
+ * unsaved edit (not the last saved version).
6
+ *
7
+ * A view is the canonical first-class **ViewItem** ({ viewKind, config }):
8
+ * one view, one `config` body — there are no in-document variant tabs. An
9
+ * object's *other* views are independent ViewItems surfaced by the view
10
+ * switcher (a query), not nested here.
11
+ *
12
+ * The render path forks on `viewKind`:
13
+ * - list-family (grid / kanban / calendar / …) → `object-view`, with the
14
+ * draft body injected as a named listView (below);
15
+ * - form-family (simple / drawer / …) → `object-form`, with the draft's
16
+ * sections mapped onto the form schema (a form view binds a record layout,
17
+ * not a list, so the list renderer would just fall back to a bare grid).
18
+ *
19
+ * A raw single-schema draft (a bare `{ type, … }` with no `config` wrapper,
20
+ * e.g. an ad-hoc preview) is rendered straight through SchemaRenderer.
21
+ */
22
+ import * as React from 'react';
1
23
  import type { MetadataPreviewProps } from '../preview-registry';
2
- export declare function ViewPreview({ name, draft }: MetadataPreviewProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare function ViewPreview({ name, draft, editing }: MetadataPreviewProps): React.JSX.Element;
@@ -1,50 +1,39 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
3
3
  /**
4
- * ViewPreview — renders a View metadata draft using the same
5
- * `object-view` SchemaRenderer the runtime ObjectView route uses,
6
- * with the current draft's variants injected as `listViews` so the
7
- * draft drives what authors see (not the saved version).
4
+ * ViewPreview — renders a View metadata draft using the same `object-view`
5
+ * SchemaRenderer the runtime ObjectView route uses, with the draft's own
6
+ * `config` body injected as a named `listView` so the preview reflects the
7
+ * unsaved edit (not the last saved version).
8
8
  *
9
- * If the draft is a "single-schema legacy" view (no list/form/kanban
10
- * wrappers, just one top-level `type`), we pass the schema straight
11
- * to SchemaRenderer.
9
+ * A view is the canonical first-class **ViewItem** ({ viewKind, config }):
10
+ * one view, one `config` body there are no in-document variant tabs. An
11
+ * object's *other* views are independent ViewItems surfaced by the view
12
+ * switcher (a query), not nested here.
13
+ *
14
+ * The render path forks on `viewKind`:
15
+ * - list-family (grid / kanban / calendar / …) → `object-view`, with the
16
+ * draft body injected as a named listView (below);
17
+ * - form-family (simple / drawer / …) → `object-form`, with the draft's
18
+ * sections mapped onto the form schema (a form view binds a record layout,
19
+ * not a list, so the list renderer would just fall back to a bare grid).
20
+ *
21
+ * A raw single-schema draft (a bare `{ type, … }` with no `config` wrapper,
22
+ * e.g. an ad-hoc preview) is rendered straight through SchemaRenderer.
12
23
  */
13
24
  import * as React from 'react';
14
- import { SchemaRenderer } from '@object-ui/react';
25
+ import { SchemaRenderer, PreviewModeProvider } from '@object-ui/react';
26
+ import { toInlineFormType } from './form-preview';
15
27
  import { PreviewShell, PreviewErrorBoundary, PreviewMessage } from './PreviewShell';
16
- const VIEW_VARIANT_KEYS = [
17
- 'list',
18
- 'form',
19
- 'kanban',
20
- 'calendar',
21
- 'gantt',
22
- 'map',
23
- 'gallery',
24
- 'timeline',
25
- 'feed',
26
- 'detail',
27
- ];
28
- function detectVariants(draft) {
29
- const out = [];
30
- for (const k of VIEW_VARIANT_KEYS) {
31
- const v = draft[k];
32
- if (v && typeof v === 'object' && !Array.isArray(v)) {
33
- out.push({ key: k, schema: v });
34
- }
35
- }
36
- return out;
37
- }
38
- function resolveObjectName(draft, variantSchema) {
28
+ import { primaryVariantBinding } from '../view-variant-model';
29
+ function resolveObjectName(draft, body) {
39
30
  const candidates = [
40
- variantSchema?.object,
41
- variantSchema?.data?.object,
42
- variantSchema?.objectName,
31
+ body?.object,
32
+ body?.data?.object,
33
+ body?.objectName,
43
34
  draft.object,
44
35
  draft.objectName,
45
36
  draft.data?.object,
46
- draft.list?.data?.object,
47
- draft.list?.object,
48
37
  ];
49
38
  for (const c of candidates) {
50
39
  if (typeof c === 'string' && c)
@@ -52,47 +41,90 @@ function resolveObjectName(draft, variantSchema) {
52
41
  }
53
42
  return undefined;
54
43
  }
55
- export function ViewPreview({ name, draft }) {
56
- const variants = React.useMemo(() => detectVariants(draft), [draft]);
57
- const objectName = React.useMemo(() => resolveObjectName(draft, variants[0]?.schema), [draft, variants]);
58
- // Compose the listViews map: the draft IS the "default" — surface it as a
59
- // primary named view FIRST so the view switcher picks it as default. Then
60
- // append any saved sibling named listViews.
61
- const { listViews, defaultViewId } = React.useMemo(() => {
62
- const out = {};
63
- const primaryVariant = variants.find((v) => v.key === 'list') ?? variants[0];
64
- const primaryId = String(name) || primaryVariant?.key || 'default';
65
- if (primaryVariant) {
66
- out[primaryId] = {
67
- ...primaryVariant.schema,
68
- label: primaryVariant.schema.label ?? draft.label ?? name,
69
- };
70
- }
71
- const saved = draft.listViews;
72
- if (saved && typeof saved === 'object' && !Array.isArray(saved)) {
73
- for (const [k, v] of Object.entries(saved)) {
74
- if (v && typeof v === 'object' && k !== primaryId)
75
- out[k] = v;
76
- }
44
+ // A ViewItem form section uses the spec's `{ field, readonly, }` shape, but
45
+ // `object-form` selects fields by `name` and reads `readOnly`. Normalize so the
46
+ // section's fields resolve (otherwise every section comes up empty).
47
+ function toFormFieldEntry(f) {
48
+ if (typeof f === 'string')
49
+ return f;
50
+ if (f && typeof f === 'object') {
51
+ const o = f;
52
+ const name = (o.field ?? o.name);
53
+ if (!name)
54
+ return o;
55
+ return { ...o, name, readOnly: o.readOnly ?? o.readonly };
56
+ }
57
+ return String(f);
58
+ }
59
+ function buildFormPreviewSchema(objectName, body) {
60
+ const rawType = typeof body.type === 'string' ? body.type : 'simple';
61
+ const formType = toInlineFormType(rawType);
62
+ const sections = Array.isArray(body.sections)
63
+ ? body.sections.map((s) => ({
64
+ ...s,
65
+ fields: Array.isArray(s?.fields) ? s.fields.map(toFormFieldEntry) : [],
66
+ }))
67
+ : undefined;
68
+ return {
69
+ type: 'object-form',
70
+ objectName,
71
+ // A blank create-mode form: the preview shows the layout without needing a
72
+ // sample record to be selected.
73
+ mode: 'create',
74
+ formType,
75
+ sections,
76
+ fields: Array.isArray(body.fields) ? body.fields : undefined,
77
+ showSubmit: false,
78
+ showCancel: false,
79
+ };
80
+ }
81
+ export function ViewPreview({ name, draft, editing }) {
82
+ // The single ViewItem body (`draft.config`), or undefined for a raw schema.
83
+ const body = React.useMemo(() => primaryVariantBinding(draft)?.schema, [draft]);
84
+ const objectName = React.useMemo(() => resolveObjectName(draft, body), [draft, body]);
85
+ const designMode = !!editing;
86
+ // Surface the draft body as a named listView so the preview renders THIS
87
+ // view (with unsaved edits) rather than the object's saved default.
88
+ const { listViews, defaultViewId, defaultViewType } = React.useMemo(() => {
89
+ if (!body) {
90
+ return { listViews: {}, defaultViewId: undefined, defaultViewType: 'grid' };
77
91
  }
78
- return { listViews: out, defaultViewId: primaryVariant ? primaryId : undefined };
79
- }, [draft, variants, name]);
92
+ const id = String(name) || 'default';
93
+ return {
94
+ listViews: {
95
+ [id]: {
96
+ ...body,
97
+ label: body.label ?? draft.label ?? name,
98
+ },
99
+ },
100
+ defaultViewId: id,
101
+ defaultViewType: body.type ?? 'grid',
102
+ };
103
+ }, [body, draft, name]);
80
104
  // -------------------------------------------------------------------------
81
- // Path A — single-schema legacy view: render directly.
105
+ // Raw single-schema draft (no ViewItem `config` wrapper): render directly.
82
106
  // -------------------------------------------------------------------------
83
- if (!variants.length && draft.type) {
107
+ if (!body && draft.type) {
84
108
  const schema = { ...draft };
85
- return (_jsx(PreviewShell, { hint: `view · ${schema.type}`, children: _jsx(PreviewErrorBoundary, { fallbackHint: "The view's `type` may not be registered, or required fields are missing.", children: _jsx("div", { className: "min-h-[300px] max-h-[75vh] overflow-auto", children: _jsx(SchemaRenderer, { schema: schema }) }) }) }));
109
+ return (_jsx(PreviewShell, { hint: `view · ${schema.type}${designMode ? ' · design' : ''}`, children: _jsx(PreviewErrorBoundary, { fallbackHint: "The view's `type` may not be registered, or required fields are missing.", children: _jsx("div", { className: "min-h-[300px] max-h-[75vh] overflow-auto", children: _jsx(PreviewModeProvider, { children: _jsx(SchemaRenderer, { schema: schema }) }) }) }) }));
86
110
  }
87
111
  if (!objectName) {
88
- return (_jsx(PreviewShell, { hint: "view", children: _jsxs(PreviewMessage, { tone: "warn", children: ["This view has no object binding yet. Set ", _jsx("code", { children: "list.data.object" }), " in the Form tab to fetch live data."] }) }));
112
+ return (_jsx(PreviewShell, { hint: `view${designMode ? ' · design' : ''}`, children: _jsxs(PreviewMessage, { tone: "warn", children: ["This view has no object binding yet. Set the bound ", _jsx("code", { children: "Object" }), " in the right panel to fetch live data and field options."] }) }));
113
+ }
114
+ // -------------------------------------------------------------------------
115
+ // Form-family view (`viewKind: 'form'`): render the record form layout via
116
+ // `object-form`. The list renderer (`object-view`) has no form layout, so a
117
+ // form view routed through it just falls back to a bare grid.
118
+ // -------------------------------------------------------------------------
119
+ if (draft.viewKind === 'form' && body) {
120
+ const rawType = String(body.type ?? 'simple');
121
+ const formSchema = buildFormPreviewSchema(objectName, body);
122
+ return (_jsx(PreviewShell, { hint: `view · ${rawType} · form${designMode ? ' · design' : ''}`, children: _jsx(PreviewErrorBoundary, { fallbackHint: "The form view references an object or field that doesn't resolve.", children: _jsx("div", { className: "min-h-[300px] max-h-[75vh] overflow-auto", children: _jsx(PreviewModeProvider, { children: _jsx(SchemaRenderer, { schema: formSchema }) }) }) }) }));
89
123
  }
90
124
  // -------------------------------------------------------------------------
91
- // Path Bmulti-variant view: delegate to `object-view`, which is what
92
- // the runtime route uses. Inject the draft's listViews so the preview
93
- // reflects unsaved edits.
125
+ // Delegate to `object-view` the same renderer the runtime route uses
126
+ // with the draft body injected so the preview reflects unsaved edits.
94
127
  // -------------------------------------------------------------------------
95
- const defaultViewType = variants[0]?.schema?.type ?? 'grid';
96
128
  const schema = React.useMemo(() => ({
97
129
  type: 'object-view',
98
130
  objectName,
@@ -105,9 +137,5 @@ export function ViewPreview({ name, draft }) {
105
137
  showRefresh: true,
106
138
  showViewSwitcher: true,
107
139
  }), [objectName, defaultViewType, defaultViewId, listViews]);
108
- const variantHint = variants
109
- .map((v) => v.key)
110
- .slice(0, 3)
111
- .join(' · ');
112
- return (_jsx(PreviewShell, { hint: `view · ${variantHint || 'list'}`, children: _jsx(PreviewErrorBoundary, { fallbackHint: "The view references an object or field that doesn't resolve.", children: _jsx("div", { className: "min-h-[300px] max-h-[75vh] overflow-auto", children: _jsx(SchemaRenderer, { schema: schema }) }) }) }));
140
+ return (_jsx(PreviewShell, { hint: `view · ${defaultViewType}${designMode ? ' · design' : ''}`, children: _jsx(PreviewErrorBoundary, { fallbackHint: "The view references an object or field that doesn't resolve.", children: _jsx("div", { className: "min-h-[300px] max-h-[75vh] overflow-auto", children: _jsx(PreviewModeProvider, { children: _jsx(SchemaRenderer, { schema: schema }) }) }) }) }));
113
141
  }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * block-config — per-block configurable property schemas for the page editor.
3
+ *
4
+ * The page block inspector renders these as typed fields that edit the block's
5
+ * `properties` (the spec convention; the renderer hoists `properties.*` to the
6
+ * top level). Keep each field `name` aligned with the property name the
7
+ * corresponding renderer reads. Add block types here as they are needed.
8
+ *
9
+ * Field kinds:
10
+ * text | number | boolean | select — scalar props
11
+ * string-list — an array of strings (e.g. field names)
12
+ * array (+ itemFields) — an array of objects (e.g. tab items)
13
+ */
14
+ /** Where a field/field-list picker resolves its object from:
15
+ * - 'page' — the record page's bound object (draft.object)
16
+ * - 'self' — a sibling property on the same block (objectProp) */
17
+ export type ObjectSource = {
18
+ objectFrom: 'page';
19
+ } | {
20
+ objectFrom: 'self';
21
+ objectProp: string;
22
+ };
23
+ export type BlockPropField = {
24
+ name: string;
25
+ label: string;
26
+ kind: 'text';
27
+ placeholder?: string;
28
+ } | {
29
+ name: string;
30
+ label: string;
31
+ kind: 'number';
32
+ placeholder?: string;
33
+ } | {
34
+ name: string;
35
+ label: string;
36
+ kind: 'boolean';
37
+ } | {
38
+ name: string;
39
+ label: string;
40
+ kind: 'select';
41
+ options: Array<{
42
+ value: string;
43
+ label: string;
44
+ }>;
45
+ } | {
46
+ name: string;
47
+ label: string;
48
+ kind: 'string-list';
49
+ placeholder?: string;
50
+ } | {
51
+ name: string;
52
+ label: string;
53
+ kind: 'array';
54
+ itemFields: BlockPropField[];
55
+ addLabel?: string;
56
+ } | {
57
+ name: string;
58
+ label: string;
59
+ kind: 'color';
60
+ options?: Array<{
61
+ value: string;
62
+ label: string;
63
+ }>;
64
+ } | {
65
+ name: string;
66
+ label: string;
67
+ kind: 'object-picker';
68
+ placeholder?: string;
69
+ } | ({
70
+ name: string;
71
+ label: string;
72
+ kind: 'field-picker';
73
+ placeholder?: string;
74
+ } & ObjectSource) | ({
75
+ name: string;
76
+ label: string;
77
+ kind: 'field-list';
78
+ placeholder?: string;
79
+ } & ObjectSource);
80
+ export declare const BLOCK_CONFIG: Record<string, BlockPropField[]>;
81
+ /** Block types that expose a configurable property panel. */
82
+ export declare function blockHasConfig(type: string | undefined): boolean;