@miragon/mcp-toolkit-ui 2.7.0 → 2.8.1

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 (388) hide show
  1. package/README.md +7 -4
  2. package/dist/app/adapt-data-widget.d.ts +1 -22
  3. package/dist/app/adapt-data-widget.d.ts.map +1 -1
  4. package/dist/app/adapt-data-widget.js +1 -35
  5. package/dist/app/adapt-data-widget.js.map +1 -1
  6. package/dist/app/builder/BuilderBanners.js +1 -1
  7. package/dist/app/builder/BuilderBanners.js.map +1 -1
  8. package/dist/app/builder/CanvasRow.d.ts +4 -2
  9. package/dist/app/builder/CanvasRow.d.ts.map +1 -1
  10. package/dist/app/builder/CanvasRow.js +21 -7
  11. package/dist/app/builder/CanvasRow.js.map +1 -1
  12. package/dist/app/builder/CatalogueSheet.d.ts.map +1 -1
  13. package/dist/app/builder/CatalogueSheet.js +11 -4
  14. package/dist/app/builder/CatalogueSheet.js.map +1 -1
  15. package/dist/app/builder/CellPropsSheet.d.ts +7 -3
  16. package/dist/app/builder/CellPropsSheet.d.ts.map +1 -1
  17. package/dist/app/builder/CellPropsSheet.js +10 -3
  18. package/dist/app/builder/CellPropsSheet.js.map +1 -1
  19. package/dist/app/builder/DiscardDialog.d.ts +18 -0
  20. package/dist/app/builder/DiscardDialog.d.ts.map +1 -0
  21. package/dist/app/builder/DiscardDialog.js +18 -0
  22. package/dist/app/builder/DiscardDialog.js.map +1 -0
  23. package/dist/app/builder/LayoutSurface.d.ts +33 -9
  24. package/dist/app/builder/LayoutSurface.d.ts.map +1 -1
  25. package/dist/app/builder/LayoutSurface.js +74 -23
  26. package/dist/app/builder/LayoutSurface.js.map +1 -1
  27. package/dist/app/builder/PipelineStrip.d.ts +2 -1
  28. package/dist/app/builder/PipelineStrip.d.ts.map +1 -1
  29. package/dist/app/builder/PipelineStrip.js +26 -13
  30. package/dist/app/builder/PipelineStrip.js.map +1 -1
  31. package/dist/app/builder/SaveDialog.d.ts +9 -1
  32. package/dist/app/builder/SaveDialog.d.ts.map +1 -1
  33. package/dist/app/builder/SaveDialog.js +8 -2
  34. package/dist/app/builder/SaveDialog.js.map +1 -1
  35. package/dist/app/builder/Toolbar.d.ts +12 -4
  36. package/dist/app/builder/Toolbar.d.ts.map +1 -1
  37. package/dist/app/builder/Toolbar.js +18 -7
  38. package/dist/app/builder/Toolbar.js.map +1 -1
  39. package/dist/app/builder/Workspace.d.ts +23 -3
  40. package/dist/app/builder/Workspace.d.ts.map +1 -1
  41. package/dist/app/builder/Workspace.js +58 -8
  42. package/dist/app/builder/Workspace.js.map +1 -1
  43. package/dist/app/builder/builder-model.d.ts +143 -1
  44. package/dist/app/builder/builder-model.d.ts.map +1 -1
  45. package/dist/app/builder/builder-model.js +191 -1
  46. package/dist/app/builder/builder-model.js.map +1 -1
  47. package/dist/app/builder/reveal.d.ts +10 -0
  48. package/dist/app/builder/reveal.d.ts.map +1 -0
  49. package/dist/app/builder/reveal.js +10 -0
  50. package/dist/app/builder/reveal.js.map +1 -0
  51. package/dist/app/builder/use-builder-catalogue.d.ts +4 -1
  52. package/dist/app/builder/use-builder-catalogue.d.ts.map +1 -1
  53. package/dist/app/builder/use-builder-catalogue.js +44 -17
  54. package/dist/app/builder/use-builder-catalogue.js.map +1 -1
  55. package/dist/app/builder/use-builder-session.d.ts +30 -0
  56. package/dist/app/builder/use-builder-session.d.ts.map +1 -0
  57. package/dist/app/builder/use-builder-session.js +58 -0
  58. package/dist/app/builder/use-builder-session.js.map +1 -0
  59. package/dist/app/builder/use-display-resolver.d.ts +17 -0
  60. package/dist/app/builder/use-display-resolver.d.ts.map +1 -0
  61. package/dist/app/builder/use-display-resolver.js +16 -0
  62. package/dist/app/builder/use-display-resolver.js.map +1 -0
  63. package/dist/app/index.d.ts +8 -3
  64. package/dist/app/index.d.ts.map +1 -1
  65. package/dist/app/index.js +8 -2
  66. package/dist/app/index.js.map +1 -1
  67. package/dist/app/layout-builder.d.ts +13 -25
  68. package/dist/app/layout-builder.d.ts.map +1 -1
  69. package/dist/app/layout-builder.js +75 -81
  70. package/dist/app/layout-builder.js.map +1 -1
  71. package/dist/app/mcp-app-view-chrome.d.ts +12 -3
  72. package/dist/app/mcp-app-view-chrome.d.ts.map +1 -1
  73. package/dist/app/mcp-app-view-chrome.js +21 -5
  74. package/dist/app/mcp-app-view-chrome.js.map +1 -1
  75. package/dist/app/mcp-app-view-states.d.ts +11 -3
  76. package/dist/app/mcp-app-view-states.d.ts.map +1 -1
  77. package/dist/app/mcp-app-view-states.js +29 -8
  78. package/dist/app/mcp-app-view-states.js.map +1 -1
  79. package/dist/app/mcp-app-view.d.ts +33 -1
  80. package/dist/app/mcp-app-view.d.ts.map +1 -1
  81. package/dist/app/mcp-app-view.js +181 -127
  82. package/dist/app/mcp-app-view.js.map +1 -1
  83. package/dist/app/mcp-toolkit-app.d.ts +6 -1
  84. package/dist/app/mcp-toolkit-app.d.ts.map +1 -1
  85. package/dist/app/mcp-toolkit-app.js +8 -1
  86. package/dist/app/mcp-toolkit-app.js.map +1 -1
  87. package/dist/app/mcp-use-host-bridge.d.ts +15 -6
  88. package/dist/app/mcp-use-host-bridge.d.ts.map +1 -1
  89. package/dist/app/mcp-use-host-bridge.js +51 -22
  90. package/dist/app/mcp-use-host-bridge.js.map +1 -1
  91. package/dist/app/model-context.d.ts +71 -0
  92. package/dist/app/model-context.d.ts.map +1 -0
  93. package/dist/app/model-context.js +101 -0
  94. package/dist/app/model-context.js.map +1 -0
  95. package/dist/app/use-build-mode-focus.d.ts +33 -0
  96. package/dist/app/use-build-mode-focus.d.ts.map +1 -0
  97. package/dist/app/use-build-mode-focus.js +59 -0
  98. package/dist/app/use-build-mode-focus.js.map +1 -0
  99. package/dist/app/use-view-actions.d.ts +31 -0
  100. package/dist/app/use-view-actions.d.ts.map +1 -0
  101. package/dist/app/use-view-actions.js +81 -0
  102. package/dist/app/use-view-actions.js.map +1 -0
  103. package/dist/app/use-view-lifecycle.d.ts +4 -0
  104. package/dist/app/use-view-lifecycle.d.ts.map +1 -1
  105. package/dist/app/use-view-lifecycle.js +2 -0
  106. package/dist/app/use-view-lifecycle.js.map +1 -1
  107. package/dist/app/view-lifecycle.d.ts +80 -4
  108. package/dist/app/view-lifecycle.d.ts.map +1 -1
  109. package/dist/app/view-lifecycle.js +90 -3
  110. package/dist/app/view-lifecycle.js.map +1 -1
  111. package/dist/app/widget-fixture.d.ts +10 -3
  112. package/dist/app/widget-fixture.d.ts.map +1 -1
  113. package/dist/app/widget-fixture.js +21 -8
  114. package/dist/app/widget-fixture.js.map +1 -1
  115. package/dist/app/widget-props-sheet.d.ts +3 -1
  116. package/dist/app/widget-props-sheet.d.ts.map +1 -1
  117. package/dist/app/widget-props-sheet.js +22 -10
  118. package/dist/app/widget-props-sheet.js.map +1 -1
  119. package/dist/app/widget-renderer.js +1 -1
  120. package/dist/app/widget-renderer.js.map +1 -1
  121. package/dist/components/DrillButton.d.ts +14 -6
  122. package/dist/components/DrillButton.d.ts.map +1 -1
  123. package/dist/components/DrillButton.js +14 -7
  124. package/dist/components/DrillButton.js.map +1 -1
  125. package/dist/components/EmptyState.d.ts.map +1 -1
  126. package/dist/components/EmptyState.js +4 -2
  127. package/dist/components/EmptyState.js.map +1 -1
  128. package/dist/components/ErrorState.d.ts +5 -2
  129. package/dist/components/ErrorState.d.ts.map +1 -1
  130. package/dist/components/ErrorState.js +25 -8
  131. package/dist/components/ErrorState.js.map +1 -1
  132. package/dist/components/FilterBar.d.ts +15 -4
  133. package/dist/components/FilterBar.d.ts.map +1 -1
  134. package/dist/components/FilterBar.js +11 -6
  135. package/dist/components/FilterBar.js.map +1 -1
  136. package/dist/components/KpiGrid.d.ts +66 -21
  137. package/dist/components/KpiGrid.d.ts.map +1 -1
  138. package/dist/components/KpiGrid.js +101 -34
  139. package/dist/components/KpiGrid.js.map +1 -1
  140. package/dist/components/ListFooter.d.ts +31 -4
  141. package/dist/components/ListFooter.d.ts.map +1 -1
  142. package/dist/components/ListFooter.js +30 -11
  143. package/dist/components/ListFooter.js.map +1 -1
  144. package/dist/components/PagedListFooter.d.ts +57 -0
  145. package/dist/components/PagedListFooter.d.ts.map +1 -0
  146. package/dist/components/PagedListFooter.js +27 -0
  147. package/dist/components/PagedListFooter.js.map +1 -0
  148. package/dist/components/Pills.d.ts +27 -7
  149. package/dist/components/Pills.d.ts.map +1 -1
  150. package/dist/components/Pills.js +21 -6
  151. package/dist/components/Pills.js.map +1 -1
  152. package/dist/components/SectionHeading.d.ts +3 -1
  153. package/dist/components/SectionHeading.d.ts.map +1 -1
  154. package/dist/components/SectionHeading.js +6 -2
  155. package/dist/components/SectionHeading.js.map +1 -1
  156. package/dist/components/Toast.d.ts +9 -3
  157. package/dist/components/Toast.d.ts.map +1 -1
  158. package/dist/components/Toast.js +31 -16
  159. package/dist/components/Toast.js.map +1 -1
  160. package/dist/components/WidgetHeader.d.ts +34 -10
  161. package/dist/components/WidgetHeader.d.ts.map +1 -1
  162. package/dist/components/WidgetHeader.js +11 -6
  163. package/dist/components/WidgetHeader.js.map +1 -1
  164. package/dist/hooks/index.d.ts +4 -4
  165. package/dist/hooks/index.d.ts.map +1 -1
  166. package/dist/hooks/index.js +1 -1
  167. package/dist/hooks/index.js.map +1 -1
  168. package/dist/hooks/tool-result-recovery-model.d.ts +155 -0
  169. package/dist/hooks/tool-result-recovery-model.d.ts.map +1 -0
  170. package/dist/hooks/tool-result-recovery-model.js +273 -0
  171. package/dist/hooks/tool-result-recovery-model.js.map +1 -0
  172. package/dist/hooks/use-tool-query.d.ts +56 -14
  173. package/dist/hooks/use-tool-query.d.ts.map +1 -1
  174. package/dist/hooks/use-tool-query.js +102 -25
  175. package/dist/hooks/use-tool-query.js.map +1 -1
  176. package/dist/hooks/use-tool-result-recovery.d.ts +47 -52
  177. package/dist/hooks/use-tool-result-recovery.d.ts.map +1 -1
  178. package/dist/hooks/use-tool-result-recovery.js +58 -120
  179. package/dist/hooks/use-tool-result-recovery.js.map +1 -1
  180. package/dist/hooks/use-view-data.d.ts +52 -10
  181. package/dist/hooks/use-view-data.d.ts.map +1 -1
  182. package/dist/hooks/use-view-data.js +81 -16
  183. package/dist/hooks/use-view-data.js.map +1 -1
  184. package/dist/hooks/use-view-tool-query.d.ts +12 -7
  185. package/dist/hooks/use-view-tool-query.d.ts.map +1 -1
  186. package/dist/hooks/use-view-tool-query.js +15 -14
  187. package/dist/hooks/use-view-tool-query.js.map +1 -1
  188. package/dist/index.d.ts +17 -10
  189. package/dist/index.d.ts.map +1 -1
  190. package/dist/index.js +18 -6
  191. package/dist/index.js.map +1 -1
  192. package/dist/lib/focus-return.d.ts +61 -0
  193. package/dist/lib/focus-return.d.ts.map +1 -0
  194. package/dist/lib/focus-return.js +46 -0
  195. package/dist/lib/focus-return.js.map +1 -0
  196. package/dist/lib/parse-tool-result.d.ts +23 -1
  197. package/dist/lib/parse-tool-result.d.ts.map +1 -1
  198. package/dist/lib/parse-tool-result.js +38 -2
  199. package/dist/lib/parse-tool-result.js.map +1 -1
  200. package/dist/lib/toast-model.d.ts +41 -1
  201. package/dist/lib/toast-model.d.ts.map +1 -1
  202. package/dist/lib/toast-model.js +67 -1
  203. package/dist/lib/toast-model.js.map +1 -1
  204. package/dist/lib/tone-utils.d.ts +58 -6
  205. package/dist/lib/tone-utils.d.ts.map +1 -1
  206. package/dist/lib/tone-utils.js +66 -4
  207. package/dist/lib/tone-utils.js.map +1 -1
  208. package/dist/lib/tool-query.d.ts +107 -0
  209. package/dist/lib/tool-query.d.ts.map +1 -0
  210. package/dist/lib/tool-query.js +182 -0
  211. package/dist/lib/tool-query.js.map +1 -0
  212. package/dist/lib/tool-result-observer.d.ts +108 -0
  213. package/dist/lib/tool-result-observer.d.ts.map +1 -0
  214. package/dist/lib/tool-result-observer.js +158 -0
  215. package/dist/lib/tool-result-observer.js.map +1 -0
  216. package/dist/lib/typography.d.ts +37 -0
  217. package/dist/lib/typography.d.ts.map +1 -0
  218. package/dist/lib/typography.js +41 -0
  219. package/dist/lib/typography.js.map +1 -0
  220. package/dist/lib/utils.d.ts.map +1 -1
  221. package/dist/lib/utils.js +11 -1
  222. package/dist/lib/utils.js.map +1 -1
  223. package/dist/locale/index.d.ts +1 -1
  224. package/dist/locale/index.d.ts.map +1 -1
  225. package/dist/locale/message-types.d.ts +117 -4
  226. package/dist/locale/message-types.d.ts.map +1 -1
  227. package/dist/locale/messages-de.d.ts.map +1 -1
  228. package/dist/locale/messages-de.js +44 -10
  229. package/dist/locale/messages-de.js.map +1 -1
  230. package/dist/locale/messages-en.d.ts.map +1 -1
  231. package/dist/locale/messages-en.js +44 -10
  232. package/dist/locale/messages-en.js.map +1 -1
  233. package/dist/locale/toolkit-messages.d.ts +19 -1
  234. package/dist/locale/toolkit-messages.d.ts.map +1 -1
  235. package/dist/locale/toolkit-messages.js +54 -1
  236. package/dist/locale/toolkit-messages.js.map +1 -1
  237. package/dist/primitives/alert.d.ts +1 -1
  238. package/dist/primitives/alert.d.ts.map +1 -1
  239. package/dist/primitives/alert.js +2 -0
  240. package/dist/primitives/alert.js.map +1 -1
  241. package/dist/primitives/badge.d.ts +1 -1
  242. package/dist/primitives/badge.d.ts.map +1 -1
  243. package/dist/primitives/badge.js +9 -4
  244. package/dist/primitives/badge.js.map +1 -1
  245. package/dist/primitives/button.d.ts +1 -1
  246. package/dist/primitives/button.js +1 -1
  247. package/dist/primitives/button.js.map +1 -1
  248. package/dist/primitives/dialog.d.ts +1 -1
  249. package/dist/primitives/dialog.d.ts.map +1 -1
  250. package/dist/primitives/dialog.js +10 -3
  251. package/dist/primitives/dialog.js.map +1 -1
  252. package/dist/primitives/select.js +1 -1
  253. package/dist/primitives/select.js.map +1 -1
  254. package/dist/primitives/sheet.d.ts +1 -1
  255. package/dist/primitives/sheet.d.ts.map +1 -1
  256. package/dist/primitives/sheet.js +6 -2
  257. package/dist/primitives/sheet.js.map +1 -1
  258. package/dist/providers/query-provider.d.ts +32 -1
  259. package/dist/providers/query-provider.d.ts.map +1 -1
  260. package/dist/providers/query-provider.js +53 -4
  261. package/dist/providers/query-provider.js.map +1 -1
  262. package/dist/render-cases-primitives.js +1 -1
  263. package/dist/render-cases-primitives.js.map +1 -1
  264. package/dist/render-cases.d.ts.map +1 -1
  265. package/dist/render-cases.js +30 -6
  266. package/dist/render-cases.js.map +1 -1
  267. package/dist/render-effects.d.ts +42 -0
  268. package/dist/render-effects.d.ts.map +1 -0
  269. package/dist/render-effects.js +81 -0
  270. package/dist/render-effects.js.map +1 -0
  271. package/dist/theme/create-theme.d.ts +19 -1
  272. package/dist/theme/create-theme.d.ts.map +1 -1
  273. package/dist/theme/create-theme.js +15 -0
  274. package/dist/theme/create-theme.js.map +1 -1
  275. package/package.json +5 -4
  276. package/src/app/adapt-data-widget.tsx +2 -42
  277. package/src/app/builder/BuilderBanners.tsx +1 -1
  278. package/src/app/builder/CanvasRow.tsx +63 -17
  279. package/src/app/builder/CatalogueSheet.tsx +50 -29
  280. package/src/app/builder/CellPropsSheet.tsx +17 -2
  281. package/src/app/builder/DiscardDialog.tsx +59 -0
  282. package/src/app/builder/LayoutSurface.tsx +206 -66
  283. package/src/app/builder/PipelineStrip.tsx +253 -153
  284. package/src/app/builder/SaveDialog.tsx +14 -2
  285. package/src/app/builder/Toolbar.tsx +144 -59
  286. package/src/app/builder/Workspace.tsx +226 -58
  287. package/src/app/builder/builder-model.ts +341 -2
  288. package/src/app/builder/builder-model.ux.test.ts +456 -0
  289. package/src/app/builder/builder-ux.test.tsx +844 -0
  290. package/src/app/builder/reveal.ts +10 -0
  291. package/src/app/builder/use-builder-catalogue.ts +56 -19
  292. package/src/app/builder/use-builder-session.ts +68 -0
  293. package/src/app/builder/use-display-resolver.ts +24 -0
  294. package/src/app/index.ts +12 -2
  295. package/src/app/layout-builder.tsx +178 -191
  296. package/src/app/mcp-app-view-chrome.test.tsx +141 -1
  297. package/src/app/mcp-app-view-chrome.tsx +56 -6
  298. package/src/app/mcp-app-view-states.tsx +51 -11
  299. package/src/app/mcp-app-view.effects.test.tsx +292 -0
  300. package/src/app/mcp-app-view.test.tsx +222 -2
  301. package/src/app/mcp-app-view.tsx +267 -117
  302. package/src/app/mcp-toolkit-app.test.tsx +40 -0
  303. package/src/app/mcp-toolkit-app.tsx +8 -1
  304. package/src/app/mcp-use-host-bridge.test.tsx +180 -0
  305. package/src/app/mcp-use-host-bridge.tsx +67 -24
  306. package/src/app/model-context.test.tsx +116 -0
  307. package/src/app/model-context.tsx +125 -0
  308. package/src/app/use-build-mode-focus.ts +62 -0
  309. package/src/app/use-view-actions.ts +89 -0
  310. package/src/app/use-view-lifecycle.ts +6 -0
  311. package/src/app/view-lifecycle.test.ts +216 -0
  312. package/src/app/view-lifecycle.ts +165 -5
  313. package/src/app/widget-fixture.effects.test.tsx +51 -0
  314. package/src/app/widget-fixture.render.test.tsx +81 -0
  315. package/src/app/widget-fixture.tsx +34 -11
  316. package/src/app/widget-props-sheet.tsx +57 -16
  317. package/src/app/widget-renderer.tsx +1 -1
  318. package/src/components/DrillButton.test.tsx +48 -0
  319. package/src/components/DrillButton.tsx +26 -11
  320. package/src/components/EmptyState.tsx +6 -4
  321. package/src/components/ErrorState.tsx +31 -9
  322. package/src/components/FilterBar.test.tsx +82 -0
  323. package/src/components/FilterBar.tsx +52 -26
  324. package/src/components/KpiGrid.test.tsx +279 -0
  325. package/src/components/KpiGrid.tsx +297 -90
  326. package/src/components/ListFooter.test.tsx +116 -0
  327. package/src/components/ListFooter.tsx +102 -15
  328. package/src/components/PagedListFooter.test.tsx +140 -0
  329. package/src/components/PagedListFooter.tsx +107 -0
  330. package/src/components/Pills.test.tsx +77 -0
  331. package/src/components/Pills.tsx +63 -10
  332. package/src/components/SectionHeading.tsx +9 -3
  333. package/src/components/Toast.tsx +37 -19
  334. package/src/components/WidgetHeader.test.tsx +78 -0
  335. package/src/components/WidgetHeader.tsx +63 -16
  336. package/src/components/feedback-states.test.tsx +98 -9
  337. package/src/components/tone-figures.test.tsx +8 -4
  338. package/src/hooks/index.ts +6 -3
  339. package/src/hooks/tool-result-recovery-model.test.ts +744 -0
  340. package/src/hooks/tool-result-recovery-model.ts +418 -0
  341. package/src/hooks/use-tool-query.effects.test.tsx +205 -0
  342. package/src/hooks/use-tool-query.ts +156 -33
  343. package/src/hooks/use-tool-result-recovery.effects.test.tsx +141 -0
  344. package/src/hooks/use-tool-result-recovery.test.ts +3 -4
  345. package/src/hooks/use-tool-result-recovery.ts +84 -142
  346. package/src/hooks/use-view-data.test.tsx +118 -9
  347. package/src/hooks/use-view-data.ts +128 -18
  348. package/src/hooks/use-view-tool-query.ts +25 -19
  349. package/src/i18n-coverage.test.tsx +104 -2
  350. package/src/index.ts +48 -11
  351. package/src/lib/focus-return.test.ts +288 -0
  352. package/src/lib/focus-return.ts +96 -0
  353. package/src/lib/parse-tool-result.test.ts +46 -1
  354. package/src/lib/parse-tool-result.ts +40 -2
  355. package/src/lib/toast-model.test.ts +166 -1
  356. package/src/lib/toast-model.ts +104 -2
  357. package/src/lib/tone-utils.test.ts +86 -10
  358. package/src/lib/tone-utils.ts +89 -8
  359. package/src/lib/tool-query.test.ts +569 -0
  360. package/src/lib/tool-query.ts +253 -0
  361. package/src/lib/tool-result-observer.test.ts +296 -0
  362. package/src/lib/tool-result-observer.ts +211 -0
  363. package/src/lib/typography.test.ts +45 -0
  364. package/src/lib/typography.ts +47 -0
  365. package/src/lib/utils.ts +12 -1
  366. package/src/locale/index.ts +1 -0
  367. package/src/locale/message-types.ts +118 -2
  368. package/src/locale/messages-de.ts +49 -10
  369. package/src/locale/messages-en.ts +49 -10
  370. package/src/locale/toolkit-messages.test.ts +133 -0
  371. package/src/locale/toolkit-messages.ts +63 -2
  372. package/src/primitives/alert.tsx +3 -0
  373. package/src/primitives/badge.tsx +9 -4
  374. package/src/primitives/button.tsx +1 -1
  375. package/src/primitives/dialog.tsx +10 -1
  376. package/src/primitives/select.tsx +1 -1
  377. package/src/primitives/sheet.tsx +7 -0
  378. package/src/providers/query-provider.test.tsx +154 -0
  379. package/src/providers/query-provider.tsx +66 -5
  380. package/src/render-cases-primitives.tsx +1 -1
  381. package/src/render-cases.tsx +38 -6
  382. package/src/render-effects.tsx +96 -0
  383. package/src/theme/cd-tokens.test.ts +3 -1
  384. package/src/theme/create-theme.test.ts +10 -0
  385. package/src/theme/create-theme.ts +28 -0
  386. package/src/theme/theme-css.test.ts +51 -0
  387. package/src/theme.css +31 -1
  388. package/ui-catalog.json +448 -41
