@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,223 @@
1
+ /**
2
+ * Ejected from @vendoai/ui v0.4.0 — yours to edit.
3
+ * Presentation only: data and wire logic still flow through @vendoai/ui
4
+ * imports, so protocol updates keep working while these pixels are yours.
5
+ */
6
+ import type { UIMessage } from "ai";
7
+ import { useEffect, useLayoutEffect, useRef, useState } from "react";
8
+
9
+ /** ENG-218 — windowing for long threads. Rendering a reopened 200-turn thread
10
+ mounts every turn's DOM (and runs every entrance animation) at once. Instead
11
+ we render only a trailing window of the most recent messages and reveal older
12
+ ones in chunks when the reader scrolls to the top — the DOM stays bounded, so
13
+ scroll and paint stay smooth no matter how long the transcript is.
14
+
15
+ The trailing window is what stick-to-bottom and jump-to-latest already care
16
+ about (both operate at the end), so those behaviors are untouched. Only the
17
+ unseen head of a genuinely long thread is deferred. */
18
+ const WINDOW_INITIAL = 60;
19
+ const WINDOW_STEP = 40;
20
+ const NEAR_TOP_PX = 200;
21
+
22
+ export function useMessageWindow(messages: UIMessage[], listRef: React.RefObject<HTMLDivElement | null>, threadKey?: string) {
23
+ // How many trailing messages to render. Grows (never shrinks the head back
24
+ // out from under the reader) as they scroll up; resets when the thread swaps.
25
+ const [count, setCount] = useState(WINDOW_INITIAL);
26
+ useEffect(() => { setCount(WINDOW_INITIAL); }, [threadKey]);
27
+
28
+ const start = Math.max(0, messages.length - count);
29
+ const windowed = start === 0 ? messages : messages.slice(start);
30
+ const hasOlder = start > 0;
31
+
32
+ // Anchor the viewport across a window growth: prepending older turns balloons
33
+ // scrollHeight, which would otherwise yank the reader. Capture distance-from-
34
+ // bottom at expand time and restore it after the new nodes lay out.
35
+ const anchorRef = useRef<number | null>(null);
36
+ const loadOlder = () => {
37
+ if (start === 0) return;
38
+ const node = listRef.current;
39
+ anchorRef.current = node ? node.scrollHeight - node.scrollTop : null;
40
+ setCount(current => current + WINDOW_STEP);
41
+ };
42
+ useLayoutEffect(() => {
43
+ const node = listRef.current;
44
+ if (anchorRef.current === null || !node) return;
45
+ node.scrollTop = node.scrollHeight - anchorRef.current;
46
+ anchorRef.current = null;
47
+ });
48
+
49
+ // Reveal more when the reader reaches the top of the rendered window.
50
+ const onNearTop = () => {
51
+ const node = listRef.current;
52
+ if (node && node.scrollTop <= NEAR_TOP_PX) loadOlder();
53
+ };
54
+
55
+ return { windowed, hasOlder, olderCount: start, loadOlder, onNearTop };
56
+ }
57
+
58
+ /** Within this many pixels of the end the reader counts as "at the bottom" —
59
+ a paragraph of slack so sub-line wobble (fractional scroll positions,
60
+ entrance easing) never breaks the stick. */
61
+ const BOTTOM_SLACK_PX = 32;
62
+
63
+ /** ENG-213 — scroll management for the message list.
64
+
65
+ Stick-to-bottom: while the reader is at the end, every content change
66
+ (history load, streamed deltas, tool chips, approvals) keeps the latest
67
+ content in view. The moment the reader scrolls up, the stick releases —
68
+ streaming must never yank them — and it re-arms when they return to the
69
+ bottom on their own. Jump-to-latest: when new content lands while the
70
+ reader is scrolled up, the stylesheet's .fl-jump affordance appears;
71
+ activating it scrolls to the latest turn and re-sticks. */
72
+ export function useStickToBottom(messages: UIMessage[], threadKey?: string, contentRevision?: unknown) {
73
+ const listRef = useRef<HTMLDivElement>(null);
74
+ // The stick is a ref, not state: it flips inside scroll/effect timing and
75
+ // must be readable synchronously without re-render races.
76
+ const stuckRef = useRef(true);
77
+ const lastScrollHeightRef = useRef(0);
78
+ const [unseen, setUnseen] = useState(false);
79
+ // Lane pick 3A — the jump affordance grew into a bar with a COUNT of turns
80
+ // that landed while scrolled away and a snippet of the newest text. Count =
81
+ // messages appended since the stick released; snippet = the latest turn's
82
+ // trailing text (best-effort, purely presentational).
83
+ const [unseenCount, setUnseenCount] = useState(0);
84
+ const seenLengthRef = useRef(messages.length);
85
+
86
+ // A different conversation is a different reader position: when the caller
87
+ // switches the hook to another thread, re-arm the stick and forget the
88
+ // previous thread's growth baseline — otherwise a scroll-up in the old
89
+ // thread would keep the new one from opening at its latest turn.
90
+ const previousThreadKeyRef = useRef(threadKey);
91
+ useEffect(() => {
92
+ const previousKey = previousThreadKeyRef.current;
93
+ previousThreadKeyRef.current = threadKey;
94
+ // ENG-222 id mint is NOT a thread switch: a conversation started without
95
+ // an id gets its server-minted thr_ fed back mid-first-stream (VendoPage's
96
+ // onThreadId loop), flipping this key while the reader is mid-read. The
97
+ // messages are the same conversation — KEEP the growth baseline: zeroing
98
+ // it makes previousHeight === 0 read as "at bottom by definition", so the
99
+ // next streamed chunk yanks a reader who had scrolled up (deterministic on
100
+ // slow runners — the "streaming must never yank" conformance failure).
101
+ // Re-arm the stick and clear the bar though: with the real baseline
102
+ // intact, the next mutation's previous-height guard releases a genuinely
103
+ // scrolled-up reader, while a bottom reader stays pinned instead of
104
+ // leaking a transient new-replies bar.
105
+ if (previousKey === undefined && threadKey !== undefined && messages.length > 0) {
106
+ stuckRef.current = true;
107
+ setUnseen(false);
108
+ setUnseenCount(0);
109
+ return;
110
+ }
111
+ stuckRef.current = true;
112
+ lastScrollHeightRef.current = 0;
113
+ setUnseen(false);
114
+ setUnseenCount(0);
115
+ // messages.length is deliberately unlisted: this effect keys on identity
116
+ // changes only, and the mint guard needs the length at flip time.
117
+ // eslint-disable-next-line react-hooks/exhaustive-deps
118
+ }, [threadKey]);
119
+
120
+ const atBottom = (node: HTMLElement) =>
121
+ node.scrollHeight - node.scrollTop - node.clientHeight <= BOTTOM_SLACK_PX;
122
+
123
+ const onScroll = () => {
124
+ const node = listRef.current;
125
+ if (!node) return;
126
+ // Both user scrolls and our own programmatic sticks land here; either way
127
+ // the reader's actual position is the single source of truth.
128
+ stuckRef.current = atBottom(node);
129
+ if (stuckRef.current) {
130
+ setUnseen(false);
131
+ setUnseenCount(0);
132
+ seenLengthRef.current = messages.length;
133
+ }
134
+ };
135
+
136
+ const jumpToLatest = () => {
137
+ const node = listRef.current;
138
+ if (!node) return;
139
+ stuckRef.current = true;
140
+ setUnseen(false);
141
+ setUnseenCount(0);
142
+ seenLengthRef.current = messages.length;
143
+ node.scrollTop = node.scrollHeight;
144
+ };
145
+
146
+ // After every content change: stick if the reader is at the bottom, or flag
147
+ // the new content if they've scrolled away. Layout effects would run before
148
+ // paint, but streamed markdown re-renders arrive in bursts — post-paint is
149
+ // indistinguishable here and cheaper.
150
+ useEffect(() => {
151
+ const node = listRef.current;
152
+ if (!node) return;
153
+ const previousHeight = lastScrollHeightRef.current;
154
+ const grew = node.scrollHeight > previousHeight;
155
+ lastScrollHeightRef.current = node.scrollHeight;
156
+ // The scroll event that releases the stick is ASYNC: a reader who just
157
+ // scrolled up can have content land before onScroll flips stuckRef, and
158
+ // trusting the stale ref would yank them back down ("streaming must never
159
+ // yank"). Their position against the PREVIOUS content height is ground
160
+ // truth: stuck growth leaves scrollTop at the old bottom; a scroll-up
161
+ // puts it well above. Release the stick here instead of yanking.
162
+ const atPreviousBottom = previousHeight === 0
163
+ || previousHeight - node.scrollTop - node.clientHeight <= BOTTOM_SLACK_PX;
164
+ // …unless they are at the CURRENT bottom: when content SHRINKS (a connect
165
+ // card or generated view swaps out), scrollTop can no longer equal the old
166
+ // taller bottom, and the previous-height test alone misreads the reader as
167
+ // scrolled-up — releasing the stick and leaking a new-replies bar on the
168
+ // next turn even though they never moved. At-current-bottom is at bottom.
169
+ if (stuckRef.current && !atPreviousBottom && !atBottom(node)) stuckRef.current = false;
170
+ if (stuckRef.current) {
171
+ node.scrollTop = node.scrollHeight;
172
+ seenLengthRef.current = messages.length;
173
+ } else if (grew) {
174
+ setUnseen(true);
175
+ setUnseenCount(Math.max(1, messages.length - seenLengthRef.current));
176
+ }
177
+ // contentRevision — ENG-215: turn-actions (Edit/Regenerate) mount below the
178
+ // last turn the instant a stream settles (busy→false), adding height AFTER
179
+ // the message-driven stick already ran. Re-run so the reader stays pinned.
180
+ }, [messages, contentRevision]);
181
+
182
+ // A generated view mounts and grows AFTER the messages effect runs (the jail
183
+ // renders async; logos/images load late). Without watching actual size, the
184
+ // stick fires before the growth and the newest content — the approval card,
185
+ // the closing line — lands below the fold. Observe the content box and
186
+ // re-stick whenever it grows while the reader is at the bottom.
187
+ useEffect(() => {
188
+ const node = listRef.current;
189
+ if (!node || typeof ResizeObserver === "undefined") return;
190
+ const observer = new ResizeObserver(() => {
191
+ // Same async-scroll-event guard as the messages effect: only re-stick a
192
+ // reader who was actually at the bottom of the previous content.
193
+ const previousHeight = lastScrollHeightRef.current;
194
+ const atPreviousBottom = previousHeight === 0
195
+ || previousHeight - node.scrollTop - node.clientHeight <= BOTTOM_SLACK_PX;
196
+ lastScrollHeightRef.current = node.scrollHeight;
197
+ if (stuckRef.current && !atPreviousBottom && !atBottom(node)) stuckRef.current = false;
198
+ if (stuckRef.current) node.scrollTop = node.scrollHeight;
199
+ });
200
+ for (const child of Array.from(node.children)) observer.observe(child);
201
+ const mutation = new MutationObserver(() => {
202
+ for (const child of Array.from(node.children)) observer.observe(child);
203
+ });
204
+ mutation.observe(node, { childList: true, subtree: true });
205
+ return () => {
206
+ observer.disconnect();
207
+ mutation.disconnect();
208
+ };
209
+ }, []);
210
+
211
+ // 3A snippet: trailing text of the newest message (bounded; presentational).
212
+ const lastMessage = messages.at(-1);
213
+ const snippet = unseen && lastMessage
214
+ ? lastMessage.parts
215
+ .filter((part): part is Extract<typeof part, { type: "text" }> => part.type === "text")
216
+ .map(part => part.text)
217
+ .join(" ")
218
+ .trim()
219
+ .slice(0, 120)
220
+ : "";
221
+
222
+ return { listRef, onScroll, jumpToLatest, showJump: unseen, unseenCount, snippet };
223
+ }
@@ -0,0 +1,28 @@
1
+ import type { VendoAppRef, VendoApprovalRef } from "@vendoai/core";
2
+ /**
3
+ * Existing-agents contract — prop shapes for the three embeds a BYO chat
4
+ * surface renders from `vendo_*` tool outputs (Wave 0 freeze; Wave 1 Lane B
5
+ * builds the components behind them on the existing slot / build-beat /
6
+ * approval-card machinery, inside the same `VendoProvider`).
7
+ * Frozen in `docs/superpowers/specs/2026-07-20-existing-agents-contracts.md`.
8
+ */
9
+ /** Inline generated app: build-beat while the build streams, then the live
10
+ * app. In-app interactions go over the wire, not through the host loop. */
11
+ export interface VendoAppEmbedProps {
12
+ refValue: VendoAppRef;
13
+ }
14
+ /** Where an approval embed can be, in the order it gets there. The wire owns
15
+ * the state; the embed only renders it — resolving in place to the executed
16
+ * outcome, "declined", or "expired" (the existing failed/expired vocabulary,
17
+ * never a silent blank). */
18
+ export type VendoApprovalEmbedState = "pending" | "executed" | "declined" | "expired";
19
+ /** Approve/deny for a parked guarded call. */
20
+ export interface VendoApprovalEmbedProps {
21
+ refValue: VendoApprovalRef;
22
+ }
23
+ /** The dispatcher: give it any `vendo_*` tool output and it renders the right
24
+ * embed by `parseVendoToolEnvelope`, or nothing for plain data. */
25
+ export interface VendoToolResultProps {
26
+ output: unknown;
27
+ }
28
+ //# sourceMappingURL=embeds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeds.d.ts","sourceRoot":"","sources":["../src/embeds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEnE;;;;;;GAMG;AAEH;4EAC4E;AAC5E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED;;;6BAG6B;AAC7B,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AAEtF,8CAA8C;AAC9C,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED;oEACoE;AACpE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,OAAO,CAAC;CACjB"}
package/dist/embeds.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=embeds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeds.js","sourceRoot":"","sources":["../src/embeds.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ /** Complete headless hook surface (08-ui §3). */
2
+ export { useActivity } from "./use-activity.js";
3
+ export { useApp } from "./use-app.js";
4
+ export { useApps } from "./use-apps.js";
5
+ export { useApprovals } from "./use-approvals.js";
6
+ export { useAutomations } from "./use-automations.js";
7
+ export { useConnections } from "./use-connections.js";
8
+ export { useConnectorCatalog } from "./use-connector-catalog.js";
9
+ export { useGrants } from "./use-grants.js";
10
+ export { useMobileTakeover, type MobileTakeover } from "./use-mobile-takeover.js";
11
+ export { type PollOptions } from "./use-resource.js";
12
+ export { useSlotApp } from "./use-slot-app.js";
13
+ export { useThreads } from "./use-threads.js";
14
+ export { useVendoOverlay, type VendoOverlayController } from "./use-vendo-overlay.js";
15
+ export { useVendoStatus } from "./use-vendo-status.js";
16
+ export { useVendoThread, type VendoThreadApproval } from "./use-vendo-thread.js";
17
+ export { ScriptedTransport, type DirectorCue, type DirectorScript } from "./scripted-transport.js";
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /** Complete headless hook surface (08-ui §3). */
2
+ export { useActivity } from "./use-activity.js";
3
+ export { useApp } from "./use-app.js";
4
+ export { useApps } from "./use-apps.js";
5
+ export { useApprovals } from "./use-approvals.js";
6
+ export { useAutomations } from "./use-automations.js";
7
+ export { useConnections } from "./use-connections.js";
8
+ export { useConnectorCatalog } from "./use-connector-catalog.js";
9
+ export { useGrants } from "./use-grants.js";
10
+ // Deliberately public (lane pick 1-H): the ejected thread surface imports it,
11
+ // and hosts placing their own approval chrome need the same breakpoint truth.
12
+ export { useMobileTakeover } from "./use-mobile-takeover.js";
13
+ export { useSlotApp } from "./use-slot-app.js";
14
+ export { useThreads } from "./use-threads.js";
15
+ export { useVendoOverlay } from "./use-vendo-overlay.js";
16
+ export { useVendoStatus } from "./use-vendo-status.js";
17
+ export { useVendoThread } from "./use-vendo-thread.js";
18
+ export { ScriptedTransport } from "./scripted-transport.js";
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,8EAA8E;AAC9E,8EAA8E;AAC9E,OAAO,EAAE,iBAAiB,EAAuB,MAAM,0BAA0B,CAAC;AAElF,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAA+B,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAA4B,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAyC,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,44 @@
1
+ import type { ChatTransport, UIMessage, UIMessageChunk } from "ai";
2
+ /**
3
+ * Director mode: a chat transport that replays an authored (or recorded)
4
+ * sequence of UI-message chunks at scripted pacing instead of calling the
5
+ * agent. The thread, beats, reveals, approvals, and morphs downstream are the
6
+ * REAL components rendering a real part stream — only the source of the
7
+ * stream is scripted. Demo/capture tooling only; hosts opt in explicitly by
8
+ * passing it through the provider (`VendoProvider transport`), it is never a
9
+ * default.
10
+ *
11
+ * A cue's `chunk` is exactly one SSE `data:` payload of the live wire
12
+ * (`UIMessageChunk`), so a recording of a real build replays verbatim — see
13
+ * the recorder hook in `use-vendo-thread.ts` (`__vendoDirectorRecord`).
14
+ */
15
+ export interface DirectorCue {
16
+ /** Milliseconds to wait after the previous cue before emitting this chunk. */
17
+ delay: number;
18
+ chunk: UIMessageChunk;
19
+ }
20
+ export interface DirectorScript {
21
+ /** Single-turn form. */
22
+ cues?: DirectorCue[];
23
+ /**
24
+ * Multi-turn form: each sendMessages call (initial send, then each
25
+ * approval-driven resume) plays the next turn in order; the last turn
26
+ * repeats if the surface asks again.
27
+ */
28
+ turns?: Array<{
29
+ cues: DirectorCue[];
30
+ }>;
31
+ }
32
+ export declare class ScriptedTransport implements ChatTransport<UIMessage> {
33
+ private readonly script;
34
+ private readonly options;
35
+ private turnIndex;
36
+ constructor(script: DirectorScript, options?: {
37
+ speed?: number;
38
+ });
39
+ sendMessages(options: {
40
+ abortSignal: AbortSignal | undefined;
41
+ }): Promise<ReadableStream<UIMessageChunk>>;
42
+ reconnectToStream(): Promise<ReadableStream<UIMessageChunk> | null>;
43
+ }
44
+ //# sourceMappingURL=scripted-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripted-transport.d.ts","sourceRoot":"","sources":["../../src/hooks/scripted-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AAEnE;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;IACrB;;;;OAIG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,WAAW,EAAE,CAAA;KAAE,CAAC,CAAC;CACxC;AAED,qBAAa,iBAAkB,YAAW,aAAa,CAAC,SAAS,CAAC;IAI9D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,SAAS,CAAK;gBAGH,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO;IAGnD,YAAY,CAAC,OAAO,EAAE;QAAE,WAAW,EAAE,WAAW,GAAG,SAAS,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IA8CxG,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;CAGpE"}
@@ -0,0 +1,58 @@
1
+ export class ScriptedTransport {
2
+ script;
3
+ options;
4
+ turnIndex = 0;
5
+ constructor(script, options = {}) {
6
+ this.script = script;
7
+ this.options = options;
8
+ }
9
+ sendMessages(options) {
10
+ const turns = this.script.turns ?? [{ cues: this.script.cues ?? [] }];
11
+ // Past the last authored turn, close gracefully — REPLAYING a turn would
12
+ // emit tool outputs for calls that live in earlier messages and corrupt
13
+ // the transcript.
14
+ const turn = this.turnIndex < turns.length
15
+ ? turns[this.turnIndex]
16
+ : {
17
+ cues: [
18
+ { delay: 0, chunk: { type: "start" } },
19
+ { delay: 100, chunk: { type: "text-start", id: "director_end" } },
20
+ { delay: 50, chunk: { type: "text-delta", id: "director_end", delta: "This directed take is finished — reload the page to play it again." } },
21
+ { delay: 50, chunk: { type: "text-end", id: "director_end" } },
22
+ { delay: 50, chunk: { type: "finish" } },
23
+ ],
24
+ };
25
+ this.turnIndex += 1;
26
+ const cues = turn.cues;
27
+ const speed = this.options.speed ?? 1;
28
+ const signal = options.abortSignal;
29
+ return Promise.resolve(new ReadableStream({
30
+ async start(controller) {
31
+ for (const cue of cues) {
32
+ if (signal?.aborted)
33
+ break;
34
+ if (cue.delay > 0) {
35
+ await new Promise(resolve => setTimeout(resolve, cue.delay / speed));
36
+ }
37
+ if (signal?.aborted)
38
+ break;
39
+ controller.enqueue(cue.chunk);
40
+ // Staging hook: host surfaces (the dashboard slot) can react to
41
+ // the finished view landing — e.g. swapping the original
42
+ // component in place — without a wire round-trip.
43
+ if (typeof window !== "undefined" && cue.chunk.type === "data-vendo-view") {
44
+ const data = cue.chunk.data;
45
+ if (data?.payload && data.payload.streaming !== true) {
46
+ window.dispatchEvent(new CustomEvent("vendo-director:view-final", { detail: data }));
47
+ }
48
+ }
49
+ }
50
+ controller.close();
51
+ },
52
+ }));
53
+ }
54
+ reconnectToStream() {
55
+ return Promise.resolve(null);
56
+ }
57
+ }
58
+ //# sourceMappingURL=scripted-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripted-transport.js","sourceRoot":"","sources":["../../src/hooks/scripted-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /** Self-scoped audit activity transport (08-ui §3). */
2
+ import type { AuditEvent } from "@vendoai/core";
3
+ import { type PollOptions } from "./use-resource.js";
4
+ export declare function useActivity(options?: PollOptions): {
5
+ /** Back-compat alias for `data` (contract §3). */
6
+ events: AuditEvent[];
7
+ data: AuditEvent[];
8
+ error: Error | undefined;
9
+ isLoading: boolean;
10
+ /** Whether another page may still exist. Flips to `false` once a fetched page
11
+ is empty or repeats only already-seen rows, so the panel can show a proper
12
+ end-of-list state instead of a "Load more" that fetches nothing new. */
13
+ hasMore: boolean;
14
+ loadMore(): Promise<void>;
15
+ refresh(): Promise<void>;
16
+ };
17
+ //# sourceMappingURL=use-activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-activity.d.ts","sourceRoot":"","sources":["../../src/hooks/use-activity.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAoBlE,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG;IAClD,kDAAkD;IAClD,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB;;+EAE2E;IAC3E,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B,CAgCA"}
@@ -0,0 +1,50 @@
1
+ import { useCallback, useEffect, useMemo, useState } from "react";
2
+ import { useVendoContext } from "../context.js";
3
+ import { useResource } from "./use-resource.js";
4
+ function dedupe(events) {
5
+ const seen = new Set();
6
+ return events.filter(event => !seen.has(event.id) && seen.add(event.id));
7
+ }
8
+ /** The store pages audit rows on `(at, id)` behind an opaque base64url `{c,i}`
9
+ cursor. `/activity` returns a bare `AuditEvent[]` (09 §3), so the client
10
+ reconstructs that cursor from the oldest event it holds to fetch the next
11
+ page — the raw event id alone is not a decodable cursor. */
12
+ function pageCursor(event) {
13
+ if (event === undefined)
14
+ return undefined;
15
+ const json = JSON.stringify({ c: event.at, i: event.id });
16
+ const base64 = typeof btoa === "function"
17
+ ? btoa(json)
18
+ : Buffer.from(json, "utf8").toString("base64");
19
+ return base64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
20
+ }
21
+ export function useActivity(options) {
22
+ const { client } = useVendoContext();
23
+ const list = useCallback(() => client.activity.list(), [client]);
24
+ const { data: firstPage, error, isLoading, refresh } = useResource(list, [], options);
25
+ // Pages appended by loadMore; a refresh (manual or poll) reloads the first
26
+ // page rather than appending, so a fresh first page resets pagination and
27
+ // loadMore continues from the reset head.
28
+ const [extra, setExtra] = useState([]);
29
+ const [ended, setEnded] = useState(false);
30
+ useEffect(() => {
31
+ setExtra([]);
32
+ setEnded(false);
33
+ }, [firstPage]);
34
+ const events = useMemo(() => dedupe([...firstPage, ...extra]), [firstPage, extra]);
35
+ // An empty first page is already the end; a full one may have more behind
36
+ // the cursor, proven (or disproven) by the next loadMore.
37
+ const hasMore = !ended && (isLoading || firstPage.length > 0);
38
+ const loadMore = useCallback(async () => {
39
+ const cursor = pageCursor(events.at(-1));
40
+ const next = await client.activity.list(cursor === undefined ? undefined : { cursor });
41
+ const known = new Set(events.map(event => event.id));
42
+ const added = next.filter(event => !known.has(event.id));
43
+ setExtra(current => [...current, ...added]);
44
+ // No page, or a page that surfaced nothing new, means there is nothing
45
+ // older left to fetch — we have reached the end of the audit history.
46
+ setEnded(added.length === 0);
47
+ }, [client, events]);
48
+ return { events, data: events, error, isLoading, hasMore, loadMore, refresh };
49
+ }
50
+ //# sourceMappingURL=use-activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-activity.js","sourceRoot":"","sources":["../../src/hooks/use-activity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /** Single-app transport (08-ui §3). */
2
+ import type { AppDocument, AppId, Json, ToolOutcome } from "@vendoai/core";
3
+ import type { EditResult, OpenSurface, VersionEntry } from "../wire-types.js";
4
+ export declare function useApp(appId: AppId): {
5
+ app: AppDocument | undefined;
6
+ /** Alias for `app` — the consistent `data` field across data hooks (§3). */
7
+ data: AppDocument | undefined;
8
+ surface: OpenSurface | undefined;
9
+ error: Error | undefined;
10
+ isLoading: boolean;
11
+ call(ref: string, args: Json): Promise<ToolOutcome>;
12
+ edit(instruction: string): Promise<EditResult>;
13
+ history: {
14
+ list(): Promise<VersionEntry[]>;
15
+ undo(): Promise<AppDocument>;
16
+ };
17
+ refresh(): Promise<void>;
18
+ };
19
+ //# sourceMappingURL=use-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-app.d.ts","sourceRoot":"","sources":["../../src/hooks/use-app.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG3E,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE9E,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG;IACpC,GAAG,EAAE,WAAW,GAAG,SAAS,CAAC;IAC7B,4EAA4E;IAC5E,IAAI,EAAE,WAAW,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACpD,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C,OAAO,EAAE;QAAE,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAAC,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,CAAA;KAAE,CAAC;IAC3E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B,CAkEA"}
@@ -0,0 +1,66 @@
1
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
2
+ import { useVendoContext } from "../context.js";
3
+ export function useApp(appId) {
4
+ const { client } = useVendoContext();
5
+ const [app, setApp] = useState();
6
+ const [surface, setSurface] = useState();
7
+ const [error, setError] = useState();
8
+ const [isLoading, setIsLoading] = useState(true);
9
+ const generationRef = useRef(0);
10
+ // Reset per appId (below), so `isLoading` reflects only the first load of the
11
+ // current app — an edit/undo refresh does not flicker it true→false.
12
+ const loadedRef = useRef(false);
13
+ const refresh = useCallback(async () => {
14
+ // Mirror useResource: bump per call, so overlapping refreshes (manual +
15
+ // edit + undo) can never let a stale response clobber newer app state.
16
+ const generation = (generationRef.current += 1);
17
+ if (!loadedRef.current)
18
+ setIsLoading(true);
19
+ try {
20
+ const [nextApp, nextSurface] = await Promise.all([client.apps.get(appId), client.apps.open(appId)]);
21
+ if (generation !== generationRef.current)
22
+ return;
23
+ setApp(nextApp);
24
+ setSurface(nextSurface);
25
+ setError(undefined);
26
+ loadedRef.current = true;
27
+ }
28
+ catch (reason) {
29
+ if (generation !== generationRef.current)
30
+ return;
31
+ setError(reason instanceof Error ? reason : new Error(String(reason)));
32
+ }
33
+ finally {
34
+ if (generation === generationRef.current)
35
+ setIsLoading(false);
36
+ }
37
+ }, [appId, client]);
38
+ useEffect(() => {
39
+ loadedRef.current = false;
40
+ setApp(undefined);
41
+ setSurface(undefined);
42
+ setError(undefined);
43
+ void refresh();
44
+ // Bump the generation on unmount / appId change so an in-flight response
45
+ // can't land on a stale (or torn-down) app.
46
+ return () => {
47
+ generationRef.current += 1;
48
+ };
49
+ }, [refresh]);
50
+ const call = useCallback((ref, args) => client.apps.call(appId, ref, args), [appId, client]);
51
+ const edit = useCallback(async (instruction) => {
52
+ const result = await client.apps.edit(appId, instruction);
53
+ await refresh();
54
+ return result;
55
+ }, [appId, client, refresh]);
56
+ const history = useMemo(() => ({
57
+ list: () => client.apps.history(appId),
58
+ undo: async () => {
59
+ const result = await client.apps.undo(appId);
60
+ await refresh();
61
+ return result;
62
+ },
63
+ }), [appId, client, refresh]);
64
+ return { app, data: app, surface, error, isLoading, call, edit, history, refresh };
65
+ }
66
+ //# sourceMappingURL=use-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-app.js","sourceRoot":"","sources":["../../src/hooks/use-app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /** Pending approval transport (08-ui §3). */
2
+ import type { ApprovalDecision, ApprovalId, ApprovalRequest } from "@vendoai/core";
3
+ import { type PollOptions } from "./use-resource.js";
4
+ export declare function useApprovals(options?: PollOptions): {
5
+ /** Back-compat alias for `data` (contract §3). */
6
+ pending: ApprovalRequest[];
7
+ data: ApprovalRequest[];
8
+ error: Error | undefined;
9
+ isLoading: boolean;
10
+ refresh(): Promise<void>;
11
+ decide(ids: ApprovalId | ApprovalId[], decision: ApprovalDecision): Promise<void>;
12
+ };
13
+ //# sourceMappingURL=use-approvals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-approvals.d.ts","sourceRoot":"","sources":["../../src/hooks/use-approvals.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGnF,OAAO,EAAE,KAAK,WAAW,EAAe,MAAM,mBAAmB,CAAC;AAElE,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG;IACnD,kDAAkD;IAClD,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU,EAAE,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnF,CAcA"}
@@ -0,0 +1,14 @@
1
+ import { useCallback } from "react";
2
+ import { useVendoContext } from "../context.js";
3
+ import { useResource } from "./use-resource.js";
4
+ export function useApprovals(options) {
5
+ const { client } = useVendoContext();
6
+ const list = useCallback(() => client.approvals.pending(), [client]);
7
+ const { data, error, isLoading, refresh } = useResource(list, [], options);
8
+ const decide = useCallback(async (ids, decision) => {
9
+ await client.approvals.decide(ids, decision);
10
+ await refresh();
11
+ }, [client, refresh]);
12
+ return { pending: data, data, error, isLoading, refresh, decide };
13
+ }
14
+ //# sourceMappingURL=use-approvals.js.map