@object-ui/app-shell 6.2.3 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (486) hide show
  1. package/CHANGELOG.md +1229 -0
  2. package/README.md +292 -0
  3. package/dist/assistant/assistantBus.d.ts +72 -0
  4. package/dist/assistant/assistantBus.js +133 -0
  5. package/dist/chrome/CommandPalette.d.ts +1 -1
  6. package/dist/chrome/CommandPalette.js +26 -22
  7. package/dist/chrome/ConditionalAuthWrapper.d.ts +1 -1
  8. package/dist/chrome/ConsoleToaster.d.ts +1 -1
  9. package/dist/chrome/ConsoleToaster.js +3 -1
  10. package/dist/chrome/ErrorBoundary.d.ts +1 -1
  11. package/dist/chrome/KeyboardShortcutsDialog.d.ts +1 -1
  12. package/dist/chrome/KeyboardShortcutsDialog.js +16 -5
  13. package/dist/chrome/LoadingScreen.d.ts +1 -1
  14. package/dist/chrome/LoadingScreen.js +22 -26
  15. package/dist/chrome/RouteFader.d.ts +1 -1
  16. package/dist/chrome/ThemeProvider.d.ts +1 -1
  17. package/dist/components/ManagedByBadge.d.ts +1 -1
  18. package/dist/console/AppContent.d.ts +1 -1
  19. package/dist/console/AppContent.js +184 -39
  20. package/dist/console/ConsoleShell.d.ts +7 -7
  21. package/dist/console/ConsoleShell.js +32 -3
  22. package/dist/console/ai/AiChatPage.d.ts +88 -1
  23. package/dist/console/ai/AiChatPage.js +747 -66
  24. package/dist/console/ai/ConversationsSidebar.d.ts +26 -1
  25. package/dist/console/ai/ConversationsSidebar.js +149 -34
  26. package/dist/console/ai/LiveCanvas.d.ts +28 -0
  27. package/dist/console/ai/LiveCanvas.js +80 -0
  28. package/dist/console/ai/reconcileTurn.d.ts +8 -0
  29. package/dist/console/ai/reconcileTurn.js +20 -0
  30. package/dist/console/auth/AuthPageLayout.d.ts +1 -1
  31. package/dist/console/auth/ForgotPasswordPage.d.ts +1 -1
  32. package/dist/console/auth/LoginPage.d.ts +1 -1
  33. package/dist/console/auth/RegisterPage.d.ts +1 -1
  34. package/dist/console/auth/RegisterPage.js +23 -3
  35. package/dist/console/cloud-connection/CloudConnectionPanel.d.ts +1 -0
  36. package/dist/console/cloud-connection/CloudConnectionPanel.js +169 -0
  37. package/dist/console/home/AppCard.d.ts +1 -1
  38. package/dist/console/home/AppCard.js +6 -12
  39. package/dist/console/home/HomeAppsStrip.d.ts +8 -0
  40. package/dist/console/home/HomeAppsStrip.js +61 -0
  41. package/dist/console/home/HomeLayout.d.ts +1 -1
  42. package/dist/console/home/HomeLayout.js +3 -1
  43. package/dist/console/home/HomePage.d.ts +1 -2
  44. package/dist/console/home/HomePage.js +149 -21
  45. package/dist/console/home/HomeRail.d.ts +22 -0
  46. package/dist/console/home/HomeRail.js +62 -0
  47. package/dist/console/home/QuickActions.d.ts +1 -1
  48. package/dist/console/home/QuickActions.js +3 -11
  49. package/dist/console/home/RecentApps.d.ts +1 -1
  50. package/dist/console/home/RecentApps.js +2 -2
  51. package/dist/console/home/StarredApps.d.ts +1 -1
  52. package/dist/console/home/StarredApps.js +2 -2
  53. package/dist/console/marketplace/InstalledListWidget.d.ts +1 -0
  54. package/dist/console/marketplace/InstalledListWidget.js +93 -0
  55. package/dist/console/marketplace/MarkdownText.d.ts +1 -1
  56. package/dist/console/marketplace/MarketplaceAccessDenied.d.ts +1 -1
  57. package/dist/console/marketplace/MarketplaceInstalledPage.d.ts +8 -14
  58. package/dist/console/marketplace/MarketplaceInstalledPage.js +14 -66
  59. package/dist/console/marketplace/MarketplacePackagePage.d.ts +1 -1
  60. package/dist/console/marketplace/MarketplacePackagePage.js +249 -8
  61. package/dist/console/marketplace/MarketplacePage.d.ts +1 -1
  62. package/dist/console/marketplace/MarketplacePage.js +60 -3
  63. package/dist/console/marketplace/PackageIcon.d.ts +1 -1
  64. package/dist/console/marketplace/PluginDisclosure.d.ts +14 -0
  65. package/dist/console/marketplace/PluginDisclosure.js +38 -0
  66. package/dist/console/marketplace/marketplaceApi.d.ts +123 -0
  67. package/dist/console/marketplace/marketplaceApi.js +254 -1
  68. package/dist/console/organizations/CreateWorkspaceDialog.d.ts +1 -1
  69. package/dist/console/organizations/OrganizationsLayout.d.ts +1 -1
  70. package/dist/console/organizations/OrganizationsPage.d.ts +1 -1
  71. package/dist/console/organizations/manage/AcceptInvitationPage.d.ts +1 -1
  72. package/dist/console/organizations/manage/InvitationsPage.d.ts +1 -1
  73. package/dist/console/organizations/manage/InviteMemberDialog.d.ts +1 -1
  74. package/dist/console/organizations/manage/MembersPage.d.ts +1 -1
  75. package/dist/console/organizations/manage/OrganizationLayout.d.ts +1 -1
  76. package/dist/console/organizations/manage/SettingsPage.d.ts +1 -1
  77. package/dist/context/CommandPaletteProvider.d.ts +44 -0
  78. package/dist/context/CommandPaletteProvider.js +71 -0
  79. package/dist/context/FavoritesProvider.d.ts +1 -1
  80. package/dist/context/NavigationContext.d.ts +1 -1
  81. package/dist/context/RecentItemsProvider.d.ts +2 -2
  82. package/dist/context/UserStateAdapters.d.ts +1 -1
  83. package/dist/context/index.d.ts +2 -0
  84. package/dist/context/index.js +1 -0
  85. package/dist/hooks/index.d.ts +5 -2
  86. package/dist/hooks/index.js +4 -1
  87. package/dist/hooks/useActionModal.d.ts +53 -0
  88. package/dist/hooks/useActionModal.js +111 -0
  89. package/dist/hooks/useChatConversation.d.ts +137 -4
  90. package/dist/hooks/useChatConversation.js +316 -25
  91. package/dist/hooks/useConsoleActionRuntime.d.ts +70 -0
  92. package/dist/hooks/useConsoleActionRuntime.js +564 -0
  93. package/dist/hooks/useConversationList.js +61 -3
  94. package/dist/hooks/useHomeInbox.d.ts +13 -0
  95. package/dist/hooks/useHomeInbox.js +142 -0
  96. package/dist/hooks/useNavPins.js +17 -23
  97. package/dist/hooks/useNavigationSync.d.ts +33 -0
  98. package/dist/hooks/useNavigationSync.js +98 -12
  99. package/dist/hooks/useReconcileOnError.d.ts +40 -0
  100. package/dist/hooks/useReconcileOnError.js +37 -0
  101. package/dist/hooks/useRecordApprovals.d.ts +18 -19
  102. package/dist/hooks/useRecordApprovals.js +24 -40
  103. package/dist/hooks/useResponsiveSidebar.js +14 -5
  104. package/dist/hooks/useSettleSignal.d.ts +19 -0
  105. package/dist/hooks/useSettleSignal.js +20 -0
  106. package/dist/hooks/useTrackRouteAsRecent.js +35 -0
  107. package/dist/hooks/useUrlOverlay.d.ts +62 -0
  108. package/dist/hooks/useUrlOverlay.js +88 -0
  109. package/dist/index.d.ts +18 -8
  110. package/dist/index.js +17 -5
  111. package/dist/layout/ActivityFeed.d.ts +1 -1
  112. package/dist/layout/AppHeader.d.ts +3 -2
  113. package/dist/layout/AppHeader.js +237 -72
  114. package/dist/layout/AppSidebar.d.ts +2 -1
  115. package/dist/layout/AppSidebar.js +26 -46
  116. package/dist/layout/AppSwitcher.d.ts +2 -1
  117. package/dist/layout/AppSwitcher.js +9 -5
  118. package/dist/layout/AuthPageLayout.d.ts +1 -1
  119. package/dist/layout/ConnectionStatus.d.ts +1 -1
  120. package/dist/layout/ConnectionStatus.js +9 -6
  121. package/dist/layout/ConsoleChatbotFab.d.ts +19 -1
  122. package/dist/layout/ConsoleChatbotFab.js +16 -2
  123. package/dist/layout/ConsoleFloatingChatbot.d.ts +34 -2
  124. package/dist/layout/ConsoleFloatingChatbot.js +391 -41
  125. package/dist/layout/ConsoleLayout.d.ts +1 -1
  126. package/dist/layout/ConsoleLayout.js +27 -11
  127. package/dist/layout/ContextSelectors.d.ts +44 -0
  128. package/dist/layout/ContextSelectors.js +242 -0
  129. package/dist/layout/InboxPopover.d.ts +6 -1
  130. package/dist/layout/InboxPopover.js +25 -6
  131. package/dist/layout/LocaleSwitcher.d.ts +1 -1
  132. package/dist/layout/LocalizedSidebarTrigger.d.ts +2 -0
  133. package/dist/layout/LocalizedSidebarTrigger.js +15 -0
  134. package/dist/layout/MobileViewSwitcherContext.d.ts +1 -1
  135. package/dist/layout/ModeToggle.d.ts +1 -1
  136. package/dist/layout/PageHeader.d.ts +1 -1
  137. package/dist/layout/UnifiedSidebar.d.ts +2 -1
  138. package/dist/layout/UnifiedSidebar.js +116 -15
  139. package/dist/layout/agentPicker.d.ts +56 -0
  140. package/dist/layout/agentPicker.js +40 -0
  141. package/dist/observability/index.d.ts +1 -0
  142. package/dist/observability/index.js +1 -0
  143. package/dist/observability/settleSignal.d.ts +64 -0
  144. package/dist/observability/settleSignal.js +131 -0
  145. package/dist/preview/CommitTimeline.d.ts +15 -0
  146. package/dist/preview/CommitTimeline.js +82 -0
  147. package/dist/preview/DraftChangesPanel.d.ts +19 -0
  148. package/dist/preview/DraftChangesPanel.js +114 -0
  149. package/dist/preview/DraftPreviewBar.d.ts +8 -0
  150. package/dist/preview/DraftPreviewBar.js +86 -0
  151. package/dist/preview/PreviewDraftEmptyState.d.ts +16 -0
  152. package/dist/preview/PreviewDraftEmptyState.js +47 -0
  153. package/dist/preview/PreviewModeContext.d.ts +57 -0
  154. package/dist/preview/PreviewModeContext.js +99 -0
  155. package/dist/preview/UnpublishedAppBar.d.ts +8 -0
  156. package/dist/preview/UnpublishedAppBar.js +83 -0
  157. package/dist/preview/commitHistory.d.ts +28 -0
  158. package/dist/preview/commitHistory.js +48 -0
  159. package/dist/preview/draftStatus.d.ts +20 -0
  160. package/dist/preview/draftStatus.js +27 -0
  161. package/dist/preview/usePublishAllDrafts.d.ts +18 -0
  162. package/dist/preview/usePublishAllDrafts.js +106 -0
  163. package/dist/providers/AdapterProvider.d.ts +1 -1
  164. package/dist/providers/AdapterProvider.js +6 -1
  165. package/dist/providers/ExpressionProvider.d.ts +1 -1
  166. package/dist/providers/MetadataProvider.d.ts +17 -2
  167. package/dist/providers/MetadataProvider.js +192 -12
  168. package/dist/runtime-config.d.ts +46 -2
  169. package/dist/runtime-config.js +39 -2
  170. package/dist/services/builtinComponents.js +68 -59
  171. package/dist/skeletons/SkeletonDashboard.d.ts +1 -1
  172. package/dist/skeletons/SkeletonDetail.d.ts +1 -1
  173. package/dist/skeletons/SkeletonGrid.d.ts +1 -1
  174. package/dist/utils/appRoute.d.ts +21 -0
  175. package/dist/utils/appRoute.js +25 -0
  176. package/dist/utils/deriveRelatedLists.d.ts +54 -0
  177. package/dist/utils/deriveRelatedLists.js +91 -0
  178. package/dist/utils/index.d.ts +4 -0
  179. package/dist/utils/index.js +3 -0
  180. package/dist/utils/managedByEmptyState.d.ts +8 -1
  181. package/dist/utils/managedByEmptyState.js +13 -7
  182. package/dist/utils/preferLocal.d.ts +18 -0
  183. package/dist/utils/preferLocal.js +24 -0
  184. package/dist/views/ActionConfirmDialog.d.ts +1 -1
  185. package/dist/views/ActionConfirmDialog.js +3 -1
  186. package/dist/views/ActionParamDialog.d.ts +6 -1
  187. package/dist/views/ActionParamDialog.js +9 -3
  188. package/dist/views/ActionResultDialog.d.ts +13 -0
  189. package/dist/views/ActionResultDialog.js +134 -0
  190. package/dist/views/ComponentNavView.d.ts +14 -1
  191. package/dist/views/CreateViewDialog.d.ts +1 -1
  192. package/dist/views/DashboardConfigPanel.d.ts +28 -0
  193. package/dist/views/DashboardConfigPanel.js +81 -0
  194. package/dist/views/DashboardView.d.ts +4 -3
  195. package/dist/views/DashboardView.js +38 -239
  196. package/dist/views/FlowRunner.d.ts +31 -0
  197. package/dist/views/FlowRunner.js +121 -0
  198. package/dist/views/InterfaceListPage.d.ts +49 -0
  199. package/dist/views/InterfaceListPage.js +347 -0
  200. package/dist/views/MetadataInspector.d.ts +2 -2
  201. package/dist/views/ObjectView.d.ts +1 -1
  202. package/dist/views/ObjectView.js +209 -532
  203. package/dist/views/PageView.d.ts +8 -3
  204. package/dist/views/PageView.js +45 -32
  205. package/dist/views/RecordDetailView.d.ts +1 -1
  206. package/dist/views/RecordDetailView.js +363 -148
  207. package/dist/views/RecordFormPage.d.ts +1 -1
  208. package/dist/views/RecordFormPage.js +26 -1
  209. package/dist/views/ReportConfigPanel.d.ts +37 -0
  210. package/dist/views/ReportConfigPanel.js +85 -0
  211. package/dist/views/ReportView.d.ts +1 -1
  212. package/dist/views/ReportView.js +116 -7
  213. package/dist/views/RuntimeDraftBar.d.ts +30 -0
  214. package/dist/views/RuntimeDraftBar.js +112 -0
  215. package/dist/views/ScreenView.d.ts +70 -0
  216. package/dist/views/ScreenView.js +73 -0
  217. package/dist/views/SearchResultsPage.d.ts +1 -1
  218. package/dist/views/SearchResultsPage.js +8 -18
  219. package/dist/views/ViewConfigPanel.d.ts +24 -17
  220. package/dist/views/ViewConfigPanel.js +121 -77
  221. package/dist/views/index.d.ts +1 -1
  222. package/dist/views/index.js +1 -1
  223. package/dist/views/metadata-admin/AuditPanel.d.ts +28 -0
  224. package/dist/views/metadata-admin/AuditPanel.js +79 -0
  225. package/dist/views/metadata-admin/DiagnosticsPage.d.ts +20 -0
  226. package/dist/views/metadata-admin/DiagnosticsPage.js +69 -0
  227. package/dist/views/metadata-admin/DirectoryPage.d.ts +16 -1
  228. package/dist/views/metadata-admin/DirectoryPage.js +101 -24
  229. package/dist/views/metadata-admin/DraftReviewPanel.d.ts +33 -0
  230. package/dist/views/metadata-admin/DraftReviewPanel.js +77 -0
  231. package/dist/views/metadata-admin/EmbeddedItemEditor.d.ts +17 -1
  232. package/dist/views/metadata-admin/EmbeddedItemEditor.js +15 -8
  233. package/dist/views/metadata-admin/JsonSourceEditor.d.ts +39 -0
  234. package/dist/views/metadata-admin/JsonSourceEditor.js +196 -0
  235. package/dist/views/metadata-admin/LayeredDiff.d.ts +39 -1
  236. package/dist/views/metadata-admin/LayeredDiff.js +171 -5
  237. package/dist/views/metadata-admin/MetadataDetailDrawer.d.ts +15 -1
  238. package/dist/views/metadata-admin/MetadataTypeActions.d.ts +48 -0
  239. package/dist/views/metadata-admin/MetadataTypeActions.js +165 -0
  240. package/dist/views/metadata-admin/PackagesPage.d.ts +18 -0
  241. package/dist/views/metadata-admin/PackagesPage.js +403 -0
  242. package/dist/views/metadata-admin/PageShell.d.ts +1 -1
  243. package/dist/views/metadata-admin/PageShell.js +9 -4
  244. package/dist/views/metadata-admin/PermissionMatrixEditor.d.ts +35 -1
  245. package/dist/views/metadata-admin/QuickFind.d.ts +21 -1
  246. package/dist/views/metadata-admin/QuickFind.js +6 -3
  247. package/dist/views/metadata-admin/RelatedPanel.d.ts +24 -1
  248. package/dist/views/metadata-admin/RelatedPanel.js +20 -18
  249. package/dist/views/metadata-admin/ResourceEditPage.d.ts +40 -1
  250. package/dist/views/metadata-admin/ResourceEditPage.js +1250 -60
  251. package/dist/views/metadata-admin/ResourceHistoryPage.d.ts +39 -1
  252. package/dist/views/metadata-admin/ResourceHistoryPage.js +66 -16
  253. package/dist/views/metadata-admin/ResourceListPage.d.ts +13 -1
  254. package/dist/views/metadata-admin/ResourceListPage.js +258 -30
  255. package/dist/views/metadata-admin/ResourceRouter.d.ts +23 -1
  256. package/dist/views/metadata-admin/SchemaForm.d.ts +34 -1
  257. package/dist/views/metadata-admin/SchemaForm.js +559 -49
  258. package/dist/views/metadata-admin/StudioHomePage.d.ts +22 -0
  259. package/dist/views/metadata-admin/StudioHomePage.js +205 -0
  260. package/dist/views/metadata-admin/anchors.js +255 -24
  261. package/dist/views/metadata-admin/clientValidation.d.ts +50 -0
  262. package/dist/views/metadata-admin/clientValidation.js +169 -0
  263. package/dist/views/metadata-admin/color-variant-field.d.ts +30 -0
  264. package/dist/views/metadata-admin/color-variant-field.js +38 -0
  265. package/dist/views/metadata-admin/createDerive.d.ts +75 -0
  266. package/dist/views/metadata-admin/createDerive.js +179 -0
  267. package/dist/views/metadata-admin/dashboard-schema.d.ts +12 -0
  268. package/dist/views/metadata-admin/dashboard-schema.js +80 -0
  269. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.d.ts +35 -0
  270. package/dist/views/metadata-admin/datasource/DatasourceResourcePage.js +327 -0
  271. package/dist/views/metadata-admin/datasource/register.d.ts +1 -0
  272. package/dist/views/metadata-admin/datasource/register.js +24 -0
  273. package/dist/views/metadata-admin/default-inspector-registry.d.ts +49 -0
  274. package/dist/views/metadata-admin/default-inspector-registry.js +8 -0
  275. package/dist/views/metadata-admin/default-schemas.js +115 -10
  276. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.d.ts +27 -0
  277. package/dist/views/metadata-admin/external/ExternalDatasourcePanel.js +69 -0
  278. package/dist/views/metadata-admin/external/ImportObjectDialog.d.ts +27 -0
  279. package/dist/views/metadata-admin/external/ImportObjectDialog.js +77 -0
  280. package/dist/views/metadata-admin/external/SchemaBrowser.d.ts +16 -0
  281. package/dist/views/metadata-admin/external/SchemaBrowser.js +74 -0
  282. package/dist/views/metadata-admin/external/ValidationPanel.d.ts +16 -0
  283. package/dist/views/metadata-admin/external/ValidationPanel.js +68 -0
  284. package/dist/views/metadata-admin/external/api.d.ts +100 -0
  285. package/dist/views/metadata-admin/external/api.js +124 -0
  286. package/dist/views/metadata-admin/i18n.d.ts +1 -0
  287. package/dist/views/metadata-admin/i18n.js +1252 -2
  288. package/dist/views/metadata-admin/index.d.ts +8 -5
  289. package/dist/views/metadata-admin/index.js +12 -2
  290. package/dist/views/metadata-admin/inspector-registry.d.ts +51 -0
  291. package/dist/views/metadata-admin/inspector-registry.js +11 -0
  292. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.d.ts +30 -0
  293. package/dist/views/metadata-admin/inspectors/ActionDefaultInspector.js +180 -0
  294. package/dist/views/metadata-admin/inspectors/AppNavInspector.d.ts +16 -0
  295. package/dist/views/metadata-admin/inspectors/AppNavInspector.js +110 -0
  296. package/dist/views/metadata-admin/inspectors/ConditionBuilder.d.ts +29 -0
  297. package/dist/views/metadata-admin/inspectors/ConditionBuilder.js +154 -0
  298. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.d.ts +28 -0
  299. package/dist/views/metadata-admin/inspectors/DashboardDefaultInspector.js +110 -0
  300. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.d.ts +18 -0
  301. package/dist/views/metadata-admin/inspectors/DashboardWidgetInspector.js +139 -0
  302. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.d.ts +21 -0
  303. package/dist/views/metadata-admin/inspectors/DatasetDefaultInspector.js +221 -0
  304. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.d.ts +16 -0
  305. package/dist/views/metadata-admin/inspectors/FlowEdgeInspector.js +126 -0
  306. package/dist/views/metadata-admin/inspectors/FlowInspector.d.ts +12 -0
  307. package/dist/views/metadata-admin/inspectors/FlowInspector.js +9 -0
  308. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.d.ts +30 -0
  309. package/dist/views/metadata-admin/inspectors/FlowKeyValueField.js +125 -0
  310. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.d.ts +18 -0
  311. package/dist/views/metadata-admin/inspectors/FlowNodeConfigField.js +40 -0
  312. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.d.ts +14 -0
  313. package/dist/views/metadata-admin/inspectors/FlowNodeInspector.js +205 -0
  314. package/dist/views/metadata-admin/inspectors/FlowObjectListField.d.ts +26 -0
  315. package/dist/views/metadata-admin/inspectors/FlowObjectListField.js +105 -0
  316. package/dist/views/metadata-admin/inspectors/FlowReferenceField.d.ts +83 -0
  317. package/dist/views/metadata-admin/inspectors/FlowReferenceField.js +181 -0
  318. package/dist/views/metadata-admin/inspectors/FlowStringListField.d.ts +21 -0
  319. package/dist/views/metadata-admin/inspectors/FlowStringListField.js +60 -0
  320. package/dist/views/metadata-admin/inspectors/InspectorComboField.d.ts +40 -0
  321. package/dist/views/metadata-admin/inspectors/InspectorComboField.js +61 -0
  322. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.d.ts +21 -0
  323. package/dist/views/metadata-admin/inspectors/ObjectDefaultInspector.js +55 -0
  324. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.d.ts +23 -0
  325. package/dist/views/metadata-admin/inspectors/ObjectFieldInspector.js +365 -0
  326. package/dist/views/metadata-admin/inspectors/PageBlockInspector.d.ts +48 -0
  327. package/dist/views/metadata-admin/inspectors/PageBlockInspector.js +332 -0
  328. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.d.ts +58 -0
  329. package/dist/views/metadata-admin/inspectors/ReportDefaultInspector.js +218 -0
  330. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.d.ts +19 -0
  331. package/dist/views/metadata-admin/inspectors/ViewColumnInspector.js +144 -0
  332. package/dist/views/metadata-admin/inspectors/ViewInspector.d.ts +19 -0
  333. package/dist/views/metadata-admin/inspectors/ViewInspector.js +21 -0
  334. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.d.ts +54 -0
  335. package/dist/views/metadata-admin/inspectors/ViewVariantInspector.js +191 -0
  336. package/dist/views/metadata-admin/inspectors/_shared.d.ts +128 -0
  337. package/dist/views/metadata-admin/inspectors/_shared.js +113 -0
  338. package/dist/views/metadata-admin/inspectors/datasetFilterCondition.d.ts +24 -0
  339. package/dist/views/metadata-admin/inspectors/datasetFilterCondition.js +97 -0
  340. package/dist/views/metadata-admin/inspectors/expression-validate.d.ts +26 -0
  341. package/dist/views/metadata-admin/inspectors/expression-validate.js +66 -0
  342. package/dist/views/metadata-admin/inspectors/flow-node-config.d.ts +143 -0
  343. package/dist/views/metadata-admin/inspectors/flow-node-config.js +506 -0
  344. package/dist/views/metadata-admin/inspectors/index.d.ts +1 -0
  345. package/dist/views/metadata-admin/inspectors/index.js +45 -0
  346. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.d.ts +40 -0
  347. package/dist/views/metadata-admin/inspectors/json-schema-to-fields.js +227 -0
  348. package/dist/views/metadata-admin/inspectors/useDatasetFields.d.ts +72 -0
  349. package/dist/views/metadata-admin/inspectors/useDatasetFields.js +0 -0
  350. package/dist/views/metadata-admin/issuePath.d.ts +22 -0
  351. package/dist/views/metadata-admin/issuePath.js +65 -0
  352. package/dist/views/metadata-admin/mergeServerFields.d.ts +65 -0
  353. package/dist/views/metadata-admin/mergeServerFields.js +56 -0
  354. package/dist/views/metadata-admin/package-scope.d.ts +26 -0
  355. package/dist/views/metadata-admin/package-scope.js +43 -0
  356. package/dist/views/metadata-admin/preview-registry.d.ts +55 -0
  357. package/dist/views/metadata-admin/previews/ActionPreview.d.ts +25 -0
  358. package/dist/views/metadata-admin/previews/ActionPreview.js +238 -0
  359. package/dist/views/metadata-admin/previews/AddWidgetPicker.d.ts +12 -0
  360. package/dist/views/metadata-admin/previews/AddWidgetPicker.js +56 -0
  361. package/dist/views/metadata-admin/previews/AgentPreview.d.ts +24 -0
  362. package/dist/views/metadata-admin/previews/AgentPreview.js +100 -0
  363. package/dist/views/metadata-admin/previews/AppNavCanvas.d.ts +31 -0
  364. package/dist/views/metadata-admin/previews/AppNavCanvas.js +260 -0
  365. package/dist/views/metadata-admin/previews/AppPreview.d.ts +16 -1
  366. package/dist/views/metadata-admin/previews/AppPreview.js +23 -14
  367. package/dist/views/metadata-admin/previews/BookPreview.d.ts +20 -0
  368. package/dist/views/metadata-admin/previews/BookPreview.js +132 -0
  369. package/dist/views/metadata-admin/previews/DashboardPreview.d.ts +16 -1
  370. package/dist/views/metadata-admin/previews/DashboardPreview.js +110 -8
  371. package/dist/views/metadata-admin/previews/DatasetPreview.d.ts +18 -0
  372. package/dist/views/metadata-admin/previews/DatasetPreview.js +105 -0
  373. package/dist/views/metadata-admin/previews/DatasourcePreview.d.ts +23 -0
  374. package/dist/views/metadata-admin/previews/DatasourcePreview.js +68 -0
  375. package/dist/views/metadata-admin/previews/EmailTemplatePreview.d.ts +14 -1
  376. package/dist/views/metadata-admin/previews/FieldStub.d.ts +30 -0
  377. package/dist/views/metadata-admin/previews/FieldStub.js +104 -0
  378. package/dist/views/metadata-admin/previews/FieldsListEditor.d.ts +50 -0
  379. package/dist/views/metadata-admin/previews/FieldsListEditor.js +97 -0
  380. package/dist/views/metadata-admin/previews/FlowCanvas.d.ts +49 -0
  381. package/dist/views/metadata-admin/previews/FlowCanvas.js +416 -0
  382. package/dist/views/metadata-admin/previews/FlowPreview.d.ts +20 -0
  383. package/dist/views/metadata-admin/previews/FlowPreview.js +120 -0
  384. package/dist/views/metadata-admin/previews/FlowRunsPanel.d.ts +46 -0
  385. package/dist/views/metadata-admin/previews/FlowRunsPanel.js +97 -0
  386. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.d.ts +25 -0
  387. package/dist/views/metadata-admin/previews/FlowSimulatorPanel.js +204 -0
  388. package/dist/views/metadata-admin/previews/JobPreview.d.ts +28 -0
  389. package/dist/views/metadata-admin/previews/JobPreview.js +290 -0
  390. package/dist/views/metadata-admin/previews/ObjectFormCanvas.d.ts +30 -0
  391. package/dist/views/metadata-admin/previews/ObjectFormCanvas.js +547 -0
  392. package/dist/views/metadata-admin/previews/ObjectPreview.d.ts +14 -1
  393. package/dist/views/metadata-admin/previews/ObjectPreview.js +5 -30
  394. package/dist/views/metadata-admin/previews/OutlineStrip.d.ts +32 -0
  395. package/dist/views/metadata-admin/previews/OutlineStrip.js +8 -0
  396. package/dist/views/metadata-admin/previews/PageBlockCanvas.d.ts +49 -0
  397. package/dist/views/metadata-admin/previews/PageBlockCanvas.js +510 -0
  398. package/dist/views/metadata-admin/previews/PagePreview.d.ts +10 -1
  399. package/dist/views/metadata-admin/previews/PagePreview.js +200 -5
  400. package/dist/views/metadata-admin/previews/PermissionPreview.d.ts +27 -0
  401. package/dist/views/metadata-admin/previews/PermissionPreview.js +115 -0
  402. package/dist/views/metadata-admin/previews/PreviewShell.d.ts +29 -6
  403. package/dist/views/metadata-admin/previews/PreviewShell.js +16 -3
  404. package/dist/views/metadata-admin/previews/ReportPreview.d.ts +18 -1
  405. package/dist/views/metadata-admin/previews/ReportPreview.js +23 -15
  406. package/dist/views/metadata-admin/previews/RolePreview.d.ts +19 -0
  407. package/dist/views/metadata-admin/previews/RolePreview.js +14 -0
  408. package/dist/views/metadata-admin/previews/ScreenPreview.d.ts +38 -0
  409. package/dist/views/metadata-admin/previews/ScreenPreview.js +61 -0
  410. package/dist/views/metadata-admin/previews/SkillPreview.d.ts +22 -0
  411. package/dist/views/metadata-admin/previews/SkillPreview.js +34 -0
  412. package/dist/views/metadata-admin/previews/ToolPreview.d.ts +25 -0
  413. package/dist/views/metadata-admin/previews/ToolPreview.js +122 -0
  414. package/dist/views/metadata-admin/previews/TranslationPreview.d.ts +25 -0
  415. package/dist/views/metadata-admin/previews/TranslationPreview.js +52 -0
  416. package/dist/views/metadata-admin/previews/ValidationPreview.d.ts +27 -0
  417. package/dist/views/metadata-admin/previews/ValidationPreview.js +110 -0
  418. package/dist/views/metadata-admin/previews/ViewColumnPanes.d.ts +62 -0
  419. package/dist/views/metadata-admin/previews/ViewColumnPanes.js +140 -0
  420. package/dist/views/metadata-admin/previews/ViewPreview.d.ts +23 -1
  421. package/dist/views/metadata-admin/previews/ViewPreview.js +101 -73
  422. package/dist/views/metadata-admin/previews/block-config.d.ts +82 -0
  423. package/dist/views/metadata-admin/previews/block-config.js +324 -0
  424. package/dist/views/metadata-admin/previews/block-types.d.ts +40 -0
  425. package/dist/views/metadata-admin/previews/block-types.js +110 -0
  426. package/dist/views/metadata-admin/previews/field-types.d.ts +53 -0
  427. package/dist/views/metadata-admin/previews/field-types.js +97 -0
  428. package/dist/views/metadata-admin/previews/flow-canvas-layout.d.ts +102 -0
  429. package/dist/views/metadata-admin/previews/flow-canvas-layout.js +227 -0
  430. package/dist/views/metadata-admin/previews/flow-canvas-parts.d.ts +96 -0
  431. package/dist/views/metadata-admin/previews/flow-canvas-parts.js +373 -0
  432. package/dist/views/metadata-admin/previews/form-preview.d.ts +24 -0
  433. package/dist/views/metadata-admin/previews/form-preview.js +29 -0
  434. package/dist/views/metadata-admin/previews/index.js +43 -0
  435. package/dist/views/metadata-admin/previews/object-fields-bridge.d.ts +66 -0
  436. package/dist/views/metadata-admin/previews/object-fields-bridge.js +171 -0
  437. package/dist/views/metadata-admin/previews/object-fields-io.d.ts +130 -0
  438. package/dist/views/metadata-admin/previews/object-fields-io.js +243 -0
  439. package/dist/views/metadata-admin/previews/screen-spec.d.ts +43 -0
  440. package/dist/views/metadata-admin/previews/screen-spec.js +108 -0
  441. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.d.ts +102 -0
  442. package/dist/views/metadata-admin/previews/simulator/flow-sim-types.js +2 -0
  443. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.d.ts +15 -0
  444. package/dist/views/metadata-admin/previews/simulator/flow-sim-validate.js +185 -0
  445. package/dist/views/metadata-admin/previews/simulator/flow-simulator.d.ts +73 -0
  446. package/dist/views/metadata-admin/previews/simulator/flow-simulator.js +426 -0
  447. package/dist/views/metadata-admin/previews/useDatasetCatalog.d.ts +47 -0
  448. package/dist/views/metadata-admin/previews/useDatasetCatalog.js +133 -0
  449. package/dist/views/metadata-admin/previews/useFlowNodePalette.d.ts +44 -0
  450. package/dist/views/metadata-admin/previews/useFlowNodePalette.js +124 -0
  451. package/dist/views/metadata-admin/previews/useMetaOptions.d.ts +8 -0
  452. package/dist/views/metadata-admin/previews/useMetaOptions.js +50 -0
  453. package/dist/views/metadata-admin/previews/useObjectFields.d.ts +23 -0
  454. package/dist/views/metadata-admin/previews/useObjectFields.js +79 -0
  455. package/dist/views/metadata-admin/previews/useObjectOptions.d.ts +8 -0
  456. package/dist/views/metadata-admin/previews/useObjectOptions.js +43 -0
  457. package/dist/views/metadata-admin/previews/view-column-io.d.ts +42 -0
  458. package/dist/views/metadata-admin/previews/view-column-io.js +73 -0
  459. package/dist/views/metadata-admin/previews/widget-types.d.ts +24 -0
  460. package/dist/views/metadata-admin/previews/widget-types.js +40 -0
  461. package/dist/views/metadata-admin/registry.d.ts +140 -19
  462. package/dist/views/metadata-admin/report-schema.d.ts +26 -0
  463. package/dist/views/metadata-admin/report-schema.js +121 -0
  464. package/dist/views/metadata-admin/useMetadata.d.ts +100 -2
  465. package/dist/views/metadata-admin/useMetadata.js +155 -4
  466. package/dist/views/metadata-admin/view-item-normalize.d.ts +20 -0
  467. package/dist/views/metadata-admin/view-item-normalize.js +68 -0
  468. package/dist/views/metadata-admin/view-schema.d.ts +16 -0
  469. package/dist/views/metadata-admin/view-schema.js +107 -0
  470. package/dist/views/metadata-admin/view-variant-model.d.ts +23 -0
  471. package/dist/views/metadata-admin/view-variant-model.js +64 -0
  472. package/dist/views/metadata-admin/widgets.d.ts +89 -1
  473. package/dist/views/metadata-admin/widgets.js +491 -17
  474. package/dist/views/runtime-metadata-persistence.d.ts +78 -0
  475. package/dist/views/runtime-metadata-persistence.js +89 -0
  476. package/dist/views/useOpenRecordList.d.ts +18 -0
  477. package/dist/views/useOpenRecordList.js +36 -0
  478. package/dist/views/userFilterUrlState.d.ts +15 -0
  479. package/dist/views/userFilterUrlState.js +53 -0
  480. package/dist/views/view-config-adapter.d.ts +38 -0
  481. package/dist/views/view-config-adapter.js +80 -0
  482. package/package.json +52 -34
  483. package/dist/views/DesignDrawer.d.ts +0 -28
  484. package/dist/views/DesignDrawer.js +0 -51
  485. package/dist/views/metadata-admin/DesignerEditorWrapper.d.ts +0 -68
  486. package/dist/views/metadata-admin/DesignerEditorWrapper.js +0 -158