@@ -1,4 +1,4 @@
1
- import type { AvailableStep, KeyCatalogEntry, PipelineContext, PipelineStepRef, ReachableWidget, UnreachableWidget } from "@miragon/mcp-toolkit-core";
1
+ import type { AvailableStep, DisplayText, KeyCatalogEntry, PipelineContext, PipelineStepRef, ReachableWidget, UnreachableWidget } from "@miragon/mcp-toolkit-core";
2
2
  import { type KeyEntry } from "./builder-model.js";
3
3
  import type { RefreshStatus } from "./labels.js";
4
4
  /**
@@ -23,10 +23,13 @@ export declare function useBuilderCatalogue({ callTool, catalogueToolName, keyEn
23
23
  liveContext: PipelineContext;
24
24
  validationIssues: string[];
25
25
  status: RefreshStatus;
26
+ loaded: boolean;
26
27
  refreshError: string | null;
27
28
  retryCatalogue: () => void;
28
29
  widgetById: Map<string, ReachableWidget>;
29
30
  propsSchemaByWidgetId: Map<string, Record<string, unknown>>;
31
+ displayByWidgetId: Map<string, DisplayText>;
32
+ appDisplayByName: Map<string, DisplayText>;
30
33
  paletteByApp: [string, ReachableWidget[]][];
31
34
  liveKeyCount: number;
32
35
  stepsByApp: [string, AvailableStep[]][];
@@ -1 +1 @@
1
- {"version":3,"file":"use-builder-catalogue.d.ts","sourceRoot":"","sources":["../../../src/app/builder/use-builder-catalogue.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,EACf,iBAAiB,EAClB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAQhD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,iBAAiB,EACjB,UAAU,EACV,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1D,iBAAiB,EAAE,MAAM,CAAA;IACzB,UAAU,EAAE,QAAQ,EAAE,CAAA;IACtB,WAAW,EAAE,eAAe,EAAE,CAAA;CAC/B;;;;;;;;;;;;;;;EAqJA"}
1
+ {"version":3,"file":"use-builder-catalogue.d.ts","sourceRoot":"","sources":["../../../src/app/builder/use-builder-catalogue.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EAEb,WAAW,EACX,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,EACf,iBAAiB,EAClB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAmBhD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,iBAAiB,EACjB,UAAU,EACV,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1D,iBAAiB,EAAE,MAAM,CAAA;IACzB,UAAU,EAAE,QAAQ,EAAE,CAAA;IACtB,WAAW,EAAE,eAAe,EAAE,CAAA;CAC/B;;;;;;;;;;;;;;;;;;EA6KA"}
@@ -22,6 +22,9 @@ export function useBuilderCatalogue({ callTool, catalogueToolName, keyEntries, s
22
22
  const [liveCatalog, setLiveCatalog] = useState([]);
23
23
  const [liveSteps, setLiveSteps] = useState([]);
24
24
  const [liveContext, setLiveContext] = useState(EMPTY_CONTEXT);
25
+ // The titled apps (the palette's group headings); the catalogue leaves the
26
+ // field out when no app has a title.
27
+ const [liveApps, setLiveApps] = useState([]);
25
28
  // Pipeline validation issues from the catalogue (Finding [10]/[6]). The
26
29
  // catalogue is fail-soft, but `render-view` is fail-hard, so we surface
27
30
  // these so the user sees — before committing — that the pipeline as
@@ -33,6 +36,31 @@ export function useBuilderCatalogue({ callTool, catalogueToolName, keyEntries, s
33
36
  // instead of only `console.warn`-ing, so the user knows the palette/context
34
37
  // may be stale. Cleared on the next successful refresh.
35
38
  const [refreshError, setRefreshError] = useState(null);
39
+ // The first fetch has settled (answer or failure). Until then the palette
40
+ // shows a loading state, not "no elements" (CI §9: a skeleton while loading).
41
+ const [loaded, setLoaded] = useState(false);
42
+ // Takes over what one catalogue response carries; a field it lacks keeps
43
+ // the last snapshot.
44
+ const applySnapshot = useCallback((sc) => {
45
+ if (sc?.reachableWidgets)
46
+ setLiveReachable(sc.reachableWidgets);
47
+ if (sc?.unreachableWidgets)
48
+ setLiveUnreachable(sc.unreachableWidgets);
49
+ if (sc?.availableSteps)
50
+ setLiveSteps(sc.availableSteps);
51
+ if (sc?.keyCatalog)
52
+ setLiveCatalog(sc.keyCatalog);
53
+ if (sc?.context)
54
+ setLiveContext(toPipelineContext(sc.context));
55
+ // Absent `apps` means no app has a title (not "unchanged").
56
+ if (sc)
57
+ setLiveApps(sc.apps ?? []);
58
+ // Pipeline issues are fail-soft in the catalogue but fail-hard in
59
+ // render-view; surface them so the user sees the render path wouldn't
60
+ // run as configured (Finding [10]/[6]). Coerce undefined → [] so a
61
+ // fixed pipeline clears a previously-shown warning.
62
+ setValidationIssues(sc?.validationIssues ?? []);
63
+ }, []);
36
64
  const refreshBuilder = useCallback(async () => {
37
65
  setStatus("refreshing");
38
66
  try {
@@ -40,22 +68,7 @@ export function useBuilderCatalogue({ callTool, catalogueToolName, keyEntries, s
40
68
  keys: entriesToKeys(keyEntries),
41
69
  steps: stepEntries.filter((s) => s.step.trim().length > 0),
42
70
  });
43
- const sc = parseToolResult(result);
44
- if (sc?.reachableWidgets)
45
- setLiveReachable(sc.reachableWidgets);
46
- if (sc?.unreachableWidgets)
47
- setLiveUnreachable(sc.unreachableWidgets);
48
- if (sc?.availableSteps)
49
- setLiveSteps(sc.availableSteps);
50
- if (sc?.keyCatalog)
51
- setLiveCatalog(sc.keyCatalog);
52
- if (sc?.context)
53
- setLiveContext(toPipelineContext(sc.context));
54
- // Pipeline issues are fail-soft in the catalogue but fail-hard in
55
- // render-view; surface them so the user sees the render path wouldn't
56
- // run as configured (Finding [10]/[6]). Coerce undefined → [] so a
57
- // fixed pipeline clears a previously-shown warning.
58
- setValidationIssues(sc?.validationIssues ?? []);
71
+ applySnapshot(parseToolResult(result));
59
72
  // A successful fetch clears any stale failure banner.
60
73
  setRefreshError(null);
61
74
  }
@@ -73,8 +86,9 @@ export function useBuilderCatalogue({ callTool, catalogueToolName, keyEntries, s
73
86
  }
74
87
  finally {
75
88
  setStatus("idle");
89
+ setLoaded(true);
76
90
  }
77
- }, [catalogueToolName, callTool, keyEntries, stepEntries]);
91
+ }, [applySnapshot, catalogueToolName, callTool, keyEntries, stepEntries]);
78
92
  const refreshRef = useRef(refreshBuilder);
79
93
  useEffect(() => {
80
94
  refreshRef.current = refreshBuilder;
@@ -122,6 +136,16 @@ export function useBuilderCatalogue({ callTool, catalogueToolName, keyEntries, s
122
136
  }
123
137
  return map;
124
138
  }, [liveReachable, liveUnreachable]);
139
+ // Display text (title, summary, their keys) per widget id, from both lists:
140
+ // a canvas cell or the props sheet may name a widget the current keys do
141
+ // not reach.
142
+ const displayByWidgetId = useMemo(() => {
143
+ const map = new Map();
144
+ for (const w of [...liveUnreachable, ...liveReachable])
145
+ map.set(w.id, w);
146
+ return map;
147
+ }, [liveReachable, liveUnreachable]);
148
+ const appDisplayByName = useMemo(() => new Map(liveApps.map((app) => [app.name, app])), [liveApps]);
125
149
  const paletteByApp = useMemo(() => {
126
150
  const groups = new Map();
127
151
  for (const w of liveReachable) {
@@ -149,10 +173,13 @@ export function useBuilderCatalogue({ callTool, catalogueToolName, keyEntries, s
149
173
  liveContext,
150
174
  validationIssues,
151
175
  status,
176
+ loaded,
152
177
  refreshError,
153
178
  retryCatalogue,
154
179
  widgetById,
155
180
  propsSchemaByWidgetId,
181
+ displayByWidgetId,
182
+ appDisplayByName,
156
183
  paletteByApp,
157
184
  liveKeyCount,
158
185
  stepsByApp,
@@ -1 +1 @@
1
- {"version":3,"file":"use-builder-catalogue.js","sourceRoot":"","sources":["../../../src/app/builder/use-builder-catalogue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-builder-catalogue.js","sourceRoot":"","sources":["../../../src/app/builder/use-builder-catalogue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type BuilderView, type DraftStatus } from "./builder-model.js";
2
+ /**
3
+ * Which builder view is shown and whether advanced mode is on. The data
4
+ * sources (keys, steps, context ids) and the catalogue are technical, so they
5
+ * live behind "Advanced"; switching it off leaves a now hidden view for the
6
+ * layout.
7
+ */
8
+ export declare function useBuilderMode(): {
9
+ advanced: boolean;
10
+ view: BuilderView;
11
+ setView: import("react").Dispatch<import("react").SetStateAction<BuilderView>>;
12
+ toggleAdvanced: () => void;
13
+ openDataSources: () => void;
14
+ };
15
+ /**
16
+ * Inline rename feedback. The reducer rejects duplicate tab labels and bumps
17
+ * `renameRejectedAt`; each bump shows "name already exists" until the inline
18
+ * editor closes (render-phase setState, the house pattern for derived state).
19
+ */
20
+ export declare function useRenameFeedback(renameRejectedAt: number, editingTabIdx: number | null): boolean;
21
+ /**
22
+ * Tracks the draft against the view before editing and the last saved
23
+ * dashboard (see `draftStatus`). `snapshot` is the current `builderSnapshot`;
24
+ * the first one is the pre-edit baseline.
25
+ */
26
+ export declare function useDraftStatus(snapshot: string): DraftStatus & {
27
+ /** Records `saved` (the snapshot that went into a saved dashboard). */
28
+ markSaved: (saved: string) => void;
29
+ };
30
+ //# sourceMappingURL=use-builder-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-builder-session.d.ts","sourceRoot":"","sources":["../../../src/app/builder/use-builder-session.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAA;AAM3B;;;;;GAKG;AACH,wBAAgB,cAAc;;;;;;EAc7B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAajG;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG;IAC9D,uEAAuE;IACvE,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC,CAKA"}
@@ -0,0 +1,58 @@
1
+ import { useCallback, useState } from "react";
2
+ import { draftStatus, viewAfterAdvancedToggle, } from "./builder-model.js";
3
+ // -------------------------------------------------------------------------- //
4
+ // Builder session state that is not the draft itself
5
+ // -------------------------------------------------------------------------- //
6
+ /**
7
+ * Which builder view is shown and whether advanced mode is on. The data
8
+ * sources (keys, steps, context ids) and the catalogue are technical, so they
9
+ * live behind "Advanced"; switching it off leaves a now hidden view for the
10
+ * layout.
11
+ */
12
+ export function useBuilderMode() {
13
+ const [advanced, setAdvanced] = useState(false);
14
+ const [view, setView] = useState("layout");
15
+ const toggleAdvanced = useCallback(() => {
16
+ const next = !advanced;
17
+ setAdvanced(next);
18
+ setView(viewAfterAdvancedToggle(view, next));
19
+ }, [advanced, view]);
20
+ /** The empty layout's one next step: show the data sources. */
21
+ const openDataSources = useCallback(() => {
22
+ setAdvanced(true);
23
+ setView("pipeline");
24
+ }, []);
25
+ return { advanced, view, setView, toggleAdvanced, openDataSources };
26
+ }
27
+ /**
28
+ * Inline rename feedback. The reducer rejects duplicate tab labels and bumps
29
+ * `renameRejectedAt`; each bump shows "name already exists" until the inline
30
+ * editor closes (render-phase setState, the house pattern for derived state).
31
+ */
32
+ export function useRenameFeedback(renameRejectedAt, editingTabIdx) {
33
+ const [renameRejected, setRenameRejected] = useState(false);
34
+ const [prevRenameRejectedAt, setPrevRenameRejectedAt] = useState(renameRejectedAt);
35
+ if (renameRejectedAt !== prevRenameRejectedAt) {
36
+ setPrevRenameRejectedAt(renameRejectedAt);
37
+ setRenameRejected(true);
38
+ }
39
+ const [prevEditingTabIdx, setPrevEditingTabIdx] = useState(editingTabIdx);
40
+ if (editingTabIdx !== prevEditingTabIdx) {
41
+ setPrevEditingTabIdx(editingTabIdx);
42
+ if (editingTabIdx === null)
43
+ setRenameRejected(false);
44
+ }
45
+ return renameRejected;
46
+ }
47
+ /**
48
+ * Tracks the draft against the view before editing and the last saved
49
+ * dashboard (see `draftStatus`). `snapshot` is the current `builderSnapshot`;
50
+ * the first one is the pre-edit baseline.
51
+ */
52
+ export function useDraftStatus(snapshot) {
53
+ const [baseline] = useState(snapshot);
54
+ const [saved, setSaved] = useState(null);
55
+ const markSaved = useCallback((value) => setSaved(value), []);
56
+ return { ...draftStatus(snapshot, baseline, saved), markSaved };
57
+ }
58
+ //# sourceMappingURL=use-builder-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-builder-session.js","sourceRoot":"","sources":["../../../src/app/builder/use-builder-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,EACL,WAAW,EACX,uBAAuB,GAGxB,MAAM,oBAAoB,CAAA;AAE3B,gFAAgF;AAChF,qDAAqD;AACrD,gFAAgF;AAEhF;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC/C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAc,QAAQ,CAAC,CAAA;IACvD,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAA;QACtB,WAAW,CAAC,IAAI,CAAC,CAAA;QACjB,OAAO,CAAC,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAC9C,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;IACpB,+DAA+D;IAC/D,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACvC,WAAW,CAAC,IAAI,CAAC,CAAA;QACjB,OAAO,CAAC,UAAU,CAAC,CAAA;IACrB,CAAC,EAAE,EAAE,CAAC,CAAA;IACN,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAA;AACrE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,gBAAwB,EAAE,aAA4B;IACtF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC3D,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAA;IAClF,IAAI,gBAAgB,KAAK,oBAAoB,EAAE,CAAC;QAC9C,uBAAuB,CAAC,gBAAgB,CAAC,CAAA;QACzC,iBAAiB,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IACD,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA;IACzE,IAAI,aAAa,KAAK,iBAAiB,EAAE,CAAC;QACxC,oBAAoB,CAAC,aAAa,CAAC,CAAA;QACnC,IAAI,aAAa,KAAK,IAAI;YAAE,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACtD,CAAC;IACD,OAAO,cAAc,CAAA;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAI7C,MAAM,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACrC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACvD,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;IACrE,OAAO,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,CAAA;AACjE,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type DisplayKeyResolver } from "./builder-model.js";
2
+ /** What the builder needs to turn a definition's display text into words. */
3
+ export interface DisplayResolver {
4
+ /** The locale the builder's own text is in (a `LocaleProvider`'s, else the host's). */
5
+ locale: string;
6
+ /** Resolves a `titleKey`/`summaryKey` through the `LocaleProvider`'s translator. */
7
+ resolveKey: DisplayKeyResolver;
8
+ }
9
+ /**
10
+ * Binds `displayLabel` / `propFieldText` to the builder's locale: inline
11
+ * per-locale titles follow the same language as the builder chrome around
12
+ * them, and i18n keys resolve through the nearest `LocaleProvider`'s
13
+ * translator (outside one, keys stay unknown and the inline text or the id
14
+ * shows instead).
15
+ */
16
+ export declare function useDisplayResolver(): DisplayResolver;
17
+ //# sourceMappingURL=use-display-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-display-resolver.d.ts","sourceRoot":"","sources":["../../../src/app/builder/use-display-resolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE7E,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,uFAAuF;IACvF,MAAM,EAAE,MAAM,CAAA;IACd,oFAAoF;IACpF,UAAU,EAAE,kBAAkB,CAAA;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CAIpD"}
@@ -0,0 +1,16 @@
1
+ import { useMemo } from "react";
2
+ import { useToolkitLocale, useTranslate } from "../../locale/locale-provider.js";
3
+ import { keyResolverFrom } from "./builder-model.js";
4
+ /**
5
+ * Binds `displayLabel` / `propFieldText` to the builder's locale: inline
6
+ * per-locale titles follow the same language as the builder chrome around
7
+ * them, and i18n keys resolve through the nearest `LocaleProvider`'s
8
+ * translator (outside one, keys stay unknown and the inline text or the id
9
+ * shows instead).
10
+ */
11
+ export function useDisplayResolver() {
12
+ const locale = useToolkitLocale();
13
+ const translate = useTranslate();
14
+ return useMemo(() => ({ locale, resolveKey: keyResolverFrom(translate) }), [locale, translate]);
15
+ }
16
+ //# sourceMappingURL=use-display-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-display-resolver.js","sourceRoot":"","sources":["../../../src/app/builder/use-display-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAChF,OAAO,EAAE,eAAe,EAA2B,MAAM,oBAAoB,CAAA;AAU7E;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAA;IACjC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;AACjG,CAAC"}
@@ -1,17 +1,22 @@
1
1
  export { McpAppView } from "./mcp-app-view.js";
