@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,38 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useId, useState } from "react";
3
+ import { useActivity } from "../hooks/use-activity.js";
4
+ import { useApprovals } from "../hooks/use-approvals.js";
5
+ import { useVendoTools } from "../context.js";
6
+ import { ActivityLedger } from "./activity-ledger.js";
7
+ import { ApprovalCard } from "./approval-card.js";
8
+ import { ChromeRoot } from "./chrome-root.js";
9
+ /**
10
+ * The shelf's drop-in feed of what the agent did + what it is waiting on
11
+ * (ui-usage-dx §2) — placeable in any host page. Pending approvals render as
12
+ * ONE card with a "1 of N" pager (ui-lane-panels pick B): deciding slides the
13
+ * next approval into place instead of stacking a wall of cards. Recent
14
+ * activity renders as the shared icon ledger below. When nothing has happened
15
+ * yet it shows a quiet one-line empty state rather than rendering nothing —
16
+ * hosts place this in their own pages, and an invisible component would read
17
+ * as broken.
18
+ */
19
+ export function VendoActivities({ pollMs = 5000, maxItems = 8 } = {}) {
20
+ const poll = pollMs > 0 ? { pollMs } : undefined;
21
+ const { pending, decide } = useApprovals(poll);
22
+ const { events, isLoading } = useActivity(poll);
23
+ const tools = useVendoTools();
24
+ const headingId = useId();
25
+ const recent = events.slice(0, Math.max(0, maxItems));
26
+ // The pager holds a POSITION, not an approval: deciding removes the current
27
+ // approval from `pending`, so the next one shifts into the same index and
28
+ // slides in (keyed by approval id). Clamp when the queue shrinks below it.
29
+ const [rawIndex, setRawIndex] = useState(0);
30
+ const index = Math.min(rawIndex, Math.max(0, pending.length - 1));
31
+ const current = pending[index];
32
+ const paged = pending.length > 1;
33
+ return (_jsx(ChromeRoot, { children: _jsxs("section", { "aria-label": "Vendo activity", style: { display: "grid", gap: "14px" }, children: [current ? (_jsxs("section", { "aria-labelledby": `${headingId}-approvals`, style: { display: "grid", gap: "10px" }, children: [_jsxs("header", { children: [_jsxs("div", { className: paged ? "fl-approvals-pager" : undefined, children: [_jsx("h2", { id: `${headingId}-approvals`, className: "fl-act-head-lbl", style: { margin: 0, fontSize: "14px" }, children: "Needs your approval" }), paged ? (_jsxs(_Fragment, { children: [_jsxs("p", { className: "fl-act-now", style: { margin: 0, fontSize: "11.5px" }, "aria-live": "polite", children: ["\u00B7 ", index + 1, " of ", pending.length] }), _jsx("span", { className: "fl-approvals-dots", "aria-hidden": "true", children: pending.map((approval, i) => (_jsx("span", { className: `fl-approvals-dot${i === index ? " fl-approvals-dot--on" : ""}` }, approval.id))) })] })) : null] }), _jsx("p", { className: "fl-act-now", style: { margin: "3px 0 0", fontSize: "12.5px" }, children: "An agent asked to act on your account. Review the exact request before it runs." })] }), _jsxs("div", { className: "fl-approvals-stack", children: [_jsx("div", { className: "fl-approvals-slide", children: _jsx(ApprovalCard, { approval: current, onDecide: async (decision) => {
34
+ await decide(current.id, decision);
35
+ setRawIndex(value => Math.min(value, Math.max(0, pending.length - 2)));
36
+ } }) }, current.id), index < pending.length - 1 ? _jsx("div", { className: "fl-approvals-ghost", "aria-hidden": "true" }) : null] })] })) : null, _jsxs("section", { className: "fl-act", "aria-labelledby": `${headingId}-recent`, children: [_jsxs("header", { className: "fl-act-head", style: { cursor: "default" }, children: [_jsx("span", { className: "fl-act-ic fl-act-tick", "aria-hidden": "true", children: "\u2713" }), _jsx("h2", { id: `${headingId}-recent`, className: "fl-act-head-lbl", style: { margin: 0 }, children: "Recent activity" })] }), recent.length === 0 ? (_jsx("p", { className: "fl-act-row fl-act-now", children: isLoading ? "Loading activity…" : "No recent agent activity yet." })) : (_jsxs(_Fragment, { children: [_jsx("p", { className: "fl-act-cap", style: { margin: 0 }, children: "Actions performed as your account" }), _jsx(ActivityLedger, { events: recent, tools: tools })] }))] })] }) }));
37
+ }
38
+ //# sourceMappingURL=vendo-activities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendo-activities.js","sourceRoot":"","sources":["../../src/chrome/vendo-activities.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { type ComponentType, type ReactNode } from "react";
2
+ import { type VendoDiscoverability, type VendoGreeting } from "./discoverability.js";
3
+ import { type VendoThreadProps } from "./thread/index.js";
4
+ export interface VendoOverlayProps {
5
+ /** Controlled open state — pair with `onOpenChange`. Omit for uncontrolled. */
6
+ open?: boolean;
7
+ /** Initial state in uncontrolled mode (default `false`). */
8
+ defaultOpen?: boolean;
9
+ /** Fires for every open/close request: launcher click, close button, Escape, scrim click, or programmatic toggles. */
10
+ onOpenChange?(open: boolean): void;
11
+ /**
12
+ * Built-in launcher placement and content. The default is a fixed pill in
13
+ * the given viewport corner carrying the morphing accent blob and a
14
+ * WHITE-LABEL text — "AI agent", never a product name (ui-lane-entry). Pass
15
+ * `"none"` to hide it and drive the overlay programmatically (via
16
+ * `open`/`onOpenChange` or the `useVendoOverlay` hook), or the object form
17
+ * to customize: `label` accepts any host string (`null` collapses the pill
18
+ * to a blob-only orb) and `icon` swaps the blob for a host element.
19
+ */
20
+ launcher?: "bottom-right" | "bottom-left" | "none" | {
21
+ position?: "bottom-right" | "bottom-left";
22
+ /** Pill text. Default "AI agent"; `null` renders the blob-only orb. */
23
+ label?: string | null;
24
+ /** Replaces the morph-blob mark (a host logo, custom glyph, …). */
25
+ icon?: ReactNode;
26
+ };
27
+ /**
28
+ * Change to discard the current conversation and start a fresh thread
29
+ * (ENG-221). `useVendoOverlay().newConversation()` drives this for you;
30
+ * hosts managing their own state can bump any number/string. The panel's
31
+ * built-in new-conversation button works with or without this prop.
32
+ */
33
+ conversationKey?: string | number;
34
+ /**
35
+ * The one sanctioned component-injection point (the eject seam): a thread
36
+ * component the panel renders in place of the built-in `VendoThread`. The
37
+ * overlay stays the positioning shell — portal, scrim, focus, mobile sheet —
38
+ * while an ejected (or fully custom) thread supplies the conversation
39
+ * pixels. It receives `VendoThreadProps` (all optional), so a plain
40
+ * zero-prop component works too.
41
+ */
42
+ thread?: ComponentType<VendoThreadProps>;
43
+ /**
44
+ * The discoverability dial (ui-usage-dx §6), overriding the provider's.
45
+ * `"default"` keeps the fire-once whisper on the launcher pill (and the
46
+ * thread's greeting-as-tutorial); `"quiet"` turns both off. Nothing here
47
+ * ever fires twice for the same user — the whisper marks itself seen the
48
+ * moment it first renders.
49
+ */
50
+ discoverability?: VendoDiscoverability;
51
+ /**
52
+ * Greeting-as-tutorial content for the thread's one-time first message
53
+ * (intro + prompt chips — the `.vendo/greeting.json` shape), overriding the
54
+ * provider's `greeting`.
55
+ */
56
+ greeting?: VendoGreeting;
57
+ }
58
+ /** 08-ui §4 — floating modal launcher with focus containment and restoration.
59
+ * Supported entry API (ENG-220): positioned launcher by default, controlled +
60
+ * uncontrolled programmatic open/close, panel portaled to document.body with
61
+ * body scroll-lock and an inert background while open. */
62
+ export declare function VendoOverlay({ open: openProp, defaultOpen, onOpenChange, launcher, conversationKey, thread: Thread, discoverability, greeting, }?: VendoOverlayProps): import("react").JSX.Element;
63
+ //# sourceMappingURL=vendo-overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendo-overlay.d.ts","sourceRoot":"","sources":["../../src/chrome/vendo-overlay.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkE,KAAK,aAAa,EAA0C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAMnK,OAAO,EAAqB,KAAK,oBAAoB,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAExG,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIvE,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4DAA4D;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sHAAsH;IACtH,YAAY,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,MAAM,GAAG;QACnD,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC;QAC1C,uEAAuE;QACvE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,mEAAmE;QACnE,IAAI,CAAC,EAAE,SAAS,CAAC;KAClB,CAAC;IACF;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACzC;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAoCD;;;2DAG2D;AAC3D,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EAAE,QAAQ,EACd,WAAmB,EACnB,YAAY,EACZ,QAAyB,EACzB,eAAe,EACf,MAAM,EAAE,MAAoB,EAC5B,eAAe,EACf,QAAQ,GACT,GAAE,iBAAsB,+BAuTxB"}
@@ -0,0 +1,256 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from "react";
3
+ import { createPortal } from "react-dom";
4
+ import { useVendoDiscoverability, useVendoTheme } from "../context.js";
5
+ import { useMobileTakeover } from "../hooks/use-mobile-takeover.js";
6
+ import { themeCssVariables } from "../theme.js";
7
+ import { ChromeRoot } from "./chrome-root.js";
8
+ import { hasSeen, markSeen } from "./discoverability.js";
9
+ import { deliverPrefill, getConversationCommands, PrefillScopeContext, registerOverlayOpener, subscribeConversationCommands } from "./overlay-registry.js";
10
+ import { VendoThread } from "./thread/index.js";
11
+ const FOCUSABLE = "button:not([disabled]),input:not([disabled]),textarea:not([disabled]),select:not([disabled]),a[href],[tabindex]:not([tabindex='-1'])";
12
+ /** Whisper caption duration — long enough to read two short lines, short
13
+ * enough to stay ambient (~6s per the §6 decision). */
14
+ const WHISPER_MS = 6000;
15
+ /** The per-kind glyph on a command chip (mirrors the old palette row icons). */
16
+ function CommandGlyph({ kind }) {
17
+ return (_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: kind === "new-conversation" ? (_jsx("path", { d: "M12 5v14M5 12h14" })) : kind === "open-app" ? (_jsxs(_Fragment, { children: [_jsx("rect", { width: "7", height: "7", x: "3", y: "3", rx: "1" }), _jsx("rect", { width: "7", height: "7", x: "14", y: "3", rx: "1" }), _jsx("rect", { width: "7", height: "7", x: "3", y: "14", rx: "1" }), _jsx("rect", { width: "7", height: "7", x: "14", y: "14", rx: "1" })] })) : (_jsxs(_Fragment, { children: [_jsx("path", { d: "M3 3v18h18" }), _jsx("path", { d: "m7 16 4-5 4 3 4-7" })] })) }));
18
+ }
19
+ /** display:none/visibility:hidden elements silently swallow focus() — skip them. */
20
+ function canReceiveFocus(element) {
21
+ if (!element || !element.isConnected)
22
+ return false;
23
+ const style = window.getComputedStyle(element);
24
+ return style.display !== "none" && style.visibility !== "hidden";
25
+ }
26
+ /** 08-ui §4 — floating modal launcher with focus containment and restoration.
27
+ * Supported entry API (ENG-220): positioned launcher by default, controlled +
28
+ * uncontrolled programmatic open/close, panel portaled to document.body with
29
+ * body scroll-lock and an inert background while open. */
30
+ export function VendoOverlay({ open: openProp, defaultOpen = false, onOpenChange, launcher = "bottom-right", conversationKey, thread: Thread = VendoThread, discoverability, greeting, } = {}) {
31
+ const controlled = openProp !== undefined;
32
+ const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);
33
+ const open = controlled ? openProp : uncontrolledOpen;
34
+ // ENG-221: closing must HIDE the panel, not unmount it — the conversation
35
+ // (VendoThread's chat state + adopted thr_ id) lives in the portal subtree
36
+ // and survives every close/reopen within the page session. Mount lazily on
37
+ // first open, then keep mounted (render-phase derived state, no extra pass).
38
+ const [hasOpened, setHasOpened] = useState(open);
39
+ if (open && !hasOpened)
40
+ setHasOpened(true);
41
+ // The explicit new-conversation affordance: remount VendoThread under a new
42
+ // key so the next turn starts with no threadId (the server mints a fresh
43
+ // one). Combined with the prop so the hook's newConversation() works too.
44
+ const [conversationEpoch, setConversationEpoch] = useState(0);
45
+ const theme = useVendoTheme();
46
+ const takeover = useMobileTakeover();
47
+ const providerDial = useVendoDiscoverability();
48
+ const dial = discoverability ?? providerDial;
49
+ // Launcher normalization: string forms keep their exact old meaning; the
50
+ // object form adds white-label text/icon control. Default label is "AI
51
+ // agent" — deliberately not a product name (white-label rule).
52
+ const launcherConfig = typeof launcher === "object" ? launcher : {};
53
+ const launcherPosition = typeof launcher === "string" && launcher !== "none" ? launcher : launcherConfig.position ?? "bottom-right";
54
+ const launcherHidden = launcher === "none";
55
+ // Empty/whitespace labels collapse to the blob-only orb exactly like null —
56
+ // otherwise `label: ""` would render an icon-only button with no accessible
57
+ // name (cubic PR#391 finding).
58
+ const configuredLabel = launcherConfig.label === undefined ? "AI agent" : launcherConfig.label;
59
+ const launcherLabel = configuredLabel !== null && configuredLabel.trim() === "" ? null : configuredLabel;
60
+ // The palette's command set renders as a chip strip above the composer —
61
+ // the one-surface replacement for the palette dialog (pick P-C).
62
+ const commandSet = useSyncExternalStore(subscribeConversationCommands, getConversationCommands, getConversationCommands);
63
+ const commandStrip = commandSet && commandSet.commands.length > 0 ? (_jsx("div", { className: "fl-cmdstrip", role: "toolbar", "aria-label": "Commands", children: commandSet.commands.map(command => (_jsxs("button", { type: "button", className: "fl-cmd-chip", onClick: () => commandSet.select(command), children: [_jsx(CommandGlyph, { kind: command.kind }), command.label] }, command.id))) })) : null;
64
+ // ui-usage-dx §6 — the whisper: the first time a user actually faces the
65
+ // pill, it pulses once and a small caption says the app can be reshaped,
66
+ // then never again (fire-once store). Arming is REACTIVE, not mount-frozen
67
+ // (PR #365 review): quiet dial, launcher="none", and overlay-already-open
68
+ // states are not eligible and do not burn the flag — the moment the pill
69
+ // becomes genuinely visible (dial flipped, launcher enabled, overlay
70
+ // closed) is the first showing, and only that showing burns it.
71
+ const [whisperActive, setWhisperActive] = useState(false);
72
+ useEffect(() => {
73
+ if (whisperActive || open || launcherHidden || dial === "quiet")
74
+ return;
75
+ if (hasSeen("whisper"))
76
+ return;
77
+ // Seen is recorded on first SHOWING, not on dismiss: a reload
78
+ // mid-animation must never replay the whisper.
79
+ markSeen("whisper");
80
+ setWhisperActive(true);
81
+ }, [whisperActive, open, launcherHidden, dial]);
82
+ // The whisper ends after ~6s — or the instant the overlay opens, because
83
+ // the user has found the entry point it exists to point at.
84
+ useEffect(() => {
85
+ if (!whisperActive)
86
+ return;
87
+ if (open) {
88
+ setWhisperActive(false);
89
+ return;
90
+ }
91
+ const timer = window.setTimeout(() => setWhisperActive(false), WHISPER_MS);
92
+ return () => window.clearTimeout(timer);
93
+ }, [whisperActive, open]);
94
+ const launcherRef = useRef(null);
95
+ const dialog = useRef(null);
96
+ const portalRoot = useRef(null);
97
+ const opener = useRef(null);
98
+ const wasOpen = useRef(false);
99
+ const setOpen = useCallback((next) => {
100
+ if (next && !open && document.activeElement instanceof HTMLElement && document.activeElement !== document.body) {
101
+ opener.current = document.activeElement;
102
+ }
103
+ if (!controlled)
104
+ setUncontrolledOpen(next);
105
+ onOpenChange?.(next);
106
+ }, [controlled, onOpenChange, open]);
107
+ // Focus correctness across BOTH modes (controlled flips never pass through
108
+ // setOpen, so transitions are observed here): on open, capture the invoking
109
+ // element and autofocus the composer; on close, restore focus to the invoker
110
+ // — falling back to the launcher — skipping anything that cannot visibly
111
+ // receive focus (e.g. a display:none launcher) so focus never lands on body.
112
+ useEffect(() => {
113
+ if (open === wasOpen.current)
114
+ return;
115
+ wasOpen.current = open;
116
+ if (open) {
117
+ if (!opener.current && document.activeElement instanceof HTMLElement && document.activeElement !== document.body) {
118
+ opener.current = document.activeElement;
119
+ }
120
+ queueMicrotask(() => {
121
+ const panel = dialog.current;
122
+ const composer = panel?.querySelector("textarea:not([disabled])");
123
+ (composer ?? panel?.querySelector(FOCUSABLE))?.focus();
124
+ });
125
+ }
126
+ else {
127
+ const invoker = opener.current;
128
+ opener.current = null;
129
+ queueMicrotask(() => {
130
+ for (const candidate of [invoker, launcherRef.current]) {
131
+ if (canReceiveFocus(candidate)) {
132
+ candidate.focus();
133
+ return;
134
+ }
135
+ }
136
+ });
137
+ }
138
+ }, [open]);
139
+ // While open: lock body scroll and make everything behind the portal inert
140
+ // (the scrim + panel live in their own body-level subtree). Restored on
141
+ // close AND on unmount-while-open via the effect cleanup.
142
+ useEffect(() => {
143
+ if (!open)
144
+ return;
145
+ const wrapper = portalRoot.current;
146
+ const { body } = document;
147
+ const previousOverflow = body.style.overflow;
148
+ body.style.overflow = "hidden";
149
+ const inerted = [];
150
+ const inert = (child) => {
151
+ if (child === wrapper || child.tagName === "SCRIPT" || child.tagName === "STYLE" || child.hasAttribute("inert"))
152
+ return;
153
+ // Never inert another modal surface: the palette's takeover portal can
154
+ // mount above this overlay (Cmd/Ctrl+K while open) and must stay
155
+ // interactive — an inert ancestor would freeze the whole dialog.
156
+ if (child.matches('[aria-modal="true"]') || child.querySelector('[aria-modal="true"]'))
157
+ return;
158
+ child.setAttribute("inert", "");
159
+ inerted.push(child);
160
+ };
161
+ for (const child of Array.from(body.children))
162
+ inert(child);
163
+ // ENG-228: body children can also appear WHILE the overlay is open — the
164
+ // page/palette TakeoverPortals mount on a breakpoint flip, hosts mint
165
+ // toast portals. The open-time snapshot alone would leave those
166
+ // interactive behind the modal scrim, so keep watching.
167
+ const observer = new MutationObserver(records => {
168
+ for (const record of records) {
169
+ for (const node of record.addedNodes) {
170
+ if (node instanceof Element && node.parentElement === body)
171
+ inert(node);
172
+ }
173
+ }
174
+ });
175
+ observer.observe(body, { childList: true });
176
+ return () => {
177
+ observer.disconnect();
178
+ body.style.overflow = previousOverflow;
179
+ for (const element of inerted)
180
+ element.removeAttribute("inert");
181
+ };
182
+ }, [open]);
183
+ const close = () => setOpen(false);
184
+ // The prefill scope: this overlay's composer registers under it, so a
185
+ // delivered prompt reaches THIS overlay's thread — not an embedded
186
+ // VendoThread/VendoPage composer that happened to register later.
187
+ const prefillScope = useRef(Symbol("vendo-overlay-prefill"));
188
+ // Registry opener (ui-usage-dx §2): lets slot remix / trigger / palette
189
+ // affordances open this overlay — optionally preloading a prompt or starting
190
+ // fresh — without a ref. The prompt goes through the registry's scoped
191
+ // prefill hand-off, which parks it until the thread's composer mounts
192
+ // (first open) or delivers immediately (already mounted, even while
193
+ // hidden). newConversation defers delivery past the outgoing composer:
194
+ // the epoch bump remounts the thread, and only the fresh composer may
195
+ // drain the prompt (a live delivery would hand it to the one unmounting).
196
+ useEffect(() => registerOverlayOpener(options => {
197
+ // The one-surface ⌘K path: a toggle request closes an open overlay instead
198
+ // of no-opping; every other affordance strictly opens.
199
+ if (options?.toggle === true && open) {
200
+ setOpen(false);
201
+ return;
202
+ }
203
+ if (options?.close === true) {
204
+ if (open)
205
+ setOpen(false);
206
+ return;
207
+ }
208
+ setOpen(true);
209
+ const fresh = options?.newConversation === true;
210
+ if (fresh)
211
+ setConversationEpoch(epoch => epoch + 1);
212
+ if (typeof options?.prompt === "string" && options.prompt.length > 0) {
213
+ deliverPrefill({ prompt: options.prompt, send: options.send === true }, { scope: prefillScope.current, defer: fresh });
214
+ }
215
+ }), [setOpen, open]);
216
+ const newConversation = () => {
217
+ setConversationEpoch(epoch => epoch + 1);
218
+ // The remounted thread lands on the empty composer — put focus there so
219
+ // the affordance reads as "ready for a fresh start", not a dead click.
220
+ queueMicrotask(() => dialog.current?.querySelector("textarea:not([disabled])")?.focus());
221
+ };
222
+ const onKeyDown = (event) => {
223
+ if (event.key === "Escape") {
224
+ event.preventDefault();
225
+ close();
226
+ return;
227
+ }
228
+ if (event.key !== "Tab")
229
+ return;
230
+ const focusable = [...(dialog.current?.querySelectorAll(FOCUSABLE) ?? [])];
231
+ if (focusable.length === 0)
232
+ return;
233
+ const first = focusable[0];
234
+ const last = focusable.at(-1);
235
+ if (event.shiftKey && document.activeElement === first) {
236
+ event.preventDefault();
237
+ last.focus();
238
+ }
239
+ else if (!event.shiftKey && document.activeElement === last) {
240
+ event.preventDefault();
241
+ first.focus();
242
+ }
243
+ };
244
+ // The panel escapes the host's stacking/transform/filter context entirely:
245
+ // it is portaled to document.body. The wrapper is display:contents but
246
+ // carries the .vendo-root token bridge + contract variables, so the panel
247
+ // stays fully brand-themed outside the host ChromeRoot.
248
+ const portal = hasOpened && typeof document !== "undefined" ? createPortal(_jsxs("div", { ref: portalRoot, className: "vendo-root fl-overlay-portal", "data-vendo-motion": theme.motion, "data-vendo-density": theme.density,
249
+ // Closed = hidden, NOT unmounted (ENG-221): inline display:none beats the
250
+ // class's display:contents, drops the subtree out of the a11y tree and
251
+ // tab order, and replays the open animation on reveal — while the thread
252
+ // state (and any in-flight stream) lives on underneath.
253
+ style: { ...themeCssVariables(theme), fontFamily: "var(--vendo-font-family)", fontSize: "var(--vendo-font-size)", ...(open ? {} : { display: "none" }) }, children: [_jsx("div", { className: "fl-overlay-scrim", onClick: close }), _jsxs("div", { ref: dialog, id: "vendo-overlay-dialog", className: `fl-overlay-panel${takeover.active ? " fl-takeover" : ""}`, style: takeover.style, role: "dialog", "aria-modal": "true", "aria-label": "Vendo assistant", onKeyDown: onKeyDown, children: [_jsx("strong", { className: "fl-sr-only", children: "Vendo" }), _jsxs("button", { className: "fl-overlay-close fl-overlay-new", type: "button", "aria-label": "New conversation", onClick: newConversation, children: [_jsx("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", "aria-hidden": "true", children: _jsx("path", { d: "M12 5v14M5 12h14" }) }), _jsx("span", { className: "fl-sr-only", children: "New conversation" })] }), _jsxs("button", { className: "fl-overlay-close", type: "button", "aria-label": "Close Vendo", onClick: close, children: [_jsx("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", "aria-hidden": "true", children: _jsx("path", { d: "M18 6 6 18M6 6l12 12" }) }), _jsx("span", { className: "fl-sr-only", children: "Close" })] }), _jsx(PrefillScopeContext.Provider, { value: prefillScope.current, children: _jsx(Thread, { discoverability: dial, firstRunGreeting: greeting, composerAccessory: commandStrip }, `${conversationKey ?? 0}:${conversationEpoch}`) })] })] }), document.body) : null;
254
+ return (_jsxs(ChromeRoot, { children: [launcherHidden ? null : (_jsxs("button", { ref: launcherRef, className: "fl-launcher", "data-vendo-launcher": launcherPosition, ...(launcherLabel === null ? { "data-vendo-launcher-bare": "" } : {}), ...(whisperActive && !open ? { "data-vendo-whisper": "" } : {}), type: "button", "aria-expanded": open, "aria-controls": "vendo-overlay-dialog", ...(launcherLabel === null ? { "aria-label": "AI agent" } : {}), onClick: () => setOpen(!open), children: [launcherConfig.icon ?? _jsx("span", { className: "fl-launcher-blob", "aria-hidden": "true" }), launcherLabel] })), !launcherHidden && whisperActive && !open ? (_jsxs("div", { className: "fl-whisper", "data-vendo-launcher": launcherPosition, role: "status", children: [_jsx("strong", { children: "You can reshape this app" }), _jsx("span", { children: "Ask Vendo to build the view you need." })] })) : null, portal] }));
255
+ }
256
+ //# sourceMappingURL=vendo-overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendo-overlay.js","sourceRoot":"","sources":["../../src/chrome/vendo-overlay.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** 08-ui §4 — full workspace with WAI-ARIA automatic-activation tabs. */
2
+ export declare function VendoPage(): import("react").JSX.Element;
3
+ //# sourceMappingURL=vendo-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendo-page.d.ts","sourceRoot":"","sources":["../../src/chrome/vendo-page.tsx"],"names":[],"mappings":"AAmNA,yEAAyE;AACzE,wBAAgB,SAAS,gCA4ExB"}
@@ -0,0 +1,162 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
+ import { useVendoContext } from "../context.js";
4
+ import { useApp } from "../hooks/use-app.js";
5
+ import { useApps } from "../hooks/use-apps.js";
6
+ import { useMobileTakeover } from "../hooks/use-mobile-takeover.js";
7
+ import { useThreads } from "../hooks/use-threads.js";
8
+ import { AppFrame } from "../tree/frames.js";
9
+ import { ActivityPanel } from "./activity-panel.js";
10
+ import { AutomationsPanel } from "./automations-panel.js";
11
+ import { ChromeRoot } from "./chrome-root.js";
12
+ import { ACTIVITY_ANCHOR_ATTRIBUTE, ACTIVITY_BUMP_EVENT } from "./morph-toast.js";
13
+ import { ConnectedAccountsPanel } from "./connected-accounts-panel.js";
14
+ import { TakeoverPortal } from "./takeover-portal.js";
15
+ import { VendoThread } from "./thread/index.js";
16
+ import { WaitingQueue } from "./waiting-queue.js";
17
+ const TABS = ["chat", "apps", "automations", "accounts", "activity"];
18
+ // How long a minted-thread sidebar retry waits before re-polling GET /threads
19
+ // (the mint header lands at turn START; the thread row persists at turn END).
20
+ const MINTED_RETRY_MS = 1_000;
21
+ function title(tab) {
22
+ return tab[0].toUpperCase() + tab.slice(1);
23
+ }
24
+ function ChatWorkspace() {
25
+ const takeover = useMobileTakeover();
26
+ const { threads, isLoading, error: threadsError, refresh } = useThreads();
27
+ const [selected, setSelected] = useState();
28
+ // ENG-222 — the thr_ the server mints for a "New conversation" turn. Tracked
29
+ // separately from `selected` (which drives VendoThread's threadId prop) so a
30
+ // fresh mint highlights the sidebar without remounting the live conversation.
31
+ const [minted, setMinted] = useState();
32
+ const activeId = selected ?? minted;
33
+ // Default to the most recent conversation until the user makes an explicit
34
+ // choice. `userChose` is set synchronously in the button handlers so that an
35
+ // explicit "New conversation" (selected → undefined) can never be clobbered by
36
+ // this effect — which, being passive, may flush AFTER the click and would
37
+ // otherwise resurrect the previous thread via `?? threads[0]` (ENG-222).
38
+ const userChose = useRef(false);
39
+ useEffect(() => {
40
+ if (userChose.current || threads.length === 0)
41
+ return;
42
+ setSelected(current => current ?? threads[0]?.id);
43
+ }, [threads]);
44
+ const onThreadId = useCallback((id) => setMinted(id), []);
45
+ // ENG-222 — a conversation started via "New conversation" mints a thr_ the
46
+ // sidebar list has never seen; refresh so it appears (and highlights). The
47
+ // mint arrives at turn START while the row persists at turn END, and every
48
+ // refresh replaces `threads` with a fresh array — so a list that still lacks
49
+ // the id re-arms a SLOW timer instead of re-firing immediately (which would
50
+ // hot-loop GET /threads at network-RTT cadence for the whole turn).
51
+ const refreshedForRef = useRef(undefined);
52
+ useEffect(() => {
53
+ if (minted === undefined || threads.some(thread => thread.id === minted))
54
+ return;
55
+ if (refreshedForRef.current !== minted) {
56
+ refreshedForRef.current = minted;
57
+ void refresh();
58
+ return;
59
+ }
60
+ const timer = setTimeout(() => void refresh(), MINTED_RETRY_MS);
61
+ return () => clearTimeout(timer);
62
+ }, [minted, threads, refresh]);
63
+ return (_jsxs("div", { className: "fl-page-pane", style: {
64
+ display: "grid",
65
+ gap: 14,
66
+ // ENG-228: the sidebar+thread two-column grid is what crushed the
67
+ // thread to one character per line at 375px — below the breakpoint
68
+ // the conversation list stacks above a full-width thread.
69
+ gridTemplateColumns: takeover.active ? "minmax(0, 1fr)" : "minmax(180px, 240px) minmax(0, 1fr)",
70
+ gridTemplateRows: takeover.active ? "auto minmax(0, 1fr)" : undefined,
71
+ padding: 14,
72
+ }, children: [_jsxs("nav", { className: "fl-picker", "aria-label": "Conversations", style: { alignSelf: "stretch", display: "flex", flexDirection: "column", gap: 8, maxHeight: "none", maxWidth: "none", padding: 12 }, children: [_jsx("button", { type: "button", className: "fl-btn fl-btn-primary", onClick: () => { userChose.current = true; setSelected(undefined); setMinted(undefined); }, children: "New conversation" }), threads.map(thread => (_jsx("button", { type: "button", className: `fl-btn${activeId === thread.id ? " fl-btn-primary" : ""}`, "aria-current": activeId === thread.id ? "page" : undefined, onClick: () => { userChose.current = true; setSelected(thread.id); setMinted(undefined); }, style: { justifyContent: "flex-start", textAlign: "left" }, children: thread.title }, thread.id)))] }), _jsxs("div", { style: { display: "flex", flexDirection: "column", gap: 12, minHeight: 0 }, children: [_jsx(WaitingQueue, {}), _jsx("div", { style: { flex: 1, minHeight: 0, display: "flex", flexDirection: "column" }, children: _jsx(VendoThread, { threadId: selected, onThreadId: onThreadId, discoverability: userChose.current || (!isLoading && threadsError === undefined && threads.length === 0)
73
+ ? undefined
74
+ : "quiet" }) })] })] }));
75
+ }
76
+ function OpenApp({ appId }) {
77
+ const { client, components } = useVendoContext();
78
+ const { surface, refresh } = useApp(appId);
79
+ // Wave 7 H2 — same keepalive as VendoSlot's MountedApp (see frames.tsx).
80
+ const keepalive = useMemo(() => ({ ping: () => client.apps.pingMachine(appId), reopen: refresh }), [appId, client, refresh]);
81
+ if (!surface)
82
+ return _jsx("div", { role: "status", children: "Opening app\u2026" });
83
+ return _jsx(AppFrame, { surface: surface, components: components, keepalive: keepalive, onAction: ({ action, payload }) => client.apps.call(appId, action, payload ?? {}) }, appId);
84
+ }
85
+ function AppsWorkspace() {
86
+ const { apps, create, fork, remove } = useApps();
87
+ const [selected, setSelected] = useState();
88
+ const [prompt, setPrompt] = useState("");
89
+ const [error, setError] = useState();
90
+ const during = async (action) => {
91
+ setError(undefined);
92
+ try {
93
+ await action();
94
+ }
95
+ catch (reason) {
96
+ setError(reason instanceof Error ? reason.message : String(reason));
97
+ }
98
+ };
99
+ const submit = async (event) => {
100
+ event.preventDefault();
101
+ const value = prompt.trim();
102
+ if (!value)
103
+ return;
104
+ await during(async () => {
105
+ const app = await create(value);
106
+ setPrompt("");
107
+ setSelected(app.id);
108
+ });
109
+ };
110
+ return (_jsxs("div", { className: "fl-page-pane", style: { gap: 14, overflowY: "auto", padding: 14 }, children: [error ? _jsx("div", { role: "alert", className: "fl-error", children: error }) : null, _jsxs("form", { className: "fl-picker-toprow", "aria-label": "Create app", onSubmit: event => void submit(event), children: [_jsxs("label", { style: { flex: 1 }, children: [_jsx("span", { className: "fl-picker-group", style: { display: "block", margin: "0 2px 7px" }, children: "Describe a new app" }), _jsx("input", { className: "fl-picker-search", value: prompt, onChange: event => setPrompt(event.currentTarget.value) })] }), _jsx("button", { className: "fl-btn fl-btn-primary", type: "submit", disabled: !prompt.trim(), children: "Create" })] }), _jsx("div", { className: "fl-picker-grid", children: apps.map(app => (_jsxs("article", { className: "fl-picker-item fl-automation", style: { alignItems: "stretch", flexDirection: "column", padding: 0 }, children: [_jsxs("div", { className: "fl-auto-head", children: [_jsx("span", { className: "fl-auto-ic", "aria-hidden": "true", children: _jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("rect", { width: "7", height: "7", x: "3", y: "3", rx: "1" }), _jsx("rect", { width: "7", height: "7", x: "14", y: "3", rx: "1" }), _jsx("rect", { width: "7", height: "7", x: "3", y: "14", rx: "1" }), _jsx("rect", { width: "7", height: "7", x: "14", y: "14", rx: "1" })] }) }), _jsxs("div", { children: [_jsx("strong", { className: "fl-auto-title", children: app.name }), app.description ? _jsx("p", { className: "fl-auto-sub", style: { marginBottom: 0 }, children: app.description }) : null] })] }), _jsxs("div", { className: "fl-auto-flow", style: { gap: 8 }, children: [_jsx("button", { className: "fl-btn fl-btn-primary", type: "button", onClick: () => setSelected(app.id), children: "Open" }), _jsx("button", { className: "fl-btn", type: "button", onClick: () => void during(async () => { await fork(app.id); }), children: "Fork" }), _jsx("button", { className: "fl-btn fl-btn-ceremony", type: "button", onClick: () => {
111
+ if (globalThis.confirm?.(`Remove ${app.name}?`)) {
112
+ void during(async () => {
113
+ await remove(app.id);
114
+ if (selected === app.id)
115
+ setSelected(undefined);
116
+ });
117
+ }
118
+ }, children: "Remove" })] })] }, app.id))) }), selected ? _jsx("section", { className: "fl-glass", "aria-label": "Open app", children: _jsx(OpenApp, { appId: selected }, selected) }) : null] }));
119
+ }
120
+ /** 08-ui §4 — full workspace with WAI-ARIA automatic-activation tabs. */
121
+ export function VendoPage() {
122
+ const takeover = useMobileTakeover();
123
+ const [tab, setTab] = useState("chat");
124
+ const tabRefs = useRef([]);
125
+ // Lane pick 4-C — the Activity tab is the morph's dock anchor: the approved
126
+ // pill shrinks into it and this pulse answers, teaching where receipts live.
127
+ const [activityBump, setActivityBump] = useState(false);
128
+ useEffect(() => {
129
+ let timer;
130
+ const onBump = () => {
131
+ setActivityBump(false);
132
+ requestAnimationFrame(() => setActivityBump(true));
133
+ if (timer !== undefined)
134
+ window.clearTimeout(timer);
135
+ timer = window.setTimeout(() => setActivityBump(false), 700);
136
+ };
137
+ window.addEventListener(ACTIVITY_BUMP_EVENT, onBump);
138
+ return () => {
139
+ window.removeEventListener(ACTIVITY_BUMP_EVENT, onBump);
140
+ if (timer !== undefined)
141
+ window.clearTimeout(timer);
142
+ };
143
+ }, []);
144
+ const move = (event, index) => {
145
+ let next = index;
146
+ if (event.key === "ArrowRight")
147
+ next = (index + 1) % TABS.length;
148
+ else if (event.key === "ArrowLeft")
149
+ next = (index - 1 + TABS.length) % TABS.length;
150
+ else if (event.key === "Home")
151
+ next = 0;
152
+ else if (event.key === "End")
153
+ next = TABS.length - 1;
154
+ else
155
+ return;
156
+ event.preventDefault();
157
+ setTab(TABS[next]);
158
+ tabRefs.current[next]?.focus();
159
+ };
160
+ return (_jsx(ChromeRoot, { children: _jsx(TakeoverPortal, { active: takeover.active, children: _jsxs("main", { className: `fl-page${takeover.active ? " fl-takeover" : ""}`, style: takeover.style, "aria-label": "Vendo workspace", children: [_jsx("div", { className: "fl-tabbar", role: "tablist", "aria-label": "Workspace sections", children: TABS.map((item, index) => (_jsx("button", { ref: node => { tabRefs.current[index] = node; }, className: `fl-tab${item === "activity" && activityBump ? " fl-tab--bump" : ""}`, id: `vendo-tab-${item}`, type: "button", role: "tab", "aria-selected": tab === item, "aria-controls": `vendo-panel-${item}`, tabIndex: tab === item ? 0 : -1, onClick: () => setTab(item), onKeyDown: event => move(event, index), ...(item === "activity" ? { [ACTIVITY_ANCHOR_ATTRIBUTE]: "" } : {}), children: title(item) }, item))) }), _jsx("div", { className: "fl-page-body", children: _jsxs("section", { className: "fl-page-pane", id: `vendo-panel-${tab}`, role: "tabpanel", "aria-labelledby": `vendo-tab-${tab}`, children: [tab === "chat" ? _jsx(ChatWorkspace, {}) : null, tab === "apps" ? _jsx(AppsWorkspace, {}) : null, tab === "automations" ? _jsx(AutomationsPanel, {}) : null, tab === "accounts" ? _jsx(ConnectedAccountsPanel, {}) : null, tab === "activity" ? _jsx(ActivityPanel, {}) : null] }) })] }) }) }));
161
+ }
162
+ //# sourceMappingURL=vendo-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendo-page.js","sourceRoot":"","sources":["../../src/chrome/vendo-page.tsx"],"names":[],"mappings":"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"}