@vendoai/ui 0.4.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 (525) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +7 -0
  3. package/dist/chrome/activity-ledger.d.ts +14 -0
  4. package/dist/chrome/activity-ledger.d.ts.map +1 -0
  5. package/dist/chrome/activity-ledger.js +40 -0
  6. package/dist/chrome/activity-ledger.js.map +1 -0
  7. package/dist/chrome/activity-panel.d.ts +7 -0
  8. package/dist/chrome/activity-panel.d.ts.map +1 -0
  9. package/dist/chrome/activity-panel.js +27 -0
  10. package/dist/chrome/activity-panel.js.map +1 -0
  11. package/dist/chrome/activity-semantics.d.ts +42 -0
  12. package/dist/chrome/activity-semantics.d.ts.map +1 -0
  13. package/dist/chrome/activity-semantics.js +119 -0
  14. package/dist/chrome/activity-semantics.js.map +1 -0
  15. package/dist/chrome/approval-card.d.ts +22 -0
  16. package/dist/chrome/approval-card.d.ts.map +1 -0
  17. package/dist/chrome/approval-card.js +95 -0
  18. package/dist/chrome/approval-card.js.map +1 -0
  19. package/dist/chrome/approval-sheet.d.ts +23 -0
  20. package/dist/chrome/approval-sheet.d.ts.map +1 -0
  21. package/dist/chrome/approval-sheet.js +72 -0
  22. package/dist/chrome/approval-sheet.js.map +1 -0
  23. package/dist/chrome/automations-panel.d.ts +3 -0
  24. package/dist/chrome/automations-panel.d.ts.map +1 -0
  25. package/dist/chrome/automations-panel.js +305 -0
  26. package/dist/chrome/automations-panel.js.map +1 -0
  27. package/dist/chrome/build-beat.d.ts +70 -0
  28. package/dist/chrome/build-beat.d.ts.map +1 -0
  29. package/dist/chrome/build-beat.js +101 -0
  30. package/dist/chrome/build-beat.js.map +1 -0
  31. package/dist/chrome/chrome-css.d.ts +7 -0
  32. package/dist/chrome/chrome-css.d.ts.map +1 -0
  33. package/dist/chrome/chrome-css.js +2042 -0
  34. package/dist/chrome/chrome-css.js.map +1 -0
  35. package/dist/chrome/chrome-root.d.ts +13 -0
  36. package/dist/chrome/chrome-root.d.ts.map +1 -0
  37. package/dist/chrome/chrome-root.js +39 -0
  38. package/dist/chrome/chrome-root.js.map +1 -0
  39. package/dist/chrome/clipboard.d.ts +4 -0
  40. package/dist/chrome/clipboard.d.ts.map +1 -0
  41. package/dist/chrome/clipboard.js +49 -0
  42. package/dist/chrome/clipboard.js.map +1 -0
  43. package/dist/chrome/connect-card.d.ts +19 -0
  44. package/dist/chrome/connect-card.d.ts.map +1 -0
  45. package/dist/chrome/connect-card.js +57 -0
  46. package/dist/chrome/connect-card.js.map +1 -0
  47. package/dist/chrome/connect-dock.d.ts +25 -0
  48. package/dist/chrome/connect-dock.d.ts.map +1 -0
  49. package/dist/chrome/connect-dock.js +192 -0
  50. package/dist/chrome/connect-dock.js.map +1 -0
  51. package/dist/chrome/connected-accounts-panel.d.ts +14 -0
  52. package/dist/chrome/connected-accounts-panel.d.ts.map +1 -0
  53. package/dist/chrome/connected-accounts-panel.js +157 -0
  54. package/dist/chrome/connected-accounts-panel.js.map +1 -0
  55. package/dist/chrome/dev-mode.d.ts +5 -0
  56. package/dist/chrome/dev-mode.d.ts.map +1 -0
  57. package/dist/chrome/dev-mode.js +7 -0
  58. package/dist/chrome/dev-mode.js.map +1 -0
  59. package/dist/chrome/discoverability.d.ts +33 -0
  60. package/dist/chrome/discoverability.d.ts.map +1 -0
  61. package/dist/chrome/discoverability.js +63 -0
  62. package/dist/chrome/discoverability.js.map +1 -0
  63. package/dist/chrome/embeds.d.ts +21 -0
  64. package/dist/chrome/embeds.d.ts.map +1 -0
  65. package/dist/chrome/embeds.js +181 -0
  66. package/dist/chrome/embeds.js.map +1 -0
  67. package/dist/chrome/fluid-thinking.d.ts +15 -0
  68. package/dist/chrome/fluid-thinking.d.ts.map +1 -0
  69. package/dist/chrome/fluid-thinking.js +37 -0
  70. package/dist/chrome/fluid-thinking.js.map +1 -0
  71. package/dist/chrome/humanize.d.ts +46 -0
  72. package/dist/chrome/humanize.d.ts.map +1 -0
  73. package/dist/chrome/humanize.js +104 -0
  74. package/dist/chrome/humanize.js.map +1 -0
  75. package/dist/chrome/index.d.ts +39 -0
  76. package/dist/chrome/index.d.ts.map +1 -0
  77. package/dist/chrome/index.js +38 -0
  78. package/dist/chrome/index.js.map +1 -0
  79. package/dist/chrome/markdown.d.ts +23 -0
  80. package/dist/chrome/markdown.d.ts.map +1 -0
  81. package/dist/chrome/markdown.js +149 -0
  82. package/dist/chrome/markdown.js.map +1 -0
  83. package/dist/chrome/morph-toast.d.ts +43 -0
  84. package/dist/chrome/morph-toast.d.ts.map +1 -0
  85. package/dist/chrome/morph-toast.js +89 -0
  86. package/dist/chrome/morph-toast.js.map +1 -0
  87. package/dist/chrome/no-policy-notice.d.ts +8 -0
  88. package/dist/chrome/no-policy-notice.d.ts.map +1 -0
  89. package/dist/chrome/no-policy-notice.js +18 -0
  90. package/dist/chrome/no-policy-notice.js.map +1 -0
  91. package/dist/chrome/onest-font.gen.d.ts +10 -0
  92. package/dist/chrome/onest-font.gen.d.ts.map +1 -0
  93. package/dist/chrome/onest-font.gen.js +10 -0
  94. package/dist/chrome/onest-font.gen.js.map +1 -0
  95. package/dist/chrome/overlay-registry.d.ts +66 -0
  96. package/dist/chrome/overlay-registry.d.ts.map +1 -0
  97. package/dist/chrome/overlay-registry.js +103 -0
  98. package/dist/chrome/overlay-registry.js.map +1 -0
  99. package/dist/chrome/palette-hotkey.d.ts +42 -0
  100. package/dist/chrome/palette-hotkey.d.ts.map +1 -0
  101. package/dist/chrome/palette-hotkey.js +91 -0
  102. package/dist/chrome/palette-hotkey.js.map +1 -0
  103. package/dist/chrome/policy-notice-body.d.ts +3 -0
  104. package/dist/chrome/policy-notice-body.d.ts.map +1 -0
  105. package/dist/chrome/policy-notice-body.js +6 -0
  106. package/dist/chrome/policy-notice-body.js.map +1 -0
  107. package/dist/chrome/takeover-portal.d.ts +16 -0
  108. package/dist/chrome/takeover-portal.d.ts.map +1 -0
  109. package/dist/chrome/takeover-portal.js +21 -0
  110. package/dist/chrome/takeover-portal.js.map +1 -0
  111. package/dist/chrome/thread/attachments.d.ts +24 -0
  112. package/dist/chrome/thread/attachments.d.ts.map +1 -0
  113. package/dist/chrome/thread/attachments.js +50 -0
  114. package/dist/chrome/thread/attachments.js.map +1 -0
  115. package/dist/chrome/thread/composer.d.ts +63 -0
  116. package/dist/chrome/thread/composer.d.ts.map +1 -0
  117. package/dist/chrome/thread/composer.js +259 -0
  118. package/dist/chrome/thread/composer.js.map +1 -0
  119. package/dist/chrome/thread/index.d.ts +41 -0
  120. package/dist/chrome/thread/index.d.ts.map +1 -0
  121. package/dist/chrome/thread/index.js +258 -0
  122. package/dist/chrome/thread/index.js.map +1 -0
  123. package/dist/chrome/thread/message-data.d.ts +35 -0
  124. package/dist/chrome/thread/message-data.d.ts.map +1 -0
  125. package/dist/chrome/thread/message-data.js +127 -0
  126. package/dist/chrome/thread/message-data.js.map +1 -0
  127. package/dist/chrome/thread/message-list.d.ts +30 -0
  128. package/dist/chrome/thread/message-list.d.ts.map +1 -0
  129. package/dist/chrome/thread/message-list.js +11 -0
  130. package/dist/chrome/thread/message-list.js.map +1 -0
  131. package/dist/chrome/thread/message.d.ts +18 -0
  132. package/dist/chrome/thread/message.d.ts.map +1 -0
  133. package/dist/chrome/thread/message.js +57 -0
  134. package/dist/chrome/thread/message.js.map +1 -0
  135. package/dist/chrome/thread/parts.d.ts +53 -0
  136. package/dist/chrome/thread/parts.d.ts.map +1 -0
  137. package/dist/chrome/thread/parts.js +184 -0
  138. package/dist/chrome/thread/parts.js.map +1 -0
  139. package/dist/chrome/thread/scrolling.d.ts +26 -0
  140. package/dist/chrome/thread/scrolling.d.ts.map +1 -0
  141. package/dist/chrome/thread/scrolling.js +214 -0
  142. package/dist/chrome/thread/scrolling.js.map +1 -0
  143. package/dist/chrome/truncate.d.ts +12 -0
  144. package/dist/chrome/truncate.d.ts.map +1 -0
  145. package/dist/chrome/truncate.js +18 -0
  146. package/dist/chrome/truncate.js.map +1 -0
  147. package/dist/chrome/vendo-activities.d.ts +24 -0
  148. package/dist/chrome/vendo-activities.d.ts.map +1 -0
  149. package/dist/chrome/vendo-activities.js +38 -0
  150. package/dist/chrome/vendo-activities.js.map +1 -0
  151. package/dist/chrome/vendo-overlay.d.ts +63 -0
  152. package/dist/chrome/vendo-overlay.d.ts.map +1 -0
  153. package/dist/chrome/vendo-overlay.js +256 -0
  154. package/dist/chrome/vendo-overlay.js.map +1 -0
  155. package/dist/chrome/vendo-page.d.ts +3 -0
  156. package/dist/chrome/vendo-page.d.ts.map +1 -0
  157. package/dist/chrome/vendo-page.js +162 -0
  158. package/dist/chrome/vendo-page.js.map +1 -0
  159. package/dist/chrome/vendo-palette.d.ts +29 -0
  160. package/dist/chrome/vendo-palette.d.ts.map +1 -0
  161. package/dist/chrome/vendo-palette.js +95 -0
  162. package/dist/chrome/vendo-palette.js.map +1 -0
  163. package/dist/chrome/vendo-slot.d.ts +79 -0
  164. package/dist/chrome/vendo-slot.d.ts.map +1 -0
  165. package/dist/chrome/vendo-slot.js +153 -0
  166. package/dist/chrome/vendo-slot.js.map +1 -0
  167. package/dist/chrome/vendo-toasts.d.ts +40 -0
  168. package/dist/chrome/vendo-toasts.d.ts.map +1 -0
  169. package/dist/chrome/vendo-toasts.js +135 -0
  170. package/dist/chrome/vendo-toasts.js.map +1 -0
  171. package/dist/chrome/vendo-trigger.d.ts +24 -0
  172. package/dist/chrome/vendo-trigger.d.ts.map +1 -0
  173. package/dist/chrome/vendo-trigger.js +30 -0
  174. package/dist/chrome/vendo-trigger.js.map +1 -0
  175. package/dist/chrome/waiting-queue.d.ts +8 -0
  176. package/dist/chrome/waiting-queue.d.ts.map +1 -0
  177. package/dist/chrome/waiting-queue.js +21 -0
  178. package/dist/chrome/waiting-queue.js.map +1 -0
  179. package/dist/client-impl.d.ts +4 -0
  180. package/dist/client-impl.d.ts.map +1 -0
  181. package/dist/client-impl.js +160 -0
  182. package/dist/client-impl.js.map +1 -0
  183. package/dist/client.d.ts +136 -0
  184. package/dist/client.d.ts.map +1 -0
  185. package/dist/client.js +2 -0
  186. package/dist/client.js.map +1 -0
  187. package/dist/context.d.ts +97 -0
  188. package/dist/context.d.ts.map +1 -0
  189. package/dist/context.js +71 -0
  190. package/dist/context.js.map +1 -0
  191. package/dist/eject-templates/activities/index.tsx +113 -0
  192. package/dist/eject-templates/templates.json +29 -0
  193. package/dist/eject-templates/thread/attachments.tsx +69 -0
  194. package/dist/eject-templates/thread/composer.tsx +409 -0
  195. package/dist/eject-templates/thread/index.tsx +422 -0
  196. package/dist/eject-templates/thread/message-data.ts +151 -0
  197. package/dist/eject-templates/thread/message-list.tsx +123 -0
  198. package/dist/eject-templates/thread/message.tsx +149 -0
  199. package/dist/eject-templates/thread/parts.tsx +293 -0
  200. package/dist/eject-templates/thread/scrolling.ts +223 -0
  201. package/dist/embeds.d.ts +28 -0
  202. package/dist/embeds.d.ts.map +1 -0
  203. package/dist/embeds.js +2 -0
  204. package/dist/embeds.js.map +1 -0
  205. package/dist/hooks/index.d.ts +18 -0
  206. package/dist/hooks/index.d.ts.map +1 -0
  207. package/dist/hooks/index.js +19 -0
  208. package/dist/hooks/index.js.map +1 -0
  209. package/dist/hooks/scripted-transport.d.ts +44 -0
  210. package/dist/hooks/scripted-transport.d.ts.map +1 -0
  211. package/dist/hooks/scripted-transport.js +58 -0
  212. package/dist/hooks/scripted-transport.js.map +1 -0
  213. package/dist/hooks/use-activity.d.ts +17 -0
  214. package/dist/hooks/use-activity.d.ts.map +1 -0
  215. package/dist/hooks/use-activity.js +50 -0
  216. package/dist/hooks/use-activity.js.map +1 -0
  217. package/dist/hooks/use-app.d.ts +19 -0
  218. package/dist/hooks/use-app.d.ts.map +1 -0
  219. package/dist/hooks/use-app.js +66 -0
  220. package/dist/hooks/use-app.js.map +1 -0
  221. package/dist/hooks/use-approvals.d.ts +13 -0
  222. package/dist/hooks/use-approvals.d.ts.map +1 -0
  223. package/dist/hooks/use-approvals.js +14 -0
  224. package/dist/hooks/use-approvals.js.map +1 -0
  225. package/dist/hooks/use-apps.d.ts +17 -0
  226. package/dist/hooks/use-apps.d.ts.map +1 -0
  227. package/dist/hooks/use-apps.js +30 -0
  228. package/dist/hooks/use-apps.js.map +1 -0
  229. package/dist/hooks/use-automations.d.ts +25 -0
  230. package/dist/hooks/use-automations.d.ts.map +1 -0
  231. package/dist/hooks/use-automations.js +30 -0
  232. package/dist/hooks/use-automations.js.map +1 -0
  233. package/dist/hooks/use-connections.d.ts +12 -0
  234. package/dist/hooks/use-connections.d.ts.map +1 -0
  235. package/dist/hooks/use-connections.js +15 -0
  236. package/dist/hooks/use-connections.js.map +1 -0
  237. package/dist/hooks/use-connector-catalog.d.ts +8 -0
  238. package/dist/hooks/use-connector-catalog.d.ts.map +1 -0
  239. package/dist/hooks/use-connector-catalog.js +52 -0
  240. package/dist/hooks/use-connector-catalog.js.map +1 -0
  241. package/dist/hooks/use-grants.d.ts +13 -0
  242. package/dist/hooks/use-grants.d.ts.map +1 -0
  243. package/dist/hooks/use-grants.js +14 -0
  244. package/dist/hooks/use-grants.js.map +1 -0
  245. package/dist/hooks/use-mobile-takeover.d.ts +22 -0
  246. package/dist/hooks/use-mobile-takeover.d.ts.map +1 -0
  247. package/dist/hooks/use-mobile-takeover.js +66 -0
  248. package/dist/hooks/use-mobile-takeover.js.map +1 -0
  249. package/dist/hooks/use-resource.d.ts +21 -0
  250. package/dist/hooks/use-resource.d.ts.map +1 -0
  251. package/dist/hooks/use-resource.js +79 -0
  252. package/dist/hooks/use-resource.js.map +1 -0
  253. package/dist/hooks/use-slot-app.d.ts +19 -0
  254. package/dist/hooks/use-slot-app.d.ts.map +1 -0
  255. package/dist/hooks/use-slot-app.js +18 -0
  256. package/dist/hooks/use-slot-app.js.map +1 -0
  257. package/dist/hooks/use-threads.d.ts +16 -0
  258. package/dist/hooks/use-threads.d.ts.map +1 -0
  259. package/dist/hooks/use-threads.js +15 -0
  260. package/dist/hooks/use-threads.js.map +1 -0
  261. package/dist/hooks/use-vendo-overlay.d.ts +31 -0
  262. package/dist/hooks/use-vendo-overlay.d.ts.map +1 -0
  263. package/dist/hooks/use-vendo-overlay.js +23 -0
  264. package/dist/hooks/use-vendo-overlay.js.map +1 -0
  265. package/dist/hooks/use-vendo-status.d.ts +6 -0
  266. package/dist/hooks/use-vendo-status.d.ts.map +1 -0
  267. package/dist/hooks/use-vendo-status.js +28 -0
  268. package/dist/hooks/use-vendo-status.js.map +1 -0
  269. package/dist/hooks/use-vendo-thread.d.ts +39 -0
  270. package/dist/hooks/use-vendo-thread.d.ts.map +1 -0
  271. package/dist/hooks/use-vendo-thread.js +185 -0
  272. package/dist/hooks/use-vendo-thread.js.map +1 -0
  273. package/dist/index.d.ts +12 -0
  274. package/dist/index.d.ts.map +1 -0
  275. package/dist/index.js +12 -0
  276. package/dist/index.js.map +1 -0
  277. package/dist/kit/charts/bar.d.ts +16 -0
  278. package/dist/kit/charts/bar.d.ts.map +1 -0
  279. package/dist/kit/charts/bar.js +21 -0
  280. package/dist/kit/charts/bar.js.map +1 -0
  281. package/dist/kit/charts/donut.d.ts +16 -0
  282. package/dist/kit/charts/donut.d.ts.map +1 -0
  283. package/dist/kit/charts/donut.js +17 -0
  284. package/dist/kit/charts/donut.js.map +1 -0
  285. package/dist/kit/charts/line.d.ts +19 -0
  286. package/dist/kit/charts/line.d.ts.map +1 -0
  287. package/dist/kit/charts/line.js +21 -0
  288. package/dist/kit/charts/line.js.map +1 -0
  289. package/dist/kit/charts/progress.d.ts +12 -0
  290. package/dist/kit/charts/progress.d.ts.map +1 -0
  291. package/dist/kit/charts/progress.js +25 -0
  292. package/dist/kit/charts/progress.js.map +1 -0
  293. package/dist/kit/charts/sanitize.d.ts +24 -0
  294. package/dist/kit/charts/sanitize.d.ts.map +1 -0
  295. package/dist/kit/charts/sanitize.js +50 -0
  296. package/dist/kit/charts/sanitize.js.map +1 -0
  297. package/dist/kit/charts/sparkline.d.ts +11 -0
  298. package/dist/kit/charts/sparkline.d.ts.map +1 -0
  299. package/dist/kit/charts/sparkline.js +17 -0
  300. package/dist/kit/charts/sparkline.js.map +1 -0
  301. package/dist/kit/data/badge.d.ts +13 -0
  302. package/dist/kit/data/badge.d.ts.map +1 -0
  303. package/dist/kit/data/badge.js +12 -0
  304. package/dist/kit/data/badge.js.map +1 -0
  305. package/dist/kit/data/card-list.d.ts +23 -0
  306. package/dist/kit/data/card-list.d.ts.map +1 -0
  307. package/dist/kit/data/card-list.js +43 -0
  308. package/dist/kit/data/card-list.js.map +1 -0
  309. package/dist/kit/data/data-table.d.ts +32 -0
  310. package/dist/kit/data/data-table.d.ts.map +1 -0
  311. package/dist/kit/data/data-table.js +153 -0
  312. package/dist/kit/data/data-table.js.map +1 -0
  313. package/dist/kit/data/stat.d.ts +15 -0
  314. package/dist/kit/data/stat.d.ts.map +1 -0
  315. package/dist/kit/data/stat.js +28 -0
  316. package/dist/kit/data/stat.js.map +1 -0
  317. package/dist/kit/feedback/accordion.d.ts +15 -0
  318. package/dist/kit/feedback/accordion.d.ts.map +1 -0
  319. package/dist/kit/feedback/accordion.js +33 -0
  320. package/dist/kit/feedback/accordion.js.map +1 -0
  321. package/dist/kit/feedback/callout.d.ts +13 -0
  322. package/dist/kit/feedback/callout.d.ts.map +1 -0
  323. package/dist/kit/feedback/callout.js +24 -0
  324. package/dist/kit/feedback/callout.js.map +1 -0
  325. package/dist/kit/feedback/tabs.d.ts +14 -0
  326. package/dist/kit/feedback/tabs.d.ts.map +1 -0
  327. package/dist/kit/feedback/tabs.js +37 -0
  328. package/dist/kit/feedback/tabs.js.map +1 -0
  329. package/dist/kit/format.d.ts +60 -0
  330. package/dist/kit/format.d.ts.map +1 -0
  331. package/dist/kit/format.js +123 -0
  332. package/dist/kit/format.js.map +1 -0
  333. package/dist/kit/forms/button.d.ts +17 -0
  334. package/dist/kit/forms/button.d.ts.map +1 -0
  335. package/dist/kit/forms/button.js +33 -0
  336. package/dist/kit/forms/button.js.map +1 -0
  337. package/dist/kit/forms/checkbox.d.ts +9 -0
  338. package/dist/kit/forms/checkbox.d.ts.map +1 -0
  339. package/dist/kit/forms/checkbox.js +9 -0
  340. package/dist/kit/forms/checkbox.js.map +1 -0
  341. package/dist/kit/forms/date-picker.d.ts +13 -0
  342. package/dist/kit/forms/date-picker.d.ts.map +1 -0
  343. package/dist/kit/forms/date-picker.js +9 -0
  344. package/dist/kit/forms/date-picker.js.map +1 -0
  345. package/dist/kit/forms/disclaimer.d.ts +8 -0
  346. package/dist/kit/forms/disclaimer.d.ts.map +1 -0
  347. package/dist/kit/forms/disclaimer.js +20 -0
  348. package/dist/kit/forms/disclaimer.js.map +1 -0
  349. package/dist/kit/forms/field.d.ts +18 -0
  350. package/dist/kit/forms/field.d.ts.map +1 -0
  351. package/dist/kit/forms/field.js +19 -0
  352. package/dist/kit/forms/field.js.map +1 -0
  353. package/dist/kit/forms/form.d.ts +10 -0
  354. package/dist/kit/forms/form.d.ts.map +1 -0
  355. package/dist/kit/forms/form.js +9 -0
  356. package/dist/kit/forms/form.js.map +1 -0
  357. package/dist/kit/forms/input.d.ts +14 -0
  358. package/dist/kit/forms/input.d.ts.map +1 -0
  359. package/dist/kit/forms/input.js +9 -0
  360. package/dist/kit/forms/input.js.map +1 -0
  361. package/dist/kit/forms/select.d.ts +21 -0
  362. package/dist/kit/forms/select.d.ts.map +1 -0
  363. package/dist/kit/forms/select.js +35 -0
  364. package/dist/kit/forms/select.js.map +1 -0
  365. package/dist/kit/forms/textarea.d.ts +12 -0
  366. package/dist/kit/forms/textarea.d.ts.map +1 -0
  367. package/dist/kit/forms/textarea.js +9 -0
  368. package/dist/kit/forms/textarea.js.map +1 -0
  369. package/dist/kit/index.d.ts +42 -0
  370. package/dist/kit/index.d.ts.map +1 -0
  371. package/dist/kit/index.js +45 -0
  372. package/dist/kit/index.js.map +1 -0
  373. package/dist/kit/kit-prompt.d.ts +7 -0
  374. package/dist/kit/kit-prompt.d.ts.map +1 -0
  375. package/dist/kit/kit-prompt.js +7 -0
  376. package/dist/kit/kit-prompt.js.map +1 -0
  377. package/dist/kit/layout.d.ts +29 -0
  378. package/dist/kit/layout.d.ts.map +1 -0
  379. package/dist/kit/layout.js +64 -0
  380. package/dist/kit/layout.js.map +1 -0
  381. package/dist/kit/registry.d.ts +11 -0
  382. package/dist/kit/registry.d.ts.map +1 -0
  383. package/dist/kit/registry.js +34 -0
  384. package/dist/kit/registry.js.map +1 -0
  385. package/dist/kit/schema.d.ts +9 -0
  386. package/dist/kit/schema.d.ts.map +1 -0
  387. package/dist/kit/schema.js +9 -0
  388. package/dist/kit/schema.js.map +1 -0
  389. package/dist/kit/tokens.d.ts +33 -0
  390. package/dist/kit/tokens.d.ts.map +1 -0
  391. package/dist/kit/tokens.js +48 -0
  392. package/dist/kit/tokens.js.map +1 -0
  393. package/dist/kit/values.d.ts +55 -0
  394. package/dist/kit/values.d.ts.map +1 -0
  395. package/dist/kit/values.js +108 -0
  396. package/dist/kit/values.js.map +1 -0
  397. package/dist/theme.d.ts +25 -0
  398. package/dist/theme.d.ts.map +1 -0
  399. package/dist/theme.js +100 -0
  400. package/dist/theme.js.map +1 -0
  401. package/dist/tree/bindings.d.ts +4 -0
  402. package/dist/tree/bindings.d.ts.map +1 -0
  403. package/dist/tree/bindings.js +20 -0
  404. package/dist/tree/bindings.js.map +1 -0
  405. package/dist/tree/branded.d.ts +124 -0
  406. package/dist/tree/branded.d.ts.map +1 -0
  407. package/dist/tree/branded.js +319 -0
  408. package/dist/tree/branded.js.map +1 -0
  409. package/dist/tree/error-boundary.d.ts +22 -0
  410. package/dist/tree/error-boundary.d.ts.map +1 -0
  411. package/dist/tree/error-boundary.js +25 -0
  412. package/dist/tree/error-boundary.js.map +1 -0
  413. package/dist/tree/fluid-reveal.d.ts +22 -0
  414. package/dist/tree/fluid-reveal.d.ts.map +1 -0
  415. package/dist/tree/fluid-reveal.js +28 -0
  416. package/dist/tree/fluid-reveal.js.map +1 -0
  417. package/dist/tree/forming-skeleton.d.ts +14 -0
  418. package/dist/tree/forming-skeleton.d.ts.map +1 -0
  419. package/dist/tree/forming-skeleton.js +36 -0
  420. package/dist/tree/forming-skeleton.js.map +1 -0
  421. package/dist/tree/frames.d.ts +52 -0
  422. package/dist/tree/frames.d.ts.map +1 -0
  423. package/dist/tree/frames.js +143 -0
  424. package/dist/tree/frames.js.map +1 -0
  425. package/dist/tree/host-mount.d.ts +24 -0
  426. package/dist/tree/host-mount.d.ts.map +1 -0
  427. package/dist/tree/host-mount.js +0 -0
  428. package/dist/tree/host-mount.js.map +1 -0
  429. package/dist/tree/index.d.ts +9 -0
  430. package/dist/tree/index.d.ts.map +1 -0
  431. package/dist/tree/index.js +9 -0
  432. package/dist/tree/index.js.map +1 -0
  433. package/dist/tree/jail/JailedComponent.d.ts +41 -0
  434. package/dist/tree/jail/JailedComponent.d.ts.map +1 -0
  435. package/dist/tree/jail/JailedComponent.js +269 -0
  436. package/dist/tree/jail/JailedComponent.js.map +1 -0
  437. package/dist/tree/jail/runtime-bundle.gen.d.ts +3 -0
  438. package/dist/tree/jail/runtime-bundle.gen.d.ts.map +1 -0
  439. package/dist/tree/jail/runtime-bundle.gen.js +3 -0
  440. package/dist/tree/jail/runtime-bundle.gen.js.map +1 -0
  441. package/dist/tree/jail/runtime-entry.d.ts +18 -0
  442. package/dist/tree/jail/runtime-entry.d.ts.map +1 -0
  443. package/dist/tree/jail/runtime-entry.js +440 -0
  444. package/dist/tree/jail/runtime-entry.js.map +1 -0
  445. package/dist/tree/jail/viewport-css.d.ts +17 -0
  446. package/dist/tree/jail/viewport-css.d.ts.map +1 -0
  447. package/dist/tree/jail/viewport-css.js +32 -0
  448. package/dist/tree/jail/viewport-css.js.map +1 -0
  449. package/dist/tree/mcp-shim/entry.d.ts +2 -0
  450. package/dist/tree/mcp-shim/entry.d.ts.map +1 -0
  451. package/dist/tree/mcp-shim/entry.js +45 -0
  452. package/dist/tree/mcp-shim/entry.js.map +1 -0
  453. package/dist/tree/mcp-shim/http-open-card.d.ts +5 -0
  454. package/dist/tree/mcp-shim/http-open-card.d.ts.map +1 -0
  455. package/dist/tree/mcp-shim/http-open-card.js +61 -0
  456. package/dist/tree/mcp-shim/http-open-card.js.map +1 -0
  457. package/dist/tree/mcp-shim/shim-core.d.ts +58 -0
  458. package/dist/tree/mcp-shim/shim-core.d.ts.map +1 -0
  459. package/dist/tree/mcp-shim/shim-core.js +176 -0
  460. package/dist/tree/mcp-shim/shim-core.js.map +1 -0
  461. package/dist/tree/mcp-shim/theme.d.ts +8 -0
  462. package/dist/tree/mcp-shim/theme.d.ts.map +1 -0
  463. package/dist/tree/mcp-shim/theme.js +36 -0
  464. package/dist/tree/mcp-shim/theme.js.map +1 -0
  465. package/dist/tree/notice.d.ts +8 -0
  466. package/dist/tree/notice.d.ts.map +1 -0
  467. package/dist/tree/notice.js +30 -0
  468. package/dist/tree/notice.js.map +1 -0
  469. package/dist/tree/primitives.d.ts +30 -0
  470. package/dist/tree/primitives.d.ts.map +1 -0
  471. package/dist/tree/primitives.js +105 -0
  472. package/dist/tree/primitives.js.map +1 -0
  473. package/dist/tree/renderer-v2.d.ts +15 -0
  474. package/dist/tree/renderer-v2.d.ts.map +1 -0
  475. package/dist/tree/renderer-v2.js +71 -0
  476. package/dist/tree/renderer-v2.js.map +1 -0
  477. package/dist/tree/renderer.d.ts +77 -0
  478. package/dist/tree/renderer.d.ts.map +1 -0
  479. package/dist/tree/renderer.js +376 -0
  480. package/dist/tree/renderer.js.map +1 -0
  481. package/dist/voice/driver.d.ts +94 -0
  482. package/dist/voice/driver.d.ts.map +1 -0
  483. package/dist/voice/driver.js +2 -0
  484. package/dist/voice/driver.js.map +1 -0
  485. package/dist/voice/index.d.ts +7 -0
  486. package/dist/voice/index.d.ts.map +1 -0
  487. package/dist/voice/index.js +5 -0
  488. package/dist/voice/index.js.map +1 -0
  489. package/dist/voice/realtime-driver.d.ts +57 -0
  490. package/dist/voice/realtime-driver.d.ts.map +1 -0
  491. package/dist/voice/realtime-driver.js +592 -0
  492. package/dist/voice/realtime-driver.js.map +1 -0
  493. package/dist/voice/stage.d.ts +12 -0
  494. package/dist/voice/stage.d.ts.map +1 -0
  495. package/dist/voice/stage.js +259 -0
  496. package/dist/voice/stage.js.map +1 -0
  497. package/dist/voice/use-voice-approvals.d.ts +16 -0
  498. package/dist/voice/use-voice-approvals.d.ts.map +1 -0
  499. package/dist/voice/use-voice-approvals.js +77 -0
  500. package/dist/voice/use-voice-approvals.js.map +1 -0
  501. package/dist/voice/use-voice.d.ts +26 -0
  502. package/dist/voice/use-voice.d.ts.map +1 -0
  503. package/dist/voice/use-voice.js +201 -0
  504. package/dist/voice/use-voice.js.map +1 -0
  505. package/dist/voice/voice-act.d.ts +13 -0
  506. package/dist/voice/voice-act.d.ts.map +1 -0
  507. package/dist/voice/voice-act.js +301 -0
  508. package/dist/voice/voice-act.js.map +1 -0
  509. package/dist/voice/voice-blob.d.ts +17 -0
  510. package/dist/voice/voice-blob.d.ts.map +1 -0
  511. package/dist/voice/voice-blob.js +67 -0
  512. package/dist/voice/voice-blob.js.map +1 -0
  513. package/dist/voice/voice-consent.d.ts +17 -0
  514. package/dist/voice/voice-consent.d.ts.map +1 -0
  515. package/dist/voice/voice-consent.js +45 -0
  516. package/dist/voice/voice-consent.js.map +1 -0
  517. package/dist/voice/voice-drawer.d.ts +10 -0
  518. package/dist/voice/voice-drawer.d.ts.map +1 -0
  519. package/dist/voice/voice-drawer.js +22 -0
  520. package/dist/voice/voice-drawer.js.map +1 -0
  521. package/dist/wire-types.d.ts +238 -0
  522. package/dist/wire-types.d.ts.map +1 -0
  523. package/dist/wire-types.js +2 -0
  524. package/dist/wire-types.js.map +1 -0
  525. package/package.json +106 -0