2
- export type { McpAppViewProps, McpAppViewLabels, DescribeStep, DescribeViewError, ViewTitleLevel, ViewTitleMode, } from "./mcp-app-view.js";
2
+ export type { McpAppViewProps, McpAppViewLabels, DescribeStep, DescribeViewError, ViewErrorKind, RecoveryPolicy, ViewTitleLevel, ViewTitleMode, } from "./mcp-app-view.js";
3
3
  export { McpToolkitApp, mountMcpToolkitApp } from "./mcp-toolkit-app.js";
4
+ export { installToolResultObserver } from "../lib/tool-result-observer.js";
5
+ export type { ToolObservation, ToolResultObserver } from "../lib/tool-result-observer.js";
4
6
  export { WidgetRenderer, WidgetErrorBoundary, RenderedWidget, contextHasNoData, } from "./widget-renderer.js";
5
7
  export type { WidgetRendererProps, WidgetComponent } from "./widget-renderer.js";
6
8
  export { LayoutBuilder } from "./layout-builder.js";
7
9
  export type { LayoutBuilderProps, LayoutBuilderLabels } from "./layout-builder.js";
8
- export { adaptDataWidget, HostModelContext } from "./adapt-data-widget.js";
10
+ export type { BuilderExitCommit } from "./builder/builder-model.js";
11
+ export { adaptDataWidget } from "./adapt-data-widget.js";
12
+ export { HostModelContext, useHostModelContext } from "./model-context.js";
9
13
  export type { DescribeForModel } from "./adapt-data-widget.js";
