@object-ui/app-shell 6.2.2 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. package/CHANGELOG.md +967 -0
  2. package/README.md +292 -0
  3. package/dist/assistant/assistantBus.d.ts +72 -0
  4. package/dist/assistant/assistantBus.js +133 -0
  5. package/dist/chrome/CommandPalette.d.ts +1 -1
  6. package/dist/chrome/CommandPalette.js +26 -22
  7. package/dist/chrome/ConditionalAuthWrapper.d.ts +1 -1
  8. package/dist/chrome/ConsoleToaster.d.ts +1 -1
  9. package/dist/chrome/ConsoleToaster.js +3 -1
  10. package/dist/chrome/ErrorBoundary.d.ts +1 -1
  11. package/dist/chrome/KeyboardShortcutsDialog.d.ts +1 -1
  12. package/dist/chrome/KeyboardShortcutsDialog.js +16 -5
  13. package/dist/chrome/LoadingScreen.d.ts +1 -1
  14. package/dist/chrome/LoadingScreen.js +22 -26
  15. package/dist/chrome/RouteFader.d.ts +1 -1
  16. package/dist/chrome/ThemeProvider.d.ts +1 -1
  17. package/dist/components/ManagedByBadge.d.ts +1 -1
  18. package/dist/console/AppContent.d.ts +1 -1
  19. package/dist/console/AppContent.js +170 -37
  20. package/dist/console/ConsoleShell.d.ts +7 -7
  21. package/dist/console/ConsoleShell.js +32 -3
  22. package/dist/console/ai/AiChatPage.d.ts +88 -1
  23. package/dist/console/ai/AiChatPage.js +743 -66
  24. package/dist/console/ai/ConversationsSidebar.d.ts +26 -1
  25. package/dist/console/ai/ConversationsSidebar.js +149 -34
  26. package/dist/console/ai/LiveCanvas.d.ts +22 -0
  27. package/dist/console/ai/LiveCanvas.js +78 -0
  28. package/dist/console/ai/reconcileTurn.d.ts +8 -0
  29. package/dist/console/ai/reconcileTurn.js +20 -0
  30. package/dist/console/auth/AuthPageLayout.d.ts +1 -1
  31. package/dist/console/auth/ForgotPasswordPage.d.ts +1 -1
  32. package/dist/console/auth/LoginPage.d.ts +1 -1
  33. package/dist/console/auth/RegisterPage.d.ts +1 -1
  34. package/dist/console/auth/RegisterPage.js +23 -3
  35. package/dist/console/cloud-connection/CloudConnectionPanel.d.ts +1 -0
  36. package/dist/console/cloud-connection/CloudConnectionPanel.js +169 -0
  37. package/dist/console/home/AppCard.d.ts +1 -1
  38. package/dist/console/home/AppCard.js +6 -12
  39. package/dist/console/home/HomeAppsStrip.d.ts +8 -0
  40. package/dist/console/home/HomeAppsStrip.js +61 -0
  41. package/dist/console/home/HomeLayout.d.ts +1 -1
  42. package/dist/console/home/HomeLayout.js +3 -1
  43. package/dist/console/home/HomePage.d.ts +1 -2
  44. package/dist/console/home/HomePage.js +149 -21
  45. package/dist/console/home/HomeRail.d.ts +22 -0
  46. package/dist/console/home/HomeRail.js +62 -0
  47. package/dist/console/home/QuickActions.d.ts +1 -1
  48. package/dist/console/home/QuickActions.js +3 -11
  49. package/dist/console/home/RecentApps.d.ts +1 -1
  50. package/dist/console/home/RecentApps.js +2 -2
  51. package/dist/console/home/StarredApps.d.ts +1 -1
  52. package/dist/console/home/StarredApps.js +2 -2
  53. package/dist/console/marketplace/InstalledListWidget.d.ts +1 -0
  54. package/dist/console/marketplace/InstalledListWidget.js +93 -0
  55. package/dist/console/marketplace/MarkdownText.d.ts +1 -1
  56. package/dist/console/marketplace/MarketplaceAccessDenied.d.ts +1 -1
  57. package/dist/console/marketplace/MarketplaceInstalledPage.d.ts +8 -14
  58. package/dist/console/marketplace/MarketplaceInstalledPage.js +14 -66
  59. package/dist/console/marketplace/MarketplacePackagePage.d.ts +1 -1
  60. package/dist/console/marketplace/MarketplacePackagePage.js +249 -8
  61. package/dist/console/marketplace/MarketplacePage.d.ts +1 -1
  62. package/dist/console/marketplace/MarketplacePage.js +60 -3
  63. package/dist/console/marketplace/PackageIcon.d.ts +1 -1
  64. package/dist/console/marketplace/PluginDisclosure.d.ts +14 -0
  65. package/dist/console/marketplace/PluginDisclosure.js +38 -0
  66. package/dist/console/marketplace/marketplaceApi.d.ts +123 -0
  67. package/dist/console/marketplace/marketplaceApi.js +254 -1
  68. package/dist/console/organizations/CreateWorkspaceDialog.d.ts +1 -1
  69. package/dist/console/organizations/OrganizationsLayout.d.ts +1 -1
  70. package/dist/console/organizations/OrganizationsPage.d.ts +1 -1
  71. package/dist/console/organizations/manage/AcceptInvitationPage.d.ts +1 -1
  72. package/dist/console/organizations/manage/InvitationsPage.d.ts +1 -1
  73. package/dist/console/organizations/manage/InviteMemberDialog.d.ts +1 -1
  74. package/dist/console/organizations/manage/MembersPage.d.ts +1 -1
  75. package/dist/console/organizations/manage/OrganizationLayout.d.ts +1 -1
  76. package/dist/console/organizations/manage/SettingsPage.d.ts +1 -1
  77. package/dist/context/CommandPaletteProvider.d.ts +44 -0
  78. package/dist/context/CommandPaletteProvider.js +71 -0
  79. package/dist/context/FavoritesProvider.d.ts +1 -1
  80. package/dist/context/NavigationContext.d.ts +1 -1
  81. package/dist/context/RecentItemsProvider.d.ts +2 -2
  82. package/dist/context/UserStateAdapters.d.ts +1 -1
  83. package/dist/context/index.d.ts +2 -0
  84. package/dist/context/index.js +1 -0
  85. package/dist/hooks/index.d.ts +5 -2
  86. package/dist/hooks/index.js +4 -1
  87. package/dist/hooks/useActionModal.d.ts +53 -0
  88. package/dist/hooks/useActionModal.js +111 -0
  89. package/dist/hooks/useChatConversation.d.ts +107 -4
  90. package/dist/hooks/useChatConversation.js +253 -25
  91. package/dist/hooks/useConsoleActionRuntime.d.ts +70 -0
  92. package/dist/hooks/useConsoleActionRuntime.js +560 -0
  93. package/dist/hooks/useConversationList.js +61 -3
  94. package/dist/hooks/useHomeInbox.d.ts +13 -0
  95. package/dist/hooks/useHomeInbox.js +142 -0
  96. package/dist/hooks/useNavPins.js +17 -23
  97. package/dist/hooks/useNavigationSync.d.ts +33 -0
  98. package/dist/hooks/useNavigationSync.js +98 -12
  99. package/dist/hooks/useReconcileOnError.d.ts +40 -0
  100. package/dist/hooks/useReconcileOnError.js +37 -0
  101. package/dist/hooks/useRecordApprovals.d.ts +18 -19
  102. package/dist/hooks/useRecordApprovals.js +24 -40
  103. package/dist/hooks/useResponsiveSidebar.js +14 -5
  104. package/dist/hooks/useSettleSignal.d.ts +19 -0
  105. package/dist/hooks/useSettleSignal.js +20 -0
  106. package/dist/hooks/useTrackRouteAsRecent.js +35 -0
  107. package/dist/hooks/useUrlOverlay.d.ts +62 -0
  108. package/dist/hooks/useUrlOverlay.js +88 -0
  109. package/dist/index.d.ts +16 -7
  110. package/dist/index.js +12 -4
  111. package/dist/layout/ActivityFeed.d.ts +1 -1
  112. package/dist/layout/AppHeader.d.ts +3 -2
  113. package/dist/layout/AppHeader.js +237 -72
  114. package/dist/layout/AppSidebar.d.ts +2 -1
  115. package/dist/layout/AppSidebar.js +26 -46
  116. package/dist/layout/AppSwitcher.d.ts +2 -1
  117. package/dist/layout/AppSwitcher.js +9 -5
  118. package/dist/layout/AuthPageLayout.d.ts +1 -1
  119. package/dist/layout/ConnectionStatus.d.ts +1 -1
  120. package/dist/layout/ConnectionStatus.js +9 -6
  121. package/dist/layout/ConsoleChatbotFab.d.ts +19 -1
  122. package/dist/layout/ConsoleChatbotFab.js +16 -2
  123. package/dist/layout/ConsoleFloatingChatbot.d.ts +32 -2
  124. package/dist/layout/ConsoleFloatingChatbot.js +374 -41
  125. package/dist/layout/ConsoleLayout.d.ts +1 -1
  126. package/dist/layout/ConsoleLayout.js +27 -11
  127. package/dist/layout/ContextSelectors.d.ts +44 -0
  128. package/dist/layout/ContextSelectors.js +218 -0
  129. package/dist/layout/InboxPopover.d.ts +6 -1
  130. package/dist/layout/InboxPopover.js +25 -6
  131. package/dist/layout/LocaleSwitcher.d.ts +1 -1
  132. package/dist/layout/LocalizedSidebarTrigger.d.ts +2 -0
  133. package/dist/layout/LocalizedSidebarTrigger.js +15 -0
  134. package/dist/layout/MobileViewSwitcherContext.d.ts +1 -1
  135. package/dist/layout/ModeToggle.d.ts +1 -1
  136. package/dist/layout/PageHeader.d.ts +1 -1
  137. package/dist/layout/UnifiedSidebar.d.ts +2 -1
  138. package/dist/layout/UnifiedSidebar.js +116 -15
  139. package/dist/observability/index.d.ts +1 -0
  140. package/dist/observability/index.js +1 -0
  141. package/dist/observability/settleSignal.d.ts +64 -0
  142. package/dist/observability/settleSignal.js +131 -0
  143. package/dist/preview/DraftChangesPanel.d.ts +19 -0
  144. package/dist/preview/DraftChangesPanel.js +114 -0
  145. package/dist/preview/DraftPreviewBar.d.ts +8 -0
  146. package/dist/preview/DraftPreviewBar.js +86 -0
  147. package/dist/preview/PreviewDraftEmptyState.d.ts +16 -0
  148. package/dist/preview/PreviewDraftEmptyState.js +47 -0
  149. package/dist/preview/PreviewModeContext.d.ts +57 -0
  150. package/dist/preview/PreviewModeContext.js +99 -0
  151. package/dist/preview/UnpublishedAppBar.d.ts +8 -0
  152. package/dist/preview/UnpublishedAppBar.js +79 -0
  153. package/dist/preview/draftStatus.d.ts +20 -0
  154. package/dist/preview/draftStatus.js +27 -0
  155. package/dist/preview/usePublishAllDrafts.d.ts +18 -0
  156. package/dist/preview/usePublishAllDrafts.js +106 -0
  157. package/dist/providers/AdapterProvider.d.ts +1 -1
  158. package/dist/providers/AdapterProvider.js +6 -1
  159. package/dist/providers/ExpressionProvider.d.ts +1 -1
  160. package/dist/providers/MetadataProvider.d.ts +17 -2
  161. package/dist/providers/MetadataProvider.js +183 -12
  162. package/dist/runtime-config.d.ts +46 -2
  163. package/dist/runtime-config.js +39 -2
  164. package/dist/services/builtinComponents.js +68 -59
  165. package/dist/skeletons/SkeletonDashboard.d.ts +1 -1
  166. package/dist/skeletons/SkeletonDetail.d.ts +1 -1
  167. package/dist/skeletons/SkeletonGrid.d.ts +1 -1
  168. package/dist/utils/appRoute.d.ts +21 -0
  169. package/dist/utils/appRoute.js +25 -0
  170. package/dist/utils/deriveRelatedLists.d.ts +54 -0
  171. package/dist/utils/deriveRelatedLists.js +91 -0
  172. package/dist/utils/index.d.ts +4 -0
  173. package/dist/utils/index.js +3 -0
  174. package/dist/utils/managedByEmptyState.d.ts +8 -1
  175. package/dist/utils/managedByEmptyState.js +13 -7
  176. package/dist/utils/preferLocal.d.ts +18 -0
  177. package/dist/utils/preferLocal.js +24 -0
  178. package/dist/views/ActionConfirmDialog.d.ts +1 -1
  179. package/dist/views/ActionConfirmDialog.js +3 -1
  180. package/dist/views/ActionParamDialog.d.ts +6 -1
  181. package/dist/views/ActionParamDialog.js +9 -3
  182. package/dist/views/ActionResultDialog.d.ts +13 -0
  183. package/dist/views/ActionResultDialog.js +134 -0
  184. package/dist/views/ComponentNavView.d.ts +14 -1
  185. package/dist/views/CreateViewDialog.d.ts +1 -1
  186. package/dist/views/DashboardConfigPanel.d.ts +28 -0
  187. package/dist/views/DashboardConfigPanel.js +81 -0
  188. package/dist/views/DashboardView.d.ts +4 -3
  189. package/dist/views/DashboardView.js +38 -239
  190. package/dist/views/FlowRunner.d.ts +59 -0
  191. package/dist/views/FlowRunner.js +153 -0
  192. package/dist/views/InterfaceListPage.d.ts +49 -0
  193. package/dist/views/InterfaceListPage.js +347 -0
  194. package/dist/views/MetadataInspector.d.ts +2 -2
  195. package/dist/views/ObjectView.d.ts +1 -1
  196. package/dist/views/ObjectView.js +209 -532
  197. package/dist/views/PageView.d.ts +8 -3
  198. package/dist/views/PageView.js +45 -32
  199. package/dist/views/RecordDetailView.d.ts +1 -1
  200. package/dist/views/RecordDetailView.js +363 -148
  201. package/dist/views/RecordFormPage.d.ts +1 -1
  202. package/dist/views/RecordFormPage.js +26 -1
  203. package/dist/views/ReportConfigPanel.d.ts +37 -0
  204. package/dist/views/ReportConfigPanel.js +85 -0
  205. package/dist/views/ReportView.d.ts +1 -1
  206. package/dist/views/ReportView.js +116 -7
  207. package/dist/views/RuntimeDraftBar.d.ts +30 -0
  208. package/dist/views/RuntimeDraftBar.js +112 -0
  209. package/dist/views/SearchResultsPage.d.ts +1 -1
  210. package/dist/views/SearchResultsPage.js +8 -18
  211. package/dist/views/ViewConfigPanel.d.ts +24 -17
  212. package/dist/views/ViewConfigPanel.js +121 -77
  213. package/dist/views/index.d.ts +1 -1
  214. package/dist/views/index.js +1 -1
  215. package/dist/views/metadata-admin/AuditPanel.d.ts +28 -0
  216. package/dist/views/metadata-admin/AuditPanel.js +79 -0
  217. package/dist/views/metadata-admin/DiagnosticsPage.d.ts +20 -0
  218. package/dist/views/metadata-admin/DiagnosticsPage.js +69 -0
  219. package/dist/views/metadata-admin/DirectoryPage.d.ts +16 -1
  220. package/dist/views/metadata-admin/DirectoryPage.js +113 -24
  221. package/dist/views/metadata-admin/DraftReviewPanel.d.ts +33 -0
  222. package/dist/views/metadata-admin/DraftReviewPanel.js +77 -0
  223. package/dist/views/metadata-admin/EmbeddedItemEditor.d.ts +17 -1
  224. package/dist/views/metadata-admin/EmbeddedItemEditor.js +15 -8
  225. package/dist/views/metadata-admin/JsonSourceEditor.d.ts +37 -0
  226. package/dist/views/metadata-admin/JsonSourceEditor.js +178 -0
  227. package/dist/views/metadata-admin/LayeredDiff.d.ts +39 -1
  228. package/dist/views/metadata-admin/LayeredDiff.js +171 -5
  229. package/dist/views/metadata-admin/MetadataDetailDrawer.d.ts +15 -1
  230. package/dist/views/metadata-admin/MetadataTypeActions.d.ts +48 -0
  231. package/dist/views/metadata-admin/MetadataTypeActions.js +165 -0
  232. package/dist/views/metadata-admin/PackagesPage.d.ts +18 -0
  233. package/dist/views/metadata-admin/PackagesPage.js +395 -0
  234. package/dist/views/metadata-admin/PageShell.d.ts +1 -1
  235. package/dist/views/metadata-admin/PageShell.js +9 -4
  236. package/dist/views/metadata-admin/PermissionMatrixEditor.d.ts +35 -1
  237. package/dist/views/metadata-admin/QuickFind.d.ts +21 -1
  238. package/dist/views/metadata-admin/QuickFind.js +6 -3
  239. package/dist/views/metadata-admin/RelatedPanel.d.ts +24 -1
  240. package/dist/views/metadata-admin/RelatedPanel.js +20 -18
  241. package/dist/views/metadata-admin/ResourceEditPage.d.ts +40 -1
  242. package/dist/views/metadata-admin/ResourceEditPage.js +1223 -60
  243. package/dist/views/metadata-admin/ResourceHistoryPage.d.ts +39 -1
  244. package/dist/views/metadata-admin/ResourceHistoryPage.js +66 -16
  245. package/dist/views/metadata-admin/ResourceListPage.d.ts +13 -1
  246. package/dist/views/metadata-admin/ResourceListPage.js +266 -30
  247. package/dist/views/metadata-admin/ResourceRouter.d.ts +23 -1
  248. package/dist/views/metadata-admin/SchemaForm.d.ts +34 -1
  249. package/dist/views/metadata-admin/SchemaForm.js +559 -49
  250. package/dist/views/metadata-admin/StudioHomePage.d.ts +22 -0
  251. package/dist/views/metadata-admin/StudioHomePage.js +213 -0
  252. package/dist/views/metadata-admin/anchors.js +237 -24
  253. package/dist/views/metadata-admin/clientValidation.d.ts +50 -0
  254. package/dist/views/metadata-admin/clientValidation.js +169 -0
  255. package/dist/views/metadata-admin/color-variant-field.d.ts +30 -0
  256. package/dist/views/metadata-admin/color-variant-field.js +38 -0
  257. package/dist/views/metadata-admin/createDerive.d.ts +75 -0
  258. package/dist/views/metadata-admin/createDerive.js +179 -0
  259. package/dist/views/metadata-admin/dashboard-schema.d.ts +12 -0
  260. package/dist/views/metadata-admin/dashboard-schema.js +80 -0
  261. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.d.ts +35 -0
  262. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.js +327 -0
  263. package/dist/views/metadata-admin/datasource/register.d.ts +1 -0
  264. package/dist/views/metadata-admin/datasource/register.js +24 -0
  265. package/dist/views/metadata-admin/default-inspector-registry.d.ts +49 -0
  266. package/dist/views/metadata-admin/default-inspector-registry.js +8 -0
  267. package/dist/views/metadata-admin/default-schemas.js +115 -10
  268. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.d.ts +27 -0
  269. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.js +69 -0
  270. package/dist/views/metadata-admin/external/ImportObjectDialog.d.ts +27 -0
  271. package/dist/views/metadata-admin/external/ImportObjectDialog.js +77 -0
  272. package/dist/views/metadata-admin/external/SchemaBrowser.d.ts +16 -0
  273. package/dist/views/metadata-admin/external/SchemaBrowser.js +74 -0
  274. package/dist/views/metadata-admin/external/ValidationPanel.d.ts +16 -0
  275. package/dist/views/metadata-admin/external/ValidationPanel.js +68 -0
  276. package/dist/views/metadata-admin/external/api.d.ts +100 -0
  277. package/dist/views/metadata-admin/external/api.js +124 -0
  278. package/dist/views/metadata-admin/i18n.d.ts +1 -0
  279. package/dist/views/metadata-admin/i18n.js +1166 -2
  280. package/dist/views/metadata-admin/index.d.ts +8 -5
  281. package/dist/views/metadata-admin/index.js +12 -2
  282. package/dist/views/metadata-admin/inspector-registry.d.ts +51 -0
  283. package/dist/views/metadata-admin/inspector-registry.js +11 -0
  284. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.d.ts +30 -0
  285. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.js +180 -0
  286. package/dist/views/metadata-admin/inspectors/AppNavInspector.d.ts +16 -0
  287. package/dist/views/metadata-admin/inspectors/AppNavInspector.js +110 -0
  288. package/dist/views/metadata-admin/inspectors/ConditionBuilder.d.ts +29 -0
  289. package/dist/views/metadata-admin/inspectors/ConditionBuilder.js +154 -0
  290. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.d.ts +28 -0
  291. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.js +110 -0
  292. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.d.ts +18 -0
  293. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.js +139 -0
  294. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.d.ts +21 -0
  295. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.js +107 -0
  296. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.d.ts +16 -0
  297. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.js +45 -0
  298. package/dist/views/metadata-admin/inspectors/FlowInspector.d.ts +12 -0
  299. package/dist/views/metadata-admin/inspectors/FlowInspector.js +9 -0
  300. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.d.ts +30 -0
  301. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.js +125 -0
  302. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.d.ts +18 -0
  303. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.js +40 -0
  304. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.d.ts +14 -0
  305. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.js +140 -0
  306. package/dist/views/metadata-admin/inspectors/FlowObjectListField.d.ts +26 -0
  307. package/dist/views/metadata-admin/inspectors/FlowObjectListField.js +105 -0
  308. package/dist/views/metadata-admin/inspectors/FlowReferenceField.d.ts +83 -0
  309. package/dist/views/metadata-admin/inspectors/FlowReferenceField.js +181 -0
  310. package/dist/views/metadata-admin/inspectors/FlowStringListField.d.ts +21 -0
  311. package/dist/views/metadata-admin/inspectors/FlowStringListField.js +60 -0
  312. package/dist/views/metadata-admin/inspectors/InspectorComboField.d.ts +40 -0
  313. package/dist/views/metadata-admin/inspectors/InspectorComboField.js +61 -0
  314. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.d.ts +21 -0
  315. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.js +54 -0
  316. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.d.ts +23 -0
  317. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.js +330 -0
  318. package/dist/views/metadata-admin/inspectors/PageBlockInspector.d.ts +48 -0
  319. package/dist/views/metadata-admin/inspectors/PageBlockInspector.js +332 -0
  320. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.d.ts +58 -0
  321. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.js +160 -0
  322. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.d.ts +19 -0
  323. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.js +144 -0
  324. package/dist/views/metadata-admin/inspectors/ViewInspector.d.ts +19 -0
  325. package/dist/views/metadata-admin/inspectors/ViewInspector.js +21 -0
  326. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.d.ts +54 -0
  327. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.js +191 -0
  328. package/dist/views/metadata-admin/inspectors/_shared.d.ts +124 -0
  329. package/dist/views/metadata-admin/inspectors/_shared.js +113 -0
  330. package/dist/views/metadata-admin/inspectors/expression-validate.d.ts +26 -0
  331. package/dist/views/metadata-admin/inspectors/expression-validate.js +66 -0
  332. package/dist/views/metadata-admin/inspectors/flow-node-config.d.ts +143 -0
  333. package/dist/views/metadata-admin/inspectors/flow-node-config.js +461 -0
  334. package/dist/views/metadata-admin/inspectors/index.d.ts +1 -0
  335. package/dist/views/metadata-admin/inspectors/index.js +45 -0
  336. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.d.ts +40 -0
  337. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.js +227 -0
  338. package/dist/views/metadata-admin/inspectors/useDatasetFields.d.ts +72 -0
  339. package/dist/views/metadata-admin/inspectors/useDatasetFields.js +0 -0
  340. package/dist/views/metadata-admin/mergeServerFields.d.ts +65 -0
  341. package/dist/views/metadata-admin/mergeServerFields.js +56 -0
  342. package/dist/views/metadata-admin/preview-registry.d.ts +55 -0
  343. package/dist/views/metadata-admin/previews/ActionPreview.d.ts +25 -0
  344. package/dist/views/metadata-admin/previews/ActionPreview.js +238 -0
  345. package/dist/views/metadata-admin/previews/AddWidgetPicker.d.ts +12 -0
  346. package/dist/views/metadata-admin/previews/AddWidgetPicker.js +56 -0
  347. package/dist/views/metadata-admin/previews/AgentPreview.d.ts +24 -0
  348. package/dist/views/metadata-admin/previews/AgentPreview.js +100 -0
  349. package/dist/views/metadata-admin/previews/AppNavCanvas.d.ts +31 -0
  350. package/dist/views/metadata-admin/previews/AppNavCanvas.js +260 -0
  351. package/dist/views/metadata-admin/previews/AppPreview.d.ts +16 -1
  352. package/dist/views/metadata-admin/previews/AppPreview.js +23 -14
  353. package/dist/views/metadata-admin/previews/BookPreview.d.ts +20 -0
  354. package/dist/views/metadata-admin/previews/BookPreview.js +132 -0
  355. package/dist/views/metadata-admin/previews/DashboardPreview.d.ts +16 -1
  356. package/dist/views/metadata-admin/previews/DashboardPreview.js +110 -8
  357. package/dist/views/metadata-admin/previews/DatasetPreview.d.ts +18 -0
  358. package/dist/views/metadata-admin/previews/DatasetPreview.js +89 -0
  359. package/dist/views/metadata-admin/previews/DatasourcePreview.d.ts +23 -0
  360. package/dist/views/metadata-admin/previews/DatasourcePreview.js +68 -0
  361. package/dist/views/metadata-admin/previews/EmailTemplatePreview.d.ts +14 -1
  362. package/dist/views/metadata-admin/previews/FieldStub.d.ts +30 -0
  363. package/dist/views/metadata-admin/previews/FieldStub.js +104 -0
  364. package/dist/views/metadata-admin/previews/FieldsListEditor.d.ts +50 -0
  365. package/dist/views/metadata-admin/previews/FieldsListEditor.js +97 -0
  366. package/dist/views/metadata-admin/previews/FlowCanvas.d.ts +43 -0
  367. package/dist/views/metadata-admin/previews/FlowCanvas.js +328 -0
  368. package/dist/views/metadata-admin/previews/FlowPreview.d.ts +20 -0
  369. package/dist/views/metadata-admin/previews/FlowPreview.js +92 -0
  370. package/dist/views/metadata-admin/previews/FlowRunsPanel.d.ts +46 -0
  371. package/dist/views/metadata-admin/previews/FlowRunsPanel.js +97 -0
  372. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.d.ts +25 -0
  373. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.js +170 -0
  374. package/dist/views/metadata-admin/previews/JobPreview.d.ts +28 -0
  375. package/dist/views/metadata-admin/previews/JobPreview.js +290 -0
  376. package/dist/views/metadata-admin/previews/ObjectFormCanvas.d.ts +30 -0
  377. package/dist/views/metadata-admin/previews/ObjectFormCanvas.js +547 -0
  378. package/dist/views/metadata-admin/previews/ObjectPreview.d.ts +14 -1
  379. package/dist/views/metadata-admin/previews/ObjectPreview.js +5 -30
  380. package/dist/views/metadata-admin/previews/OutlineStrip.d.ts +32 -0
  381. package/dist/views/metadata-admin/previews/OutlineStrip.js +8 -0
  382. package/dist/views/metadata-admin/previews/PageBlockCanvas.d.ts +49 -0
  383. package/dist/views/metadata-admin/previews/PageBlockCanvas.js +510 -0
  384. package/dist/views/metadata-admin/previews/PagePreview.d.ts +10 -1
  385. package/dist/views/metadata-admin/previews/PagePreview.js +90 -4
  386. package/dist/views/metadata-admin/previews/PermissionPreview.d.ts +27 -0
  387. package/dist/views/metadata-admin/previews/PermissionPreview.js +115 -0
  388. package/dist/views/metadata-admin/previews/PreviewShell.d.ts +29 -6
  389. package/dist/views/metadata-admin/previews/PreviewShell.js +16 -3
  390. package/dist/views/metadata-admin/previews/ReportPreview.d.ts +18 -1
  391. package/dist/views/metadata-admin/previews/ReportPreview.js +23 -15
  392. package/dist/views/metadata-admin/previews/RolePreview.d.ts +19 -0
  393. package/dist/views/metadata-admin/previews/RolePreview.js +14 -0
  394. package/dist/views/metadata-admin/previews/SkillPreview.d.ts +22 -0
  395. package/dist/views/metadata-admin/previews/SkillPreview.js +34 -0
  396. package/dist/views/metadata-admin/previews/ToolPreview.d.ts +25 -0
  397. package/dist/views/metadata-admin/previews/ToolPreview.js +122 -0
  398. package/dist/views/metadata-admin/previews/TranslationPreview.d.ts +25 -0
  399. package/dist/views/metadata-admin/previews/TranslationPreview.js +52 -0
  400. package/dist/views/metadata-admin/previews/ValidationPreview.d.ts +27 -0
  401. package/dist/views/metadata-admin/previews/ValidationPreview.js +110 -0
  402. package/dist/views/metadata-admin/previews/ViewColumnPanes.d.ts +62 -0
  403. package/dist/views/metadata-admin/previews/ViewColumnPanes.js +140 -0
  404. package/dist/views/metadata-admin/previews/ViewPreview.d.ts +23 -1
  405. package/dist/views/metadata-admin/previews/ViewPreview.js +101 -73
  406. package/dist/views/metadata-admin/previews/block-config.d.ts +82 -0
  407. package/dist/views/metadata-admin/previews/block-config.js +324 -0
  408. package/dist/views/metadata-admin/previews/block-types.d.ts +40 -0
  409. package/dist/views/metadata-admin/previews/block-types.js +110 -0
  410. package/dist/views/metadata-admin/previews/field-types.d.ts +53 -0
  411. package/dist/views/metadata-admin/previews/field-types.js +97 -0
  412. package/dist/views/metadata-admin/previews/flow-canvas-layout.d.ts +88 -0
  413. package/dist/views/metadata-admin/previews/flow-canvas-layout.js +190 -0
  414. package/dist/views/metadata-admin/previews/flow-canvas-parts.d.ts +88 -0
  415. package/dist/views/metadata-admin/previews/flow-canvas-parts.js +358 -0
  416. package/dist/views/metadata-admin/previews/form-preview.d.ts +24 -0
  417. package/dist/views/metadata-admin/previews/form-preview.js +29 -0
  418. package/dist/views/metadata-admin/previews/index.js +43 -0
  419. package/dist/views/metadata-admin/previews/object-fields-bridge.d.ts +66 -0
  420. package/dist/views/metadata-admin/previews/object-fields-bridge.js +171 -0
  421. package/dist/views/metadata-admin/previews/object-fields-io.d.ts +109 -0
  422. package/dist/views/metadata-admin/previews/object-fields-io.js +208 -0
  423. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.d.ts +91 -0
  424. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.js +2 -0
  425. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.d.ts +8 -0
  426. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.js +113 -0
  427. package/dist/views/metadata-admin/previews/simulator/flow-simulator.d.ts +44 -0
  428. package/dist/views/metadata-admin/previews/simulator/flow-simulator.js +316 -0
  429. package/dist/views/metadata-admin/previews/useDatasetCatalog.d.ts +47 -0
  430. package/dist/views/metadata-admin/previews/useDatasetCatalog.js +133 -0
  431. package/dist/views/metadata-admin/previews/useFlowNodePalette.d.ts +44 -0
  432. package/dist/views/metadata-admin/previews/useFlowNodePalette.js +124 -0
  433. package/dist/views/metadata-admin/previews/useMetaOptions.d.ts +8 -0
  434. package/dist/views/metadata-admin/previews/useMetaOptions.js +50 -0
  435. package/dist/views/metadata-admin/previews/useObjectFields.d.ts +23 -0
  436. package/dist/views/metadata-admin/previews/useObjectFields.js +79 -0
  437. package/dist/views/metadata-admin/previews/useObjectOptions.d.ts +8 -0
  438. package/dist/views/metadata-admin/previews/useObjectOptions.js +43 -0
  439. package/dist/views/metadata-admin/previews/view-column-io.d.ts +42 -0
  440. package/dist/views/metadata-admin/previews/view-column-io.js +73 -0
  441. package/dist/views/metadata-admin/previews/widget-types.d.ts +24 -0
  442. package/dist/views/metadata-admin/previews/widget-types.js +40 -0
  443. package/dist/views/metadata-admin/registry.d.ts +140 -19
  444. package/dist/views/metadata-admin/report-schema.d.ts +26 -0
  445. package/dist/views/metadata-admin/report-schema.js +121 -0
  446. package/dist/views/metadata-admin/useMetadata.d.ts +100 -2
  447. package/dist/views/metadata-admin/useMetadata.js +155 -4
  448. package/dist/views/metadata-admin/view-item-normalize.d.ts +20 -0
  449. package/dist/views/metadata-admin/view-item-normalize.js +68 -0
  450. package/dist/views/metadata-admin/view-schema.d.ts +16 -0
  451. package/dist/views/metadata-admin/view-schema.js +107 -0
  452. package/dist/views/metadata-admin/view-variant-model.d.ts +23 -0
  453. package/dist/views/metadata-admin/view-variant-model.js +64 -0
  454. package/dist/views/metadata-admin/widgets.d.ts +89 -1
  455. package/dist/views/metadata-admin/widgets.js +491 -17
  456. package/dist/views/runtime-metadata-persistence.d.ts +78 -0
  457. package/dist/views/runtime-metadata-persistence.js +89 -0
  458. package/dist/views/useOpenRecordList.d.ts +18 -0
  459. package/dist/views/useOpenRecordList.js +36 -0
  460. package/dist/views/userFilterUrlState.d.ts +15 -0
  461. package/dist/views/userFilterUrlState.js +53 -0
  462. package/dist/views/view-config-adapter.d.ts +38 -0
  463. package/dist/views/view-config-adapter.js +80 -0
  464. package/package.json +52 -34
  465. package/dist/views/DesignDrawer.d.ts +0 -28
  466. package/dist/views/DesignDrawer.js +0 -51
  467. package/dist/views/metadata-admin/DesignerEditorWrapper.d.ts +0 -68
  468. package/dist/views/metadata-admin/DesignerEditorWrapper.js +0 -158
