@object-ui/app-shell 6.2.3 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. package/CHANGELOG.md +948 -0
  2. package/README.md +292 -0
  3. package/dist/assistant/assistantBus.d.ts +72 -0
  4. package/dist/assistant/assistantBus.js +133 -0
  5. package/dist/chrome/CommandPalette.d.ts +1 -1
  6. package/dist/chrome/CommandPalette.js +26 -22
  7. package/dist/chrome/ConditionalAuthWrapper.d.ts +1 -1
  8. package/dist/chrome/ConsoleToaster.d.ts +1 -1
  9. package/dist/chrome/ConsoleToaster.js +3 -1
  10. package/dist/chrome/ErrorBoundary.d.ts +1 -1
  11. package/dist/chrome/KeyboardShortcutsDialog.d.ts +1 -1
  12. package/dist/chrome/KeyboardShortcutsDialog.js +16 -5
  13. package/dist/chrome/LoadingScreen.d.ts +1 -1
  14. package/dist/chrome/LoadingScreen.js +22 -26
  15. package/dist/chrome/RouteFader.d.ts +1 -1
  16. package/dist/chrome/ThemeProvider.d.ts +1 -1
  17. package/dist/components/ManagedByBadge.d.ts +1 -1
  18. package/dist/console/AppContent.d.ts +1 -1
  19. package/dist/console/AppContent.js +170 -37
  20. package/dist/console/ConsoleShell.d.ts +7 -7
  21. package/dist/console/ConsoleShell.js +32 -3
  22. package/dist/console/ai/AiChatPage.d.ts +88 -1
  23. package/dist/console/ai/AiChatPage.js +743 -66
  24. package/dist/console/ai/ConversationsSidebar.d.ts +26 -1
  25. package/dist/console/ai/ConversationsSidebar.js +149 -34
  26. package/dist/console/ai/LiveCanvas.d.ts +22 -0
  27. package/dist/console/ai/LiveCanvas.js +78 -0
  28. package/dist/console/ai/reconcileTurn.d.ts +8 -0
  29. package/dist/console/ai/reconcileTurn.js +20 -0
  30. package/dist/console/auth/AuthPageLayout.d.ts +1 -1
  31. package/dist/console/auth/ForgotPasswordPage.d.ts +1 -1
  32. package/dist/console/auth/LoginPage.d.ts +1 -1
  33. package/dist/console/auth/RegisterPage.d.ts +1 -1
  34. package/dist/console/auth/RegisterPage.js +23 -3
  35. package/dist/console/cloud-connection/CloudConnectionPanel.d.ts +1 -0
  36. package/dist/console/cloud-connection/CloudConnectionPanel.js +169 -0
  37. package/dist/console/home/AppCard.d.ts +1 -1
  38. package/dist/console/home/AppCard.js +6 -12
  39. package/dist/console/home/HomeAppsStrip.d.ts +8 -0
  40. package/dist/console/home/HomeAppsStrip.js +61 -0
  41. package/dist/console/home/HomeLayout.d.ts +1 -1
  42. package/dist/console/home/HomeLayout.js +3 -1
  43. package/dist/console/home/HomePage.d.ts +1 -2
  44. package/dist/console/home/HomePage.js +149 -21
  45. package/dist/console/home/HomeRail.d.ts +22 -0
  46. package/dist/console/home/HomeRail.js +62 -0
  47. package/dist/console/home/QuickActions.d.ts +1 -1
  48. package/dist/console/home/QuickActions.js +3 -11
  49. package/dist/console/home/RecentApps.d.ts +1 -1
  50. package/dist/console/home/RecentApps.js +2 -2
  51. package/dist/console/home/StarredApps.d.ts +1 -1
  52. package/dist/console/home/StarredApps.js +2 -2
  53. package/dist/console/marketplace/InstalledListWidget.d.ts +1 -0
  54. package/dist/console/marketplace/InstalledListWidget.js +93 -0
  55. package/dist/console/marketplace/MarkdownText.d.ts +1 -1
  56. package/dist/console/marketplace/MarketplaceAccessDenied.d.ts +1 -1
  57. package/dist/console/marketplace/MarketplaceInstalledPage.d.ts +8 -14
  58. package/dist/console/marketplace/MarketplaceInstalledPage.js +14 -66
  59. package/dist/console/marketplace/MarketplacePackagePage.d.ts +1 -1
  60. package/dist/console/marketplace/MarketplacePackagePage.js +249 -8
  61. package/dist/console/marketplace/MarketplacePage.d.ts +1 -1
  62. package/dist/console/marketplace/MarketplacePage.js +60 -3
  63. package/dist/console/marketplace/PackageIcon.d.ts +1 -1
  64. package/dist/console/marketplace/PluginDisclosure.d.ts +14 -0
  65. package/dist/console/marketplace/PluginDisclosure.js +38 -0
  66. package/dist/console/marketplace/marketplaceApi.d.ts +123 -0
  67. package/dist/console/marketplace/marketplaceApi.js +254 -1
  68. package/dist/console/organizations/CreateWorkspaceDialog.d.ts +1 -1
  69. package/dist/console/organizations/OrganizationsLayout.d.ts +1 -1
  70. package/dist/console/organizations/OrganizationsPage.d.ts +1 -1
  71. package/dist/console/organizations/manage/AcceptInvitationPage.d.ts +1 -1
  72. package/dist/console/organizations/manage/InvitationsPage.d.ts +1 -1
  73. package/dist/console/organizations/manage/InviteMemberDialog.d.ts +1 -1
  74. package/dist/console/organizations/manage/MembersPage.d.ts +1 -1
  75. package/dist/console/organizations/manage/OrganizationLayout.d.ts +1 -1
  76. package/dist/console/organizations/manage/SettingsPage.d.ts +1 -1
  77. package/dist/context/CommandPaletteProvider.d.ts +44 -0
  78. package/dist/context/CommandPaletteProvider.js +71 -0
  79. package/dist/context/FavoritesProvider.d.ts +1 -1
  80. package/dist/context/NavigationContext.d.ts +1 -1
  81. package/dist/context/RecentItemsProvider.d.ts +2 -2
  82. package/dist/context/UserStateAdapters.d.ts +1 -1
  83. package/dist/context/index.d.ts +2 -0
  84. package/dist/context/index.js +1 -0
  85. package/dist/hooks/index.d.ts +5 -2
  86. package/dist/hooks/index.js +4 -1
  87. package/dist/hooks/useActionModal.d.ts +53 -0
  88. package/dist/hooks/useActionModal.js +111 -0
  89. package/dist/hooks/useChatConversation.d.ts +107 -4
  90. package/dist/hooks/useChatConversation.js +253 -25
  91. package/dist/hooks/useConsoleActionRuntime.d.ts +70 -0
  92. package/dist/hooks/useConsoleActionRuntime.js +560 -0
  93. package/dist/hooks/useConversationList.js +61 -3
  94. package/dist/hooks/useHomeInbox.d.ts +13 -0
  95. package/dist/hooks/useHomeInbox.js +142 -0
  96. package/dist/hooks/useNavPins.js +17 -23
  97. package/dist/hooks/useNavigationSync.d.ts +33 -0
  98. package/dist/hooks/useNavigationSync.js +98 -12
  99. package/dist/hooks/useReconcileOnError.d.ts +40 -0
  100. package/dist/hooks/useReconcileOnError.js +37 -0
  101. package/dist/hooks/useRecordApprovals.d.ts +18 -19
  102. package/dist/hooks/useRecordApprovals.js +24 -40
  103. package/dist/hooks/useResponsiveSidebar.js +14 -5
  104. package/dist/hooks/useSettleSignal.d.ts +19 -0
  105. package/dist/hooks/useSettleSignal.js +20 -0
  106. package/dist/hooks/useTrackRouteAsRecent.js +35 -0
  107. package/dist/hooks/useUrlOverlay.d.ts +62 -0
  108. package/dist/hooks/useUrlOverlay.js +88 -0
  109. package/dist/index.d.ts +16 -7
  110. package/dist/index.js +12 -4
  111. package/dist/layout/ActivityFeed.d.ts +1 -1
  112. package/dist/layout/AppHeader.d.ts +3 -2
  113. package/dist/layout/AppHeader.js +237 -72
  114. package/dist/layout/AppSidebar.d.ts +2 -1
  115. package/dist/layout/AppSidebar.js +26 -46
  116. package/dist/layout/AppSwitcher.d.ts +2 -1
  117. package/dist/layout/AppSwitcher.js +9 -5
  118. package/dist/layout/AuthPageLayout.d.ts +1 -1
  119. package/dist/layout/ConnectionStatus.d.ts +1 -1
  120. package/dist/layout/ConnectionStatus.js +9 -6
  121. package/dist/layout/ConsoleChatbotFab.d.ts +19 -1
  122. package/dist/layout/ConsoleChatbotFab.js +16 -2
  123. package/dist/layout/ConsoleFloatingChatbot.d.ts +32 -2
  124. package/dist/layout/ConsoleFloatingChatbot.js +374 -41
  125. package/dist/layout/ConsoleLayout.d.ts +1 -1
  126. package/dist/layout/ConsoleLayout.js +27 -11
  127. package/dist/layout/ContextSelectors.d.ts +44 -0
  128. package/dist/layout/ContextSelectors.js +218 -0
  129. package/dist/layout/InboxPopover.d.ts +6 -1
  130. package/dist/layout/InboxPopover.js +25 -6
  131. package/dist/layout/LocaleSwitcher.d.ts +1 -1
  132. package/dist/layout/LocalizedSidebarTrigger.d.ts +2 -0
  133. package/dist/layout/LocalizedSidebarTrigger.js +15 -0
  134. package/dist/layout/MobileViewSwitcherContext.d.ts +1 -1
  135. package/dist/layout/ModeToggle.d.ts +1 -1
  136. package/dist/layout/PageHeader.d.ts +1 -1
  137. package/dist/layout/UnifiedSidebar.d.ts +2 -1
  138. package/dist/layout/UnifiedSidebar.js +116 -15
  139. package/dist/observability/index.d.ts +1 -0
  140. package/dist/observability/index.js +1 -0
  141. package/dist/observability/settleSignal.d.ts +64 -0
  142. package/dist/observability/settleSignal.js +131 -0
  143. package/dist/preview/DraftChangesPanel.d.ts +19 -0
  144. package/dist/preview/DraftChangesPanel.js +114 -0
  145. package/dist/preview/DraftPreviewBar.d.ts +8 -0
  146. package/dist/preview/DraftPreviewBar.js +86 -0
  147. package/dist/preview/PreviewDraftEmptyState.d.ts +16 -0
  148. package/dist/preview/PreviewDraftEmptyState.js +47 -0
  149. package/dist/preview/PreviewModeContext.d.ts +57 -0
  150. package/dist/preview/PreviewModeContext.js +99 -0
  151. package/dist/preview/UnpublishedAppBar.d.ts +8 -0
  152. package/dist/preview/UnpublishedAppBar.js +79 -0
  153. package/dist/preview/draftStatus.d.ts +20 -0
  154. package/dist/preview/draftStatus.js +27 -0
  155. package/dist/preview/usePublishAllDrafts.d.ts +18 -0
  156. package/dist/preview/usePublishAllDrafts.js +106 -0
  157. package/dist/providers/AdapterProvider.d.ts +1 -1
  158. package/dist/providers/AdapterProvider.js +6 -1
  159. package/dist/providers/ExpressionProvider.d.ts +1 -1
  160. package/dist/providers/MetadataProvider.d.ts +17 -2
  161. package/dist/providers/MetadataProvider.js +183 -12
  162. package/dist/runtime-config.d.ts +46 -2
  163. package/dist/runtime-config.js +39 -2
  164. package/dist/services/builtinComponents.js +68 -59
  165. package/dist/skeletons/SkeletonDashboard.d.ts +1 -1
  166. package/dist/skeletons/SkeletonDetail.d.ts +1 -1
  167. package/dist/skeletons/SkeletonGrid.d.ts +1 -1
  168. package/dist/utils/appRoute.d.ts +21 -0
  169. package/dist/utils/appRoute.js +25 -0
  170. package/dist/utils/deriveRelatedLists.d.ts +54 -0
  171. package/dist/utils/deriveRelatedLists.js +91 -0
  172. package/dist/utils/index.d.ts +4 -0
  173. package/dist/utils/index.js +3 -0
  174. package/dist/utils/managedByEmptyState.d.ts +8 -1
  175. package/dist/utils/managedByEmptyState.js +13 -7
  176. package/dist/utils/preferLocal.d.ts +18 -0
  177. package/dist/utils/preferLocal.js +24 -0
  178. package/dist/views/ActionConfirmDialog.d.ts +1 -1
  179. package/dist/views/ActionConfirmDialog.js +3 -1
  180. package/dist/views/ActionParamDialog.d.ts +6 -1
  181. package/dist/views/ActionParamDialog.js +9 -3
  182. package/dist/views/ActionResultDialog.d.ts +13 -0
  183. package/dist/views/ActionResultDialog.js +134 -0
  184. package/dist/views/ComponentNavView.d.ts +14 -1
  185. package/dist/views/CreateViewDialog.d.ts +1 -1
  186. package/dist/views/DashboardConfigPanel.d.ts +28 -0
  187. package/dist/views/DashboardConfigPanel.js +81 -0
  188. package/dist/views/DashboardView.d.ts +4 -3
  189. package/dist/views/DashboardView.js +38 -239
  190. package/dist/views/FlowRunner.d.ts +59 -0
  191. package/dist/views/FlowRunner.js +153 -0
  192. package/dist/views/InterfaceListPage.d.ts +49 -0
  193. package/dist/views/InterfaceListPage.js +347 -0
  194. package/dist/views/MetadataInspector.d.ts +2 -2
  195. package/dist/views/ObjectView.d.ts +1 -1
  196. package/dist/views/ObjectView.js +209 -532
  197. package/dist/views/PageView.d.ts +8 -3
  198. package/dist/views/PageView.js +45 -32
  199. package/dist/views/RecordDetailView.d.ts +1 -1
  200. package/dist/views/RecordDetailView.js +363 -148
  201. package/dist/views/RecordFormPage.d.ts +1 -1
  202. package/dist/views/RecordFormPage.js +26 -1
  203. package/dist/views/ReportConfigPanel.d.ts +37 -0
  204. package/dist/views/ReportConfigPanel.js +85 -0
  205. package/dist/views/ReportView.d.ts +1 -1
  206. package/dist/views/ReportView.js +116 -7
  207. package/dist/views/RuntimeDraftBar.d.ts +30 -0
  208. package/dist/views/RuntimeDraftBar.js +112 -0
  209. package/dist/views/SearchResultsPage.d.ts +1 -1
  210. package/dist/views/SearchResultsPage.js +8 -18
  211. package/dist/views/ViewConfigPanel.d.ts +24 -17
  212. package/dist/views/ViewConfigPanel.js +121 -77
  213. package/dist/views/index.d.ts +1 -1
  214. package/dist/views/index.js +1 -1
  215. package/dist/views/metadata-admin/AuditPanel.d.ts +28 -0
  216. package/dist/views/metadata-admin/AuditPanel.js +79 -0
  217. package/dist/views/metadata-admin/DiagnosticsPage.d.ts +20 -0
  218. package/dist/views/metadata-admin/DiagnosticsPage.js +69 -0
  219. package/dist/views/metadata-admin/DirectoryPage.d.ts +16 -1
  220. package/dist/views/metadata-admin/DirectoryPage.js +113 -24
  221. package/dist/views/metadata-admin/DraftReviewPanel.d.ts +33 -0
  222. package/dist/views/metadata-admin/DraftReviewPanel.js +77 -0
  223. package/dist/views/metadata-admin/EmbeddedItemEditor.d.ts +17 -1
  224. package/dist/views/metadata-admin/EmbeddedItemEditor.js +15 -8
  225. package/dist/views/metadata-admin/JsonSourceEditor.d.ts +37 -0
  226. package/dist/views/metadata-admin/JsonSourceEditor.js +178 -0
  227. package/dist/views/metadata-admin/LayeredDiff.d.ts +39 -1
  228. package/dist/views/metadata-admin/LayeredDiff.js +171 -5
  229. package/dist/views/metadata-admin/MetadataDetailDrawer.d.ts +15 -1
  230. package/dist/views/metadata-admin/MetadataTypeActions.d.ts +48 -0
  231. package/dist/views/metadata-admin/MetadataTypeActions.js +165 -0
  232. package/dist/views/metadata-admin/PackagesPage.d.ts +18 -0
  233. package/dist/views/metadata-admin/PackagesPage.js +395 -0
  234. package/dist/views/metadata-admin/PageShell.d.ts +1 -1
  235. package/dist/views/metadata-admin/PageShell.js +9 -4
  236. package/dist/views/metadata-admin/PermissionMatrixEditor.d.ts +35 -1
  237. package/dist/views/metadata-admin/QuickFind.d.ts +21 -1
  238. package/dist/views/metadata-admin/QuickFind.js +6 -3
  239. package/dist/views/metadata-admin/RelatedPanel.d.ts +24 -1
  240. package/dist/views/metadata-admin/RelatedPanel.js +20 -18
  241. package/dist/views/metadata-admin/ResourceEditPage.d.ts +40 -1
  242. package/dist/views/metadata-admin/ResourceEditPage.js +1223 -60
  243. package/dist/views/metadata-admin/ResourceHistoryPage.d.ts +39 -1
  244. package/dist/views/metadata-admin/ResourceHistoryPage.js +66 -16
  245. package/dist/views/metadata-admin/ResourceListPage.d.ts +13 -1
  246. package/dist/views/metadata-admin/ResourceListPage.js +266 -30
  247. package/dist/views/metadata-admin/ResourceRouter.d.ts +23 -1
  248. package/dist/views/metadata-admin/SchemaForm.d.ts +34 -1
  249. package/dist/views/metadata-admin/SchemaForm.js +559 -49
  250. package/dist/views/metadata-admin/StudioHomePage.d.ts +22 -0
  251. package/dist/views/metadata-admin/StudioHomePage.js +213 -0
  252. package/dist/views/metadata-admin/anchors.js +237 -24
  253. package/dist/views/metadata-admin/clientValidation.d.ts +50 -0
  254. package/dist/views/metadata-admin/clientValidation.js +169 -0
  255. package/dist/views/metadata-admin/color-variant-field.d.ts +30 -0
  256. package/dist/views/metadata-admin/color-variant-field.js +38 -0
  257. package/dist/views/metadata-admin/createDerive.d.ts +75 -0
  258. package/dist/views/metadata-admin/createDerive.js +179 -0
  259. package/dist/views/metadata-admin/dashboard-schema.d.ts +12 -0
  260. package/dist/views/metadata-admin/dashboard-schema.js +80 -0
  261. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.d.ts +35 -0
  262. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.js +327 -0
  263. package/dist/views/metadata-admin/datasource/register.d.ts +1 -0
  264. package/dist/views/metadata-admin/datasource/register.js +24 -0
  265. package/dist/views/metadata-admin/default-inspector-registry.d.ts +49 -0
  266. package/dist/views/metadata-admin/default-inspector-registry.js +8 -0
  267. package/dist/views/metadata-admin/default-schemas.js +115 -10
  268. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.d.ts +27 -0
  269. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.js +69 -0
  270. package/dist/views/metadata-admin/external/ImportObjectDialog.d.ts +27 -0
  271. package/dist/views/metadata-admin/external/ImportObjectDialog.js +77 -0
  272. package/dist/views/metadata-admin/external/SchemaBrowser.d.ts +16 -0
  273. package/dist/views/metadata-admin/external/SchemaBrowser.js +74 -0
  274. package/dist/views/metadata-admin/external/ValidationPanel.d.ts +16 -0
  275. package/dist/views/metadata-admin/external/ValidationPanel.js +68 -0
  276. package/dist/views/metadata-admin/external/api.d.ts +100 -0
  277. package/dist/views/metadata-admin/external/api.js +124 -0
  278. package/dist/views/metadata-admin/i18n.d.ts +1 -0
  279. package/dist/views/metadata-admin/i18n.js +1166 -2
  280. package/dist/views/metadata-admin/index.d.ts +8 -5
  281. package/dist/views/metadata-admin/index.js +12 -2
  282. package/dist/views/metadata-admin/inspector-registry.d.ts +51 -0
  283. package/dist/views/metadata-admin/inspector-registry.js +11 -0
  284. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.d.ts +30 -0
  285. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.js +180 -0
  286. package/dist/views/metadata-admin/inspectors/AppNavInspector.d.ts +16 -0
  287. package/dist/views/metadata-admin/inspectors/AppNavInspector.js +110 -0
  288. package/dist/views/metadata-admin/inspectors/ConditionBuilder.d.ts +29 -0
  289. package/dist/views/metadata-admin/inspectors/ConditionBuilder.js +154 -0
  290. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.d.ts +28 -0
  291. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.js +110 -0
  292. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.d.ts +18 -0
  293. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.js +139 -0
  294. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.d.ts +21 -0
  295. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.js +107 -0
  296. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.d.ts +16 -0
  297. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.js +45 -0
  298. package/dist/views/metadata-admin/inspectors/FlowInspector.d.ts +12 -0
  299. package/dist/views/metadata-admin/inspectors/FlowInspector.js +9 -0
  300. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.d.ts +30 -0
  301. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.js +125 -0
  302. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.d.ts +18 -0
  303. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.js +40 -0
  304. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.d.ts +14 -0
  305. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.js +140 -0
  306. package/dist/views/metadata-admin/inspectors/FlowObjectListField.d.ts +26 -0
  307. package/dist/views/metadata-admin/inspectors/FlowObjectListField.js +105 -0
  308. package/dist/views/metadata-admin/inspectors/FlowReferenceField.d.ts +83 -0
  309. package/dist/views/metadata-admin/inspectors/FlowReferenceField.js +181 -0
  310. package/dist/views/metadata-admin/inspectors/FlowStringListField.d.ts +21 -0
  311. package/dist/views/metadata-admin/inspectors/FlowStringListField.js +60 -0
  312. package/dist/views/metadata-admin/inspectors/InspectorComboField.d.ts +40 -0
  313. package/dist/views/metadata-admin/inspectors/InspectorComboField.js +61 -0
  314. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.d.ts +21 -0
  315. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.js +54 -0
  316. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.d.ts +23 -0
  317. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.js +330 -0
  318. package/dist/views/metadata-admin/inspectors/PageBlockInspector.d.ts +48 -0
  319. package/dist/views/metadata-admin/inspectors/PageBlockInspector.js +332 -0
  320. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.d.ts +58 -0
  321. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.js +160 -0
  322. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.d.ts +19 -0
  323. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.js +144 -0
  324. package/dist/views/metadata-admin/inspectors/ViewInspector.d.ts +19 -0
  325. package/dist/views/metadata-admin/inspectors/ViewInspector.js +21 -0
  326. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.d.ts +54 -0
  327. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.js +191 -0
  328. package/dist/views/metadata-admin/inspectors/_shared.d.ts +124 -0
  329. package/dist/views/metadata-admin/inspectors/_shared.js +113 -0
  330. package/dist/views/metadata-admin/inspectors/expression-validate.d.ts +26 -0
  331. package/dist/views/metadata-admin/inspectors/expression-validate.js +66 -0
  332. package/dist/views/metadata-admin/inspectors/flow-node-config.d.ts +143 -0
  333. package/dist/views/metadata-admin/inspectors/flow-node-config.js +461 -0
  334. package/dist/views/metadata-admin/inspectors/index.d.ts +1 -0
  335. package/dist/views/metadata-admin/inspectors/index.js +45 -0
  336. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.d.ts +40 -0
  337. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.js +227 -0
  338. package/dist/views/metadata-admin/inspectors/useDatasetFields.d.ts +72 -0
  339. package/dist/views/metadata-admin/inspectors/useDatasetFields.js +0 -0
  340. package/dist/views/metadata-admin/mergeServerFields.d.ts +65 -0
  341. package/dist/views/metadata-admin/mergeServerFields.js +56 -0
  342. package/dist/views/metadata-admin/preview-registry.d.ts +55 -0
  343. package/dist/views/metadata-admin/previews/ActionPreview.d.ts +25 -0
  344. package/dist/views/metadata-admin/previews/ActionPreview.js +238 -0
  345. package/dist/views/metadata-admin/previews/AddWidgetPicker.d.ts +12 -0
  346. package/dist/views/metadata-admin/previews/AddWidgetPicker.js +56 -0
  347. package/dist/views/metadata-admin/previews/AgentPreview.d.ts +24 -0
  348. package/dist/views/metadata-admin/previews/AgentPreview.js +100 -0
  349. package/dist/views/metadata-admin/previews/AppNavCanvas.d.ts +31 -0
  350. package/dist/views/metadata-admin/previews/AppNavCanvas.js +260 -0
  351. package/dist/views/metadata-admin/previews/AppPreview.d.ts +16 -1
  352. package/dist/views/metadata-admin/previews/AppPreview.js +23 -14
  353. package/dist/views/metadata-admin/previews/BookPreview.d.ts +20 -0
  354. package/dist/views/metadata-admin/previews/BookPreview.js +132 -0
  355. package/dist/views/metadata-admin/previews/DashboardPreview.d.ts +16 -1
  356. package/dist/views/metadata-admin/previews/DashboardPreview.js +110 -8
  357. package/dist/views/metadata-admin/previews/DatasetPreview.d.ts +18 -0
  358. package/dist/views/metadata-admin/previews/DatasetPreview.js +89 -0
  359. package/dist/views/metadata-admin/previews/DatasourcePreview.d.ts +23 -0
  360. package/dist/views/metadata-admin/previews/DatasourcePreview.js +68 -0
  361. package/dist/views/metadata-admin/previews/EmailTemplatePreview.d.ts +14 -1
  362. package/dist/views/metadata-admin/previews/FieldStub.d.ts +30 -0
  363. package/dist/views/metadata-admin/previews/FieldStub.js +104 -0
  364. package/dist/views/metadata-admin/previews/FieldsListEditor.d.ts +50 -0
  365. package/dist/views/metadata-admin/previews/FieldsListEditor.js +97 -0
  366. package/dist/views/metadata-admin/previews/FlowCanvas.d.ts +43 -0
  367. package/dist/views/metadata-admin/previews/FlowCanvas.js +328 -0
  368. package/dist/views/metadata-admin/previews/FlowPreview.d.ts +20 -0
  369. package/dist/views/metadata-admin/previews/FlowPreview.js +92 -0
  370. package/dist/views/metadata-admin/previews/FlowRunsPanel.d.ts +46 -0
  371. package/dist/views/metadata-admin/previews/FlowRunsPanel.js +97 -0
  372. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.d.ts +25 -0
  373. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.js +170 -0
  374. package/dist/views/metadata-admin/previews/JobPreview.d.ts +28 -0
  375. package/dist/views/metadata-admin/previews/JobPreview.js +290 -0
  376. package/dist/views/metadata-admin/previews/ObjectFormCanvas.d.ts +30 -0
  377. package/dist/views/metadata-admin/previews/ObjectFormCanvas.js +547 -0
  378. package/dist/views/metadata-admin/previews/ObjectPreview.d.ts +14 -1
  379. package/dist/views/metadata-admin/previews/ObjectPreview.js +5 -30
  380. package/dist/views/metadata-admin/previews/OutlineStrip.d.ts +32 -0
  381. package/dist/views/metadata-admin/previews/OutlineStrip.js +8 -0
  382. package/dist/views/metadata-admin/previews/PageBlockCanvas.d.ts +49 -0
  383. package/dist/views/metadata-admin/previews/PageBlockCanvas.js +510 -0
  384. package/dist/views/metadata-admin/previews/PagePreview.d.ts +10 -1
  385. package/dist/views/metadata-admin/previews/PagePreview.js +90 -4
  386. package/dist/views/metadata-admin/previews/PermissionPreview.d.ts +27 -0
  387. package/dist/views/metadata-admin/previews/PermissionPreview.js +115 -0
  388. package/dist/views/metadata-admin/previews/PreviewShell.d.ts +29 -6
  389. package/dist/views/metadata-admin/previews/PreviewShell.js +16 -3
  390. package/dist/views/metadata-admin/previews/ReportPreview.d.ts +18 -1
  391. package/dist/views/metadata-admin/previews/ReportPreview.js +23 -15
  392. package/dist/views/metadata-admin/previews/RolePreview.d.ts +19 -0
  393. package/dist/views/metadata-admin/previews/RolePreview.js +14 -0
  394. package/dist/views/metadata-admin/previews/SkillPreview.d.ts +22 -0
  395. package/dist/views/metadata-admin/previews/SkillPreview.js +34 -0
  396. package/dist/views/metadata-admin/previews/ToolPreview.d.ts +25 -0
  397. package/dist/views/metadata-admin/previews/ToolPreview.js +122 -0
  398. package/dist/views/metadata-admin/previews/TranslationPreview.d.ts +25 -0
  399. package/dist/views/metadata-admin/previews/TranslationPreview.js +52 -0
  400. package/dist/views/metadata-admin/previews/ValidationPreview.d.ts +27 -0
  401. package/dist/views/metadata-admin/previews/ValidationPreview.js +110 -0
  402. package/dist/views/metadata-admin/previews/ViewColumnPanes.d.ts +62 -0
  403. package/dist/views/metadata-admin/previews/ViewColumnPanes.js +140 -0
  404. package/dist/views/metadata-admin/previews/ViewPreview.d.ts +23 -1
  405. package/dist/views/metadata-admin/previews/ViewPreview.js +101 -73
  406. package/dist/views/metadata-admin/previews/block-config.d.ts +82 -0
  407. package/dist/views/metadata-admin/previews/block-config.js +324 -0
  408. package/dist/views/metadata-admin/previews/block-types.d.ts +40 -0
  409. package/dist/views/metadata-admin/previews/block-types.js +110 -0
  410. package/dist/views/metadata-admin/previews/field-types.d.ts +53 -0
  411. package/dist/views/metadata-admin/previews/field-types.js +97 -0
  412. package/dist/views/metadata-admin/previews/flow-canvas-layout.d.ts +88 -0
  413. package/dist/views/metadata-admin/previews/flow-canvas-layout.js +190 -0
  414. package/dist/views/metadata-admin/previews/flow-canvas-parts.d.ts +88 -0
  415. package/dist/views/metadata-admin/previews/flow-canvas-parts.js +358 -0
  416. package/dist/views/metadata-admin/previews/form-preview.d.ts +24 -0
  417. package/dist/views/metadata-admin/previews/form-preview.js +29 -0
  418. package/dist/views/metadata-admin/previews/index.js +43 -0
  419. package/dist/views/metadata-admin/previews/object-fields-bridge.d.ts +66 -0
  420. package/dist/views/metadata-admin/previews/object-fields-bridge.js +171 -0
  421. package/dist/views/metadata-admin/previews/object-fields-io.d.ts +109 -0
  422. package/dist/views/metadata-admin/previews/object-fields-io.js +208 -0
  423. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.d.ts +91 -0
  424. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.js +2 -0
  425. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.d.ts +8 -0
  426. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.js +113 -0
  427. package/dist/views/metadata-admin/previews/simulator/flow-simulator.d.ts +44 -0
  428. package/dist/views/metadata-admin/previews/simulator/flow-simulator.js +316 -0
  429. package/dist/views/metadata-admin/previews/useDatasetCatalog.d.ts +47 -0
  430. package/dist/views/metadata-admin/previews/useDatasetCatalog.js +133 -0
  431. package/dist/views/metadata-admin/previews/useFlowNodePalette.d.ts +44 -0
  432. package/dist/views/metadata-admin/previews/useFlowNodePalette.js +124 -0
  433. package/dist/views/metadata-admin/previews/useMetaOptions.d.ts +8 -0
  434. package/dist/views/metadata-admin/previews/useMetaOptions.js +50 -0
  435. package/dist/views/metadata-admin/previews/useObjectFields.d.ts +23 -0
  436. package/dist/views/metadata-admin/previews/useObjectFields.js +79 -0
  437. package/dist/views/metadata-admin/previews/useObjectOptions.d.ts +8 -0
  438. package/dist/views/metadata-admin/previews/useObjectOptions.js +43 -0
  439. package/dist/views/metadata-admin/previews/view-column-io.d.ts +42 -0
  440. package/dist/views/metadata-admin/previews/view-column-io.js +73 -0
  441. package/dist/views/metadata-admin/previews/widget-types.d.ts +24 -0
  442. package/dist/views/metadata-admin/previews/widget-types.js +40 -0
  443. package/dist/views/metadata-admin/registry.d.ts +140 -19
  444. package/dist/views/metadata-admin/report-schema.d.ts +26 -0
  445. package/dist/views/metadata-admin/report-schema.js +121 -0
  446. package/dist/views/metadata-admin/useMetadata.d.ts +100 -2
  447. package/dist/views/metadata-admin/useMetadata.js +155 -4
  448. package/dist/views/metadata-admin/view-item-normalize.d.ts +20 -0
  449. package/dist/views/metadata-admin/view-item-normalize.js +68 -0
  450. package/dist/views/metadata-admin/view-schema.d.ts +16 -0
  451. package/dist/views/metadata-admin/view-schema.js +107 -0
  452. package/dist/views/metadata-admin/view-variant-model.d.ts +23 -0
  453. package/dist/views/metadata-admin/view-variant-model.js +64 -0
  454. package/dist/views/metadata-admin/widgets.d.ts +89 -1
  455. package/dist/views/metadata-admin/widgets.js +491 -17
  456. package/dist/views/runtime-metadata-persistence.d.ts +78 -0
  457. package/dist/views/runtime-metadata-persistence.js +89 -0
  458. package/dist/views/useOpenRecordList.d.ts +18 -0
  459. package/dist/views/useOpenRecordList.js +36 -0
  460. package/dist/views/userFilterUrlState.d.ts +15 -0
  461. package/dist/views/userFilterUrlState.js +53 -0
  462. package/dist/views/view-config-adapter.d.ts +38 -0
  463. package/dist/views/view-config-adapter.js +80 -0
  464. package/package.json +52 -34
  465. package/dist/views/DesignDrawer.d.ts +0 -28
  466. package/dist/views/DesignDrawer.js +0 -51
  467. package/dist/views/metadata-admin/DesignerEditorWrapper.d.ts +0 -68
  468. package/dist/views/metadata-admin/DesignerEditorWrapper.js +0 -158