10
14
  export { useHostActions, buildShowWidgetIntent } from "./use-host-actions.js";
11
15
  export type { HostActions } from "./use-host-actions.js";
12
16
  export { HostBridgeProvider, useHostBridge, useHostBridgeOrNull, toHostBridge, createChatGptHostBridge, createStandaloneHostBridge, } from "./host-bridge.js";
13
17
  export type { HostBridge, McpUseWidgetSurface, OpenAiAppsSdk, StandaloneHostBridgeOptions, } from "./host-bridge.js";
14
- export { McpUseHostBridgeProvider, useIsInsideMcpUseView } from "./mcp-use-host-bridge.js";
18
+ export { McpUseHostBridgeProvider } from "./mcp-use-host-bridge.js";
19
+ export { useIsInsideMcpUseView } from "./model-context.js";
15
20
  export { WidgetFixtureHost, FixtureCallToolRegistry, buildFixtureWidgetProps, useFixtureHost, } from "./widget-fixture.js";
16
21
  export type { WidgetFixtureHostProps, FixtureWidget, FixtureToolEntry, FixtureToolResult, HostActionLog, } from "./widget-fixture.js";
17
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACxE,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,gBAAgB,GACjB,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAIlF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC1E,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7E,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAMxD,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAA;AACzB,YAAY,EACV,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,2BAA2B,GAC5B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAK1F,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACvB,cAAc,GACf,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,GACd,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAIxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC1E,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACzF,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,gBAAgB,GACjB,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAClF,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAInE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC1E,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7E,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAMxD,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAA;AACzB,YAAY,EACV,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,2BAA2B,GAC5B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAK1D,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACvB,cAAc,GACf,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,GACd,MAAM,qBAAqB,CAAA"}
package/dist/app/index.js CHANGED
@@ -1,17 +1,23 @@
1
1
  export { McpAppView } from "./mcp-app-view.js";