@@ -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;
@@ -0,0 +1,324 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ const ALIGN_OPTS = [
3
+ { value: 'left', label: 'Left' },
4
+ { value: 'center', label: 'Center' },
5
+ { value: 'right', label: 'Right' },
6
+ ];
7
+ export const BLOCK_CONFIG = {
8
+ // ── Data-bound blocks (the high-traffic ones on app pages) ────────────────
9
+ // These were previously absent, so selecting a table/form/metric on the
10
+ // canvas opened an inspector with only type/id/className — every binding
11
+ // (object, columns, filters) lived in source with no UI. Curated fields
12
+ // cover the common props; anything else surfaces in the generic "Advanced"
13
+ // section of PageBlockInspector so the panel is never out of sync with source.
14
+ 'object-grid': [
15
+ { name: 'objectName', label: 'Object', kind: 'object-picker' },
16
+ { name: 'columns', label: 'Columns', kind: 'field-list', objectFrom: 'self', objectProp: 'objectName' },
17
+ { name: 'pageSize', label: 'Page size', kind: 'number', placeholder: '20' },
18
+ { name: 'striped', label: 'Striped rows', kind: 'boolean' },
19
+ { name: 'bordered', label: 'Bordered', kind: 'boolean' },
20
+ ],
21
+ 'object-form': [
22
+ { name: 'objectName', label: 'Object', kind: 'object-picker' },
23
+ {
24
+ name: 'mode', label: 'Mode', kind: 'select',
25
+ options: [
26
+ { value: 'create', label: 'Create' },
27
+ { value: 'edit', label: 'Edit' },
28
+ { value: 'view', label: 'View' },
29
+ ],
30
+ },
31
+ {
32
+ name: 'formType', label: 'Form type', kind: 'select',
33
+ options: [
34
+ { value: 'simple', label: 'Simple' },
35
+ { value: 'tabbed', label: 'Tabbed' },
36
+ { value: 'wizard', label: 'Wizard' },
37
+ { value: 'split', label: 'Split' },
38
+ { value: 'drawer', label: 'Drawer' },
39
+ { value: 'modal', label: 'Modal' },
40
+ ],
41
+ },
42
+ {
43
+ name: 'layout', label: 'Layout', kind: 'select',
44
+ options: [
45
+ { value: 'vertical', label: 'Vertical' },
46
+ { value: 'horizontal', label: 'Horizontal' },
47
+ { value: 'inline', label: 'Inline' },
48
+ { value: 'grid', label: 'Grid' },
49
+ ],
50
+ },
51
+ { name: 'columns', label: 'Columns (grid layout)', kind: 'number', placeholder: '2' },
52
+ { name: 'fields', label: 'Fields', kind: 'field-list', objectFrom: 'self', objectProp: 'objectName' },
53
+ { name: 'title', label: 'Title', kind: 'text' },
54
+ { name: 'description', label: 'Description', kind: 'text' },
55
+ ],
56
+ 'object-metric': [
57
+ { name: 'objectName', label: 'Object', kind: 'object-picker' },
58
+ { name: 'label', label: 'Label', kind: 'text' },
59
+ { name: 'description', label: 'Description', kind: 'text' },
60
+ { name: 'icon', label: 'Icon', kind: 'text', placeholder: 'lucide icon name' },
61
+ {
62
+ name: 'colorVariant', label: 'Color', kind: 'color',
63
+ options: [
64
+ { value: 'default', label: 'Default' },
65
+ { value: 'blue', label: 'Blue' },
66
+ { value: 'teal', label: 'Teal' },
67
+ { value: 'orange', label: 'Orange' },
68
+ { value: 'purple', label: 'Purple' },
69
+ { value: 'success', label: 'Success' },
70
+ { value: 'warning', label: 'Warning' },
71
+ { value: 'danger', label: 'Danger' },
72
+ ],
73
+ },
74
+ {
75
+ name: 'format', label: 'Format', kind: 'select',
76
+ options: [
77
+ { value: 'number', label: 'Number' },
78
+ { value: 'currency', label: 'Currency' },
79
+ { value: 'percent', label: 'Percent' },
80
+ ],
81
+ },
82
+ { name: 'prefix', label: 'Prefix', kind: 'text' },
83
+ { name: 'suffix', label: 'Suffix', kind: 'text' },
84
+ // `aggregate` ({ field, function }) and `filter` are nested/complex — they
85
+ // render in the generic Advanced section as editable JSON.
86
+ ],
87
+ 'object-kanban': [
88
+ { name: 'objectName', label: 'Object', kind: 'object-picker' },
89
+ { name: 'groupField', label: 'Group by field', kind: 'field-picker', objectFrom: 'self', objectProp: 'objectName' },
90
+ { name: 'titleField', label: 'Title field', kind: 'field-picker', objectFrom: 'self', objectProp: 'objectName' },
91
+ { name: 'cardFields', label: 'Card fields', kind: 'field-list', objectFrom: 'self', objectProp: 'objectName' },
92
+ ],
93
+ // ── Layout grid ───────────────────────────────────────────────────────────
94
+ grid: [
95
+ { name: 'columns', label: 'Columns', kind: 'number', placeholder: '3' },
96
+ { name: 'gap', label: 'Gap', kind: 'number', placeholder: '4' },
97
+ ],
98
+ // ── Content elements ──────────────────────────────────────────────────────
99
+ 'element:text': [
100
+ { name: 'content', label: 'Content', kind: 'text', placeholder: 'Text…' },
101
+ {
102
+ name: 'variant',
103
+ label: 'Variant',
104
+ kind: 'select',
105
+ options: [
106
+ { value: 'heading', label: 'Heading' },
107
+ { value: 'subheading', label: 'Subheading' },
108
+ { value: 'body', label: 'Body' },
109
+ { value: 'caption', label: 'Caption' },
110
+ ],
111
+ },
112
+ { name: 'align', label: 'Align', kind: 'select', options: ALIGN_OPTS },
113
+ ],
114
+ 'element:image': [
115
+ { name: 'src', label: 'Source URL', kind: 'text', placeholder: 'https://…' },
116
+ { name: 'alt', label: 'Alt text', kind: 'text' },
117
+ {
118
+ name: 'fit',
119
+ label: 'Fit',
120
+ kind: 'select',
121
+ options: [
122
+ { value: 'cover', label: 'Cover' },
123
+ { value: 'contain', label: 'Contain' },
124
+ { value: 'fill', label: 'Fill' },
125
+ ],
126
+ },
127
+ ],
128
+ // ── Lightweight lists (compact, for simple data) ──────────────────────────
129
+ 'element:definition-list': [
130
+ {
131
+ name: 'items',
132
+ label: 'Items',
133
+ kind: 'array',
134
+ addLabel: 'Add item',
135
+ itemFields: [
136
+ { name: 'label', label: 'Label', kind: 'text' },
137
+ { name: 'value', label: 'Value', kind: 'text' },
138
+ ],
139
+ },
140
+ { name: 'columns', label: 'Columns (1 or 2)', kind: 'number', placeholder: '1' },
141
+ { name: 'inline', label: 'Inline (label · value)', kind: 'boolean' },
142
+ ],
143
+ 'element:repeater': [
144
+ { name: 'object', label: 'Object', kind: 'object-picker' },
145
+ { name: 'titleField', label: 'Title field', kind: 'field-picker', objectFrom: 'self', objectProp: 'object' },
146
+ { name: 'fields', label: 'Fields', kind: 'field-list', objectFrom: 'self', objectProp: 'object' },
147
+ { name: 'limit', label: 'Limit', kind: 'number', placeholder: '10' },
148
+ { name: 'emptyText', label: 'Empty text', kind: 'text' },
149
+ { name: 'divided', label: 'Dividers between rows', kind: 'boolean' },
150
+ ],
151
+ 'element:number': [
152
+ { name: 'object', label: 'Object', kind: 'object-picker' },
153
+ { name: 'field', label: 'Field', kind: 'field-picker', objectFrom: 'self', objectProp: 'object' },
154
+ {
155
+ name: 'aggregate',
156
+ label: 'Aggregate',
157
+ kind: 'select',
158
+ options: [
159
+ { value: 'count', label: 'Count' },
160
+ { value: 'sum', label: 'Sum' },
161
+ { value: 'avg', label: 'Average' },
162
+ { value: 'min', label: 'Min' },
163
+ { value: 'max', label: 'Max' },
164
+ ],
165
+ },
166
+ {
167
+ name: 'format',
168
+ label: 'Format',
169
+ kind: 'select',
170
+ options: [
171
+ { value: 'number', label: 'Number' },
172
+ { value: 'currency', label: 'Currency' },
173
+ { value: 'percent', label: 'Percent' },
174
+ ],
175
+ },
176
+ { name: 'prefix', label: 'Prefix', kind: 'text' },
177
+ { name: 'suffix', label: 'Suffix', kind: 'text' },
178
+ ],
179
+ 'element:button': [
180
+ { name: 'label', label: 'Label', kind: 'text' },
181
+ {
182
+ name: 'variant',
183
+ label: 'Variant',
184
+ kind: 'select',
185
+ options: [
186
+ { value: 'primary', label: 'Primary' },
187
+ { value: 'secondary', label: 'Secondary' },
188
+ { value: 'danger', label: 'Danger' },
189
+ { value: 'ghost', label: 'Ghost' },
190
+ { value: 'link', label: 'Link' },
191
+ ],
192
+ },
193
+ {
194
+ name: 'size',
195
+ label: 'Size',
196
+ kind: 'select',
197
+ options: [
198
+ { value: 'small', label: 'Small' },
199
+ { value: 'medium', label: 'Medium' },
200
+ { value: 'large', label: 'Large' },
201
+ ],
202
+ },
203
+ { name: 'icon', label: 'Icon', kind: 'text', placeholder: 'lucide icon name' },
204
+ ],
205
+ // ── Layout containers ─────────────────────────────────────────────────────
206
+ 'page:header': [
207
+ { name: 'title', label: 'Title', kind: 'text' },
208
+ { name: 'subtitle', label: 'Subtitle', kind: 'text' },
209
+ { name: 'icon', label: 'Icon', kind: 'text', placeholder: 'lucide icon name' },
210
+ { name: 'breadcrumb', label: 'Show breadcrumb', kind: 'boolean' },
211
+ ],
212
+ 'page:card': [
213
+ { name: 'title', label: 'Title', kind: 'text' },
214
+ { name: 'bordered', label: 'Bordered', kind: 'boolean' },
215
+ ],
216
+ 'page:tabs': [
217
+ {
218
+ name: 'items',
219
+ label: 'Tabs',
220
+ kind: 'array',
221
+ addLabel: 'Add tab',
222
+ itemFields: [
223
+ { name: 'key', label: 'Key', kind: 'text' },
224
+ { name: 'label', label: 'Label', kind: 'text' },
225
+ ],
226
+ },
227
+ ],
228
+ 'page:accordion': [
229
+ { name: 'title', label: 'Title', kind: 'text' },
230
+ {
231
+ name: 'items',
232
+ label: 'Sections',
233
+ kind: 'array',
234
+ addLabel: 'Add section',
235
+ itemFields: [
236
+ { name: 'value', label: 'Key', kind: 'text' },
237
+ { name: 'label', label: 'Label', kind: 'text' },
238
+ ],
239
+ },
240
+ ],
241
+ // ── Record context ────────────────────────────────────────────────────────
242
+ 'record:related_list': [
243
+ { name: 'objectName', label: 'Object', kind: 'object-picker' },
244
+ { name: 'relationshipField', label: 'Relationship field', kind: 'field-picker', objectFrom: 'self', objectProp: 'objectName' },
245
+ { name: 'title', label: 'Title', kind: 'text' },
246
+ { name: 'limit', label: 'Limit', kind: 'number', placeholder: '10' },
247
+ ],
248
+ 'record:highlights': [
249
+ { name: 'fields', label: 'Fields', kind: 'field-list', objectFrom: 'page' },
250
+ ],
251
+ 'record:details': [
252
+ {
253
+ name: 'sections',
254
+ label: 'Sections',
255
+ kind: 'array',
256
+ addLabel: 'Add section',
257
+ itemFields: [
258
+ { name: 'label', label: 'Label', kind: 'text' },
259
+ { name: 'columns', label: 'Columns', kind: 'number', placeholder: '2' },
260
+ { name: 'fields', label: 'Fields', kind: 'field-list', objectFrom: 'page' },
261
+ ],
262
+ },
263
+ ],
264
+ 'record:alert': [
265
+ {
266
+ name: 'severity',
267
+ label: 'Severity',
268
+ kind: 'select',
269
+ options: [
270
+ { value: 'info', label: 'Info' },
271
+ { value: 'warning', label: 'Warning' },
272
+ { value: 'error', label: 'Error' },
273
+ { value: 'success', label: 'Success' },
274
+ ],
275
+ },
276
+ { name: 'title', label: 'Title', kind: 'text' },
277
+ { name: 'body', label: 'Body', kind: 'text' },
278
+ { name: 'icon', label: 'Icon', kind: 'text', placeholder: 'lucide icon name' },
279
+ { name: 'dismissible', label: 'Dismissible', kind: 'boolean' },
280
+ ],
281
+ 'record:path': [
282
+ { name: 'statusField', label: 'Status field', kind: 'field-picker', objectFrom: 'page' },
283
+ {
284
+ name: 'stages',
285
+ label: 'Stages',
286
+ kind: 'array',
287
+ addLabel: 'Add stage',
288
+ itemFields: [
289
+ { name: 'value', label: 'Value', kind: 'text' },
290
+ { name: 'label', label: 'Label', kind: 'text' },
291
+ ],
292
+ },
293
+ ],
294
+ 'record:quick_actions': [
295
+ { name: 'actionNames', label: 'Action names', kind: 'string-list', placeholder: 'action name' },
296
+ {
297
+ name: 'location',
298
+ label: 'Location',
299
+ kind: 'select',
300
+ options: [
301
+ { value: 'record_header', label: 'Record header' },
302
+ { value: 'record_more', label: 'Record more menu' },
303
+ { value: 'record_section', label: 'Record section' },
304
+ { value: 'record_related', label: 'Record related' },
305
+ { value: 'list_toolbar', label: 'List toolbar' },
306
+ { value: 'list_item', label: 'List item' },
307
+ { value: 'global_nav', label: 'Global nav' },
308
+ ],
309
+ },
310
+ ],
311
+ // ── AI ────────────────────────────────────────────────────────────────────
312
+ 'ai:chat_window': [
313
+ { name: 'agentName', label: 'Agent', kind: 'text', placeholder: 'agent name' },
314
+ { name: 'placeholder', label: 'Input placeholder', kind: 'text' },
315
+ ],
316
+ 'ai:input': [
317
+ { name: 'agentName', label: 'Agent', kind: 'text', placeholder: 'agent name' },
318
+ { name: 'placeholder', label: 'Input placeholder', kind: 'text' },
319
+ ],
320
+ };
321
+ /** Block types that expose a configurable property panel. */
322
+ export function blockHasConfig(type) {
323
+ return !!type && Array.isArray(BLOCK_CONFIG[type]) && BLOCK_CONFIG[type].length > 0;
324
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Catalog of Page-block types, mirrored from the framework's Page
3
+ * schema (`regions[].components[].type` enum). Grouped + iconified
4
+ * for the picker UI in PageBlockCanvas.
5
+ *
6
+ * Source of truth: keep the IDs in sync with
7
+ * `@objectstack/spec`'s page protocol. New block types appear in the
8
+ * `Other` category by default — add a META entry to give them an icon.
9
+ */
10
+ import { type LucideIcon } from 'lucide-react';
11
+ export type BlockTypeId = 'grid' | 'object-grid' | 'object-form' | 'object-metric' | 'object-kanban' | 'page:header' | 'page:footer' | 'page:sidebar' | 'page:tabs' | 'page:accordion' | 'page:card' | 'page:section' | 'record:details' | 'record:highlights' | 'record:related_list' | 'record:activity' | 'record:chatter' | 'record:path' | 'record:alert' | 'record:quick_actions' | 'record:reference_rail' | 'record:history' | 'nav:menu' | 'nav:breadcrumb' | 'global:search' | 'ai:chat_window' | 'ai:suggestion' | 'element:text' | 'element:number' | 'element:image' | 'element:divider' | 'element:button' | 'element:definition-list' | 'element:repeater';
12
+ export type BlockCategory = 'data' | 'layout' | 'record' | 'navigation' | 'element' | 'ai' | 'misc';
13
+ export interface BlockTypeMeta {
14
+ id: BlockTypeId;
15
+ label: string;
16
+ category: BlockCategory;
17
+ Icon: LucideIcon;
18
+ }
19
+ export declare const BLOCK_TYPE_META: Record<BlockTypeId, Omit<BlockTypeMeta, 'id'>>;
20
+ export declare const CATEGORY_LABEL_EN: Record<BlockCategory, string>;
21
+ export declare const TYPES_BY_CATEGORY: Array<{
22
+ category: BlockCategory;
23
+ types: BlockTypeId[];
24
+ }>;
25
+ /** Fallback icon for unknown block types. */
26
+ export declare const UnknownBlockIcon: import("react").ForwardRefExoticComponent<Omit<import("lucide-react").LucideProps, "ref"> & import("react").RefAttributes<SVGSVGElement>>;
27
+ /**
28
+ * Per-category color tone — keeps block kinds scannable in the page
29
+ * canvas and picker, mirroring the field-type / nav-kind / node-type
30
+ * tinting used across the other Studio designers. Class strings are
31
+ * written out in full so Tailwind's JIT emits them, with light + dark
32
+ * variants (the app defaults to dark).
33
+ */
34
+ export interface BlockCategoryTone {
35
+ icon: string;
36
+ badge: string;
37
+ }
38
+ export declare const BLOCK_CATEGORY_TONE: Record<BlockCategory, BlockCategoryTone>;
39
+ /** Resolve a category tone for any block `type` string (handles unknowns). */
40
+ export declare function resolveBlockTone(type: string): BlockCategoryTone;