@@ -0,0 +1,25 @@
1
+ /**
2
+ * ActionPreview — read-only summary of an Action metadata draft.
3
+ *
4
+ * Actions are the configurable buttons / menu items / shortcuts a
5
+ * record or list surfaces. The preview shows:
6
+ *
7
+ * 1. A faux button rendered using the action's `variant`, `icon`,
8
+ * and `label` so authors can see the visual weight before they
9
+ * ship it (primary buttons are highlighted, danger turns red,
10
+ * icon-only actions render a compact icon button).
11
+ * 2. A metadata strip: type, target, locations, shortcut, bulk
12
+ * flag, AI exposure, refreshAfter, confirmText.
13
+ * 3. A params table when the action prompts the user — this is the
14
+ * modal/drawer it would open on click. We render it as a static
15
+ * preview, not an interactive form, because previews must be
16
+ * side-effect free.
17
+ * 4. A "what happens on click" callout that describes the resolved
18
+ * handler in plain language (e.g. "POST ${target}", "open form
19
+ * ${target}", "run script ${target}").
20
+ * 5. A resultDialog mock when configured (TOTP / backup-codes-style
21
+ * reveal dialogs).
22
+ */
23
+ import * as React from 'react';
24
+ import type { MetadataPreviewProps } from '../preview-registry';
25
+ export declare function ActionPreview({ name, draft }: MetadataPreviewProps): React.JSX.Element;
@@ -0,0 +1,238 @@
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
+ * ActionPreview — read-only summary of an Action metadata draft.
5
+ *
6
+ * Actions are the configurable buttons / menu items / shortcuts a
7
+ * record or list surfaces. The preview shows:
8
+ *
9
+ * 1. A faux button rendered using the action's `variant`, `icon`,
10
+ * and `label` so authors can see the visual weight before they
11
+ * ship it (primary buttons are highlighted, danger turns red,
12
+ * icon-only actions render a compact icon button).
13
+ * 2. A metadata strip: type, target, locations, shortcut, bulk
14
+ * flag, AI exposure, refreshAfter, confirmText.
15
+ * 3. A params table when the action prompts the user — this is the
16
+ * modal/drawer it would open on click. We render it as a static
17
+ * preview, not an interactive form, because previews must be
18
+ * side-effect free.
19
+ * 4. A "what happens on click" callout that describes the resolved
20
+ * handler in plain language (e.g. "POST ${target}", "open form
21
+ * ${target}", "run script ${target}").
22
+ * 5. A resultDialog mock when configured (TOTP / backup-codes-style
23
+ * reveal dialogs).
24
+ */
25
+ import * as React from 'react';
26
+ import { AlertTriangle, Bot, Code2, Eye, Globe, Keyboard, LayoutGrid, Link2, Lock, MoreHorizontal, Pencil, RefreshCw, ScanLine, Sparkles, Square, Workflow, icons as lucideIcons, } from 'lucide-react';
27
+ import { PreviewShell, PreviewMessage, PreviewErrorBoundary } from './PreviewShell';
28
+ function localize(v) {
29
+ if (v == null)
30
+ return '';
31
+ if (typeof v === 'string')
32
+ return v;
33
+ if (typeof v === 'object') {
34
+ const o = v;
35
+ return o.en ?? o['en-US'] ?? Object.values(o)[0] ?? '';
36
+ }
37
+ return String(v);
38
+ }
39
+ function typeIcon(type) {
40
+ switch (type) {
41
+ case 'url':
42
+ return Link2;
43
+ case 'modal':
44
+ return LayoutGrid;
45
+ case 'flow':
46
+ return Workflow;
47
+ case 'api':
48
+ return Globe;
49
+ case 'form':
50
+ return Pencil;
51
+ case 'script':
52
+ default:
53
+ return Code2;
54
+ }
55
+ }
56
+ function variantClasses(variant) {
57
+ switch (variant) {
58
+ case 'primary':
59
+ case 'default':
60
+ case undefined:
61
+ // Shadcn-native default button is a solid primary, not an outline.
62
+ return 'bg-primary text-primary-foreground hover:opacity-90';
63
+ case 'danger':
64
+ case 'destructive':
65
+ return 'bg-red-600 text-white hover:bg-red-700';
66
+ case 'secondary':
67
+ return 'bg-secondary text-secondary-foreground hover:opacity-90';
68
+ case 'ghost':
69
+ return 'bg-transparent text-foreground hover:bg-accent';
70
+ case 'link':
71
+ return 'bg-transparent text-primary underline-offset-2 hover:underline px-0';
72
+ default:
73
+ // 'outline' and any unrecognized variant fall back to a bordered button.
74
+ return 'border bg-background text-foreground hover:bg-accent';
75
+ }
76
+ }
77
+ function describeHandler(type, target, hasBody) {
78
+ if (!target && !hasBody)
79
+ return 'No handler bound yet.';
80
+ switch (type) {
81
+ case 'url':
82
+ return `Navigate to ${target}`;
83
+ case 'flow':
84
+ return `Run flow ${target}`;
85
+ case 'modal':
86
+ return `Open modal ${target}`;
87
+ case 'api':
88
+ return `Call API endpoint ${target}`;
89
+ case 'form':
90
+ return `Open form view ${target} (/console/forms/${target ?? '?'})`;
91
+ case 'script':
92
+ return hasBody
93
+ ? 'Run inline script body (L1 expression or L2 sandboxed JS).'
94
+ : `Run named script ${target}`;
95
+ default:
96
+ return `Invoke ${target}`;
97
+ }
98
+ }
99
+ export function ActionPreview({ name, draft }) {
100
+ const d = draft;
101
+ const actionName = String(d.name ?? name ?? '');
102
+ const label = localize(d.label) || actionName;
103
+ const icon = d.icon || undefined;
104
+ const type = String(d.type ?? 'script');
105
+ const target = d.target ?? d.execute;
106
+ const variant = d.variant || undefined;
107
+ const component = String(d.component ?? '');
108
+ const locations = Array.isArray(d.locations) ? d.locations : [];
109
+ const shortcut = d.shortcut || undefined;
110
+ const bulkEnabled = !!d.bulkEnabled;
111
+ const refreshAfter = !!d.refreshAfter;
112
+ const aiExposed = d.aiExposed;
113
+ const confirmText = localize(d.confirmText);
114
+ const successMessage = localize(d.successMessage);
115
+ const params = Array.isArray(d.params) ? d.params : [];
116
+ const resultDialog = d.resultDialog;
117
+ const body = d.body;
118
+ const objectName = d.objectName || undefined;
119
+ const visible = d.visible;
120
+ const disabled = d.disabled;
121
+ const method = d.method || 'POST';
122
+ const bodyExtra = d.bodyExtra;
123
+ const TypeIcon = typeIcon(type);
124
+ const iconOnly = component === 'action:icon';
125
+ if (!actionName && !label) {
126
+ return (_jsx(PreviewShell, { hint: "action", children: _jsx(PreviewMessage, { children: "Set name and label to see the action preview." }) }));
127
+ }
128
+ return (_jsx(PreviewShell, { hint: "action", children: _jsx(PreviewErrorBoundary, { children: _jsxs("div", { className: "p-3 space-y-3", children: [_jsx("div", { className: "rounded border bg-muted/30 p-4 flex items-center justify-center min-h-[80px]", children: _jsx(FauxButton, { label: label, icon: icon, variant: variant, iconOnly: iconOnly, disabled: !!disabled && typeof disabled === 'boolean' }) }), _jsxs("div", { className: "rounded border bg-background p-3 text-xs space-y-1.5", children: [_jsxs("div", { className: "flex items-baseline gap-2", children: [_jsx("span", { className: "font-medium", children: label }), _jsx("span", { className: "font-mono text-[10px] text-muted-foreground", children: actionName })] }), _jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px]", children: [_jsx(Pill, { icon: TypeIcon, label: `type: ${type}` }), objectName && _jsx(Pill, { icon: Square, label: `object: ${objectName}`, mono: true }), variant && _jsx(Pill, { label: `variant: ${variant}` }), component && _jsx(Pill, { icon: MoreHorizontal, label: component }), shortcut && _jsx(Pill, { icon: Keyboard, label: shortcut, mono: true }), bulkEnabled && _jsx(Pill, { icon: ScanLine, label: "bulk", tone: "green" }), refreshAfter && _jsx(Pill, { icon: RefreshCw, label: "refresh after" }), aiExposed === false && _jsx(Pill, { icon: Bot, label: "AI: opted out", tone: "amber" }), aiExposed === true && _jsx(Pill, { icon: Sparkles, label: "AI: exposed" })] }), locations.length > 0 && (_jsxs("div", { className: "flex flex-wrap items-center gap-1 pt-1", children: [_jsx("span", { className: "text-muted-foreground", children: "Locations:" }), locations.map((l) => (_jsx("span", { className: "inline-flex items-center rounded bg-muted px-1.5 py-0.5 text-[10px] font-mono", children: l }, l)))] })), Boolean(typeof visible === 'string' || (visible && typeof visible === 'object')) && (_jsx(ConditionLine, { label: "Visible when", value: visible, icon: Eye })), disabled != null && typeof disabled !== 'boolean' && (_jsx(ConditionLine, { label: "Disabled when", value: disabled, icon: Lock }))] }), _jsxs("div", { className: "rounded border border-blue-200 bg-blue-50 p-2.5 text-xs", children: [_jsxs("div", { className: "flex items-center gap-1.5 font-medium text-blue-900 mb-0.5", children: [_jsx(TypeIcon, { className: "h-3.5 w-3.5" }), " On click"] }), _jsx("div", { className: "text-blue-950 font-mono break-all", children: describeHandler(type, target, !!body?.source) }), confirmText && (_jsxs("div", { className: "mt-1.5 flex items-start gap-1.5 text-amber-900", children: [_jsx(AlertTriangle, { className: "h-3 w-3 mt-0.5" }), _jsxs("span", { children: ["First asks: ", _jsx("em", { children: confirmText })] })] })), successMessage && (_jsxs("div", { className: "mt-1.5 text-blue-950", children: ["On success: ", _jsx("em", { children: successMessage })] }))] }), locations.length > 0 && (_jsx(Section, { title: "Where it appears", children: _jsx(PlacementPreview, { locations: locations, label: label, icon: icon, variant: variant, iconOnly: iconOnly }) })), type === 'api' && !!target && (_jsx(Section, { title: "Test request", icon: Globe, children: _jsx(ApiTestPanel, { target: target, method: method, bodyExtra: bodyExtra, params: params }) })), params.length > 0 && (_jsx(Section, { title: "Input Dialog", count: params.length, children: _jsx(DialogMock, { title: label, params: params, variant: variant }) })), resultDialog && (_jsx(Section, { title: "Result Dialog", icon: Eye, children: _jsx(ResultDialogMock, { dialog: resultDialog }) })), body?.source && (_jsx(Section, { title: `Script Body (${body.language ?? 'expression'})`, icon: Code2, children: _jsx("pre", { className: "m-0 rounded border bg-background p-2.5 text-xs font-mono whitespace-pre-wrap max-h-[200px] overflow-auto", children: body.source }) }))] }) }) }));
129
+ }
130
+ function FauxButton({ label, icon, variant, iconOnly, disabled, }) {
131
+ const cls = `inline-flex items-center gap-1.5 rounded px-3 py-1.5 text-sm font-medium pointer-events-none ${variantClasses(variant)} ${disabled ? 'opacity-50' : ''}`;
132
+ return (_jsxs("button", { type: "button", className: cls, "aria-disabled": true, disabled: true, children: [icon && _jsx(IconHint, { name: icon }), !iconOnly && _jsx("span", { children: label })] }));
133
+ }
134
+ /**
135
+ * Render the action's bound Lucide icon by name (kebab- or PascalCase).
136
+ * Falls back to a compact name chip when the icon can't be resolved, so
137
+ * the author still sees that an icon binding is in place.
138
+ */
139
+ function IconHint({ name }) {
140
+ const pascal = name
141
+ .split(/[-_\s]+/)
142
+ .filter(Boolean)
143
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
144
+ .join('');
145
+ const resolved = pascal === 'Home' ? 'House' : pascal;
146
+ const Glyph = lucideIcons[resolved];
147
+ if (Glyph) {
148
+ return _jsx(Glyph, { className: "h-4 w-4", "aria-hidden": true });
149
+ }
150
+ return (_jsx("span", { className: "inline-flex h-4 min-w-4 items-center justify-center rounded bg-white/30 px-1 text-[9px] uppercase font-mono", children: name.slice(0, 3) }));
151
+ }
152
+ function DialogMock({ title, params, variant }) {
153
+ return (_jsxs("div", { className: "rounded border bg-background shadow-sm", children: [_jsx("div", { className: "border-b bg-muted/30 px-3 py-2 text-xs font-medium", children: title }), _jsx("div", { className: "p-3 space-y-2", children: params.map((p, i) => {
154
+ const fieldName = p.name ?? p.field ?? `param_${i}`;
155
+ const fieldLabel = localize(p.label) || fieldName;
156
+ return (_jsxs("div", { className: "space-y-0.5", children: [_jsxs("label", { className: "text-xs flex items-center gap-1", children: [fieldLabel, p.required && _jsx("span", { className: "text-red-600 text-[10px]", children: "*" }), _jsx("span", { className: "ml-1 font-mono text-[9px] text-muted-foreground", children: fieldName }), p.type && _jsx("span", { className: "font-mono text-[9px] text-muted-foreground", children: p.type })] }), renderFieldMock(p), p.helpText && _jsx("div", { className: "text-[10px] text-muted-foreground", children: p.helpText })] }, i));
157
+ }) }), _jsxs("div", { className: "flex items-center justify-end gap-2 border-t bg-muted/20 px-3 py-2", children: [_jsx("button", { type: "button", disabled: true, className: "text-xs px-2.5 py-1 rounded border bg-background pointer-events-none", children: "Cancel" }), _jsx("button", { type: "button", disabled: true, className: `text-xs px-2.5 py-1 rounded pointer-events-none ${variantClasses(variant || 'primary')}`, children: "OK" })] })] }));
158
+ }
159
+ function renderFieldMock(p) {
160
+ const cls = 'w-full text-xs px-2 py-1 border rounded bg-background pointer-events-none';
161
+ const placeholder = p.placeholder || (p.defaultFromRow ? '(from selected row)' : '');
162
+ const def = p.defaultValue;
163
+ if (Array.isArray(p.options) && p.options.length > 0) {
164
+ return (_jsxs("select", { className: cls, disabled: true, value: "", children: [_jsx("option", { value: "", children: placeholder || '— select —' }), p.options.map((o, i) => (_jsx("option", { value: o.value, children: localize(o.label) }, i)))] }));
165
+ }
166
+ if (p.type === 'boolean') {
167
+ return (_jsxs("label", { className: "inline-flex items-center gap-1.5 text-xs", children: [_jsx("input", { type: "checkbox", disabled: true, className: "pointer-events-none" }), " Toggle"] }));
168
+ }
169
+ if (p.type === 'textarea' || p.type === 'html' || p.type === 'long_text') {
170
+ return _jsx("textarea", { className: `${cls} min-h-[48px]`, placeholder: placeholder, value: def != null ? String(def) : '', readOnly: true });
171
+ }
172
+ return (_jsx("input", { type: p.type === 'number' || p.type === 'integer' ? 'number' : p.type === 'date' ? 'date' : 'text', className: cls, placeholder: placeholder, value: def != null ? String(def) : '', readOnly: true }));
173
+ }
174
+ function ResultDialogMock({ dialog }) {
175
+ const title = localize(dialog.title) || 'Result';
176
+ const description = localize(dialog.description);
177
+ const acknowledge = localize(dialog.acknowledge) || 'I have saved this';
178
+ const fields = dialog.fields ?? [];
179
+ return (_jsxs("div", { className: "rounded border bg-background shadow-sm", children: [_jsx("div", { className: "border-b bg-muted/30 px-3 py-2 text-xs font-medium", children: title }), _jsxs("div", { className: "p-3 space-y-2 text-xs", children: [description && _jsx("div", { className: "text-muted-foreground", children: description }), fields.length === 0 ? (_jsx("div", { className: "text-muted-foreground italic", children: "Renders full JSON response." })) : (_jsx("ul", { className: "space-y-1.5", children: fields.map((f, i) => (_jsx("li", { className: "rounded border bg-muted/20 p-2", children: _jsxs("div", { className: "flex items-baseline gap-2", children: [_jsx("span", { className: "font-medium", children: localize(f.label) || f.path }), _jsx("span", { className: "font-mono text-[9px] text-muted-foreground", children: f.path }), _jsx("span", { className: "ml-auto font-mono text-[9px] uppercase text-muted-foreground", children: f.format ?? dialog.format ?? 'json' })] }) }, i))) }))] }), _jsx("div", { className: "flex items-center justify-end border-t bg-muted/20 px-3 py-2", children: _jsx("button", { type: "button", disabled: true, className: "text-xs px-2.5 py-1 rounded bg-primary text-primary-foreground pointer-events-none", children: acknowledge }) })] }));
180
+ }
181
+ function ConditionLine({ label, value, icon: Icon }) {
182
+ const src = typeof value === 'string' ? value : value?.source ?? JSON.stringify(value);
183
+ return (_jsxs("div", { className: "flex items-start gap-1.5 pt-0.5", children: [_jsx(Icon, { className: "h-3 w-3 mt-0.5 text-muted-foreground shrink-0" }), _jsxs("span", { className: "text-muted-foreground", children: [label, ":"] }), _jsx("code", { className: "font-mono break-all", children: src })] }));
184
+ }
185
+ function Section({ title, count, icon: Icon, children, }) {
186
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs("div", { className: "flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wider", children: [Icon && _jsx(Icon, { className: "h-3 w-3" }), _jsx("span", { children: title }), count != null && _jsxs("span", { className: "opacity-70", children: ["(", count, ")"] })] }), children] }));
187
+ }
188
+ function Pill({ icon: Icon, label, tone = 'gray', mono = false, }) {
189
+ const cls = tone === 'green'
190
+ ? 'text-emerald-700'
191
+ : tone === 'amber'
192
+ ? 'text-amber-700'
193
+ : 'text-foreground';
194
+ return (_jsxs("span", { className: "inline-flex items-center gap-1", children: [Icon && _jsx(Icon, { className: "h-3 w-3 text-muted-foreground" }), _jsx("span", { className: `${cls} ${mono ? 'font-mono' : ''}`, children: label })] }));
195
+ }
196
+ /* ─────────────── Placement simulation (where it appears) ─────────────── */
197
+ function Frame({ label, children }) {
198
+ return (_jsxs("div", { className: "space-y-1", children: [_jsx("div", { className: "text-[10px] font-mono uppercase tracking-wider text-muted-foreground/70", children: label }), children] }));
199
+ }
200
+ function PlacementPreview({ locations, label, icon, variant, iconOnly }) {
201
+ const btn = _jsx(FauxButton, { label: label, icon: icon, variant: variant, iconOnly: iconOnly });
202
+ return (_jsxs("div", { className: "space-y-2.5", children: [locations.includes('record_header') && (_jsx(Frame, { label: "record_header", children: _jsxs("div", { className: "rounded border bg-background", children: [_jsxs("div", { className: "flex items-center justify-between gap-2 border-b px-3 py-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { className: "h-6 w-6 rounded bg-muted" }), _jsxs("div", { children: [_jsx("div", { className: "text-xs font-medium", children: "Sample record" }), _jsx("div", { className: "text-[10px] text-muted-foreground", children: "Record detail" })] })] }), _jsx("div", { className: "flex items-center gap-1.5", children: btn })] }), _jsx("div", { className: "p-3 text-[10px] text-muted-foreground", children: "\u2026record body\u2026" })] }) })), locations.includes('list_toolbar') && (_jsx(Frame, { label: "list_toolbar", children: _jsxs("div", { className: "rounded border bg-background", children: [_jsxs("div", { className: "flex items-center justify-between gap-2 border-b px-3 py-2", children: [_jsx("div", { className: "text-xs font-medium", children: "Records" }), _jsx("div", { className: "flex items-center gap-1.5", children: btn })] }), _jsx("div", { className: "px-3 py-2 text-[10px] text-muted-foreground", children: "row 1 \u00B7 row 2 \u00B7 row 3" })] }) })), locations.includes('list_item') && (_jsx(Frame, { label: "list_item", children: _jsx("div", { className: "divide-y rounded border bg-background", children: [0, 1].map((i) => (_jsxs("div", { className: "flex items-center justify-between gap-2 px-3 py-1.5", children: [_jsxs("span", { className: "text-[11px]", children: ["Row ", i + 1] }), _jsx("div", { className: "origin-right scale-90", children: btn })] }, i))) }) })), (locations.includes('record_section') || locations.includes('record_related')) && (_jsx(Frame, { label: locations.includes('record_related') ? 'record_related' : 'record_section', children: _jsxs("div", { className: "rounded border bg-background", children: [_jsxs("div", { className: "flex items-center justify-between border-b px-3 py-2", children: [_jsx("span", { className: "text-xs font-medium", children: "Section" }), btn] }), _jsx("div", { className: "p-3 text-[10px] text-muted-foreground", children: "\u2026section content\u2026" })] }) })), locations.includes('record_more') && (_jsx(Frame, { label: "record_more", children: _jsxs("div", { className: "w-52 rounded border bg-background", children: [_jsxs("div", { className: "flex items-center gap-1.5 border-b px-3 py-1.5 text-[11px] text-muted-foreground", children: [_jsx(MoreHorizontal, { className: "h-3.5 w-3.5" }), " More"] }), _jsx("div", { className: "px-2 py-1.5 text-xs", children: _jsx("div", { className: "rounded px-1 py-0.5 hover:bg-accent", children: label }) })] }) })), locations.includes('global_nav') && (_jsx(Frame, { label: "global_nav", children: _jsxs("div", { className: "rounded border bg-background", children: [_jsx("div", { className: "px-3 py-2 text-[11px] text-muted-foreground", children: "\u2318K \u00B7 Command palette" }), _jsx("div", { className: "border-t px-3 py-1.5 text-xs", children: _jsx("div", { className: "rounded px-1 py-0.5 hover:bg-accent", children: label }) })] }) }))] }));
203
+ }
204
+ /* ─────────────── Test request runner (api type) ─────────────── */
205
+ function ApiTestPanel({ target, method, bodyExtra, params }) {
206
+ const m = (method || 'POST').toUpperCase();
207
+ const [resp, setResp] = React.useState(null);
208
+ const [loading, setLoading] = React.useState(false);
209
+ const reqBody = (bodyExtra && typeof bodyExtra === 'object') ? bodyExtra : {};
210
+ const run = async () => {
211
+ setLoading(true);
212
+ setResp(null);
213
+ try {
214
+ const token = (typeof localStorage !== 'undefined') ? localStorage.getItem('auth-session-token') : null;
215
+ const headers = { 'Content-Type': 'application/json' };
216
+ if (token)
217
+ headers.Authorization = `Bearer ${token}`;
218
+ const init = { method: m, headers, credentials: 'include' };
219
+ if (m !== 'GET' && m !== 'HEAD')
220
+ init.body = JSON.stringify(reqBody);
221
+ const r = await fetch(target, init);
222
+ const text = await r.text();
223
+ let parsed = text;
224
+ try {
225
+ parsed = JSON.parse(text);
226
+ }
227
+ catch { /* keep text */ }
228
+ setResp({ status: r.status, ok: r.ok, body: parsed });
229
+ }
230
+ catch (e) {
231
+ setResp({ status: 0, ok: false, error: e instanceof Error ? e.message : String(e) });
232
+ }
233
+ finally {
234
+ setLoading(false);
235
+ }
236
+ };
237
+ return (_jsxs("div", { className: "space-y-2 text-xs", children: [_jsxs("div", { className: "rounded border bg-background p-2 font-mono text-[11px] break-all", children: [_jsx("span", { className: "font-semibold", children: m }), " ", target] }), Object.keys(reqBody).length > 0 && (_jsx("pre", { className: "m-0 rounded border bg-muted/30 p-2 text-[10px] font-mono whitespace-pre-wrap", children: JSON.stringify(reqBody, null, 2) })), params.length > 0 && (_jsxs("div", { className: "text-[10px] text-muted-foreground", children: ["+ ", params.length, " user-supplied param", params.length > 1 ? 's' : '', " collected at runtime"] })), m !== 'GET' && (_jsxs("div", { className: "flex items-start gap-1.5 text-[10px] text-amber-700", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-3 w-3 shrink-0" }), _jsxs("span", { children: ["Sends a real ", m, " request to the live backend \u2014 may modify data."] })] })), _jsxs("button", { type: "button", onClick: run, disabled: loading, className: "inline-flex items-center gap-1.5 rounded border bg-background px-2.5 py-1 text-xs font-medium hover:bg-accent disabled:opacity-50", children: [_jsx(Globe, { className: "h-3.5 w-3.5" }), " ", loading ? 'Sending…' : 'Send test request'] }), resp && (_jsxs("div", { className: 'rounded border p-2 ' + (resp.ok ? 'border-green-300 bg-green-50' : 'border-red-300 bg-red-50'), children: [_jsx("div", { className: "mb-1 text-[11px] font-medium", children: resp.error ? 'Network error' : ('HTTP ' + resp.status + (resp.ok ? ' OK' : '')) }), _jsx("pre", { className: "m-0 max-h-[200px] overflow-auto text-[10px] font-mono whitespace-pre-wrap", children: resp.error ?? (typeof resp.body === 'string' ? resp.body : JSON.stringify(resp.body, null, 2)) })] }))] }));
238
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * AddWidgetPicker — popover with a search box and categorized list
3
+ * of dashboard widget types. Picking a type calls `onAdd(type)`.
4
+ * Closes on selection so authors land on the new widget's
5
+ * inspector right away.
6
+ */
7
+ import * as React from 'react';
8
+ export interface AddWidgetPickerProps {
9
+ onAdd: (type: string) => void;
10
+ label?: string;
11
+ }
12
+ export declare function AddWidgetPicker({ onAdd, label }: AddWidgetPickerProps): React.JSX.Element;
@@ -0,0 +1,56 @@
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
+ * AddWidgetPicker — popover with a search box and categorized list
5
+ * of dashboard widget types. Picking a type calls `onAdd(type)`.
6
+ * Closes on selection so authors land on the new widget's
7
+ * inspector right away.
8
+ */
9
+ import * as React from 'react';
10
+ import { Plus, Search } from 'lucide-react';
11
+ import { WIDGETS_BY_CATEGORY, WIDGET_CATEGORY_LABEL, WIDGET_TYPE_META, UnknownWidgetIcon, } from './widget-types';
12
+ export function AddWidgetPicker({ onAdd, label = 'Add widget' }) {
13
+ const [open, setOpen] = React.useState(false);
14
+ const [q, setQ] = React.useState('');
15
+ const popoverRef = React.useRef(null);
16
+ const inputRef = React.useRef(null);
17
+ React.useEffect(() => {
18
+ if (!open) {
19
+ setQ('');
20
+ return;
21
+ }
22
+ const onDoc = (e) => {
23
+ if (!popoverRef.current?.contains(e.target))
24
+ setOpen(false);
25
+ };
26
+ const onKey = (e) => {
27
+ if (e.key === 'Escape')
28
+ setOpen(false);
29
+ };
30
+ document.addEventListener('mousedown', onDoc);
31
+ document.addEventListener('keydown', onKey);
32
+ queueMicrotask(() => inputRef.current?.focus());
33
+ return () => {
34
+ document.removeEventListener('mousedown', onDoc);
35
+ document.removeEventListener('keydown', onKey);
36
+ };
37
+ }, [open]);
38
+ const filtered = React.useMemo(() => {
39
+ const ql = q.trim().toLowerCase();
40
+ if (!ql)
41
+ return WIDGETS_BY_CATEGORY;
42
+ return WIDGETS_BY_CATEGORY
43
+ .map((group) => ({
44
+ category: group.category,
45
+ types: group.types.filter((t) => t.id.toLowerCase().includes(ql) || t.label.toLowerCase().includes(ql)),
46
+ }))
47
+ .filter((g) => g.types.length);
48
+ }, [q]);
49
+ return (_jsxs("div", { ref: popoverRef, className: "relative", children: [_jsxs("button", { type: "button", className: "inline-flex items-center gap-1 rounded border border-dashed px-3 py-1.5 text-xs text-muted-foreground hover:bg-muted/30 hover:text-foreground", onClick: () => setOpen((v) => !v), children: [_jsx(Plus, { className: "h-3 w-3" }), label] }), open && (_jsxs("div", { className: "absolute right-0 top-full z-40 mt-1 w-72 rounded-md border bg-popover shadow-md", children: [_jsxs("div", { className: "flex items-center gap-2 border-b px-2 py-1.5", children: [_jsx(Search, { className: "h-3.5 w-3.5 text-muted-foreground" }), _jsx("input", { ref: inputRef, type: "text", value: q, onChange: (e) => setQ(e.target.value), placeholder: "Search widgets\u2026", className: "w-full bg-transparent text-xs outline-none placeholder:text-muted-foreground" })] }), _jsx("div", { className: "max-h-72 overflow-auto py-1", children: filtered.length === 0 ? (_jsx("div", { className: "px-3 py-4 text-center text-xs text-muted-foreground", children: "No matches." })) : (filtered.map((group) => (_jsxs("div", { children: [_jsx("div", { className: "px-3 pt-2 pb-1 text-[10px] uppercase tracking-wider text-muted-foreground", children: WIDGET_CATEGORY_LABEL[group.category] }), group.types.map((t) => {
50
+ const Icon = (WIDGET_TYPE_META[t.id]?.icon ?? UnknownWidgetIcon);
51
+ return (_jsxs("button", { type: "button", className: "flex w-full items-center gap-2 px-3 py-1.5 text-left text-xs hover:bg-accent", onClick: () => {
52
+ onAdd(t.id);
53
+ setOpen(false);
54
+ }, children: [_jsx(Icon, { className: "h-3.5 w-3.5 text-muted-foreground shrink-0" }), _jsx("span", { className: "font-medium truncate", children: t.label }), _jsx("code", { className: "ml-auto text-[10px] text-muted-foreground", children: t.id })] }, t.id));
55
+ })] }, group.category)))) })] }))] }));
56
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * AgentPreview — read-only summary of an AI Agent metadata draft.
3
+ *
4
+ * Shows the configuration an operator needs to sanity-check an agent
5
+ * before saving:
6
+ * • Persona header (avatar, label, role, visibility, active flag).
7
+ * • Model config (provider, model id, temperature, max tokens).
8
+ * • System prompt / instructions in a scrollable monospace block.
9
+ * • Skills + Tools as two collapsible chip lists.
10
+ * • Knowledge sources (RAG indices) when present.
11
+ * • Planning + guardrails callouts.
12
+ *
13
+ * We intentionally do **not** wire a live chat into this preview:
14
+ * 1. The draft may reference unsaved skills/tools the runtime can't
15
+ * resolve, so a chat would just error.
16
+ * 2. AI calls cost real money; a preview tab that silently spends
17
+ * tokens whenever someone clicks the tab is bad UX.
18
+ * Instead we render a "Try it" button that links to the runtime
19
+ * agent chat (`/console/ai/agents/<name>/chat`) where the saved
20
+ * version of this agent can be exercised properly.
21
+ */
22
+ import * as React from 'react';
23
+ import type { MetadataPreviewProps } from '../preview-registry';
24
+ export declare function AgentPreview({ name, draft }: MetadataPreviewProps): React.JSX.Element;
@@ -0,0 +1,100 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Activity, Bot, BrainCircuit, Database, ExternalLink, Eye, EyeOff, Gauge, Lock, ScrollText, Shield, Sparkles, Wrench, } from 'lucide-react';
3
+ import { cn } from '@object-ui/components';
4
+ import { PreviewShell, PreviewMessage, PreviewErrorBoundary } from './PreviewShell';
5
+ export function AgentPreview({ name, draft }) {
6
+ const d = draft;
7
+ const agentName = String(d.name ?? name ?? '');
8
+ const label = String(d.label ?? agentName);
9
+ const role = String(d.role ?? '');
10
+ const avatar = d.avatar || undefined;
11
+ const instructions = String(d.instructions ?? '');
12
+ const active = d.active !== false;
13
+ const visibility = String(d.visibility ?? 'organization');
14
+ const model = (d.model ?? {});
15
+ const skills = Array.isArray(d.skills) ? d.skills : [];
16
+ const tools = Array.isArray(d.tools) ? d.tools : [];
17
+ const knowledge = d.knowledge;
18
+ const planning = d.planning;
19
+ const memory = d.memory;
20
+ const guardrails = d.guardrails;
21
+ const permissions = Array.isArray(d.permissions) ? d.permissions : [];
22
+ if (!agentName && !instructions && skills.length === 0 && tools.length === 0) {
23
+ return (_jsx(PreviewShell, { hint: "agent", children: _jsx(PreviewMessage, { children: "Fill in label, role, and instructions in the Form tab to see the agent preview." }) }));
24
+ }
25
+ const chatUrl = agentName ? `/console/ai/agents/${encodeURIComponent(agentName)}/chat` : null;
26
+ return (_jsx(PreviewShell, { hint: "agent", toolbar: chatUrl && (_jsxs("a", { href: chatUrl, target: "_blank", rel: "noreferrer", className: "text-xs inline-flex items-center gap-1 text-muted-foreground hover:text-foreground", title: "Open the saved version of this agent in a new chat", children: ["Try in chat ", _jsx(ExternalLink, { className: "h-3 w-3" })] })), children: _jsx(PreviewErrorBoundary, { children: _jsxs("div", { className: "grid lg:grid-cols-[1fr_240px] gap-0", children: [_jsxs("div", { className: "p-3 space-y-3 min-w-0", children: [_jsxs("div", { className: "rounded border bg-muted/30 p-3 flex items-start gap-3", children: [_jsx("div", { className: "h-10 w-10 rounded-full bg-background border flex items-center justify-center shrink-0 overflow-hidden", children: avatar ? (_jsx("img", { src: avatar, alt: "", className: "h-full w-full object-cover" })) : (_jsx(Bot, { className: "h-5 w-5 text-muted-foreground" })) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "flex flex-wrap items-baseline gap-x-2", children: [_jsx("span", { className: "text-sm font-medium truncate", children: label }), _jsx("span", { className: "font-mono text-[10px] text-muted-foreground", children: agentName })] }), role && _jsx("div", { className: "text-xs text-muted-foreground mt-0.5", children: role }), _jsxs("div", { className: "mt-1.5 flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px]", children: [_jsx(Pill, { icon: active ? Eye : EyeOff, label: active ? 'Active' : 'Disabled', tone: active ? 'green' : 'gray' }), _jsx(Pill, { icon: Lock, label: visibility }), model.provider && _jsx(Pill, { icon: Sparkles, label: `${model.provider}${model.model ? ` · ${model.model}` : ''}`, mono: true }), model.temperature != null && _jsx(Pill, { icon: Gauge, label: `temp ${model.temperature}` }), model.maxTokens != null && _jsx(Pill, { label: `max ${model.maxTokens}t` })] })] })] }), _jsx(Section, { title: "Instructions", icon: ScrollText, children: instructions ? (_jsx("pre", { className: "m-0 rounded border bg-background p-2.5 text-xs whitespace-pre-wrap font-mono max-h-[40vh] overflow-auto", children: instructions })) : (_jsx(Empty, { children: "No system prompt set yet." })) }), _jsx(Section, { title: "Capabilities", icon: Wrench, children: _jsxs("div", { className: "space-y-2", children: [_jsx(ChipList, { label: "Skills", emptyHint: "Attach skills (preferred)", items: skills.map((s) => ({ key: s, label: s })), icon: Sparkles, tone: "violet", mono: true }), _jsx(ChipList, { label: "Tools", emptyHint: "No direct tools (skills can provide them)", items: tools.map((t, i) => ({ key: `${t.type ?? ''}:${t.name ?? i}`, label: t.name ?? String(t), hint: t.type })), icon: Wrench, tone: "blue", mono: true })] }) }), knowledge && Object.keys(knowledge).length > 0 && (_jsx(Section, { title: "Knowledge (RAG)", icon: Database, children: _jsx(KnowledgeSummary, { knowledge: knowledge }) }))] }), _jsxs("div", { className: "border-l bg-muted/20 p-3 text-xs space-y-3", children: [planning && Object.keys(planning).length > 0 && (_jsx(RailBlock, { icon: BrainCircuit, title: "Planning", children: _jsx(KeyVals, { data: planning, keys: ['strategy', 'maxIterations', 'allowReplan'] }) })), memory && Object.keys(memory).length > 0 && (_jsx(RailBlock, { icon: Activity, title: "Memory", children: _jsx(KeyVals, { data: {
27
+ 'short.maxMessages': memory.shortTerm?.maxMessages,
28
+ 'long.enabled': memory.longTerm?.enabled,
29
+ 'long.store': memory.longTerm?.store,
30
+ }, keys: ['short.maxMessages', 'long.enabled', 'long.store'] }) })), guardrails && Object.keys(guardrails).length > 0 && (_jsx(RailBlock, { icon: Shield, title: "Guardrails", children: _jsx(KeyVals, { data: guardrails, keys: Object.keys(guardrails).slice(0, 6) }) })), permissions.length > 0 && (_jsx(RailBlock, { icon: Lock, title: "Permissions", children: _jsx("ul", { className: "space-y-0.5", children: permissions.map((p) => _jsx("li", { className: "font-mono", children: p }, p)) }) })), !planning && !memory && !guardrails && permissions.length === 0 && (_jsx("div", { className: "text-muted-foreground italic", children: "Defaults in use." }))] })] }) }) }));
31
+ }
32
+ function KnowledgeSummary({ knowledge }) {
33
+ const sources = Array.isArray(knowledge.sources) ? knowledge.sources : [];
34
+ const indexes = Array.isArray(knowledge.indexes) ? knowledge.indexes : [];
35
+ const items = [...sources, ...indexes];
36
+ if (items.length === 0) {
37
+ const keys = Object.keys(knowledge);
38
+ return (_jsx("div", { className: "text-xs text-muted-foreground font-mono", children: keys.length ? keys.join(', ') : 'configured' }));
39
+ }
40
+ return (_jsx("ul", { className: "rounded border bg-background divide-y text-xs", children: items.map((s, i) => {
41
+ const obj = (s ?? {});
42
+ const id = (obj.id ?? obj.name ?? `source ${i + 1}`);
43
+ const kind = (obj.type ?? obj.kind ?? '');
44
+ return (_jsxs("li", { className: "flex items-center gap-2 px-2.5 py-1.5", children: [_jsx(Database, { className: "h-3 w-3 text-muted-foreground" }), _jsx("span", { className: "font-mono", children: String(id) }), kind && _jsx("span", { className: "text-[10px] uppercase text-muted-foreground", children: kind })] }, i));
45
+ }) }));
46
+ }
47
+ function Section({ title, icon: Icon, children, }) {
48
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs("div", { className: "flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wider", children: [Icon && _jsx(Icon, { className: "h-3 w-3" }), _jsx("span", { children: title })] }), children] }));
49
+ }
50
+ function Empty({ children }) {
51
+ return _jsx("div", { className: "text-xs text-muted-foreground italic", children: children });
52
+ }
53
+ /**
54
+ * Tone presets for capability chips — keep skills and tools visually
55
+ * distinct at a glance. Full Tailwind class strings (JIT) with light +
56
+ * dark variants.
57
+ */
58
+ const CHIP_TONE = {
59
+ violet: {
60
+ chip: 'border-violet-200 bg-violet-50 text-violet-700 dark:border-violet-900 dark:bg-violet-950/40 dark:text-violet-300',
61
+ icon: 'text-violet-500 dark:text-violet-400',
62
+ },
63
+ blue: {
64
+ chip: 'border-blue-200 bg-blue-50 text-blue-700 dark:border-blue-900 dark:bg-blue-950/40 dark:text-blue-300',
65
+ icon: 'text-blue-500 dark:text-blue-400',
66
+ },
67
+ };
68
+ function ChipList({ label, emptyHint, items, icon: Icon, tone, mono = false, }) {
69
+ const t = tone ? CHIP_TONE[tone] : null;
70
+ return (_jsxs("div", { children: [_jsx("div", { className: "text-[10px] uppercase text-muted-foreground tracking-wider mb-1", children: label }), items.length === 0 ? (_jsx("div", { className: "text-xs text-muted-foreground italic", children: emptyHint })) : (_jsx("div", { className: "flex flex-wrap gap-1", children: items.map((it) => (_jsxs("span", { className: cn('inline-flex items-center gap-1 rounded border px-1.5 py-0.5 text-[11px]', t ? t.chip : 'bg-background', mono && 'font-mono'), children: [Icon && _jsx(Icon, { className: cn('h-3 w-3 shrink-0', t?.icon) }), it.label, it.hint && _jsx("span", { className: "text-[9px] uppercase opacity-70", children: it.hint })] }, it.key))) }))] }));
71
+ }
72
+ function RailBlock({ icon: Icon, title, children, }) {
73
+ return (_jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-1.5 text-[10px] uppercase text-muted-foreground tracking-wider mb-1", children: [_jsx(Icon, { className: "h-3 w-3" }), " ", title] }), children] }));
74
+ }
75
+ function KeyVals({ data, keys }) {
76
+ const rows = keys
77
+ .map((k) => [k, getPath(data, k)])
78
+ .filter(([, v]) => v !== undefined && v !== null);
79
+ if (rows.length === 0)
80
+ return _jsx("div", { className: "text-muted-foreground italic", children: "\u2014" });
81
+ return (_jsx("dl", { className: "space-y-0.5", children: rows.map(([k, v]) => (_jsxs("div", { className: "flex justify-between gap-2", children: [_jsx("dt", { className: "text-muted-foreground font-mono truncate", children: k }), _jsx("dd", { className: "font-mono text-right truncate", children: String(v) })] }, k))) }));
82
+ }
83
+ function getPath(obj, path) {
84
+ const parts = path.split('.');
85
+ let cur = obj;
86
+ for (const p of parts) {
87
+ if (cur == null)
88
+ return undefined;
89
+ cur = cur[p];
90
+ }
91
+ return cur;
92
+ }
93
+ function Pill({ icon: Icon, label, tone = 'gray', mono = false, }) {
94
+ const cls = tone === 'green'
95
+ ? 'text-emerald-700'
96
+ : tone === 'amber'
97
+ ? 'text-amber-700'
98
+ : 'text-foreground';
99
+ return (_jsxs("span", { className: "inline-flex items-center gap-1", children: [Icon && _jsx(Icon, { className: "h-3 w-3 text-muted-foreground" }), _jsx("span", { className: `${cls} ${mono ? 'font-mono' : ''}`, children: label })] }));
100
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * AppNavCanvas — form-canvas-style editor for an App's top-level
3
+ * navigation tree. Each nav entry becomes a card with a drag handle,
4
+ * a kind icon, an inline-rename label, the bound path, and a remove
5
+ * affordance on hover. Drag-drop reorders within the root list.
6
+ *
7
+ * Nested children are rendered indented; cross-level moves and
8
+ * adding child items are still handled by AppNavInspector (the
9
+ * canvas keeps DnD focused on the root list to avoid surprising
10
+ * cross-tree reorders).
11
+ *
12
+ * Selection IDs match AppNavInspector:
13
+ * { kind: 'nav', id: `${rootKey}[${i}]` }
14
+ * { kind: 'nav', id: `${rootKey}[${i}].children[${j}]` }
15
+ */
16
+ import * as React from 'react';
17
+ export interface AppNavCanvasProps {
18
+ draft: Record<string, unknown>;
19
+ rootKey: string;
20
+ onPatch?: (patch: Record<string, unknown>) => void;
21
+ selection: {
22
+ kind: string;
23
+ id: string;
24
+ } | null;
25
+ onSelectionChange?: (sel: {
26
+ kind: string;
27
+ id: string;
28
+ label?: string;
29
+ } | null) => void;
30
+ }
31
+ export declare function AppNavCanvas({ draft, rootKey, onPatch, selection, onSelectionChange, }: AppNavCanvasProps): React.JSX.Element;