2
2
  export { McpToolkitApp, mountMcpToolkitApp } from "./mcp-toolkit-app.js";
3
+ // The passive host-lifecycle observer behind the stripped-result recovery
4
+ // (toolkit#176): installed as the bundle evaluates; a custom shell may call it
5
+ // explicitly before its own `bootstrapView`.
6
+ export { installToolResultObserver } from "../lib/tool-result-observer.js";
3
7
  export { WidgetRenderer, WidgetErrorBoundary, RenderedWidget, contextHasNoData, } from "./widget-renderer.js";
4
8
  export { LayoutBuilder } from "./layout-builder.js";
5
9
  // App-level value modules that import `mcp-use/react` (ModelContext, the 2.x
6
10
  // view hooks) — exported from this subpath only, never the root barrel.
7
- export { adaptDataWidget, HostModelContext } from "./adapt-data-widget.js";
11
+ export { adaptDataWidget } from "./adapt-data-widget.js";
12
+ export { HostModelContext, useHostModelContext } from "./model-context.js";
8
13
  export { useHostActions, buildShowWidgetIntent } from "./use-host-actions.js";
9
14
  // Host-portability bridge: the seam that lets the same hand-built widget run in
10
15
  // our mcp-use host, ChatGPT (Apps SDK), or a standalone web app against an
