@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
@@ -0,0 +1,83 @@
1
+ /**
2
+ * FlowReferenceField — an *editable combobox* for flow-node config values that
3
+ * are really references (an object's field, an object/flow/role/user/… by name,
4
+ * a connector, an email template, or another node in this flow) rather than
5
+ * free-form strings.
6
+ *
7
+ * Why a combobox and not a strict dropdown: the designer must never trap the
8
+ * author. The control suggests known values (fetched per {@link ReferenceKind})
9
+ * but always accepts free text, so a field that doesn't exist yet, a role the
10
+ * current tenant hasn't populated, or an empty catalog all still let the author
11
+ * type a value. Implemented with a native `<datalist>` for exactly that
12
+ * suggest-but-allow-anything behaviour, zero extra dependencies, and built-in
13
+ * accessibility.
14
+ *
15
+ * Two layers:
16
+ * • {@link ReferenceCombobox} — the bare control, given an already-resolved
17
+ * concrete kind. Reused by the `objectList` repeater for per-row reference
18
+ * cells (e.g. an approver's value).
19
+ * • {@link FlowReferenceField} — the inspector field wrapper (label + hint),
20
+ * resolving a *polymorphic* reference against the node's own sibling config.
21
+ *
22
+ * Data sources are resolved lazily from the running backend (the same source of
23
+ * truth as the rest of the designer); `object-field` additionally needs to know
24
+ * *which* object — resolved from the reference's `objectSource` against the
25
+ * flow draft (trigger object) or the node's sibling config.
26
+ */
27
+ import * as React from 'react';
28
+ import type { FlowReferenceSpec, ReferenceKind } from './flow-node-config';
29
+ /** Context the reference picker needs to resolve dynamic option sources. */
30
+ export interface FlowReferenceContext {
31
+ /** The whole flow draft — used for `$trigger` object + the node list. */
32
+ draft: Record<string, unknown>;
33
+ /** The node currently being edited — used to resolve sibling config keys. */
34
+ node: Record<string, unknown> | null;
35
+ }
36
+ /** A concrete (non-polymorphic) reference resolution. */
37
+ export interface ResolvedRef {
38
+ kind: ReferenceKind;
39
+ objectSource?: string;
40
+ }
41
+ /**
42
+ * Resolve a (possibly polymorphic) reference spec to a concrete kind. For a
43
+ * polymorphic spec, `sibling(key)` supplies the discriminator value (the row's
44
+ * `type`, or a sibling config key). Returns undefined when nothing resolves —
45
+ * the caller then renders plain free text.
46
+ */
47
+ export declare function resolveRefKind(ref: FlowReferenceSpec | undefined, sibling: (key: string) => unknown): ResolvedRef | undefined;
48
+ export interface ReferenceComboboxProps {
49
+ /** The resolved concrete reference, or undefined → plain free text. */
50
+ resolved: ResolvedRef | undefined;
51
+ value: unknown;
52
+ onCommit: (value: unknown) => void;
53
+ /** Optional blur handler (the `objectList` repeater flushes rows on blur). */
54
+ onBlur?: () => void;
55
+ disabled?: boolean;
56
+ placeholder?: string;
57
+ context?: FlowReferenceContext;
58
+ /** Show the "Fields of X." / unresolved hint under the control (default true). */
59
+ showHint?: boolean;
60
+ }
61
+ /**
62
+ * The bare reference combobox — suggestions for `resolved.kind`, always
63
+ * free-text editable. Hooks are called unconditionally (kind-gated args) so the
64
+ * component is safe to use in a repeater where the kind changes per row.
65
+ */
66
+ export declare function ReferenceCombobox({ resolved, value, onCommit, onBlur, disabled, placeholder, context, showHint }: ReferenceComboboxProps): React.JSX.Element;
67
+ export interface FlowReferenceFieldProps {
68
+ field: {
69
+ label: string;
70
+ placeholder?: string;
71
+ ref?: FlowReferenceSpec;
72
+ };
73
+ value: unknown;
74
+ onCommit: (value: unknown) => void;
75
+ disabled?: boolean;
76
+ context?: FlowReferenceContext;
77
+ }
78
+ /**
79
+ * Inspector field wrapper: a labelled reference combobox. A polymorphic ref is
80
+ * resolved against the node's own sibling config keys (e.g. the script node's
81
+ * `template` follows `actionType`).
82
+ */
83
+ export declare function FlowReferenceField({ field, value, onCommit, disabled, context }: FlowReferenceFieldProps): React.JSX.Element;
@@ -0,0 +1,181 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
3
+ /**
4
+ * FlowReferenceField — an *editable combobox* for flow-node config values that
5
+ * are really references (an object's field, an object/flow/role/user/… by name,
6
+ * a connector, an email template, or another node in this flow) rather than
7
+ * free-form strings.
8
+ *
9
+ * Why a combobox and not a strict dropdown: the designer must never trap the
10
+ * author. The control suggests known values (fetched per {@link ReferenceKind})
11
+ * but always accepts free text, so a field that doesn't exist yet, a role the
12
+ * current tenant hasn't populated, or an empty catalog all still let the author
13
+ * type a value. Implemented with a native `<datalist>` for exactly that
14
+ * suggest-but-allow-anything behaviour, zero extra dependencies, and built-in
15
+ * accessibility.
16
+ *
17
+ * Two layers:
18
+ * • {@link ReferenceCombobox} — the bare control, given an already-resolved
19
+ * concrete kind. Reused by the `objectList` repeater for per-row reference
20
+ * cells (e.g. an approver's value).
21
+ * • {@link FlowReferenceField} — the inspector field wrapper (label + hint),
22
+ * resolving a *polymorphic* reference against the node's own sibling config.
23
+ *
24
+ * Data sources are resolved lazily from the running backend (the same source of
25
+ * truth as the rest of the designer); `object-field` additionally needs to know
26
+ * *which* object — resolved from the reference's `objectSource` against the
27
+ * flow draft (trigger object) or the node's sibling config.
28
+ */
29
+ import * as React from 'react';
30
+ import { Input, Label } from '@object-ui/components';
31
+ import { useMetadataClient } from '../useMetadata';
32
+ import { useObjectFields } from '../previews/useObjectFields';
33
+ /**
34
+ * Reference kinds backed by a flat metadata list (`client.list(type)`), mapped
35
+ * to their metadata-type name. `object-field` and `node` are resolved
36
+ * specially (not via a list) and are intentionally absent.
37
+ */
38
+ const KIND_TO_META_TYPE = {
39
+ object: 'object',
40
+ flow: 'flow',
41
+ role: 'role',
42
+ user: 'user',
43
+ team: 'team',
44
+ queue: 'queue',
45
+ department: 'department',
46
+ connector: 'connector',
47
+ 'email-template': 'email_template',
48
+ };
49
+ /**
50
+ * Resolve a (possibly polymorphic) reference spec to a concrete kind. For a
51
+ * polymorphic spec, `sibling(key)` supplies the discriminator value (the row's
52
+ * `type`, or a sibling config key). Returns undefined when nothing resolves —
53
+ * the caller then renders plain free text.
54
+ */
55
+ export function resolveRefKind(ref, sibling) {
56
+ if (!ref)
57
+ return undefined;
58
+ if (ref.kind)
59
+ return { kind: ref.kind, objectSource: ref.objectSource };
60
+ if (ref.kindFrom && ref.map) {
61
+ const disc = sibling(ref.kindFrom);
62
+ const k = typeof disc === 'string' ? ref.map[disc] : undefined;
63
+ if (k)
64
+ return { kind: k, objectSource: ref.objectSource };
65
+ }
66
+ return undefined;
67
+ }
68
+ /** Read `node.config[key]` as a non-empty string, else undefined. */
69
+ function configString(node, key) {
70
+ const cfg = node?.config;
71
+ if (!cfg || typeof cfg !== 'object' || Array.isArray(cfg))
72
+ return undefined;
73
+ const v = cfg[key];
74
+ return typeof v === 'string' && v ? v : undefined;
75
+ }
76
+ /** Resolve the target object name for an `object-field` reference. */
77
+ function resolveObjectName(kind, objectSource, ctx) {
78
+ if (kind !== 'object-field')
79
+ return undefined;
80
+ const src = objectSource || '$trigger';
81
+ if (src === '$trigger') {
82
+ const nodes = Array.isArray(ctx.draft.nodes) ? ctx.draft.nodes : [];
83
+ const start = nodes.find((n) => n?.type === 'start');
84
+ return configString(start, 'objectName');
85
+ }
86
+ // A sibling config key on the same node (CRUD nodes carry their own objectName).
87
+ return configString(ctx.node, src);
88
+ }
89
+ /**
90
+ * Fetch a metadata type's items as combobox options. `type === undefined`
91
+ * disables the fetch (returns empty), so the hook can be called
92
+ * unconditionally regardless of the reference kind.
93
+ */
94
+ function useMetadataListOptions(type) {
95
+ const client = useMetadataClient();
96
+ const [state, setState] = React.useState({
97
+ options: [],
98
+ loading: !!type,
99
+ });
100
+ React.useEffect(() => {
101
+ if (!type) {
102
+ setState({ options: [], loading: false });
103
+ return;
104
+ }
105
+ let cancelled = false;
106
+ setState((s) => ({ ...s, loading: true }));
107
+ client
108
+ .list(type)
109
+ .then((rows) => {
110
+ if (cancelled)
111
+ return;
112
+ const options = (Array.isArray(rows) ? rows : [])
113
+ .filter((r) => r && typeof r.name === 'string' && r.name)
114
+ .map((r) => ({
115
+ value: String(r.name),
116
+ label: typeof r.label === 'string' && r.label && r.label !== r.name ? `${r.label} (${r.name})` : String(r.name),
117
+ }));
118
+ setState({ options, loading: false });
119
+ })
120
+ .catch(() => {
121
+ if (!cancelled)
122
+ setState({ options: [], loading: false });
123
+ });
124
+ return () => {
125
+ cancelled = true;
126
+ };
127
+ }, [client, type]);
128
+ return state;
129
+ }
130
+ /**
131
+ * The bare reference combobox — suggestions for `resolved.kind`, always
132
+ * free-text editable. Hooks are called unconditionally (kind-gated args) so the
133
+ * component is safe to use in a repeater where the kind changes per row.
134
+ */
135
+ export function ReferenceCombobox({ resolved, value, onCommit, onBlur, disabled, placeholder, context, showHint = true }) {
136
+ const listId = React.useId();
137
+ const ctx = context ?? { draft: {}, node: null };
138
+ const kind = resolved?.kind;
139
+ // object-field: resolve the target object, then its field catalog.
140
+ const objectName = resolved ? resolveObjectName(resolved.kind, resolved.objectSource, ctx) : undefined;
141
+ const { fields: objectFields } = useObjectFields(kind === 'object-field' ? objectName : undefined);
142
+ // Flat metadata-list kinds (object / flow / role / user / team / …).
143
+ const listType = kind && kind !== 'object-field' && kind !== 'node' ? KIND_TO_META_TYPE[kind] : undefined;
144
+ const { options: listOptions } = useMetadataListOptions(listType);
145
+ const options = React.useMemo(() => {
146
+ if (kind === 'object-field') {
147
+ return objectFields.map((f) => ({
148
+ value: f.name,
149
+ label: f.label && f.label !== f.name ? `${f.label} (${f.name})` : f.name,
150
+ }));
151
+ }
152
+ if (kind === 'node') {
153
+ const nodes = Array.isArray(ctx.draft.nodes) ? ctx.draft.nodes : [];
154
+ const currentId = typeof ctx.node?.id === 'string' ? ctx.node.id : undefined;
155
+ return nodes
156
+ .filter((n) => typeof n?.id === 'string' && n.id && n.id !== currentId)
157
+ .map((n) => {
158
+ const id = String(n.id);
159
+ const lbl = typeof n.label === 'string' && n.label ? `${n.label} (${id})` : id;
160
+ return { value: id, label: lbl };
161
+ });
162
+ }
163
+ if (listType)
164
+ return listOptions;
165
+ return [];
166
+ }, [kind, listType, objectFields, listOptions, ctx.draft, ctx.node]);
167
+ // For an object-field whose object can't be resolved, tell the author why the
168
+ // suggestions are empty — but still let them type a value.
169
+ const unresolvedObject = kind === 'object-field' && !objectName;
170
+ return (_jsxs("div", { className: "w-full space-y-1", children: [_jsx(Input, { list: options.length ? listId : undefined, value: value != null ? String(value) : '', onChange: (e) => onCommit(e.target.value), onBlur: onBlur, placeholder: placeholder, disabled: disabled, className: "h-8 text-sm" }), options.length > 0 && (_jsx("datalist", { id: listId, children: options.map((o) => (_jsx("option", { value: o.value, children: o.label }, o.value))) })), showHint && kind === 'object-field' && objectName && (_jsxs("p", { className: "text-[11px] leading-snug text-muted-foreground", children: ["Fields of ", objectName, "."] })), showHint && unresolvedObject && (_jsx("p", { className: "text-[11px] leading-snug text-muted-foreground", children: "Set the flow\u2019s trigger object (on the Start node) to list fields." }))] }));
171
+ }
172
+ /**
173
+ * Inspector field wrapper: a labelled reference combobox. A polymorphic ref is
174
+ * resolved against the node's own sibling config keys (e.g. the script node's
175
+ * `template` follows `actionType`).
176
+ */
177
+ export function FlowReferenceField({ field, value, onCommit, disabled, context }) {
178
+ const node = context?.node ?? null;
179
+ const resolved = resolveRefKind(field.ref, (key) => configString(node, key));
180
+ return (_jsxs("div", { className: "space-y-1", children: [_jsx(Label, { className: "text-xs text-muted-foreground", children: field.label }), _jsx(ReferenceCombobox, { resolved: resolved, value: value, onCommit: onCommit, disabled: disabled, placeholder: field.placeholder, context: context })] }));
181
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * FlowStringListField — a repeatable single-column editor for string-array
3
+ * config (e.g. a notification's `recipients`, a script's `outputVariables`).
4
+ *
5
+ * Mirrors FlowKeyValueField's local-draft pattern: rows live in LOCAL state
6
+ * with a STABLE id and only flush to `onCommit` on blur / Enter / add / remove,
7
+ * so editing never remounts a row mid-keystroke. Empty rows are dropped on
8
+ * flush; an empty list commits `undefined` so no empty array key is written.
9
+ */
10
+ import * as React from 'react';
11
+ export interface FlowStringListFieldProps {
12
+ label: string;
13
+ value: unknown;
14
+ onCommit: (value: string[] | undefined) => void;
15
+ disabled?: boolean;
16
+ addLabel: string;
17
+ itemLabel: string;
18
+ removeLabel: string;
19
+ emptyLabel: string;
20
+ }
21
+ export declare function FlowStringListField({ label, value, onCommit, disabled, addLabel, itemLabel, removeLabel, emptyLabel, }: FlowStringListFieldProps): React.JSX.Element;
@@ -0,0 +1,60 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
3
+ /**
4
+ * FlowStringListField — a repeatable single-column editor for string-array
5
+ * config (e.g. a notification's `recipients`, a script's `outputVariables`).
6
+ *
7
+ * Mirrors FlowKeyValueField's local-draft pattern: rows live in LOCAL state
8
+ * with a STABLE id and only flush to `onCommit` on blur / Enter / add / remove,
9
+ * so editing never remounts a row mid-keystroke. Empty rows are dropped on
10
+ * flush; an empty list commits `undefined` so no empty array key is written.
11
+ */
12
+ import * as React from 'react';
13
+ import { Plus, X } from 'lucide-react';
14
+ import { Button, Input, Label } from '@object-ui/components';
15
+ import { uniqueId } from './_shared';
16
+ function toRows(list, existingIds) {
17
+ const ids = [...existingIds];
18
+ return list.map((value) => {
19
+ const id = uniqueId('sl', ids);
20
+ ids.push(id);
21
+ return { id, value };
22
+ });
23
+ }
24
+ function rowsToList(rows) {
25
+ return rows.map((r) => r.value.trim()).filter((v) => v !== '');
26
+ }
27
+ export function FlowStringListField({ label, value, onCommit, disabled, addLabel, itemLabel, removeLabel, emptyLabel, }) {
28
+ const external = React.useMemo(() => (Array.isArray(value) ? value.map((v) => String(v)) : []), [value]);
29
+ const [rows, setRows] = React.useState(() => toRows(external, []));
30
+ const lastCommitted = React.useRef(JSON.stringify(external));
31
+ React.useEffect(() => {
32
+ const next = JSON.stringify(external);
33
+ if (next !== lastCommitted.current) {
34
+ setRows(toRows(external, []));
35
+ lastCommitted.current = next;
36
+ }
37
+ }, [external]);
38
+ const flush = (nextRows) => {
39
+ const list = rowsToList(nextRows);
40
+ lastCommitted.current = JSON.stringify(list);
41
+ onCommit(list.length ? list : undefined);
42
+ };
43
+ const setRowValue = (id, v) => {
44
+ setRows((rs) => rs.map((r) => (r.id === id ? { ...r, value: v } : r)));
45
+ };
46
+ const addRow = () => {
47
+ setRows((rs) => [...rs, { id: uniqueId('sl', rs.map((r) => r.id)), value: '' }]);
48
+ };
49
+ const removeRow = (id) => {
50
+ setRows((rs) => {
51
+ const next = rs.filter((r) => r.id !== id);
52
+ flush(next);
53
+ return next;
54
+ });
55
+ };
56
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { className: "text-xs text-muted-foreground", children: label }), _jsxs("div", { className: "space-y-1.5", children: [rows.length === 0 && (_jsx("p", { className: "text-[11px] italic text-muted-foreground", children: emptyLabel })), rows.map((row) => (_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(Input, { value: row.value, onChange: (e) => setRowValue(row.id, e.target.value), onBlur: () => flush(rows), onKeyDown: (e) => {
57
+ if (e.key === 'Enter')
58
+ e.target.blur();
59
+ }, placeholder: itemLabel, disabled: disabled, className: "h-8 flex-1 text-xs" }), _jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "h-8 w-8 shrink-0 p-0 text-muted-foreground", onClick: () => removeRow(row.id), disabled: disabled, "aria-label": removeLabel, title: removeLabel, children: _jsx(X, { className: "h-3.5 w-3.5" }) })] }, row.id)))] }), _jsxs(Button, { type: "button", variant: "outline", size: "sm", className: "h-7 w-full text-xs", onClick: addRow, disabled: disabled, children: [_jsx(Plus, { className: "mr-1 h-3.5 w-3.5" }), addLabel] })] }));
60
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * InspectorComboField — a searchable single-select for scoped inspectors that
3
+ * still lets the author type a value not in the list.
4
+ *
5
+ * Mainstream low-code dataset designers let you *pick* an object / relationship
6
+ * / field from the live schema instead of recalling its API name. This combo
7
+ * renders that picker (grouped, searchable) over a catalog the caller supplies,
8
+ * while keeping the power-user escape hatch: when the typed text matches no
9
+ * option, a "Use «text»" row commits the raw value verbatim (so an offline
10
+ * catalog, a computed path, or a server-only field is never a dead end).
11
+ *
12
+ * Self-filters (`shouldFilter={false}`) for predictable label+value matching.
13
+ */
14
+ import * as React from 'react';
15
+ export interface InspectorComboOption {
16
+ value: string;
17
+ label: string;
18
+ /** Small muted suffix, e.g. a field type. */
19
+ hint?: string;
20
+ /** Optional group heading; options sharing a group render together. */
21
+ group?: string;
22
+ }
23
+ export interface InspectorComboFieldProps {
24
+ label?: string;
25
+ value: string;
26
+ onCommit: (v: string) => void;
27
+ options: InspectorComboOption[];
28
+ placeholder?: string;
29
+ searchPlaceholder?: string;
30
+ emptyText?: string;
31
+ disabled?: boolean;
32
+ loading?: boolean;
33
+ /** Allow committing a typed value that matches no option (default true). */
34
+ allowCustom?: boolean;
35
+ /** Render the trigger value in a monospace font. */
36
+ mono?: boolean;
37
+ /** Override the trigger label for the currently-selected custom value. */
38
+ className?: string;
39
+ }
40
+ export declare function InspectorComboField({ label, value, onCommit, options, placeholder, searchPlaceholder, emptyText, disabled, loading, allowCustom, mono, className, }: InspectorComboFieldProps): React.JSX.Element;
@@ -0,0 +1,61 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.
3
+ /**
4
+ * InspectorComboField — a searchable single-select for scoped inspectors that
5
+ * still lets the author type a value not in the list.
6
+ *
7
+ * Mainstream low-code dataset designers let you *pick* an object / relationship
8
+ * / field from the live schema instead of recalling its API name. This combo
9
+ * renders that picker (grouped, searchable) over a catalog the caller supplies,
10
+ * while keeping the power-user escape hatch: when the typed text matches no
11
+ * option, a "Use «text»" row commits the raw value verbatim (so an offline
12
+ * catalog, a computed path, or a server-only field is never a dead end).
13
+ *
14
+ * Self-filters (`shouldFilter={false}`) for predictable label+value matching.
15
+ */
16
+ import * as React from 'react';
17
+ import { Check, ChevronsUpDown } from 'lucide-react';
18
+ import { cn, Button, Label, Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, Popover, PopoverContent, PopoverTrigger, } from '@object-ui/components';
19
+ function matches(option, q) {
20
+ if (!q)
21
+ return true;
22
+ const needle = q.toLowerCase();
23
+ return (option.value.toLowerCase().includes(needle) ||
24
+ option.label.toLowerCase().includes(needle) ||
25
+ (option.group?.toLowerCase().includes(needle) ?? false));
26
+ }
27
+ export function InspectorComboField({ label, value, onCommit, options, placeholder = 'Select…', searchPlaceholder = 'Search or type…', emptyText = 'No match — keep typing to use a custom value.', disabled, loading, allowCustom = true, mono, className, }) {
28
+ const [open, setOpen] = React.useState(false);
29
+ const [search, setSearch] = React.useState('');
30
+ const selected = options.find((o) => o.value === value);
31
+ const triggerText = selected ? selected.label : value || (loading ? 'Loading…' : placeholder);
32
+ const filtered = React.useMemo(() => options.filter((o) => matches(o, search)), [options, search]);
33
+ const groups = React.useMemo(() => {
34
+ const order = [];
35
+ const byGroup = new Map();
36
+ for (const o of filtered) {
37
+ const g = o.group ?? '';
38
+ if (!byGroup.has(g)) {
39
+ byGroup.set(g, []);
40
+ order.push(g);
41
+ }
42
+ byGroup.get(g).push(o);
43
+ }
44
+ return order.map((g) => ({ heading: g, items: byGroup.get(g) }));
45
+ }, [filtered]);
46
+ const trimmed = search.trim();
47
+ const showCustom = allowCustom && !!trimmed && !options.some((o) => o.value === trimmed);
48
+ const commit = (v) => {
49
+ onCommit(v);
50
+ setOpen(false);
51
+ setSearch('');
52
+ };
53
+ const field = (_jsxs(Popover, { open: open, onOpenChange: (next) => {
54
+ setOpen(next);
55
+ if (!next)
56
+ setSearch('');
57
+ }, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { type: "button", variant: "outline", role: "combobox", "aria-expanded": open, disabled: disabled, className: cn('h-8 w-full justify-between px-2 text-sm font-normal', className), children: [_jsx("span", { className: cn('truncate', mono && 'font-mono', !selected && !value && 'text-muted-foreground'), children: triggerText }), _jsx(ChevronsUpDown, { className: "ml-2 h-3.5 w-3.5 shrink-0 opacity-50" })] }) }), _jsx(PopoverContent, { align: "start", className: "w-[var(--radix-popover-trigger-width)] min-w-[14rem] p-0", children: _jsxs(Command, { shouldFilter: false, children: [_jsx(CommandInput, { value: search, onValueChange: setSearch, placeholder: searchPlaceholder }), _jsxs(CommandList, { children: [!showCustom && filtered.length === 0 && _jsx(CommandEmpty, { children: emptyText }), showCustom && (_jsx(CommandGroup, { children: _jsx(CommandItem, { value: `__custom__${trimmed}`, onSelect: () => commit(trimmed), children: _jsxs("span", { className: "truncate", children: ["Use ", _jsxs("span", { className: "font-mono", children: ["\u201C", trimmed, "\u201D"] })] }) }) })), groups.map((g, gi) => (_jsx(CommandGroup, { heading: g.heading || undefined, children: g.items.map((o) => (_jsxs(CommandItem, { value: o.value, onSelect: () => commit(o.value), children: [_jsx(Check, { className: cn('h-3.5 w-3.5', o.value === value ? 'opacity-100' : 'opacity-0') }), _jsx("span", { className: "truncate font-mono", children: o.value }), o.label && o.label !== o.value && (_jsx("span", { className: "ml-1 truncate text-muted-foreground", children: o.label })), o.hint && _jsx("span", { className: "ml-auto pl-2 text-[10px] text-muted-foreground", children: o.hint })] }, o.value))) }, g.heading || `g${gi}`)))] })] }) })] }));
58
+ if (!label)
59
+ return field;
60
+ return (_jsxs("div", { className: "space-y-1", children: [_jsx(Label, { className: "text-xs text-muted-foreground", children: label }), field] }));
61
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * ObjectDefaultInspector — the "home" panel for the object designer,
3
+ * shown when no field is selected.
4
+ *
5
+ * Without it, deselecting a field falls back to the generic whole-draft
6
+ * SchemaForm, which (a) exposes a raw `fields` JSON editor the canvas
7
+ * already owns, and (b) only renders whatever properties the server's
8
+ * `/meta/types` schema happens to declare (often just `name`). This
9
+ * curated panel instead edits the object-level basics directly, in the
10
+ * active locale, in both create and edit.
11
+ *
12
+ * Create-mode niceties:
13
+ * • `name` is editable only while creating (it's the immutable PK once
14
+ * saved) and auto-derives a snake_case slug from the label until the
15
+ * author edits it directly — mirroring the protocol create form.
16
+ *
17
+ * All edits flow through `onPatch` as shallow draft patches.
18
+ */
19
+ import * as React from 'react';
20
+ import type { MetadataDefaultInspectorProps } from '../default-inspector-registry';
21
+ export declare function ObjectDefaultInspector({ name, draft, onPatch, readOnly, locale, }: MetadataDefaultInspectorProps): React.JSX.Element;
@@ -0,0 +1,54 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
3
+ /**
4
+ * ObjectDefaultInspector — the "home" panel for the object designer,
5
+ * shown when no field is selected.
6
+ *
7
+ * Without it, deselecting a field falls back to the generic whole-draft
8
+ * SchemaForm, which (a) exposes a raw `fields` JSON editor the canvas
9
+ * already owns, and (b) only renders whatever properties the server's
10
+ * `/meta/types` schema happens to declare (often just `name`). This
11
+ * curated panel instead edits the object-level basics directly, in the
12
+ * active locale, in both create and edit.
13
+ *
14
+ * Create-mode niceties:
15
+ * • `name` is editable only while creating (it's the immutable PK once
16
+ * saved) and auto-derives a snake_case slug from the label until the
17
+ * author edits it directly — mirroring the protocol create form.
18
+ *
19
+ * All edits flow through `onPatch` as shallow draft patches.
20
+ */
21
+ import * as React from 'react';
22
+ import { InspectorShell, InspectorTextField } from './_shared';
23
+ import { Label } from '@object-ui/components';
24
+ import { toFieldName } from '../previews/object-fields-io';
25
+ import { t } from '../i18n';
26
+ export function ObjectDefaultInspector({ name, draft, onPatch, readOnly, locale, }) {
27
+ const tr = React.useCallback((key) => t(key, locale), [locale]);
28
+ // The host passes an empty `name` only while creating a new object.
29
+ const createMode = !name;
30
+ const str = (key) => (typeof draft[key] === 'string' ? draft[key] : '');
31
+ // Auto-derive name from label until the user edits name directly.
32
+ const nameTouched = React.useRef(false);
33
+ const setLabel = (v) => {
34
+ const patch = { label: v || undefined };
35
+ if (createMode && !nameTouched.current)
36
+ patch.name = toFieldName(v);
37
+ onPatch(patch);
38
+ };
39
+ const setName = (v) => {
40
+ nameTouched.current = true;
41
+ onPatch({ name: toFieldName(v) });
42
+ };
43
+ const nameValue = createMode ? str('name') : name || str('name');
44
+ const title = str('label') || name || tr('designer.object.kind');
45
+ return (_jsx(InspectorShell, { kindLabel: tr('designer.object.kind'), title: title, onClose: () => { }, hideClose: true, children: _jsxs(Section, { title: tr('designer.object.section.basic'), hint: tr('designer.object.section.basicHint'), children: [_jsx(Field, { hint: tr('designer.object.nameHint'), children: _jsx(InspectorTextField, { label: tr('designer.object.name'), value: nameValue, onCommit: setName, disabled: readOnly || !createMode, mono: true, placeholder: tr('designer.object.namePlaceholder') }) }), _jsx(InspectorTextField, { label: tr('designer.object.label'), value: str('label'), onCommit: setLabel, disabled: readOnly, placeholder: tr('designer.object.labelPlaceholder') }), _jsx(InspectorTextField, { label: tr('designer.object.pluralLabel'), value: str('pluralLabel'), onCommit: (v) => onPatch({ pluralLabel: v || undefined }), disabled: readOnly, placeholder: tr('designer.object.pluralPlaceholder') }), _jsx(Field, { hint: tr('designer.object.iconHint'), children: _jsx(InspectorTextField, { label: tr('designer.object.icon'), value: str('icon'), onCommit: (v) => onPatch({ icon: v || undefined }), disabled: readOnly, mono: true, placeholder: "building" }) }), _jsxs("div", { className: "space-y-1", children: [_jsx(Label, { className: "text-xs text-muted-foreground", children: tr('designer.object.description') }), _jsx("textarea", { value: str('description'), disabled: readOnly, rows: 2, placeholder: tr('designer.object.descriptionPlaceholder'), onChange: (e) => onPatch({ description: e.target.value || undefined }), className: "w-full text-sm rounded-md border bg-background px-2 py-1.5 focus:outline-none focus:ring-1 focus:ring-primary" })] })] }) }));
46
+ }
47
+ /* ─────────────── Sub-components ─────────────── */
48
+ function Section({ title, hint, children, }) {
49
+ return (_jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "border-b pb-1", children: [_jsx("div", { className: "text-[10px] font-semibold uppercase tracking-wider text-muted-foreground", children: title }), hint && _jsx("div", { className: "text-[10px] normal-case text-muted-foreground/70 mt-0.5", children: hint })] }), _jsx("div", { className: "space-y-2", children: children })] }));
50
+ }
51
+ /** Wraps a field with a small help line below it. */
52
+ function Field({ hint, children }) {
53
+ return (_jsxs("div", { className: "space-y-1", children: [children, hint && _jsx("p", { className: "text-[11px] text-muted-foreground/80 px-0.5 leading-snug", children: hint })] }));
54
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * ObjectFieldInspector — scoped editor for the selected Object field.
3
+ *
4
+ * Selection shape: { kind: 'field', id: '<field_name>' }
5
+ *
6
+ * The inspector edits one field at a time. Sections:
7
+ * • Basic — name (rename), label, type, required, unique, description
8
+ * • Specific — picklist options / lookup target / formula / numeric
9
+ * precision / max length, conditional on type
10
+ * • Advanced — readonly, hidden, indexed, externalId, group
11
+ *
12
+ * All edits are applied as immutable splices of `draft.fields` via
13
+ * the object-fields-io helpers, preserving the original array-vs-record
14
+ * shape AND any unknown keys on the field definition.
15
+ *
16
+ * Rename: changing the `name` rewrites the field's key in-place and
17
+ * re-issues the selection so the inspector stays bound to the same
18
+ * field. Other fields/options that reference the old name are NOT
19
+ * auto-rewritten — callers should re-validate downstream.
20
+ */
21
+ import * as React from 'react';
22
+ import type { MetadataInspectorProps } from '../inspector-registry';
23
+ export declare function ObjectFieldInspector({ selection, draft, onPatch, onClearSelection, onSelectionChange, readOnly, locale, }: MetadataInspectorProps): React.JSX.Element;