@@ -0,0 +1,29 @@
1
+ import { type VendoCommand } from "./overlay-registry.js";
2
+ import { type PaletteHotkey } from "./palette-hotkey.js";
3
+ export type { VendoCommand } from "./overlay-registry.js";
4
+ /** 08-ui §4 — the ⌘K entry point, one-surface edition (ui-lane-entry pick P-C).
5
+ *
6
+ * The palette no longer renders a dialog of its own: ⌘K opens the SAME
7
+ * conversation overlay the launcher opens (toggling it closed on a second
8
+ * press), and the palette's commands render as the overlay's chip strip above
9
+ * the composer. Typed text that matches no command was never anything but a
10
+ * question — now it simply IS the message, so the "No matching commands" dead
11
+ * end no longer exists.
12
+ *
13
+ * What remains here is everything that made VendoPalette safe to drop into a
14
+ * host, unchanged in behavior:
15
+ * - the host-collision-safe singleton keybinding (ENG-222): one shared
16
+ * document listener no matter how many palettes mount, a configurable /
17
+ * disable-able `hotkey` chord, and no keystroke stolen from a focused host
18
+ * input;
19
+ * - the programmatic opener seam (ENG-223): `openVendoPalette()` still works
20
+ * and now opens the conversation surface;
21
+ * - command routing: a host `onCommand` receives every chip activation;
22
+ * without one, conversation commands self-route through the overlay
23
+ * registry and the rest hint in dev instead of dying silently.
24
+ */
25
+ export declare function VendoPalette({ onCommand, hotkey }: {
26
+ onCommand?(command: VendoCommand): void;
27
+ hotkey?: PaletteHotkey;
28
+ }): null;
29
+ //# sourceMappingURL=vendo-palette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendo-palette.d.ts","sourceRoot":"","sources":["../../src/chrome/vendo-palette.tsx"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAwF,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAI/I,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;IAAE,SAAS,CAAC,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,aAAa,CAAA;CAAE,QAoEtH"}
@@ -0,0 +1,95 @@
1
+ import { useEffect, useMemo } from "react";
2
+ import { useApps } from "../hooks/use-apps.js";
3
+ import { developmentMode } from "./dev-mode.js";
4
+ import { openVendoConversation, registerConversationCommands, } from "./overlay-registry.js";
5
+ import { isEditableTarget, registerPaletteHotkey, registerPaletteOpener, resolveHotkeyMatcher } from "./palette-hotkey.js";
6
+ /** 08-ui §4 — the ⌘K entry point, one-surface edition (ui-lane-entry pick P-C).
7
+ *
8
+ * The palette no longer renders a dialog of its own: ⌘K opens the SAME
9
+ * conversation overlay the launcher opens (toggling it closed on a second
10
+ * press), and the palette's commands render as the overlay's chip strip above
11
+ * the composer. Typed text that matches no command was never anything but a
12
+ * question — now it simply IS the message, so the "No matching commands" dead
13
+ * end no longer exists.
14
+ *
15
+ * What remains here is everything that made VendoPalette safe to drop into a
16
+ * host, unchanged in behavior:
17
+ * - the host-collision-safe singleton keybinding (ENG-222): one shared
18
+ * document listener no matter how many palettes mount, a configurable /
19
+ * disable-able `hotkey` chord, and no keystroke stolen from a focused host
20
+ * input;
21
+ * - the programmatic opener seam (ENG-223): `openVendoPalette()` still works
22
+ * and now opens the conversation surface;
23
+ * - command routing: a host `onCommand` receives every chip activation;
24
+ * without one, conversation commands self-route through the overlay
25
+ * registry and the rest hint in dev instead of dying silently.
26
+ */
27
+ export function VendoPalette({ onCommand, hotkey }) {
28
+ const { apps } = useApps();
29
+ const commands = useMemo(() => [
30
+ { id: "new-conversation", label: "New conversation", kind: "new-conversation" },
31
+ ...apps.map(app => ({ id: `open-${app.id}`, label: `Open ${app.name}`, kind: "open-app", appId: app.id })),
32
+ { id: "show-activity", label: "Show activity", kind: "show-activity" },
33
+ ], [apps]);
34
+ // Publish the command set for the overlay's chip strip. Routing preserves
35
+ // the old select() semantics exactly — host onCommand wins outright; the
36
+ // self-sufficient default opens a fresh conversation in the mounted overlay.
37
+ useEffect(() => registerConversationCommands({
38
+ commands,
39
+ select(command) {
40
+ if (onCommand) {
41
+ // The old palette dialog closed on select; mirror that for host-routed
42
+ // commands so navigation (show-activity etc.) never lands behind the
43
+ // open modal (cubic PR#391 finding).
44
+ openVendoConversation({ close: true });
45
+ onCommand(command);
46
+ return;
47
+ }
48
+ if (command.kind === "new-conversation") {
49
+ const opened = openVendoConversation({ newConversation: true });
50
+ if (!opened && developmentMode()) {
51
+ console.warn("[vendo] VendoPalette: \"New conversation\" opens the conversation surface — mount a VendoOverlay for it to land in (or supply onCommand).");
52
+ }
53
+ return;
54
+ }
55
+ if (developmentMode()) {
56
+ console.warn(`[vendo] VendoPalette: "${command.label}" needs an onCommand handler to route (kind "${command.kind}").`);
57
+ }
58
+ },
59
+ }), [commands, onCommand]);
60
+ // ENG-223 — the programmatic opener seam. Open-only (no toggle): a CTA that
61
+ // finds the surface already open should leave it open, not dismiss it.
62
+ useEffect(() => registerPaletteOpener(() => {
63
+ const opened = openVendoConversation();
64
+ if (!opened && developmentMode()) {
65
+ console.warn("[vendo] VendoPalette: nothing to open — mount a VendoOverlay for the conversation surface to land in.");
66
+ }
67
+ }), []);
68
+ // The singleton keybinding (ENG-222). ⌘K TOGGLES the overlay — the
69
+ // one-surface replacement for the old dialog toggle. The editable-target
70
+ // guard is unconditional now (the palette no longer tracks an open state);
71
+ // closing from inside the overlay's composer stays on Escape.
72
+ const matcher = useMemo(() => resolveHotkeyMatcher(hotkey), [hotkey]);
73
+ useEffect(() => {
74
+ if (hotkey === false)
75
+ return;
76
+ const handler = (event) => {
77
+ if (!matcher(event))
78
+ return;
79
+ // Never steal a keystroke a HOST input owns — but the overlay's own
80
+ // composer is ours: ⌘K from inside the open surface toggles it closed
81
+ // (the old dialog's while-open behavior, one-surface edition).
82
+ const insideOverlay = event.target instanceof HTMLElement && event.target.closest("#vendo-overlay-dialog") !== null;
83
+ if (isEditableTarget(event.target) && !insideOverlay)
84
+ return;
85
+ event.preventDefault();
86
+ const opened = openVendoConversation({ toggle: true });
87
+ if (!opened && developmentMode()) {
88
+ console.warn("[vendo] VendoPalette: ⌘K opens the conversation surface — mount a VendoOverlay for it to land in.");
89
+ }
90
+ };
91
+ return registerPaletteHotkey(handler);
92
+ }, [matcher, hotkey]);
93
+ return null;
94
+ }
95
+ //# sourceMappingURL=vendo-palette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendo-palette.js","sourceRoot":"","sources":["../../src/chrome/vendo-palette.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import type { Json, ToolOutcome, UIPayload } from "@vendoai/core";
2
+ import { type ReactNode } from "react";
3
+ /** A generated view pinned into a slot (08-ui §4 — "or a pinned component").
4
+ * Unlike an app (a whole document), a pin is a single `vendo-genui/v2` tree the
5
+ * user authored and pinned in place; it mounts through the same tree renderer +
6
+ * error boundary, falling back to the host's original markup if it throws. */
7
+ export interface VendoSlotPin {
8
+ /** The pinned generated view (a `vendo-genui/v2` tree payload). */
9
+ payload: UIPayload;
10
+ /** Live data overriding the tree's embedded data model (08-ui §5). */
11
+ data?: Record<string, Json>;
12
+ /** Action dispatch for the pinned component; defaults to the tree renderer's
13
+ * fail-soft no-op when a pin carries no live handler. */
14
+ onAction?(req: {
15
+ nodeId: string;
16
+ action: string;
17
+ payload?: Json;
18
+ }): Promise<ToolOutcome>;
19
+ }
20
+ /** 08-ui §4; 06-apps §8 — inline mount that never sacrifices host fallback content.
21
+ *
22
+ * Three states:
23
+ * - empty: no `appId`, no `pin`, no `children` → the ghost with a REAL CTA button
24
+ * that opens the authoring surface (`onAuthor`, else the mounted ⌘K palette);
25
+ * - app: `appId` → the whole app document mounts (via the single-app transport);
26
+ * - pinned component: `pin` → the authored `vendo-genui/v2` view mounts in place.
27
+ *
28
+ * In both filled states the swap morphs through the ENG-205 render slot, using
29
+ * the host's own markup as the exit frame, and the PinMount error boundary keeps
30
+ * the original `children` as the visible recovery path (06-apps §8). Without any
31
+ * of the three, the children render UNTOUCHED (no wrapper — hosts may inline
32
+ * slots anywhere). */
33
+ export declare function VendoSlot({ id, appId: appIdProp, pin, onAuthor, remix, remixPrompt, discover, emptyState, children }: {
34
+ id: string;
35
+ appId?: string;
36
+ pin?: VendoSlotPin;
37
+ /** Invoked when the empty-state CTA is activated — the seam to open a thread
38
+ * or palette to author the view. Defaults to opening a mounted VendoPalette. */
39
+ onAuthor?(slotId: string): void;
40
+ /** Pass `false` to stand pin self-discovery down even with no `appId`/`pin`
41
+ * prop — for hosts that resolve the pin themselves (e.g. via useSlotApp
42
+ * for a layout decision) and must not start a second poll. */
43
+ discover?: boolean;
44
+ /** Remix folds into Slot as a flag (ui-usage-dx §2): show the hover Remix
45
+ * affordance on the slot's content. Gesture-owned forking (2026-07-21):
46
+ * activating it on an EMPTY slot forks the captured component
47
+ * DETERMINISTICALLY (the engine copies the trusted source and records the
48
+ * pin — no model call, no model fork decision) and the fork mounts in
49
+ * place; on a slot already holding an app it opens the overlay composer
50
+ * prefilled so the instruction rides an ordinary edit. The slot id should
51
+ * match a registered (remixable) host component so sync has captured its
52
+ * source — init/doctor verify the flag against catalog registrations. */
53
+ remix?: boolean;
54
+ /** Override for the composer prefill when remixing a slot that already
55
+ * holds an app; defaults to a prompt naming the slot's component. (The
56
+ * empty-slot gesture itself never sends text to the model.) */
57
+ remixPrompt?: string;
58
+ /** Empty-state invitation config (ui-lane-entry pick S-A×S-D). Every string
59
+ * is host-customizable with white-label defaults; suggestions are 3
60
+ * host-aware prompts (generic fallbacks otherwise) whose tap PREFILLS the
61
+ * conversation composer — never sends. */
62
+ emptyState?: {
63
+ /** Default "This space builds itself". */
64
+ title?: string;
65
+ /** Default "describe a view — it renders here, live on your data". */
66
+ subtitle?: string;
67
+ /** Up to 3 prompt chips. Default: generic view-authoring prompts. */
68
+ suggestions?: string[];
69
+ /** Primary button label (layout "button"). Default "Design a view". */
70
+ ctaLabel?: string;
71
+ /** "button" (chips + primary CTA, default) or "chips-first" (chips are
72
+ * the actions; a quiet "or describe your own…" link opens the composer). */
73
+ layout?: "button" | "chips-first";
74
+ /** Optional mark above the title. Default "none" (Yousef's pick). */
75
+ mark?: "none" | "sparkle" | "tile";
76
+ };
77
+ children?: ReactNode;
78
+ }): import("react").JSX.Element;
79
+ //# sourceMappingURL=vendo-slot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendo-slot.d.ts","sourceRoot":"","sources":["../../src/chrome/vendo-slot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAwDrE;;;+EAG+E;AAC/E,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,OAAO,EAAE,SAAS,CAAC;IACnB,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B;8DAC0D;IAC1D,QAAQ,CAAC,CAAC,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC1F;AAED;;;;;;;;;;;;uBAYuB;AACvB,wBAAgB,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAa,EAAE,WAAW,EAAE,QAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE;IACpI,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB;qFACiF;IACjF,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;mEAE+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;8EAQ0E;IAC1E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;oEAEgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;+CAG2C;IAC3C,UAAU,CAAC,EAAE;QACX,0CAA0C;QAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,sEAAsE;QACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,qEAAqE;QACrE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,uEAAuE;QACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB;qFAC6E;QAC7E,MAAM,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;QAClC,qEAAqE;QACrE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;KACpC,CAAC;IACF,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BA4KA"}
@@ -0,0 +1,153 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useState } from "react";
3
+ import { useVendoContext } from "../context.js";
4
+ import { useApp } from "../hooks/use-app.js";
5
+ import { useSlotApp } from "../hooks/use-slot-app.js";
6
+ import { FluidReveal } from "../tree/fluid-reveal.js";
7
+ import { AppFrame, PinMount } from "../tree/frames.js";
8
+ import { ChromeRoot } from "./chrome-root.js";
9
+ import { developmentMode } from "./dev-mode.js";
10
+ import { defaultSlotSuggestions } from "./discoverability.js";
11
+ import { openVendoConversation } from "./overlay-registry.js";
12
+ import { openVendoPalette } from "./palette-hotkey.js";
13
+ /** The faint skeleton behind the ghost/empty states — decorative only. */
14
+ function GhostSkeleton() {
15
+ return (_jsxs("span", { className: "fl-slot-skel", "aria-hidden": "true", children: [_jsx("span", { className: "fl-skel-line", style: { width: "54%" } }), _jsx("span", { className: "fl-skel-line", style: { width: "78%" } }), _jsx("span", { className: "fl-skel-line", style: { width: "42%" } }), _jsxs("span", { className: "fl-skel-bars", children: [_jsx("span", { style: { height: "42%" } }), _jsx("span", { style: { height: "68%" } }), _jsx("span", { style: { height: "52%" } }), _jsx("span", { style: { height: "84%" } }), _jsx("span", { style: { height: "62%" } })] })] }));
16
+ }
17
+ function SlotGhost({ label, detail, loading = false }) {
18
+ return (_jsxs("div", { className: "fl-slot-ghost", role: loading ? "status" : undefined, "aria-live": loading ? "polite" : undefined, children: [_jsx(GhostSkeleton, {}), _jsxs("span", { className: "fl-slot-cta", children: [_jsx("span", { className: "fl-slot-cta-label", children: label }), detail ? _jsx("small", { children: detail }) : null] })] }));
19
+ }
20
+ function MountedApp({ appId }) {
21
+ const { client, components } = useVendoContext();
22
+ const { surface, refresh } = useApp(appId);
23
+ // Wave 7 H2 — the served-surface keepalive: user activity pings the machine
24
+ // (host-proxied) so an embedded served app doesn't idle out under the user;
25
+ // a "woke" ping re-opens for the fresh machine URL.
26
+ const keepalive = useMemo(() => ({ ping: () => client.apps.pingMachine(appId), reopen: refresh }), [appId, client, refresh]);
27
+ if (!surface)
28
+ return _jsx(SlotGhost, { label: "Loading app\u2026", loading: true });
29
+ return _jsx(AppFrame, { surface: surface, components: components, keepalive: keepalive, onAction: ({ action, payload }) => client.apps.call(appId, action, payload ?? {}) }, appId);
30
+ }
31
+ /** 08-ui §4; 06-apps §8 — inline mount that never sacrifices host fallback content.
32
+ *
33
+ * Three states:
34
+ * - empty: no `appId`, no `pin`, no `children` → the ghost with a REAL CTA button
35
+ * that opens the authoring surface (`onAuthor`, else the mounted ⌘K palette);
36
+ * - app: `appId` → the whole app document mounts (via the single-app transport);
37
+ * - pinned component: `pin` → the authored `vendo-genui/v2` view mounts in place.
38
+ *
39
+ * In both filled states the swap morphs through the ENG-205 render slot, using
40
+ * the host's own markup as the exit frame, and the PinMount error boundary keeps
41
+ * the original `children` as the visible recovery path (06-apps §8). Without any
42
+ * of the three, the children render UNTOUCHED (no wrapper — hosts may inline
43
+ * slots anywhere). */
44
+ export function VendoSlot({ id, appId: appIdProp, pin, onAuthor, remix = false, remixPrompt, discover = true, emptyState, children }) {
45
+ const { client, components } = useVendoContext();
46
+ // Self-discovery (ui-usage-dx §2): with no explicit `appId`/`pin`, the slot
47
+ // resolves its own pinned app — hosts never write the polling dance.
48
+ const discovery = useSlotApp(id, { enabled: discover && appIdProp === undefined && pin === undefined });
49
+ const appId = appIdProp ?? (pin === undefined ? discovery.appId : undefined);
50
+ const [remixBusy, setRemixBusy] = useState(false);
51
+ // Latch: a fork that RESOLVED but has not surfaced as `appId` yet. With
52
+ // discover={false} the parent manages appId on its own poll cadence, so the
53
+ // slot still looks empty after the fast wire fork returns — and the wire
54
+ // fork is not idempotent, so a second tap would mint a duplicate app.
55
+ const [forkPending, setForkPending] = useState(false);
56
+ useEffect(() => {
57
+ if (appId !== undefined)
58
+ setForkPending(false);
59
+ }, [appId]);
60
+ const remixLatched = remixBusy || (forkPending && appId === undefined);
61
+ // Dev rail: the remix gesture forks the component captured under this slot's
62
+ // registered name — an unregistered name means there is nothing to fork.
63
+ // (The client can't see catalog `remixable` flags; init verifies those.)
64
+ useEffect(() => {
65
+ if (!remix || !developmentMode() || components[id] !== undefined)
66
+ return;
67
+ console.warn(`[vendo] VendoSlot "${id}" sets remix, but no host component is registered under that name — register it (marked remixable) so sync captures the source the Remix gesture forks.`);
68
+ }, [remix, id, components]);
69
+ const author = () => {
70
+ if (onAuthor) {
71
+ onAuthor(id);
72
+ return;
73
+ }
74
+ // One-surface model (pick P-C): authoring opens the conversation overlay
75
+ // with the composer focused. The palette-opener fallback keeps hosts that
76
+ // mounted only a VendoPalette (custom onCommand routing) working.
77
+ if (!openVendoConversation())
78
+ openVendoPalette();
79
+ };
80
+ // Suggestion chips prefill the composer — never send (safe on any prompt).
81
+ // No palette-opener fallback here: it cannot carry the prompt, so it would
82
+ // open an empty surface and silently drop the chip's text (cubic PR#391
83
+ // finding). Without an overlay the chip is a dev-warned no-op instead.
84
+ const suggest = (prompt) => {
85
+ const opened = openVendoConversation({ prompt, send: false });
86
+ if (!opened && developmentMode()) {
87
+ console.warn(`[vendo] VendoSlot "${id}": suggestions open the conversation surface — mount a VendoOverlay for them to land in.`);
88
+ }
89
+ };
90
+ // Gesture-owned forking (2026-07-21): the Remix gesture on an EMPTY slot
91
+ // executes the fork DETERMINISTICALLY through the wire (the engine copies
92
+ // the captured source and records the pin — no model call, and the model
93
+ // never decides to fork); the fork then mounts via slot discovery. On a
94
+ // slot already holding an app the fork exists, so the gesture opens the
95
+ // composer prefilled — the instruction rides an ordinary edit.
96
+ const startRemix = () => {
97
+ // A slot is FILLED when it holds an app OR a host-supplied pin (the pin
98
+ // branch mounts through AppFrame the same way) — either way the fork
99
+ // already exists, so the gesture opens the composer, never the wire fork.
100
+ if (appId !== undefined || pin !== undefined) {
101
+ const prompt = remixPrompt ?? `Update my ${id} remix: `;
102
+ const opened = openVendoConversation({ prompt, send: false });
103
+ if (!opened && developmentMode()) {
104
+ console.warn(`[vendo] VendoSlot "${id}": remix opens the conversation surface — mount a VendoOverlay for it to land in.`);
105
+ }
106
+ return;
107
+ }
108
+ if (remixLatched)
109
+ return;
110
+ setRemixBusy(true);
111
+ client.apps.forkPin({ slot: id })
112
+ .then(() => {
113
+ setForkPending(true);
114
+ return discovery.refresh();
115
+ })
116
+ .catch((error) => {
117
+ if (developmentMode()) {
118
+ console.warn(`[vendo] VendoSlot "${id}": the remix fork failed — ${error instanceof Error ? error.message : String(error)}`);
119
+ }
120
+ })
121
+ .finally(() => setRemixBusy(false));
122
+ };
123
+ const remixButton = remix ? (_jsxs("button", { type: "button", className: "fl-slot-remix", "aria-label": `Remix ${id} with Vendo`, "aria-busy": remixLatched || undefined, disabled: remixLatched, onClick: startRemix, children: [_jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: _jsx("path", { d: "m12 3 1.5 4.5L18 9l-4.5 1.5L12 15l-1.5-4.5L6 9l4.5-1.5L12 3Z" }) }), remixLatched ? "Remixing…" : "Remix"] })) : null;
124
+ if (!appId && !pin) {
125
+ if (children !== undefined) {
126
+ if (remixButton === null)
127
+ return _jsx(_Fragment, { children: children });
128
+ // The affordance needs a positioned boundary over the host's own markup;
129
+ // the inline wrapper stays layout-neutral (the ChromeRoot child is an
130
+ // empty block carrying only the absolutely-positioned button).
131
+ return (_jsxs("div", { "data-vendo-slot": id, style: { position: "relative", height: "100%" }, children: [_jsx(ChromeRoot, { automaticPolicyNotice: false, children: remixButton }), children] }));
132
+ }
133
+ // The invitation (pick S-A×S-D): accent-washed surface, real copy, up to
134
+ // three concrete suggestion chips, and (layout "button") a primary CTA.
135
+ // The skeleton stays behind at low opacity so it still reads as "a view
136
+ // goes here". No icon by default.
137
+ const invite = {
138
+ title: emptyState?.title ?? "This space builds itself",
139
+ subtitle: emptyState?.subtitle ?? "describe a view — it renders here, live on your data",
140
+ suggestions: (emptyState?.suggestions ?? defaultSlotSuggestions).slice(0, 3),
141
+ ctaLabel: emptyState?.ctaLabel ?? "Design a view",
142
+ layout: emptyState?.layout ?? "button",
143
+ mark: emptyState?.mark ?? "none",
144
+ };
145
+ return (_jsx(ChromeRoot, { children: _jsx("div", { className: "fl-slot", "data-vendo-slot": id, children: _jsxs("div", { className: "fl-slot-ghost fl-slot-invite", children: [_jsx(GhostSkeleton, {}), _jsxs("div", { className: "fl-slot-cta", role: "group", "aria-label": invite.title, children: [invite.mark !== "none" ? (_jsx("span", { className: `fl-invite-mark${invite.mark === "tile" ? " fl-invite-mark-tile" : ""}`, "aria-hidden": "true", children: _jsxs("svg", { width: "19", height: "19", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "m12 3 1.4 4.1L17.5 8.5l-4.1 1.4L12 14l-1.4-4.1-4.1-1.4 4.1-1.4L12 3Z" }), _jsx("path", { d: "m18 14 .8 2.2L21 17l-2.2.8L18 20l-.8-2.2L15 17l2.2-.8L18 14Z" })] }) })) : null, _jsx("span", { className: "fl-invite-title", children: invite.title }), _jsx("small", { className: "fl-invite-sub", children: invite.subtitle }), invite.suggestions.length > 0 ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "fl-invite-try", children: "Try one" }), _jsx("div", { className: "fl-invite-chips", children: invite.suggestions.map((prompt, i) => (_jsx("button", { type: "button", className: "fl-invite-chip", onClick: () => suggest(prompt), children: prompt }, `${i}-${prompt}`))) })] })) : null, invite.layout === "button" ? (_jsx("button", { type: "button", className: "fl-invite-btn", onClick: author, children: invite.ctaLabel })) : (_jsx("button", { type: "button", className: "fl-invite-own", onClick: author, children: "or describe your own\u2026" }))] })] }) }) }));
146
+ }
147
+ const Fallback = () => _jsx(_Fragment, { children: children });
148
+ const mounted = appId
149
+ ? _jsx(MountedApp, { appId: appId })
150
+ : _jsx(AppFrame, { surface: { kind: "tree", payload: pin.payload }, components: components, data: pin.data, onAction: pin.onAction });
151
+ return (_jsx(ChromeRoot, { children: _jsxs("div", { className: "fl-slot", "data-vendo-slot": id, children: [remixButton, _jsx("div", { className: "fl-slot-filled", children: _jsx(FluidReveal, { stateKey: appId ? `app:${appId}` : `pin:${id}`, initialExit: children, children: _jsx(PinMount, { slot: id, fallback: Fallback, children: mounted }) }) })] }) }));
152
+ }
153
+ //# sourceMappingURL=vendo-slot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendo-slot.js","sourceRoot":"","sources":["../../src/chrome/vendo-slot.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /** ENG-225 — VendoToasts: the delivery surface for moments that land while the
2
+ user is elsewhere on the page (an automation finishing, an approval parking).
3
+ One fixed stack (.fl-toasts), portaled to <body> so no host stacking context
4
+ can trap it, carrying its own theme boundary like MorphToast.
5
+
6
+ Two feeds compose it:
7
+ - `vendoToast(...)` — the imperative host API (module singleton, works from
8
+ any code path; automations delivery wires through this).
9
+ - `approvals` — opt-in polling of pending approvals: a NEWLY parked approval
10
+ raises an approval-required toast, decidable in place. */
11
+ import { type ReactNode } from "react";
12
+ export interface VendoToastAction {
13
+ label: string;
14
+ onAction(): void;
15
+ /** Primary renders as the filled approve-style button. */
16
+ primary?: boolean;
17
+ }
18
+ export interface VendoToastInput {
19
+ text: string;
20
+ kind?: "info" | "approval-required";
21
+ state?: "info" | "error";
22
+ hint?: string;
23
+ actions?: VendoToastAction[];
24
+ /** Auto-dismiss after this many ms; 0 keeps the toast until dismissed.
25
+ Defaults to 6000, or sticky for approval-required. */
26
+ durationMs?: number;
27
+ }
28
+ /** Withdraw every queued toast (host page teardown, tests). */
29
+ export declare function dismissAllVendoToasts(): void;
30
+ /** Raise a toast. Returns a dismiss handle. */
31
+ export declare function vendoToast(input: VendoToastInput): () => void;
32
+ export interface VendoToastsProps {
33
+ placement?: "bottom-right" | "bottom-left" | "top-right";
34
+ /** Also surface newly parked approvals as toasts (polls /approvals/pending). */
35
+ approvals?: boolean;
36
+ pollMs?: number;
37
+ }
38
+ /** 08-ui §4 chrome — mount once per page. */
39
+ export declare function VendoToasts({ placement, approvals, pollMs }?: VendoToastsProps): ReactNode;
40
+ //# sourceMappingURL=vendo-toasts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendo-toasts.d.ts","sourceRoot":"","sources":["../../src/chrome/vendo-toasts.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;+DAS+D;AAC/D,OAAO,EAA2C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAQhF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,IAAI,IAAI,CAAC;IACjB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B;6DACyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA2BD,+DAA+D;AAC/D,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,+CAA+C;AAC/C,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,IAAI,CAO7D;AAyED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,WAAW,CAAC;IACzD,gFAAgF;IAChF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,6CAA6C;AAC7C,wBAAgB,WAAW,CAAC,EAAE,SAA0B,EAAE,SAAiB,EAAE,MAAc,EAAE,GAAE,gBAAqB,GAAG,SAAS,CA8D/H"}
@@ -0,0 +1,135 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /** ENG-225 — VendoToasts: the delivery surface for moments that land while the
3
+ user is elsewhere on the page (an automation finishing, an approval parking).
4
+ One fixed stack (.fl-toasts), portaled to <body> so no host stacking context
5
+ can trap it, carrying its own theme boundary like MorphToast.
6
+
7
+ Two feeds compose it:
8
+ - `vendoToast(...)` — the imperative host API (module singleton, works from
9
+ any code path; automations delivery wires through this).
10
+ - `approvals` — opt-in polling of pending approvals: a NEWLY parked approval
11
+ raises an approval-required toast, decidable in place. */
12
+ import { useEffect, useRef, useSyncExternalStore } from "react";
13
+ import { createPortal } from "react-dom";
14
+ import { useVendoContext } from "../context.js";
15
+ import { useApprovals } from "../hooks/use-approvals.js";
16
+ import { themeCssVariables } from "../theme.js";
17
+ import { ensureChromeStyles } from "./chrome-root.js";
18
+ import { toolTitle } from "./humanize.js";
19
+ // Module singleton so `vendoToast` works from any code path, not only under a
20
+ // provider. Every mounted <VendoToasts> renders the same queue.
21
+ let nextToastId = 1;
22
+ let queue = [];
23
+ const listeners = new Set();
24
+ const timers = new Map();
25
+ function notify() {
26
+ for (const listener of listeners)
27
+ listener();
28
+ }
29
+ function removeToast(id) {
30
+ const timer = timers.get(id);
31
+ if (timer !== undefined)
32
+ clearTimeout(timer);
33
+ timers.delete(id);
34
+ if (queue.some(toast => toast.id === id)) {
35
+ queue = queue.filter(toast => toast.id !== id);
36
+ notify();
37
+ }
38
+ }
39
+ /** Withdraw every queued toast (host page teardown, tests). */
40
+ export function dismissAllVendoToasts() {
41
+ for (const toast of [...queue])
42
+ removeToast(toast.id);
43
+ }
44
+ /** Raise a toast. Returns a dismiss handle. */
45
+ export function vendoToast(input) {
46
+ const id = nextToastId++;
47
+ queue = [...queue, { ...input, id }];
48
+ const duration = input.durationMs ?? (input.kind === "approval-required" ? 0 : 6_000);
49
+ if (duration > 0)
50
+ timers.set(id, setTimeout(() => removeToast(id), duration));
51
+ notify();
52
+ return () => removeToast(id);
53
+ }
54
+ function subscribe(listener) {
55
+ listeners.add(listener);
56
+ return () => listeners.delete(listener);
57
+ }
58
+ const EMPTY = [];
59
+ function useToastQueue() {
60
+ return useSyncExternalStore(subscribe, () => queue, () => EMPTY);
61
+ }
62
+ /** Opt-in approval feed: raises a toast for every approval that parks AFTER
63
+ mount (the pre-existing backlog belongs to the WaitingQueue, not to a toast
64
+ storm on page load), and withdraws it once decided elsewhere. */
65
+ function ApprovalToasts({ pollMs }) {
66
+ const { tools } = useVendoContext();
67
+ const { pending, isLoading, decide } = useApprovals({ pollMs });
68
+ // null until the first fetch settles — that first batch is baseline, not news.
69
+ const seenRef = useRef(null);
70
+ const dismissersRef = useRef(new Map());
71
+ useEffect(() => {
72
+ const dismissers = dismissersRef.current;
73
+ if (seenRef.current === null) {
74
+ // The hook's initial [] (fetch still in flight) is not the baseline —
75
+ // waiting for it would toast the whole pre-existing backlog on load.
76
+ if (isLoading)
77
+ return;
78
+ seenRef.current = new Set(pending.map(approval => approval.id));
79
+ return;
80
+ }
81
+ const seen = seenRef.current;
82
+ for (const approval of pending) {
83
+ if (seen.has(approval.id) || dismissers.has(approval.id))
84
+ continue;
85
+ seen.add(approval.id);
86
+ const dismiss = vendoToast({
87
+ kind: "approval-required",
88
+ text: `Waiting on you: ${toolTitle(approval.call.tool, tools[approval.call.tool])}`,
89
+ hint: "recorded in Activity",
90
+ actions: [{
91
+ label: "Approve",
92
+ primary: true,
93
+ onAction: () => {
94
+ void decide(approval.id, { approve: true }).then(() => {
95
+ dismissers.get(approval.id)?.();
96
+ dismissers.delete(approval.id);
97
+ }).catch(() => {
98
+ // The decide failed — the approval is still parked server-side.
99
+ // Keep the toast so Approve stays retryable, and un-see the id
100
+ // so a later poll can re-raise it once this card is gone.
101
+ seen.delete(approval.id);
102
+ });
103
+ },
104
+ }],
105
+ });
106
+ dismissers.set(approval.id, dismiss);
107
+ }
108
+ // Decided (or expired) elsewhere: withdraw the stale toast.
109
+ const pendingIds = new Set(pending.map(approval => approval.id));
110
+ for (const [id, dismiss] of dismissers) {
111
+ if (!pendingIds.has(id)) {
112
+ dismiss();
113
+ dismissers.delete(id);
114
+ }
115
+ }
116
+ }, [pending, isLoading, decide, tools]);
117
+ useEffect(() => () => {
118
+ for (const dismiss of dismissersRef.current.values())
119
+ dismiss();
120
+ dismissersRef.current.clear();
121
+ }, []);
122
+ return null;
123
+ }
124
+ /** 08-ui §4 chrome — mount once per page. */
125
+ export function VendoToasts({ placement = "bottom-right", approvals = false, pollMs = 5_000 } = {}) {
126
+ const { theme } = useVendoContext();
127
+ const toasts = useToastQueue();
128
+ // The stack portals out of any ChromeRoot subtree, so it owns its own style
129
+ // injection — a page that mounts ONLY VendoToasts still renders styled.
130
+ useEffect(ensureChromeStyles, []);
131
+ if (typeof document === "undefined")
132
+ return null;
133
+ return (_jsxs(_Fragment, { children: [approvals ? _jsx(ApprovalToasts, { pollMs: pollMs }) : null, toasts.length > 0 ? createPortal(_jsx("div", { className: "vendo-root", "data-vendo-motion": theme.motion, "data-vendo-density": theme.density, style: themeCssVariables(theme), children: _jsx("div", { className: "fl-toasts", "data-placement": placement, role: "region", "aria-label": "Notifications", children: toasts.map(toast => (_jsxs("div", { className: "fl-toasts-card", "data-kind": toast.kind ?? "info", "data-state": toast.state ?? "info", role: "status", children: [_jsx("span", { className: "fl-toasts-icon", "aria-hidden": "true", children: toast.kind === "approval-required" ? (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("path", { d: "M12 6v6l4 2" })] })) : (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("path", { d: "M12 16v-4M12 8h.01" })] })) }), _jsxs("div", { className: "fl-toasts-body", children: [_jsx("div", { className: "fl-toasts-text", children: toast.text }), _jsxs("div", { className: "fl-toasts-actions", children: [(toast.actions ?? []).map(action => (_jsx("button", { type: "button", className: action.primary === true ? "fl-toasts-approve" : "fl-toasts-view", onClick: action.onAction, children: action.label }, action.label))), toast.hint !== undefined ? _jsx("span", { className: "fl-toasts-hint", children: toast.hint }) : null, _jsx("button", { type: "button", className: "fl-toasts-dismiss", "aria-label": "Dismiss notification", onClick: () => removeToast(toast.id), children: "\u00D7" })] })] })] }, toast.id))) }) }), document.body) : null] }));
134
+ }
135
+ //# sourceMappingURL=vendo-toasts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendo-toasts.js","sourceRoot":"","sources":["../../src/chrome/vendo-toasts.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ReactNode } from "react";
2
+ export interface VendoTriggerProps {
3
+ /** The prompt preloaded into the conversation composer — prefilled, never
4
+ * auto-sent, so a trigger is safe even on destructive prompts. */
5
+ prompt: string;
6
+ /** Optional context appended to the prompt (blank-line separated) — the
7
+ * record or state on screen, so the agent starts oriented. */
8
+ context?: string;
9
+ /** Button label. Default "Ask Vendo". */
10
+ children?: ReactNode;
11
+ }
12
+ /**
13
+ * The shelf's "do it with AI" button (ui-usage-dx §2): every host affordance
14
+ * that hands a task to the agent is this piece. Activation opens the most
15
+ * recently mounted conversation surface (the VendoOverlay) with the prompt
16
+ * seeded into the composer.
17
+ *
18
+ * Hosts that want their own element as the trigger skip this component and
19
+ * call `openVendoConversation({ prompt })` from it directly — the same
20
+ * programmatic seam this button uses (the repo's idiom; there is deliberately
21
+ * no render-prop API on chrome, ui-usage-dx §4).
22
+ */
23
+ export declare function VendoTrigger({ prompt, context, children }: VendoTriggerProps): import("react").JSX.Element;
24
+ //# sourceMappingURL=vendo-trigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendo-trigger.d.ts","sourceRoot":"","sources":["../../src/chrome/vendo-trigger.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,WAAW,iBAAiB;IAChC;uEACmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf;mEAC+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,iBAAiB,+BA2B5E"}