11
16
  // existing MCP server. Lives under ./app because the mcp-use adapter imports
12
17
  // `mcp-use/react` — never the root barrel.
13
18
  export { HostBridgeProvider, useHostBridge, useHostBridgeOrNull, toHostBridge, createChatGptHostBridge, createStandaloneHostBridge, } from "./host-bridge.js";
14
- export { McpUseHostBridgeProvider, useIsInsideMcpUseView } from "./mcp-use-host-bridge.js";
19
+ export { McpUseHostBridgeProvider } from "./mcp-use-host-bridge.js";
20
+ export { useIsInsideMcpUseView } from "./model-context.js";
15
21
  // Storybook-style harness for developing widgets in isolation with fixture
16
22
  // data and a simulated HostBridge. Lives under ./app to keep every host-facing
17
23
  // surface on one subpath — never the root barrel.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAS9C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACxE,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,gBAAgB,GACjB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGnD,6EAA6E;AAC7E,wEAAwE;AACxE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE1E,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAG7E,gFAAgF;AAChF,2EAA2E;AAC3E,6EAA6E;AAC7E,2CAA2C;AAC3C,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAA;AAOzB,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAE1F,2EAA2E;AAC3E,+EAA+E;AAC/E,kDAAkD;AAClD,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACvB,cAAc,GACf,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAW9C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACxE,0EAA0E;AAC1E,+EAA+E;AAC/E,6CAA6C;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAE1E,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,gBAAgB,GACjB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAInD,6EAA6E;AAC7E,wEAAwE;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAE1E,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAG7E,gFAAgF;AAChF,2EAA2E;AAC3E,6EAA6E;AAC7E,2CAA2C;AAC3C,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAA;AAOzB,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE1D,2EAA2E;AAC3E,+EAA+E;AAC/E,kDAAkD;AAClD,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACvB,cAAc,GACf,MAAM,qBAAqB,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import type { LayoutConfig, PipelineStepRef } from "@miragon/mcp-toolkit-core";