@@ -0,0 +1,110 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ /**
3
+ * Catalog of Page-block types, mirrored from the framework's Page
4
+ * schema (`regions[].components[].type` enum). Grouped + iconified
5
+ * for the picker UI in PageBlockCanvas.
6
+ *
7
+ * Source of truth: keep the IDs in sync with
8
+ * `@objectstack/spec`'s page protocol. New block types appear in the
9
+ * `Other` category by default — add a META entry to give them an icon.
10
+ */
11
+ import { PanelTop, PanelBottom, PanelLeft, Folders, ChevronsUpDown, Square, Layers, FileText, Tag, ListChecks, Activity, MessageSquare, Compass, AlertTriangle, Zap, BookOpen, History, Menu, Search, Bot, Sparkles, Type, Hash, Image as ImageIcon, Minus, MousePointerClick, List, Rows3, Box, Table, FormInput, Gauge, Columns3, LayoutGrid, } from 'lucide-react';
12
+ export const BLOCK_TYPE_META = {
13
+ // Data — object-bound views & layout grid
14
+ 'grid': { label: 'Grid', category: 'data', Icon: LayoutGrid },
15
+ 'object-grid': { label: 'Table', category: 'data', Icon: Table },
16
+ 'object-form': { label: 'Form', category: 'data', Icon: FormInput },
17
+ 'object-metric': { label: 'Metric', category: 'data', Icon: Gauge },
18
+ 'object-kanban': { label: 'Kanban', category: 'data', Icon: Columns3 },
19
+ // Page layout
20
+ 'page:header': { label: 'Header', category: 'layout', Icon: PanelTop },
21
+ 'page:footer': { label: 'Footer', category: 'layout', Icon: PanelBottom },
22
+ 'page:sidebar': { label: 'Sidebar', category: 'layout', Icon: PanelLeft },
23
+ 'page:tabs': { label: 'Tabs', category: 'layout', Icon: Folders },
24
+ 'page:accordion': { label: 'Accordion', category: 'layout', Icon: ChevronsUpDown },
25
+ 'page:card': { label: 'Card', category: 'layout', Icon: Square },
26
+ 'page:section': { label: 'Section', category: 'layout', Icon: Layers },
27
+ // Record context
28
+ 'record:details': { label: 'Record details', category: 'record', Icon: FileText },
29
+ 'record:highlights': { label: 'Highlights', category: 'record', Icon: Tag },
30
+ 'record:related_list': { label: 'Related list', category: 'record', Icon: ListChecks },
31
+ 'record:activity': { label: 'Activity timeline', category: 'record', Icon: Activity },
32
+ 'record:chatter': { label: 'Chatter feed', category: 'record', Icon: MessageSquare },
33
+ 'record:path': { label: 'Stage path', category: 'record', Icon: Compass },
34
+ 'record:alert': { label: 'Alert banner', category: 'record', Icon: AlertTriangle },
35
+ 'record:quick_actions': { label: 'Quick actions', category: 'record', Icon: Zap },
36
+ 'record:reference_rail': { label: 'Reference rail', category: 'record', Icon: BookOpen },
37
+ 'record:history': { label: 'History', category: 'record', Icon: History },
38
+ // Navigation (page-content only; shell singletons are not page blocks)
39
+ 'nav:menu': { label: 'Nav menu', category: 'navigation', Icon: Menu },
40
+ 'nav:breadcrumb': { label: 'Breadcrumb', category: 'navigation', Icon: Compass },
41
+ 'global:search': { label: 'Global search', category: 'navigation', Icon: Search },
42
+ // AI
43
+ 'ai:chat_window': { label: 'AI chat window', category: 'ai', Icon: Bot },
44
+ 'ai:suggestion': { label: 'AI suggestion', category: 'ai', Icon: Sparkles },
45
+ // Elements
46
+ 'element:text': { label: 'Text', category: 'element', Icon: Type },
47
+ 'element:number': { label: 'Number', category: 'element', Icon: Hash },
48
+ 'element:image': { label: 'Image', category: 'element', Icon: ImageIcon },
49
+ 'element:divider': { label: 'Divider', category: 'element', Icon: Minus },
50
+ 'element:button': { label: 'Button', category: 'element', Icon: MousePointerClick },
51
+ 'element:definition-list': { label: 'Definition list', category: 'element', Icon: List },
52
+ 'element:repeater': { label: 'Repeater', category: 'element', Icon: Rows3 },
53
+ };
54
+ export const CATEGORY_LABEL_EN = {
55
+ data: 'Data',
56
+ layout: 'Layout',
57
+ record: 'Record context',
58
+ navigation: 'Navigation',
59
+ element: 'Elements',
60
+ ai: 'AI',
61
+ misc: 'Other',
62
+ };
63
+ export const TYPES_BY_CATEGORY = (() => {
64
+ const out = {
65
+ data: [], layout: [], record: [], navigation: [], element: [], ai: [], misc: [],
66
+ };
67
+ for (const [id, meta] of Object.entries(BLOCK_TYPE_META)) {
68
+ out[meta.category].push(id);
69
+ }
70
+ return ['data', 'layout', 'record', 'element', 'navigation', 'ai', 'misc']
71
+ .map((c) => ({ category: c, types: out[c] }))
72
+ .filter((g) => g.types.length > 0);
73
+ })();
74
+ /** Fallback icon for unknown block types. */
75
+ export const UnknownBlockIcon = Box;
76
+ export const BLOCK_CATEGORY_TONE = {
77
+ data: {
78
+ icon: 'text-emerald-500 dark:text-emerald-400',
79
+ badge: 'border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-900 dark:bg-emerald-950/40 dark:text-emerald-300',
80
+ },
81
+ layout: {
82
+ icon: 'text-slate-500 dark:text-slate-400',
83
+ badge: 'border-slate-200 bg-slate-50 text-slate-700 dark:border-slate-800 dark:bg-slate-900/40 dark:text-slate-300',
84
+ },
85
+ record: {
86
+ icon: 'text-blue-500 dark:text-blue-400',
87
+ badge: 'border-blue-200 bg-blue-50 text-blue-700 dark:border-blue-900 dark:bg-blue-950/40 dark:text-blue-300',
88
+ },
89
+ navigation: {
90
+ icon: 'text-indigo-500 dark:text-indigo-400',
91
+ badge: 'border-indigo-200 bg-indigo-50 text-indigo-700 dark:border-indigo-900 dark:bg-indigo-950/40 dark:text-indigo-300',
92
+ },
93
+ element: {
94
+ icon: 'text-teal-500 dark:text-teal-400',
95
+ badge: 'border-teal-200 bg-teal-50 text-teal-700 dark:border-teal-900 dark:bg-teal-950/40 dark:text-teal-300',
96
+ },
97
+ ai: {
98
+ icon: 'text-violet-500 dark:text-violet-400',
99
+ badge: 'border-violet-200 bg-violet-50 text-violet-700 dark:border-violet-900 dark:bg-violet-950/40 dark:text-violet-300',
100
+ },
101
+ misc: {
102
+ icon: 'text-zinc-500 dark:text-zinc-400',
103
+ badge: 'border-zinc-200 bg-zinc-50 text-zinc-600 dark:border-zinc-800 dark:bg-zinc-900/40 dark:text-zinc-400',
104
+ },
105
+ };
106
+ /** Resolve a category tone for any block `type` string (handles unknowns). */
107
+ export function resolveBlockTone(type) {
108
+ const meta = BLOCK_TYPE_META[type];
109
+ return BLOCK_CATEGORY_TONE[meta?.category ?? 'misc'];
110
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Canonical field-type catalog for the object form designer.
3
+ *
4
+ * Mirrors `@objectstack/spec`'s `FieldType` discriminated union (46
5
+ * entries as of spec 7.1) but grouped into the 9 user-facing
6
+ * categories used by the type picker and inspector.
7
+ *
8
+ * Adding a new type here is enough — the canvas and inspector both
9
+ * key off `FIELD_TYPE_META` for icon / label / category lookup, and
10
+ * the picker auto-includes any new entry.
11
+ */
12
+ import type { LucideIcon } from 'lucide-react';
13
+ export type FieldTypeId = 'text' | 'textarea' | 'email' | 'url' | 'phone' | 'password' | 'markdown' | 'html' | 'richtext' | 'number' | 'currency' | 'percent' | 'date' | 'datetime' | 'time' | 'boolean' | 'toggle' | 'select' | 'multiselect' | 'radio' | 'checkboxes' | 'lookup' | 'master_detail' | 'tree' | 'image' | 'file' | 'avatar' | 'video' | 'audio' | 'formula' | 'summary' | 'autonumber' | 'composite' | 'repeater' | 'location' | 'address' | 'code' | 'json' | 'color' | 'rating' | 'slider' | 'signature' | 'qrcode' | 'progress' | 'tags' | 'vector';
14
+ export type FieldTypeCategory = 'text' | 'number' | 'date' | 'logic' | 'selection' | 'relation' | 'media' | 'calculated' | 'advanced';
15
+ export interface FieldTypeMeta {
16
+ id: FieldTypeId;
17
+ label: string;
18
+ /** Brief Chinese label for the picker / type badge. */
19
+ labelZh: string;
20
+ category: FieldTypeCategory;
21
+ Icon: LucideIcon;
22
+ }
23
+ export declare const FIELD_TYPE_META: Record<FieldTypeId, FieldTypeMeta>;
24
+ export declare const CATEGORY_ORDER: FieldTypeCategory[];
25
+ export declare const CATEGORY_LABEL_EN: Record<FieldTypeCategory, string>;
26
+ /**
27
+ * Per-category color tone. Lets the canvas, type badges, and type
28
+ * picker tint a field by its category so the form is scannable at a
29
+ * glance (text vs number vs relation vs media …) instead of a wall of
30
+ * neutral-grey rows. Colour is used purely as a category *signal* —
31
+ * subtle tints, never loud fills — consistent with the console's
32
+ * content-first visual language.
33
+ *
34
+ * Class strings are written out in full (not composed) so Tailwind's
35
+ * JIT can see and emit every variant.
36
+ */
37
+ export interface CategoryTone {
38
+ /** Icon stroke colour. */
39
+ icon: string;
40
+ /** Tinted type-badge classes (border + bg + text), light & dark. */
41
+ badge: string;
42
+ }
43
+ export declare const CATEGORY_TONE: Record<FieldTypeCategory, CategoryTone>;
44
+ /** Resolve the colour tone for any field-type string (unknown → advanced). */
45
+ export declare function resolveCategoryTone(type: unknown): CategoryTone;
46
+ export declare const CATEGORY_LABEL_ZH: Record<FieldTypeCategory, string>;
47
+ /** All type ids grouped by category, in category order. */
48
+ export declare const TYPES_BY_CATEGORY: Array<{
49
+ category: FieldTypeCategory;
50
+ types: FieldTypeId[];
51
+ }>;
52
+ /** Resolve metadata for any type string, including unknown values. */
53
+ export declare function resolveFieldTypeMeta(type: unknown): FieldTypeMeta;
@@ -0,0 +1,97 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ import { Type, AlignLeft, AtSign, Globe, Phone, Lock, FileText, Code, Sparkles, Hash, DollarSign, Percent, Calendar, Clock, ToggleLeft, ListOrdered, ListChecks, CircleDot, CheckSquare, Link2, Workflow, Network, Image, Paperclip, UserCircle, Video, Music, Calculator, Sigma, Boxes, Repeat2, MapPin, Map, FileJson, Palette, Star, SlidersHorizontal, PenLine, QrCode, BarChart3, Tags, Atom, } from 'lucide-react';
3
+ const M = (id, label, labelZh, category, Icon) => ({ id, label, labelZh, category, Icon });
4
+ export const FIELD_TYPE_META = {
5
+ text: M('text', 'Text', '单行文本', 'text', Type),
6
+ textarea: M('textarea', 'Text Area', '多行文本', 'text', AlignLeft),
7
+ email: M('email', 'Email', '邮箱', 'text', AtSign),
8
+ url: M('url', 'URL', '网址', 'text', Globe),
9
+ phone: M('phone', 'Phone', '电话', 'text', Phone),
10
+ password: M('password', 'Password', '密码', 'text', Lock),
11
+ markdown: M('markdown', 'Markdown', 'Markdown', 'text', FileText),
12
+ html: M('html', 'HTML', 'HTML', 'text', Code),
13
+ richtext: M('richtext', 'Rich Text', '富文本', 'text', Sparkles),
14
+ number: M('number', 'Number', '数字', 'number', Hash),
15
+ currency: M('currency', 'Currency', '货币', 'number', DollarSign),
16
+ percent: M('percent', 'Percent', '百分比', 'number', Percent),
17
+ date: M('date', 'Date', '日期', 'date', Calendar),
18
+ datetime: M('datetime', 'Date/Time', '日期时间', 'date', Calendar),
19
+ time: M('time', 'Time', '时间', 'date', Clock),
20
+ boolean: M('boolean', 'Checkbox', '复选框', 'logic', CheckSquare),
21
+ toggle: M('toggle', 'Toggle', '开关', 'logic', ToggleLeft),
22
+ select: M('select', 'Picklist', '下拉选择', 'selection', ListOrdered),
23
+ multiselect: M('multiselect', 'Multi-Select', '多选', 'selection', ListChecks),
24
+ radio: M('radio', 'Radio', '单选', 'selection', CircleDot),
25
+ checkboxes: M('checkboxes', 'Checkboxes', '复选组', 'selection', ListChecks),
26
+ lookup: M('lookup', 'Lookup', '查找关系', 'relation', Link2),
27
+ master_detail: M('master_detail', 'Master-Detail', '主从关系', 'relation', Workflow),
28
+ tree: M('tree', 'Tree', '树形关系', 'relation', Network),
29
+ image: M('image', 'Image', '图片', 'media', Image),
30
+ file: M('file', 'File', '文件', 'media', Paperclip),
31
+ avatar: M('avatar', 'Avatar', '头像', 'media', UserCircle),
32
+ video: M('video', 'Video', '视频', 'media', Video),
33
+ audio: M('audio', 'Audio', '音频', 'media', Music),
34
+ formula: M('formula', 'Formula', '公式', 'calculated', Calculator),
35
+ summary: M('summary', 'Rollup', '汇总', 'calculated', Sigma),
36
+ autonumber: M('autonumber', 'Auto Number', '自动编号', 'calculated', Hash),
37
+ composite: M('composite', 'Composite', '复合字段', 'advanced', Boxes),
38
+ repeater: M('repeater', 'Repeater', '重复字段', 'advanced', Repeat2),
39
+ location: M('location', 'Location', '地理坐标', 'advanced', MapPin),
40
+ address: M('address', 'Address', '地址', 'advanced', Map),
41
+ code: M('code', 'Code', '代码', 'advanced', Code),
42
+ json: M('json', 'JSON', 'JSON', 'advanced', FileJson),
43
+ color: M('color', 'Color', '颜色', 'advanced', Palette),
44
+ rating: M('rating', 'Rating', '评分', 'advanced', Star),
45
+ slider: M('slider', 'Slider', '滑块', 'advanced', SlidersHorizontal),
46
+ signature: M('signature', 'Signature', '签名', 'advanced', PenLine),
47
+ qrcode: M('qrcode', 'QR Code', '二维码', 'advanced', QrCode),
48
+ progress: M('progress', 'Progress', '进度条', 'advanced', BarChart3),
49
+ tags: M('tags', 'Tags', '标签', 'advanced', Tags),
50
+ vector: M('vector', 'Vector', '向量', 'advanced', Atom),
51
+ };
52
+ export const CATEGORY_ORDER = [
53
+ 'text', 'number', 'date', 'logic', 'selection', 'relation', 'media', 'calculated', 'advanced',
54
+ ];
55
+ export const CATEGORY_LABEL_EN = {
56
+ text: 'Text', number: 'Number', date: 'Date & Time', logic: 'Logic',
57
+ selection: 'Selection', relation: 'Relation', media: 'Media',
58
+ calculated: 'Calculated', advanced: 'Advanced',
59
+ };
60
+ export const CATEGORY_TONE = {
61
+ text: { icon: 'text-slate-500 dark:text-slate-400', badge: 'border-slate-200 bg-slate-50 text-slate-600 dark:border-slate-700/50 dark:bg-slate-800/40 dark:text-slate-300' },
62
+ number: { icon: 'text-blue-600 dark:text-blue-400', badge: 'border-blue-200 bg-blue-50 text-blue-700 dark:border-blue-800/50 dark:bg-blue-950/40 dark:text-blue-300' },
63
+ date: { icon: 'text-violet-600 dark:text-violet-400', badge: 'border-violet-200 bg-violet-50 text-violet-700 dark:border-violet-800/50 dark:bg-violet-950/40 dark:text-violet-300' },
64
+ logic: { icon: 'text-amber-600 dark:text-amber-400', badge: 'border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-800/50 dark:bg-amber-950/40 dark:text-amber-300' },
65
+ selection: { icon: 'text-teal-600 dark:text-teal-400', badge: 'border-teal-200 bg-teal-50 text-teal-700 dark:border-teal-800/50 dark:bg-teal-950/40 dark:text-teal-300' },
66
+ relation: { icon: 'text-indigo-600 dark:text-indigo-400', badge: 'border-indigo-200 bg-indigo-50 text-indigo-700 dark:border-indigo-800/50 dark:bg-indigo-950/40 dark:text-indigo-300' },
67
+ media: { icon: 'text-pink-600 dark:text-pink-400', badge: 'border-pink-200 bg-pink-50 text-pink-700 dark:border-pink-800/50 dark:bg-pink-950/40 dark:text-pink-300' },
68
+ calculated: { icon: 'text-emerald-600 dark:text-emerald-400', badge: 'border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-800/50 dark:bg-emerald-950/40 dark:text-emerald-300' },
69
+ advanced: { icon: 'text-zinc-500 dark:text-zinc-400', badge: 'border-zinc-200 bg-zinc-50 text-zinc-600 dark:border-zinc-700/50 dark:bg-zinc-800/40 dark:text-zinc-300' },
70
+ };
71
+ /** Resolve the colour tone for any field-type string (unknown → advanced). */
72
+ export function resolveCategoryTone(type) {
73
+ return CATEGORY_TONE[resolveFieldTypeMeta(type).category];
74
+ }
75
+ export const CATEGORY_LABEL_ZH = {
76
+ text: '文本', number: '数值', date: '日期/时间', logic: '逻辑',
77
+ selection: '选择', relation: '关系', media: '媒体',
78
+ calculated: '计算', advanced: '高级',
79
+ };
80
+ /** All type ids grouped by category, in category order. */
81
+ export const TYPES_BY_CATEGORY = CATEGORY_ORDER.map((category) => ({
82
+ category,
83
+ types: Object.keys(FIELD_TYPE_META).filter((id) => FIELD_TYPE_META[id].category === category),
84
+ }));
85
+ /** Resolve metadata for any type string, including unknown values. */
86
+ export function resolveFieldTypeMeta(type) {
87
+ if (typeof type === 'string' && type in FIELD_TYPE_META) {
88
+ return FIELD_TYPE_META[type];
89
+ }
90
+ return {
91
+ id: 'text',
92
+ label: typeof type === 'string' ? type : 'unknown',
93
+ labelZh: typeof type === 'string' ? type : '未知',
94
+ category: 'advanced',
95
+ Icon: Type,
96
+ };
97
+ }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * flow-canvas-layout — pure, dependency-free geometry + graph helpers for
3
+ * the visual flow designer canvas (`FlowCanvas.tsx`).
4
+ *
5
+ * Kept separate from the React component so the layout math stays easy to
6
+ * reason about (and unit-test) without pulling in any rendering concerns.
7
+ *
8
+ * Coordinate system: top-to-bottom flowchart (mirrors Power Automate /
9
+ * Salesforce Flow Builder). Origin is the top-left of the diagram bounding
10
+ * box after normalization, so every node sits at x >= PADDING, y >= PADDING.
11
+ */
12
+ export interface FlowNodeUI {
13
+ x?: number;
14
+ y?: number;
15
+ }
16
+ export interface FlowNode {
17
+ id: string;
18
+ type: string;
19
+ label?: string;
20
+ config?: Record<string, unknown>;
21
+ /** UI-only layout hint persisted via onPatch; ignored by the runtime. */
22
+ ui?: FlowNodeUI;
23
+ [k: string]: unknown;
24
+ }
25
+ export interface FlowEdge {
26
+ id?: string;
27
+ source: string;
28
+ target: string;
29
+ condition?: string | {
30
+ source?: string;
31
+ };
32
+ type?: string;
33
+ label?: string;
34
+ isDefault?: boolean;
35
+ }
36
+ export interface Point {
37
+ x: number;
38
+ y: number;
39
+ }
40
+ export declare const NODE_W = 240;
41
+ export declare const NODE_H = 66;
42
+ export declare const H_GAP = 44;
43
+ export declare const V_GAP = 56;
44
+ export declare const PADDING = 28;
45
+ /** A node carries a persisted manual position when both x and y are finite. */
46
+ export declare function hasManualPosition(node: FlowNode): boolean;
47
+ /**
48
+ * Compute a deterministic layered (top-to-bottom) layout.
49
+ *
50
+ * - Edges with a dangling endpoint are ignored for layering.
51
+ * - Layer assignment is a cycle-guarded longest-path relaxation: a node sits
52
+ * one layer below its deepest predecessor. Roots (the `start` node, else
53
+ * nodes with no incoming edge, else the first node) seed layer 0.
54
+ * - Nodes never reached from a root are dropped into a trailing layer so the
55
+ * author still sees them.
56
+ * - Within a layer, nodes keep their original `nodes[]` order (stable).
57
+ * - A node with a persisted `ui` position overrides its computed slot, but is
58
+ * still included in the returned map so callers can size the canvas.
59
+ */
60
+ export declare function computeLayout(nodes: FlowNode[], edges: FlowEdge[]): Map<string, Point>;
61
+ /** Bounding box of the laid-out diagram, including node extents + padding. */
62
+ export declare function diagramSize(positions: Map<string, Point>): {
63
+ width: number;
64
+ height: number;
65
+ };
66
+ /** Bottom-center anchor of a node — where its outgoing edges originate. */
67
+ export declare function bottomAnchor(p: Point): Point;
68
+ /** Top-center anchor of a node — where its incoming edges terminate. */
69
+ export declare function topAnchor(p: Point): Point;
70
+ /**
71
+ * Smooth vertical cubic-bezier path between two anchors. Control points are
72
+ * pulled along the vertical axis so the curve reads as a top-down flow even
73
+ * when the target sits above or beside the source.
74
+ */
75
+ export declare function edgePath(from: Point, to: Point): string;
76
+ /** Midpoint of an edge — anchor for the condition label + insert affordance. */
77
+ export declare function edgeMidpoint(from: Point, to: Point): Point;
78
+ /**
79
+ * Stable identity for an edge. Prefers an explicit `edge.id`; otherwise falls
80
+ * back to a `source->target#index` composite so an unsaved edge still has a
81
+ * deterministic key. Used for selection, traversal highlighting, and inspector
82
+ * lookup — all of which read the same `draft.edges` array, so the index is
83
+ * consistent across them. Editing label/condition/isDefault never changes the
84
+ * key (source/target/index are untouched), so a selection survives edits.
85
+ */
86
+ export declare function edgeKey(edge: FlowEdge, index: number): string;
87
+ /** Human-readable condition text for an edge's optional guard. */
88
+ export declare function conditionText(c: FlowEdge['condition']): string | undefined;
@@ -0,0 +1,190 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ // Node card + spacing geometry. Written as plain numbers so both the layout
3
+ // pass and the SVG edge router share one source of truth.
4
+ export const NODE_W = 240;
5
+ export const NODE_H = 66;
6
+ export const H_GAP = 44;
7
+ export const V_GAP = 56;
8
+ export const PADDING = 28;
9
+ /** True when a value is a usable, finite coordinate. */
10
+ function isFiniteNum(v) {
11
+ return typeof v === 'number' && Number.isFinite(v);
12
+ }
13
+ /** A node carries a persisted manual position when both x and y are finite. */
14
+ export function hasManualPosition(node) {
15
+ return isFiniteNum(node.ui?.x) && isFiniteNum(node.ui?.y);
16
+ }
17
+ /**
18
+ * Compute a deterministic layered (top-to-bottom) layout.
19
+ *
20
+ * - Edges with a dangling endpoint are ignored for layering.
21
+ * - Layer assignment is a cycle-guarded longest-path relaxation: a node sits
22
+ * one layer below its deepest predecessor. Roots (the `start` node, else
23
+ * nodes with no incoming edge, else the first node) seed layer 0.
24
+ * - Nodes never reached from a root are dropped into a trailing layer so the
25
+ * author still sees them.
26
+ * - Within a layer, nodes keep their original `nodes[]` order (stable).
27
+ * - A node with a persisted `ui` position overrides its computed slot, but is
28
+ * still included in the returned map so callers can size the canvas.
29
+ */
30
+ export function computeLayout(nodes, edges) {
31
+ const positions = new Map();
32
+ if (nodes.length === 0)
33
+ return positions;
34
+ const byId = new Map(nodes.map((n) => [n.id, n]));
35
+ const indexOf = new Map(nodes.map((n, i) => [n.id, i]));
36
+ const outAdj = new Map();
37
+ const incoming = new Map();
38
+ for (const n of nodes)
39
+ incoming.set(n.id, 0);
40
+ for (const e of edges) {
41
+ if (!byId.has(e.source) || !byId.has(e.target) || e.source === e.target)
42
+ continue;
43
+ if (!outAdj.has(e.source))
44
+ outAdj.set(e.source, []);
45
+ outAdj.get(e.source).push(e.target);
46
+ incoming.set(e.target, (incoming.get(e.target) ?? 0) + 1);
47
+ }
48
+ // Seed roots: explicit start nodes, then any node with no incoming edge,
49
+ // finally the first node as a last resort (handles pure cycles).
50
+ const roots = [];
51
+ for (const n of nodes)
52
+ if (n.type === 'start')
53
+ roots.push(n.id);
54
+ for (const n of nodes)
55
+ if ((incoming.get(n.id) ?? 0) === 0 && !roots.includes(n.id))
56
+ roots.push(n.id);
57
+ if (roots.length === 0)
58
+ roots.push(nodes[0].id);
59
+ const layer = new Map();
60
+ const queue = [];
61
+ for (const r of roots) {
62
+ layer.set(r, 0);
63
+ queue.push(r);
64
+ }
65
+ // Relaxation with a hard iteration cap so a cyclic graph can never loop.
66
+ const maxIterations = nodes.length * Math.max(1, edges.length) + nodes.length + 1;
67
+ let iterations = 0;
68
+ while (queue.length && iterations < maxIterations) {
69
+ iterations += 1;
70
+ const id = queue.shift();
71
+ const base = layer.get(id) ?? 0;
72
+ for (const next of outAdj.get(id) ?? []) {
73
+ const candidate = base + 1;
74
+ if ((layer.get(next) ?? -1) < candidate) {
75
+ layer.set(next, candidate);
76
+ queue.push(next);
77
+ }
78
+ }
79
+ }
80
+ // Any node not reached above goes one layer below the deepest known layer.
81
+ let maxLayer = 0;
82
+ for (const v of layer.values())
83
+ maxLayer = Math.max(maxLayer, v);
84
+ for (const n of nodes) {
85
+ if (!layer.has(n.id)) {
86
+ maxLayer += 1;
87
+ layer.set(n.id, maxLayer);
88
+ }
89
+ }
90
+ // Bucket nodes by layer, preserving original order within each layer.
91
+ const byLayer = new Map();
92
+ for (const n of nodes) {
93
+ const l = layer.get(n.id) ?? 0;
94
+ if (!byLayer.has(l))
95
+ byLayer.set(l, []);
96
+ byLayer.get(l).push(n.id);
97
+ }
98
+ for (const ids of byLayer.values()) {
99
+ ids.sort((a, b) => (indexOf.get(a) ?? 0) - (indexOf.get(b) ?? 0));
100
+ }
101
+ const sortedLayers = [...byLayer.keys()].sort((a, b) => a - b);
102
+ for (const l of sortedLayers) {
103
+ const ids = byLayer.get(l);
104
+ const rowWidth = ids.length * NODE_W + (ids.length - 1) * H_GAP;
105
+ const startX = -rowWidth / 2;
106
+ ids.forEach((id, i) => {
107
+ positions.set(id, {
108
+ x: startX + i * (NODE_W + H_GAP),
109
+ y: l * (NODE_H + V_GAP),
110
+ });
111
+ });
112
+ }
113
+ // Normalize the auto-computed slots so the diagram starts at
114
+ // (PADDING, PADDING). We do this BEFORE applying manual overrides so the
115
+ // auto-laid nodes always live in one stable frame — a dragged node then
116
+ // keeps the exact coordinate the user dropped it at, with no drift.
117
+ let minX = Infinity;
118
+ let minY = Infinity;
119
+ for (const p of positions.values()) {
120
+ minX = Math.min(minX, p.x);
121
+ minY = Math.min(minY, p.y);
122
+ }
123
+ if (Number.isFinite(minX) && Number.isFinite(minY)) {
124
+ const dx = PADDING - minX;
125
+ const dy = PADDING - minY;
126
+ for (const [id, p] of positions)
127
+ positions.set(id, { x: p.x + dx, y: p.y + dy });
128
+ }
129
+ // Apply persisted manual overrides on top of the normalized frame.
130
+ for (const n of nodes) {
131
+ if (hasManualPosition(n)) {
132
+ positions.set(n.id, { x: Math.max(0, n.ui.x), y: Math.max(0, n.ui.y) });
133
+ }
134
+ }
135
+ return positions;
136
+ }
137
+ /** Bounding box of the laid-out diagram, including node extents + padding. */
138
+ export function diagramSize(positions) {
139
+ let maxX = 0;
140
+ let maxY = 0;
141
+ for (const p of positions.values()) {
142
+ maxX = Math.max(maxX, p.x + NODE_W);
143
+ maxY = Math.max(maxY, p.y + NODE_H);
144
+ }
145
+ return { width: maxX + PADDING, height: maxY + PADDING };
146
+ }
147
+ /** Bottom-center anchor of a node — where its outgoing edges originate. */
148
+ export function bottomAnchor(p) {
149
+ return { x: p.x + NODE_W / 2, y: p.y + NODE_H };
150
+ }
151
+ /** Top-center anchor of a node — where its incoming edges terminate. */
152
+ export function topAnchor(p) {
153
+ return { x: p.x + NODE_W / 2, y: p.y };
154
+ }
155
+ /**
156
+ * Smooth vertical cubic-bezier path between two anchors. Control points are
157
+ * pulled along the vertical axis so the curve reads as a top-down flow even
158
+ * when the target sits above or beside the source.
159
+ */
160
+ export function edgePath(from, to) {
161
+ const dy = Math.max(Math.abs(to.y - from.y) * 0.5, 24);
162
+ const c1 = { x: from.x, y: from.y + dy };
163
+ const c2 = { x: to.x, y: to.y - dy };
164
+ return `M ${from.x},${from.y} C ${c1.x},${c1.y} ${c2.x},${c2.y} ${to.x},${to.y}`;
165
+ }
166
+ /** Midpoint of an edge — anchor for the condition label + insert affordance. */
167
+ export function edgeMidpoint(from, to) {
168
+ return { x: (from.x + to.x) / 2, y: (from.y + to.y) / 2 };
169
+ }
170
+ /**
171
+ * Stable identity for an edge. Prefers an explicit `edge.id`; otherwise falls
172
+ * back to a `source->target#index` composite so an unsaved edge still has a
173
+ * deterministic key. Used for selection, traversal highlighting, and inspector
174
+ * lookup — all of which read the same `draft.edges` array, so the index is
175
+ * consistent across them. Editing label/condition/isDefault never changes the
176
+ * key (source/target/index are untouched), so a selection survives edits.
177
+ */
178
+ export function edgeKey(edge, index) {
179
+ return edge.id || `${edge.source}->${edge.target}#${index}`;
180
+ }
181
+ /** Human-readable condition text for an edge's optional guard. */
182
+ export function conditionText(c) {
183
+ if (!c)
184
+ return undefined;
185
+ if (typeof c === 'string')
186
+ return c;
187
+ if (typeof c === 'object' && typeof c.source === 'string')
188
+ return c.source;
189
+ return undefined;
190
+ }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * flow-canvas-parts — presentational building blocks for `FlowCanvas.tsx`:
3
+ * the per-node-type icon/tone mapping, the node card, and the add-node
4
+ * palette popover. Kept dependency-free and Shadcn-native (Tailwind + lucide).
5
+ */
6
+ import * as React from 'react';
7
+ import { type LucideIcon } from 'lucide-react';
8
+ import { type Point } from './flow-canvas-layout';
9
+ export declare function nodeIcon(type: string): LucideIcon;
10
+ interface NodeTone {
11
+ /** Icon color (used inside the tinted chip). */
12
+ icon: string;
13
+ /** Card accent border (left edge) + selected ring color. */
14
+ accent: string;
15
+ /** Small type-label text color. */
16
+ label: string;
17
+ /** Tinted icon-chip background + ring — the card's primary color cue. */
18
+ chip: string;
19
+ }
20
+ export declare function nodeTone(type: string): NodeTone;
21
+ /**
22
+ * Renders the glyph for a node type. Uses `createElement` (rather than binding
23
+ * the resolved icon to a capitalized local) so the renderer stays a stable
24
+ * module-scope component instead of one re-created on every parent render.
25
+ */
26
+ export declare function NodeTypeIcon({ type, className }: {
27
+ type: string;
28
+ className?: string;
29
+ }): React.FunctionComponentElement<Omit<import("lucide-react").LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
30
+ /** Palette grouping — keeps the add-node list scannable as it grows. */
31
+ export type NodeCategory = 'Data' | 'Logic' | 'Human' | 'Integration' | 'Flow';
32
+ /** Display order of the palette's category sections. */
33
+ export declare const NODE_CATEGORY_ORDER: NodeCategory[];
34
+ export interface PaletteItem {
35
+ type: string;
36
+ label: string;
37
+ hint?: string;
38
+ /** Section this item belongs to in the grouped palette. */
39
+ category?: NodeCategory;
40
+ }
41
+ /**
42
+ * Category for a node type — drives palette grouping and gives engine-only
43
+ * (plugin-contributed) types a sensible section. Mirrors the `nodeTone`
44
+ * families so color and grouping stay consistent.
45
+ */
46
+ export declare function nodeCategory(type: string): NodeCategory;
47
+ /** Node types offered by the add-node palette (spec `FlowNodeAction`). */
48
+ export declare const NODE_PALETTE: PaletteItem[];
49
+ /** Human-friendly default label for a newly created node of `type`. */
50
+ export declare function defaultNodeLabel(type: string): string;
51
+ /**
52
+ * Spec-valid seed fields for a newly created node, so structured blocks start
53
+ * in a valid-ish shape (e.g. a wait node already has a timer eventType) rather
54
+ * than an empty intermediate state. Returns extra node props to spread in.
55
+ */
56
+ export declare function defaultNodeExtras(type: string): Record<string, unknown>;
57
+ export interface NodeCardProps {
58
+ id: string;
59
+ type: string;
60
+ label: string;
61
+ summary?: string;
62
+ position: Point;
63
+ selected: boolean;
64
+ editable: boolean;
65
+ /** Simulation overlay: the currently-executing or already-visited node. */
66
+ runState?: 'active' | 'visited';
67
+ /** Dim nodes not yet reached while a simulation is in progress. */
68
+ dimmed?: boolean;
69
+ onPointerDown?: (e: React.PointerEvent) => void;
70
+ onSelect?: () => void;
71
+ onAppend?: () => void;
72
+ }
73
+ /**
74
+ * A single draggable flow node rendered at an absolute canvas coordinate.
75
+ * The card body drives selection + reposition; a dedicated bottom "+" handle
76
+ * (edit mode only) appends a connected child without ambiguity.
77
+ */
78
+ export declare function NodeCard({ type, label, summary, position, selected, editable, runState, dimmed, onPointerDown, onSelect, onAppend, }: NodeCardProps): React.JSX.Element;
79
+ export interface NodePaletteProps {
80
+ locale?: string;
81
+ /** Node types to offer. Defaults to the hardcoded {@link NODE_PALETTE}. */
82
+ items?: PaletteItem[];
83
+ onPick: (type: string) => void;
84
+ onClose: () => void;
85
+ }
86
+ /** Compact popover listing the node types an author can add, grouped by category. */
87
+ export declare function NodePalette({ items, onPick, onClose }: NodePaletteProps): React.JSX.Element;
88
+ export {};