2
+ import { type BuilderExitCommit } from "./builder/builder-model.js";
2
3
  import type { LayoutBuilderLabels } from "./builder/labels.js";
3
4
  import { type WidgetComponent } from "./widget-renderer.js";
4
5
  export type { LayoutBuilderLabels } from "./builder/labels.js";
@@ -19,34 +20,21 @@ export interface LayoutBuilderProps {
19
20
  name: string;
20
21
  }) => void;
21
22
  /**
22
- * Called when the user clicks "Done" / exits the builder. Receives
23
- * the final draft so the parent can swap into the rendered view with
24
- * the just-built layout. Omit `commit` to leave parent state untouched.
23
+ * Leaves the builder. "Apply" calls it WITH the final draft (`commit`) so
24
+ * the parent swaps the just-built layout into its view; "Discard" calls it
25
+ * WITHOUT one, so the parent keeps the view as it was before editing (after
26
+ * a confirmation when the draft changed it). Without `onExit` the builder
27
+ * has no Apply, and Discard resets the draft in place.
25
28
  */
26
- onExit?: (commit?: {
27
- layout: LayoutConfig;
28
- keys?: Record<string, unknown>;
29
- steps?: PipelineStepRef[];
30
- title?: string;
31
- context?: {
32
- keys: Record<string, unknown>;
33
- stepIds: string[];
34
- stepData: Record<string, {
35
- data: unknown;
36
- keys: Record<string, unknown>;
37
- _app: string;
38
- _dataType: string;
39
- }>;
40
- errors: {
41
- stepId: string;
42
- reason: string;
43
- }[];
44
- };
45
- }) => void;
29
+ onExit?: (commit?: BuilderExitCommit) => void;
46
30
  }
47
31
  /**
48
- * The visual view builder. Confirms a successful save with a toast (it mounts
49
- * a `ToastProvider` when none is above it — inside `McpAppView` it shares the
32
+ * The visual view builder. People see widgets and steps by their titles
33
+ * (`title`/`titleKey` of the definitions, else the id); the data sources, the
34
+ * catalogue and the technical ids sit behind "Advanced". "Apply" shows the
35
+ * draft in the view, "Save as dashboard" stores it, "Discard" restores the
36
+ * view as it was. Confirms a successful save with a toast (it mounts a
37
+ * `ToastProvider` when none is above it — inside `McpAppView` it shares the
50
38
  * view's). Every caption follows the active locale (`labels` overrides).
51
39
  */
52
40
  export declare function LayoutBuilder(props: LayoutBuilderProps): import("react").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"layout-builder.d.ts","sourceRoot":"","sources":["../../src/app/layout-builder.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAuB,MAAM,2BAA2B,CAAA;AAOnG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAgB9D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAO3D,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAM9D,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,EAAE,YAAY,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,YAAY,CAAC,EAAE,eAAe,EAAE,CAAA;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1D,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,mBAAmB,CAAA;IAC5B,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACxD;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;QACjB,MAAM,EAAE,YAAY,CAAA;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC9B,KAAK,CAAC,EAAE,eAAe,EAAE,CAAA;QACzB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,OAAO,CAAC,EAAE;YACR,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YAC7B,OAAO,EAAE,MAAM,EAAE,CAAA;YACjB,QAAQ,EAAE,MAAM,CACd,MAAM,EACN;gBAAE,IAAI,EAAE,OAAO,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAA;aAAE,CAClF,CAAA;YACD,MAAM,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,EAAE,CAAA;SAC7C,CAAA;KACF,KAAK,IAAI,CAAA;CACX;AAMD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,+BAMtD"}
1
+ {"version":3,"file":"layout-builder.d.ts","sourceRoot":"","sources":["../../src/app/layout-builder.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAuB,MAAM,2BAA2B,CAAA;AACnG,OAAO,EAOL,KAAK,iBAAiB,EAEvB,MAAM,4BAA4B,CAAA;AAMnC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAmB9D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAO3D,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAM9D,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,EAAE,YAAY,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,YAAY,CAAC,EAAE,eAAe,EAAE,CAAA;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1D,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,mBAAmB,CAAA;IAC5B,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACxD;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAA;CAC9C;AAMD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,+BActD"}