@cueplusplus/ui 0.2.0 → 0.5.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 (628) hide show
  1. package/CHANGELOG.md +2250 -0
  2. package/dist/agent-runtime/_glyphs.js +43 -0
  3. package/dist/agent-runtime/branch-picker.d.ts +45 -0
  4. package/dist/agent-runtime/branch-picker.js +87 -0
  5. package/dist/agent-runtime/index.d.ts +4 -0
  6. package/dist/agent-runtime/index.js +4 -0
  7. package/dist/agent-runtime/tool-call-card.d.ts +69 -0
  8. package/dist/agent-runtime/tool-call-card.js +187 -0
  9. package/dist/agent-runtime/use-agent-thread.d.ts +164 -0
  10. package/dist/agent-runtime/use-agent-thread.js +251 -0
  11. package/dist/brand/_chassis.d.ts +1 -1
  12. package/dist/brand/cue-mark.d.ts +1 -1
  13. package/dist/brand/cue-mark.js +1 -1
  14. package/dist/chat/index.d.ts +2 -2
  15. package/dist/chat/message-list.d.ts +6 -0
  16. package/dist/chat/message-list.js +35 -0
  17. package/dist/chrome/_edge-scroller.js +12 -1
  18. package/dist/chrome/_tabs-scroll.d.ts +1 -1
  19. package/dist/chrome/_tabs-scroll.js +1 -1
  20. package/dist/chrome/app-shell.d.ts +52 -2
  21. package/dist/chrome/app-shell.js +80 -8
  22. package/dist/chrome/index.d.ts +2 -2
  23. package/dist/configurator/_export.js +3 -2
  24. package/dist/configurator/_overrides.d.ts +1 -1
  25. package/dist/configurator/_overrides.js +18 -6
  26. package/dist/configurator/token-editor.js +4 -1
  27. package/dist/date/_segments.js +37 -2
  28. package/dist/elements/activity-graph.d.ts +40 -0
  29. package/dist/elements/activity-graph.js +81 -0
  30. package/dist/elements/agent-card.d.ts +49 -0
  31. package/dist/elements/agent-card.js +91 -0
  32. package/dist/elements/agent-handoff.d.ts +24 -0
  33. package/dist/elements/agent-handoff.js +53 -0
  34. package/dist/elements/agent-mode-badge.d.ts +72 -0
  35. package/dist/elements/agent-mode-badge.js +110 -0
  36. package/dist/elements/agent-plan.d.ts +24 -0
  37. package/dist/elements/agent-plan.js +74 -0
  38. package/dist/elements/agent-status.d.ts +29 -0
  39. package/dist/elements/agent-status.js +46 -0
  40. package/dist/elements/agent-surface.d.ts +65 -0
  41. package/dist/elements/agent-surface.js +68 -0
  42. package/dist/elements/animated-number.d.ts +86 -0
  43. package/dist/elements/animated-number.js +118 -0
  44. package/dist/elements/approval-card.d.ts +40 -0
  45. package/dist/elements/approval-card.js +78 -0
  46. package/dist/elements/artifact-card.d.ts +30 -0
  47. package/dist/elements/artifact-card.js +58 -0
  48. package/dist/elements/background-inbox.d.ts +39 -0
  49. package/dist/elements/background-inbox.js +60 -0
  50. package/dist/elements/canvas-split.d.ts +77 -0
  51. package/dist/elements/canvas-split.js +138 -0
  52. package/dist/elements/chart.d.ts +41 -0
  53. package/dist/elements/chart.js +117 -0
  54. package/dist/elements/chat-panel.d.ts +46 -0
  55. package/dist/elements/chat-panel.js +104 -0
  56. package/dist/elements/checkpoint-history.d.ts +31 -0
  57. package/dist/elements/checkpoint-history.js +65 -0
  58. package/dist/elements/clamp.d.ts +90 -0
  59. package/dist/elements/clamp.js +109 -0
  60. package/dist/elements/code-diff.d.ts +42 -0
  61. package/dist/elements/code-diff.js +69 -0
  62. package/dist/elements/code-runner.d.ts +38 -0
  63. package/dist/elements/code-runner.js +84 -0
  64. package/dist/elements/command-palette.d.ts +48 -0
  65. package/dist/elements/command-palette.js +129 -0
  66. package/dist/elements/compaction-row.d.ts +63 -0
  67. package/dist/elements/compaction-row.js +110 -0
  68. package/dist/elements/comparison-card.d.ts +47 -0
  69. package/dist/elements/comparison-card.js +69 -0
  70. package/dist/elements/composer.d.ts +274 -0
  71. package/dist/elements/composer.js +505 -0
  72. package/dist/elements/computer-use.d.ts +40 -0
  73. package/dist/elements/computer-use.js +92 -0
  74. package/dist/elements/confidence-marker.d.ts +39 -0
  75. package/dist/elements/confidence-marker.js +64 -0
  76. package/dist/elements/connection-state.d.ts +29 -0
  77. package/dist/elements/connection-state.js +66 -0
  78. package/dist/elements/context-breakdown.d.ts +30 -0
  79. package/dist/elements/context-breakdown.js +86 -0
  80. package/dist/elements/context-usage.d.ts +99 -0
  81. package/dist/elements/context-usage.js +225 -0
  82. package/dist/elements/conversation-search.d.ts +48 -0
  83. package/dist/elements/conversation-search.js +88 -0
  84. package/dist/elements/cost-meter.d.ts +33 -0
  85. package/dist/elements/cost-meter.js +75 -0
  86. package/dist/elements/data-table.d.ts +31 -0
  87. package/dist/elements/data-table.js +67 -0
  88. package/dist/elements/day-separator.d.ts +34 -0
  89. package/dist/elements/day-separator.js +50 -0
  90. package/dist/elements/diagram.d.ts +34 -0
  91. package/dist/elements/diagram.js +75 -0
  92. package/dist/elements/document-reference.d.ts +37 -0
  93. package/dist/elements/document-reference.js +66 -0
  94. package/dist/elements/draft-restore.d.ts +27 -0
  95. package/dist/elements/draft-restore.js +54 -0
  96. package/dist/elements/edit-message.d.ts +36 -0
  97. package/dist/elements/edit-message.js +77 -0
  98. package/dist/elements/elements.css +459 -0
  99. package/dist/elements/elicitation-form.d.ts +48 -0
  100. package/dist/elements/elicitation-form.js +106 -0
  101. package/dist/elements/empty-state.d.ts +52 -0
  102. package/dist/elements/empty-state.js +98 -0
  103. package/dist/elements/end-of-turn-summary.d.ts +60 -0
  104. package/dist/elements/end-of-turn-summary.js +75 -0
  105. package/dist/elements/error-state.d.ts +29 -0
  106. package/dist/elements/error-state.js +55 -0
  107. package/dist/elements/feedback-dialog.d.ts +36 -0
  108. package/dist/elements/feedback-dialog.js +81 -0
  109. package/dist/elements/file-tree.d.ts +45 -0
  110. package/dist/elements/file-tree.js +84 -0
  111. package/dist/elements/flow-graph.d.ts +45 -0
  112. package/dist/elements/flow-graph.js +78 -0
  113. package/dist/elements/generative/chart.js +200 -0
  114. package/dist/elements/generative/faults.js +111 -0
  115. package/dist/elements/generative/icons.d.ts +41 -0
  116. package/dist/elements/generative/icons.js +190 -0
  117. package/dist/elements/generative/intrinsics.js +483 -0
  118. package/dist/elements/generative/spec.d.ts +110 -0
  119. package/dist/elements/generative/spec.js +366 -0
  120. package/dist/elements/generative.css +1145 -0
  121. package/dist/elements/generative.d.ts +144 -0
  122. package/dist/elements/generative.js +126 -0
  123. package/dist/elements/guardrail-notice.d.ts +29 -0
  124. package/dist/elements/guardrail-notice.js +63 -0
  125. package/dist/elements/image-generation.d.ts +18 -0
  126. package/dist/elements/image-generation.js +64 -0
  127. package/dist/elements/index.d.ts +116 -0
  128. package/dist/elements/index.js +115 -0
  129. package/dist/elements/inline-citation.d.ts +43 -0
  130. package/dist/elements/inline-citation.js +93 -0
  131. package/dist/elements/job-progress.d.ts +49 -0
  132. package/dist/elements/job-progress.js +74 -0
  133. package/dist/elements/launcher-bubble.d.ts +34 -0
  134. package/dist/elements/launcher-bubble.js +72 -0
  135. package/dist/elements/live-region-announcer.d.ts +130 -0
  136. package/dist/elements/live-region-announcer.js +230 -0
  137. package/dist/elements/loading-state.d.ts +27 -0
  138. package/dist/elements/loading-state.js +36 -0
  139. package/dist/elements/map-answer.d.ts +38 -0
  140. package/dist/elements/map-answer.js +93 -0
  141. package/dist/elements/markdown.d.ts +131 -0
  142. package/dist/elements/markdown.js +528 -0
  143. package/dist/elements/math-block.d.ts +51 -0
  144. package/dist/elements/math-block.js +70 -0
  145. package/dist/elements/mcp-server-panel.d.ts +41 -0
  146. package/dist/elements/mcp-server-panel.js +115 -0
  147. package/dist/elements/memory-chips.d.ts +30 -0
  148. package/dist/elements/memory-chips.js +43 -0
  149. package/dist/elements/message-actions.d.ts +38 -0
  150. package/dist/elements/message-actions.js +71 -0
  151. package/dist/elements/message-attachment.d.ts +48 -0
  152. package/dist/elements/message-attachment.js +63 -0
  153. package/dist/elements/message-branches.d.ts +25 -0
  154. package/dist/elements/message-branches.js +65 -0
  155. package/dist/elements/message-pair.d.ts +33 -0
  156. package/dist/elements/message-pair.js +65 -0
  157. package/dist/elements/message-queue.d.ts +31 -0
  158. package/dist/elements/message-queue.js +80 -0
  159. package/dist/elements/message-timing.d.ts +33 -0
  160. package/dist/elements/message-timing.js +37 -0
  161. package/dist/elements/mobile-composer.d.ts +44 -0
  162. package/dist/elements/mobile-composer.js +88 -0
  163. package/dist/elements/model-picker.d.ts +38 -0
  164. package/dist/elements/model-picker.js +69 -0
  165. package/dist/elements/number-ticker.d.ts +18 -0
  166. package/dist/elements/number-ticker.js +47 -0
  167. package/dist/elements/onboarding.d.ts +30 -0
  168. package/dist/elements/onboarding.js +75 -0
  169. package/dist/elements/permission-grant.d.ts +35 -0
  170. package/dist/elements/permission-grant.js +86 -0
  171. package/dist/elements/permission-scopes.d.ts +215 -0
  172. package/dist/elements/permission-scopes.js +249 -0
  173. package/dist/elements/prompt-library.d.ts +43 -0
  174. package/dist/elements/prompt-library.js +117 -0
  175. package/dist/elements/queue-dock.d.ts +101 -0
  176. package/dist/elements/queue-dock.js +132 -0
  177. package/dist/elements/quota-banner.d.ts +26 -0
  178. package/dist/elements/quota-banner.js +66 -0
  179. package/dist/elements/quote-reply.d.ts +44 -0
  180. package/dist/elements/quote-reply.js +79 -0
  181. package/dist/elements/range.d.ts +29 -0
  182. package/dist/elements/range.js +45 -0
  183. package/dist/elements/read-aloud.d.ts +45 -0
  184. package/dist/elements/read-aloud.js +75 -0
  185. package/dist/elements/reasoning-effort.d.ts +36 -0
  186. package/dist/elements/reasoning-effort.js +67 -0
  187. package/dist/elements/reasoning-panel.d.ts +46 -0
  188. package/dist/elements/reasoning-panel.js +75 -0
  189. package/dist/elements/recommendation-card.d.ts +45 -0
  190. package/dist/elements/recommendation-card.js +83 -0
  191. package/dist/elements/regenerate-menu.d.ts +45 -0
  192. package/dist/elements/regenerate-menu.js +51 -0
  193. package/dist/elements/replay.d.ts +217 -0
  194. package/dist/elements/replay.js +498 -0
  195. package/dist/elements/research-report.d.ts +38 -0
  196. package/dist/elements/research-report.js +69 -0
  197. package/dist/elements/retrieval-chunks.d.ts +43 -0
  198. package/dist/elements/retrieval-chunks.js +81 -0
  199. package/dist/elements/revert-dock.d.ts +159 -0
  200. package/dist/elements/revert-dock.js +327 -0
  201. package/dist/elements/reviewable-diff.d.ts +45 -0
  202. package/dist/elements/reviewable-diff.js +110 -0
  203. package/dist/elements/risk-badge.d.ts +52 -0
  204. package/dist/elements/risk-badge.js +91 -0
  205. package/dist/elements/schedule-card.d.ts +42 -0
  206. package/dist/elements/schedule-card.js +90 -0
  207. package/dist/elements/score-breakdown.d.ts +47 -0
  208. package/dist/elements/score-breakdown.js +82 -0
  209. package/dist/elements/scroll-anchor.d.ts +32 -0
  210. package/dist/elements/scroll-anchor.js +121 -0
  211. package/dist/elements/settings-panel.d.ts +52 -0
  212. package/dist/elements/settings-panel.js +107 -0
  213. package/dist/elements/shared-conversation.d.ts +39 -0
  214. package/dist/elements/shared-conversation.js +68 -0
  215. package/dist/elements/sources.d.ts +33 -0
  216. package/dist/elements/sources.js +61 -0
  217. package/dist/elements/speaker-identity.d.ts +32 -0
  218. package/dist/elements/speaker-identity.js +51 -0
  219. package/dist/elements/spec-sheet.d.ts +31 -0
  220. package/dist/elements/spec-sheet.js +45 -0
  221. package/dist/elements/stopped-run.d.ts +22 -0
  222. package/dist/elements/stopped-run.js +50 -0
  223. package/dist/elements/streaming-text.d.ts +31 -0
  224. package/dist/elements/streaming-text.js +45 -0
  225. package/dist/elements/subagent-list.d.ts +37 -0
  226. package/dist/elements/subagent-list.js +79 -0
  227. package/dist/elements/suggestions.d.ts +30 -0
  228. package/dist/elements/suggestions.js +36 -0
  229. package/dist/elements/surfaces.d.ts +85 -0
  230. package/dist/elements/surfaces.js +107 -0
  231. package/dist/elements/tail-status.d.ts +131 -0
  232. package/dist/elements/tail-status.js +94 -0
  233. package/dist/elements/terminal-block.d.ts +29 -0
  234. package/dist/elements/terminal-block.js +54 -0
  235. package/dist/elements/thinking-indicator.d.ts +18 -0
  236. package/dist/elements/thinking-indicator.js +36 -0
  237. package/dist/elements/thread-list.d.ts +35 -0
  238. package/dist/elements/thread-list.js +68 -0
  239. package/dist/elements/thread-search.d.ts +42 -0
  240. package/dist/elements/thread-search.js +99 -0
  241. package/dist/elements/timeline.d.ts +37 -0
  242. package/dist/elements/timeline.js +46 -0
  243. package/dist/elements/todo-list.d.ts +42 -0
  244. package/dist/elements/todo-list.js +59 -0
  245. package/dist/elements/tool-call.d.ts +41 -0
  246. package/dist/elements/tool-call.js +85 -0
  247. package/dist/elements/tool-error.d.ts +39 -0
  248. package/dist/elements/tool-error.js +76 -0
  249. package/dist/elements/tool-group.d.ts +45 -0
  250. package/dist/elements/tool-group.js +71 -0
  251. package/dist/elements/tool-timeline.d.ts +65 -0
  252. package/dist/elements/tool-timeline.js +88 -0
  253. package/dist/elements/trace-waterfall.d.ts +37 -0
  254. package/dist/elements/trace-waterfall.js +69 -0
  255. package/dist/elements/transcript-rules.d.ts +67 -0
  256. package/dist/elements/transcript-rules.js +95 -0
  257. package/dist/elements/turn-footer.d.ts +74 -0
  258. package/dist/elements/turn-footer.js +101 -0
  259. package/dist/elements/typing-indicator.d.ts +16 -0
  260. package/dist/elements/typing-indicator.js +51 -0
  261. package/dist/elements/verdict-row.d.ts +89 -0
  262. package/dist/elements/verdict-row.js +150 -0
  263. package/dist/elements/vocabulary.d.ts +612 -0
  264. package/dist/elements/vocabulary.js +611 -0
  265. package/dist/elements/voice-conversation.d.ts +49 -0
  266. package/dist/elements/voice-conversation.js +123 -0
  267. package/dist/elements/web-preview.d.ts +32 -0
  268. package/dist/elements/web-preview.js +66 -0
  269. package/dist/elements/web-search.d.ts +37 -0
  270. package/dist/elements/web-search.js +66 -0
  271. package/dist/elements/work-collapse.d.ts +103 -0
  272. package/dist/elements/work-collapse.js +131 -0
  273. package/dist/icons/containers.d.ts +89 -0
  274. package/dist/icons/containers.js +295 -0
  275. package/dist/icons/index.d.ts +2 -0
  276. package/dist/index.d.ts +9 -7
  277. package/dist/index.js +3 -2
  278. package/dist/instruments/index.d.ts +2 -2
  279. package/dist/instruments/index.js +2 -2
  280. package/dist/instruments/table.d.ts +14 -1
  281. package/dist/instruments/table.js +20 -1
  282. package/dist/instruments/two-step-button.js +25 -6
  283. package/dist/layout/sidebar.d.ts +19 -1
  284. package/dist/layout/sidebar.js +19 -1
  285. package/dist/primitives/button.js +11 -1
  286. package/dist/primitives/chip.d.ts +34 -8
  287. package/dist/primitives/chip.js +97 -11
  288. package/dist/styles.css +11 -1
  289. package/dist/system/agent-skin.d.ts +27 -0
  290. package/dist/system/agent-skin.js +20 -0
  291. package/dist/system/index.d.ts +3 -3
  292. package/dist/system/portal.d.ts +5 -3
  293. package/dist/system/portal.js +36 -8
  294. package/dist/system/prepaint.d.ts +20 -2
  295. package/dist/system/prepaint.js +39 -33
  296. package/dist/system/theme-provider.d.ts +13 -2
  297. package/dist/system/theme-provider.js +107 -26
  298. package/dist/system/use-density.d.ts +9 -0
  299. package/dist/system/use-density.js +9 -0
  300. package/dist/system/use-isomorphic-layout-effect.js +19 -1
  301. package/dist/theming/_presets.d.ts +1 -1
  302. package/dist/theming/_presets.js +124 -8
  303. package/dist/theming/contrast.d.ts +16 -4
  304. package/dist/theming/contrast.js +33 -6
  305. package/dist/theming/create-theme.d.ts +8 -4
  306. package/dist/theming/create-theme.js +56 -20
  307. package/dist/theming/serialize.d.ts +11 -2
  308. package/dist/theming/serialize.js +87 -9
  309. package/manifest/components/accordion.json +154 -0
  310. package/manifest/components/activity-graph.json +88 -0
  311. package/manifest/components/agent-card.json +120 -0
  312. package/manifest/components/agent-handoff.json +87 -0
  313. package/manifest/components/agent-mode-badge.json +84 -0
  314. package/manifest/components/agent-pile.json +116 -0
  315. package/manifest/components/agent-plan.json +67 -0
  316. package/manifest/components/agent-status.json +73 -0
  317. package/manifest/components/agent-surface.json +78 -0
  318. package/manifest/components/alert-dialog.json +190 -0
  319. package/manifest/components/animated-number.json +67 -0
  320. package/manifest/components/app-bar.json +244 -0
  321. package/manifest/components/app-shell.json +383 -0
  322. package/manifest/components/app-window-frame.json +102 -0
  323. package/manifest/components/approval-card.json +106 -0
  324. package/manifest/components/artifact-card.json +81 -0
  325. package/manifest/components/ask-box.json +209 -0
  326. package/manifest/components/audience-icon.json +52 -0
  327. package/manifest/components/autocomplete.json +197 -0
  328. package/manifest/components/avatar-group.json +72 -0
  329. package/manifest/components/avatar.json +95 -0
  330. package/manifest/components/background-inbox.json +71 -0
  331. package/manifest/components/branch-picker.json +124 -0
  332. package/manifest/components/breadcrumb.json +74 -0
  333. package/manifest/components/button-group.json +74 -0
  334. package/manifest/components/button.json +126 -0
  335. package/manifest/components/calendar.json +65 -0
  336. package/manifest/components/canvas-split-body.json +62 -0
  337. package/manifest/components/canvas-split-document.json +54 -0
  338. package/manifest/components/canvas-split-header.json +83 -0
  339. package/manifest/components/canvas-split-line.json +62 -0
  340. package/manifest/components/canvas-split-message.json +62 -0
  341. package/manifest/components/canvas-split-thread.json +54 -0
  342. package/manifest/components/canvas-split.json +60 -0
  343. package/manifest/components/card.json +140 -0
  344. package/manifest/components/carousel.json +200 -0
  345. package/manifest/components/catalogue-icon.json +52 -0
  346. package/manifest/components/channel-beta-icon.json +52 -0
  347. package/manifest/components/channel-matrix.json +173 -0
  348. package/manifest/components/channel-released-icon.json +52 -0
  349. package/manifest/components/chart-container.json +111 -0
  350. package/manifest/components/chart-ramp.json +72 -0
  351. package/manifest/components/chart-swatch.json +65 -0
  352. package/manifest/components/chart-tooltip-content.json +114 -0
  353. package/manifest/components/chart.json +93 -0
  354. package/manifest/components/chat-empty-state.json +55 -0
  355. package/manifest/components/chat-panel-assistant-message.json +51 -0
  356. package/manifest/components/chat-panel-composer.json +66 -0
  357. package/manifest/components/chat-panel-messages.json +51 -0
  358. package/manifest/components/chat-panel-typing.json +51 -0
  359. package/manifest/components/chat-panel-user-message.json +51 -0
  360. package/manifest/components/chat-panel.json +57 -0
  361. package/manifest/components/checkbox-group.json +68 -0
  362. package/manifest/components/checkbox.json +93 -0
  363. package/manifest/components/checkpoint-history.json +80 -0
  364. package/manifest/components/chip.json +144 -0
  365. package/manifest/components/clamp.json +102 -0
  366. package/manifest/components/cli-tool-icon.json +52 -0
  367. package/manifest/components/code-diff.json +87 -0
  368. package/manifest/components/code-runner.json +97 -0
  369. package/manifest/components/collapsible.json +120 -0
  370. package/manifest/components/color-area.json +59 -0
  371. package/manifest/components/color-field.json +79 -0
  372. package/manifest/components/color-picker.json +175 -0
  373. package/manifest/components/color-slider.json +75 -0
  374. package/manifest/components/color-swatch.json +68 -0
  375. package/manifest/components/colors-section.json +66 -0
  376. package/manifest/components/combobox.json +198 -0
  377. package/manifest/components/command-palette.json +177 -0
  378. package/manifest/components/compaction-row.json +100 -0
  379. package/manifest/components/comparison-card.json +83 -0
  380. package/manifest/components/composer-actions.json +65 -0
  381. package/manifest/components/composer-attach-button.json +65 -0
  382. package/manifest/components/composer-attachment-chip.json +75 -0
  383. package/manifest/components/composer-attachments.json +60 -0
  384. package/manifest/components/composer-bar.json +73 -0
  385. package/manifest/components/composer-command-item.json +79 -0
  386. package/manifest/components/composer-context.json +67 -0
  387. package/manifest/components/composer-input.json +73 -0
  388. package/manifest/components/composer-menu-item.json +72 -0
  389. package/manifest/components/composer-menu.json +79 -0
  390. package/manifest/components/composer-model-item.json +75 -0
  391. package/manifest/components/composer-model-trigger.json +75 -0
  392. package/manifest/components/composer-person-item.json +79 -0
  393. package/manifest/components/composer-send.json +80 -0
  394. package/manifest/components/composer-toolbar.json +65 -0
  395. package/manifest/components/composer-voice-button.json +68 -0
  396. package/manifest/components/composer-voice.json +75 -0
  397. package/manifest/components/composer.json +176 -0
  398. package/manifest/components/computer-use.json +84 -0
  399. package/manifest/components/confidence-marker.json +74 -0
  400. package/manifest/components/connection-state.json +84 -0
  401. package/manifest/components/container.json +60 -0
  402. package/manifest/components/context-breakdown.json +65 -0
  403. package/manifest/components/context-menu.json +121 -0
  404. package/manifest/components/context-usage.json +85 -0
  405. package/manifest/components/conversation-search.json +92 -0
  406. package/manifest/components/copy-button.json +93 -0
  407. package/manifest/components/cost-meter.json +74 -0
  408. package/manifest/components/cue-logotype.json +96 -0
  409. package/manifest/components/cue-mark.json +97 -0
  410. package/manifest/components/cue-portal-frame.json +55 -0
  411. package/manifest/components/data-table-pagination.json +83 -0
  412. package/manifest/components/data-table-toolbar.json +104 -0
  413. package/manifest/components/date-field.json +80 -0
  414. package/manifest/components/date-picker.json +191 -0
  415. package/manifest/components/date-range-picker.json +191 -0
  416. package/manifest/components/day-separator.json +58 -0
  417. package/manifest/components/delegation-card.json +144 -0
  418. package/manifest/components/density.json +58 -0
  419. package/manifest/components/description-list.json +84 -0
  420. package/manifest/components/diagram.json +100 -0
  421. package/manifest/components/dialog.json +198 -0
  422. package/manifest/components/disclosure.json +109 -0
  423. package/manifest/components/dmx-bar.json +94 -0
  424. package/manifest/components/dmx-strip.json +101 -0
  425. package/manifest/components/document-reference.json +90 -0
  426. package/manifest/components/draft-restore.json +82 -0
  427. package/manifest/components/drawer.json +179 -0
  428. package/manifest/components/dropdown-menu.json +229 -0
  429. package/manifest/components/edit-message.json +105 -0
  430. package/manifest/components/elements-command-palette.json +100 -0
  431. package/manifest/components/elements-composer.json +71 -0
  432. package/manifest/components/elements-data-table.json +68 -0
  433. package/manifest/components/elements-timeline.json +69 -0
  434. package/manifest/components/elicitation-form.json +103 -0
  435. package/manifest/components/empty-state-composer.json +64 -0
  436. package/manifest/components/empty-state-greeting.json +49 -0
  437. package/manifest/components/empty-state-suggestion.json +57 -0
  438. package/manifest/components/empty-state-suggestions.json +49 -0
  439. package/manifest/components/empty-state.json +90 -0
  440. package/manifest/components/end-of-turn-summary.json +77 -0
  441. package/manifest/components/env-var-input.json +150 -0
  442. package/manifest/components/error-state.json +80 -0
  443. package/manifest/components/export-dialog.json +84 -0
  444. package/manifest/components/eyebrow.json +56 -0
  445. package/manifest/components/feedback-dialog.json +107 -0
  446. package/manifest/components/field-description.json +63 -0
  447. package/manifest/components/field-error.json +77 -0
  448. package/manifest/components/field-label.json +63 -0
  449. package/manifest/components/field.json +79 -0
  450. package/manifest/components/file-tree.json +83 -0
  451. package/manifest/components/file-upload.json +159 -0
  452. package/manifest/components/flow-background.json +50 -0
  453. package/manifest/components/flow-controls.json +50 -0
  454. package/manifest/components/flow-graph.json +75 -0
  455. package/manifest/components/folder-icon.json +52 -0
  456. package/manifest/components/footer.json +112 -0
  457. package/manifest/components/frac.json +59 -0
  458. package/manifest/components/generation-loader.json +64 -0
  459. package/manifest/components/generative-ui.json +93 -0
  460. package/manifest/components/grid.json +81 -0
  461. package/manifest/components/group-bar.json +102 -0
  462. package/manifest/components/guardrail-notice.json +91 -0
  463. package/manifest/components/hover-card.json +151 -0
  464. package/manifest/components/icon-button.json +88 -0
  465. package/manifest/components/image-generation.json +67 -0
  466. package/manifest/components/info-tip.json +98 -0
  467. package/manifest/components/inline-citation.json +77 -0
  468. package/manifest/components/input-group.json +91 -0
  469. package/manifest/components/input.json +89 -0
  470. package/manifest/components/item.json +129 -0
  471. package/manifest/components/job-progress.json +96 -0
  472. package/manifest/components/kbd.json +52 -0
  473. package/manifest/components/launcher-bubble.json +105 -0
  474. package/manifest/components/link.json +81 -0
  475. package/manifest/components/live-region-announcer.json +79 -0
  476. package/manifest/components/log-viewer.json +139 -0
  477. package/manifest/components/map-answer.json +83 -0
  478. package/manifest/components/markdown-text.json +94 -0
  479. package/manifest/components/math-block.json +74 -0
  480. package/manifest/components/mcp-server-icon.json +52 -0
  481. package/manifest/components/mcp-server-panel.json +87 -0
  482. package/manifest/components/memory-chips.json +65 -0
  483. package/manifest/components/menubar.json +157 -0
  484. package/manifest/components/message-actions.json +99 -0
  485. package/manifest/components/message-attachments.json +63 -0
  486. package/manifest/components/message-branches.json +71 -0
  487. package/manifest/components/message-list.json +100 -0
  488. package/manifest/components/message-pair.json +86 -0
  489. package/manifest/components/message-queue.json +74 -0
  490. package/manifest/components/message-timing.json +62 -0
  491. package/manifest/components/message.json +116 -0
  492. package/manifest/components/meter.json +114 -0
  493. package/manifest/components/mobile-composer.json +126 -0
  494. package/manifest/components/model-picker.json +76 -0
  495. package/manifest/components/multi-select.json +190 -0
  496. package/manifest/components/musical-time-input.json +113 -0
  497. package/manifest/components/navigation-menu.json +226 -0
  498. package/manifest/components/node-card.json +109 -0
  499. package/manifest/components/node-handle.json +69 -0
  500. package/manifest/components/number-field.json +107 -0
  501. package/manifest/components/number-ticker.json +61 -0
  502. package/manifest/components/onboarding.json +84 -0
  503. package/manifest/components/otp-field.json +128 -0
  504. package/manifest/components/page-shell.json +96 -0
  505. package/manifest/components/pagination.json +92 -0
  506. package/manifest/components/panel-header.json +77 -0
  507. package/manifest/components/panel.json +71 -0
  508. package/manifest/components/password-input.json +119 -0
  509. package/manifest/components/permission-grant.json +92 -0
  510. package/manifest/components/permission-scopes.json +139 -0
  511. package/manifest/components/piano-keyboard.json +120 -0
  512. package/manifest/components/plussie.json +111 -0
  513. package/manifest/components/popover.json +193 -0
  514. package/manifest/components/preset-section.json +73 -0
  515. package/manifest/components/progress.json +95 -0
  516. package/manifest/components/prompt-library.json +99 -0
  517. package/manifest/components/queue-dock.json +110 -0
  518. package/manifest/components/quota-banner.json +94 -0
  519. package/manifest/components/quote-reply.json +105 -0
  520. package/manifest/components/radio-group.json +73 -0
  521. package/manifest/components/radio.json +80 -0
  522. package/manifest/components/rating.json +141 -0
  523. package/manifest/components/read-aloud.json +111 -0
  524. package/manifest/components/reasoning-effort.json +81 -0
  525. package/manifest/components/reasoning-panel.json +108 -0
  526. package/manifest/components/recommendation-card.json +107 -0
  527. package/manifest/components/regenerate-menu.json +89 -0
  528. package/manifest/components/replay-player.json +102 -0
  529. package/manifest/components/research-report.json +76 -0
  530. package/manifest/components/resizable.json +88 -0
  531. package/manifest/components/retrieval-chunks.json +84 -0
  532. package/manifest/components/revert-dock.json +150 -0
  533. package/manifest/components/reviewable-diff.json +93 -0
  534. package/manifest/components/risk-badge.json +74 -0
  535. package/manifest/components/row.json +109 -0
  536. package/manifest/components/schedule-card.json +101 -0
  537. package/manifest/components/score-breakdown.json +91 -0
  538. package/manifest/components/scroll-anchor.json +72 -0
  539. package/manifest/components/scroll-area.json +91 -0
  540. package/manifest/components/scrollable-tabs-list.json +83 -0
  541. package/manifest/components/scrub-input.json +200 -0
  542. package/manifest/components/seam-cell.json +75 -0
  543. package/manifest/components/seam-grid.json +75 -0
  544. package/manifest/components/seam-list.json +56 -0
  545. package/manifest/components/search-input.json +134 -0
  546. package/manifest/components/section-header.json +112 -0
  547. package/manifest/components/segmented-control.json +138 -0
  548. package/manifest/components/select.json +194 -0
  549. package/manifest/components/separator.json +53 -0
  550. package/manifest/components/settings-panel.json +118 -0
  551. package/manifest/components/shape-section.json +66 -0
  552. package/manifest/components/shared-conversation.json +89 -0
  553. package/manifest/components/sheet.json +186 -0
  554. package/manifest/components/shimmer-label.json +59 -0
  555. package/manifest/components/sidebar.json +198 -0
  556. package/manifest/components/signal-edge.json +56 -0
  557. package/manifest/components/skeleton.json +46 -0
  558. package/manifest/components/skill-icon.json +52 -0
  559. package/manifest/components/slider.json +89 -0
  560. package/manifest/components/sources.json +83 -0
  561. package/manifest/components/sparkline.json +76 -0
  562. package/manifest/components/speaker-identity.json +61 -0
  563. package/manifest/components/spec-sheet.json +80 -0
  564. package/manifest/components/spectrum-visualizer.json +115 -0
  565. package/manifest/components/spinner.json +61 -0
  566. package/manifest/components/stack-icon.json +52 -0
  567. package/manifest/components/stack.json +96 -0
  568. package/manifest/components/stacks-matrix-icon.json +52 -0
  569. package/manifest/components/stat.json +87 -0
  570. package/manifest/components/status-bar.json +58 -0
  571. package/manifest/components/status-dot.json +78 -0
  572. package/manifest/components/stepper.json +89 -0
  573. package/manifest/components/stopped-run.json +81 -0
  574. package/manifest/components/streaming-text.json +71 -0
  575. package/manifest/components/sub.json +44 -0
  576. package/manifest/components/subagent-list.json +88 -0
  577. package/manifest/components/suggestions.json +84 -0
  578. package/manifest/components/sup.json +44 -0
  579. package/manifest/components/swap-label.json +71 -0
  580. package/manifest/components/switch.json +87 -0
  581. package/manifest/components/table-scroll-region.json +69 -0
  582. package/manifest/components/table.json +155 -0
  583. package/manifest/components/tabs.json +145 -0
  584. package/manifest/components/tags-input.json +190 -0
  585. package/manifest/components/tail-status.json +109 -0
  586. package/manifest/components/terminal-block.json +91 -0
  587. package/manifest/components/terminal-frame.json +119 -0
  588. package/manifest/components/textarea.json +76 -0
  589. package/manifest/components/theme-configurator.json +124 -0
  590. package/manifest/components/theme-provider.json +134 -0
  591. package/manifest/components/thinking-indicator.json +63 -0
  592. package/manifest/components/thread-list.json +76 -0
  593. package/manifest/components/thread-search.json +90 -0
  594. package/manifest/components/threshold-rail.json +160 -0
  595. package/manifest/components/time-boundary.json +62 -0
  596. package/manifest/components/time-field.json +80 -0
  597. package/manifest/components/timeline-ruler.json +139 -0
  598. package/manifest/components/timeline.json +115 -0
  599. package/manifest/components/title-bar.json +82 -0
  600. package/manifest/components/toast.json +130 -0
  601. package/manifest/components/todo-list.json +69 -0
  602. package/manifest/components/toggle-group.json +106 -0
  603. package/manifest/components/toggle.json +109 -0
  604. package/manifest/components/token-editor.json +90 -0
  605. package/manifest/components/tool-call-card.json +200 -0
  606. package/manifest/components/tool-call.json +119 -0
  607. package/manifest/components/tool-error.json +114 -0
  608. package/manifest/components/tool-group.json +83 -0
  609. package/manifest/components/tool-timeline.json +119 -0
  610. package/manifest/components/toolbar.json +163 -0
  611. package/manifest/components/tooltip.json +164 -0
  612. package/manifest/components/trace-waterfall.json +74 -0
  613. package/manifest/components/tree-visibility-toggle.json +84 -0
  614. package/manifest/components/tree.json +140 -0
  615. package/manifest/components/turn-footer.json +105 -0
  616. package/manifest/components/two-step-button.json +113 -0
  617. package/manifest/components/typing-indicator.json +53 -0
  618. package/manifest/components/universe-grid.json +127 -0
  619. package/manifest/components/unread-divider.json +55 -0
  620. package/manifest/components/usage-chart.json +124 -0
  621. package/manifest/components/verdict-row.json +91 -0
  622. package/manifest/components/voice-conversation.json +109 -0
  623. package/manifest/components/web-preview.json +87 -0
  624. package/manifest/components/web-search.json +92 -0
  625. package/manifest/components/work-collapse.json +102 -0
  626. package/manifest/manifest.json +4779 -0
  627. package/manifest/tokens.json +159 -0
  628. package/package.json +54 -5
@@ -0,0 +1,29 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/terminal-block.d.ts
3
+ /**
4
+ * Command output that streams line by line and ends with an exit status.
5
+ *
6
+ * @example
7
+ * import { TerminalBlock } from "@cueplusplus/ui/elements";
8
+ *
9
+ * <TerminalBlock
10
+ * command="pnpm test"
11
+ * lines={["PASS thread.test.ts", "Tests: 2 passed"]}
12
+ * visibleCount={2}
13
+ * done
14
+ * />
15
+ */
16
+ declare function TerminalBlock({ command, lines, visibleCount, done, variant, className, ...props }: Omit<ComponentProps<"div">, "children" | "command" | "lines" | "visibleCount" | "done" | "variant"> & {
17
+ /** Command string shown in the terminal header. */
18
+ command: string;
19
+ /** Output lines available to stream into the body. */
20
+ lines: readonly string[];
21
+ /** How many output lines from the start are currently shown. */
22
+ visibleCount: number;
23
+ /** When true the header shows exit 0; otherwise a spinner keeps spinning. */
24
+ done: boolean;
25
+ /** paper matches the surrounding surfaces; ink renders the classic dark terminal slab. */
26
+ variant?: "paper" | "ink";
27
+ }): import("react").JSX.Element;
28
+ //#endregion
29
+ export { TerminalBlock };
@@ -0,0 +1,54 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { mono, paper } from "./surfaces.js";
4
+ import { take } from "./range.js";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { CheckIcon, Loader2Icon } from "lucide-react";
7
+ //#region src/elements/terminal-block.tsx
8
+ /**
9
+ * Command output that streams line by line and ends with an exit status.
10
+ *
11
+ * @example
12
+ * import { TerminalBlock } from "@cueplusplus/ui/elements";
13
+ *
14
+ * <TerminalBlock
15
+ * command="pnpm test"
16
+ * lines={["PASS thread.test.ts", "Tests: 2 passed"]}
17
+ * visibleCount={2}
18
+ * done
19
+ * />
20
+ */
21
+ function TerminalBlock({ command, lines, visibleCount, done, variant = "paper", className, ...props }) {
22
+ return /* @__PURE__ */ jsxs("div", {
23
+ "data-slot": "terminal-block",
24
+ className: cn(variant === "ink" ? "bg-sunken" : paper, "w-full max-w-md overflow-hidden rounded-(--radius-overlay) font-mono text-(length:--cue-text-ui)", className),
25
+ ...props,
26
+ children: [/* @__PURE__ */ jsxs("div", {
27
+ className: "flex items-center justify-between px-4 pt-3 pb-1.5",
28
+ children: [/* @__PURE__ */ jsx("span", {
29
+ className: "text-fg",
30
+ children: command
31
+ }), done ? /* @__PURE__ */ jsxs("div", {
32
+ className: "flex items-center gap-1",
33
+ children: [/* @__PURE__ */ jsx(CheckIcon, { className: "size-3 text-ok" }), /* @__PURE__ */ jsx("span", {
34
+ className: cn(mono, "text-fg-subtle"),
35
+ children: "exit 0"
36
+ })]
37
+ }) : /* @__PURE__ */ jsx(Loader2Icon, { className: cn("size-3 animate-spin motion-reduce:animate-none", "text-fg-subtle") })]
38
+ }), /* @__PURE__ */ jsxs("div", {
39
+ className: cn("flex min-h-[8.5rem] flex-col gap-1 px-4 pt-1 pb-3.5", "text-fg-muted"),
40
+ children: [take(lines, visibleCount).map((line, i) => {
41
+ const isLast = i === lines.length - 1;
42
+ return /* @__PURE__ */ jsx("div", {
43
+ className: cn("cue-elements-fade-in cue-elements-animate-in cue-elements-fill-mode-both duration-300", isLast && "text-fg"),
44
+ children: line
45
+ }, `${i}-${line}`);
46
+ }), !done && /* @__PURE__ */ jsx("span", {
47
+ "aria-hidden": true,
48
+ className: "inline-block h-3 w-1.5 animate-pulse bg-stream/70 motion-reduce:animate-none"
49
+ })]
50
+ })]
51
+ });
52
+ }
53
+ //#endregion
54
+ export { TerminalBlock };
@@ -0,0 +1,18 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/thinking-indicator.d.ts
3
+ /**
4
+ * A live status line that names what the agent is doing right now, with elapsed time.
5
+ *
6
+ * @example
7
+ * import { ThinkingIndicator } from "@cueplusplus/ui/elements";
8
+ *
9
+ * <ThinkingIndicator label="Reading thread.tsx" elapsed="12s" />
10
+ */
11
+ declare function ThinkingIndicator({ label, elapsed, className, ...props }: Omit<ComponentProps<"div">, "children" | "label" | "elapsed"> & {
12
+ /** What the agent is doing right now. Swapping it replays the entrance animation. */
13
+ label: string;
14
+ /** Elapsed time rendered in mono next to the label. Omit to hide the timer. */
15
+ elapsed?: string;
16
+ }): import("react").JSX.Element;
17
+ //#endregion
18
+ export { ThinkingIndicator };
@@ -0,0 +1,36 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { ShimmerLabel } from "./surfaces.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/elements/thinking-indicator.tsx
6
+ /**
7
+ * A live status line that names what the agent is doing right now, with elapsed time.
8
+ *
9
+ * @example
10
+ * import { ThinkingIndicator } from "@cueplusplus/ui/elements";
11
+ *
12
+ * <ThinkingIndicator label="Reading thread.tsx" elapsed="12s" />
13
+ */
14
+ function ThinkingIndicator({ label, elapsed, className, ...props }) {
15
+ return /* @__PURE__ */ jsxs("div", {
16
+ "data-slot": "thinking-indicator",
17
+ className: cn("text-fg-muted flex items-center gap-2.5 text-(length:--cue-text-body)", className),
18
+ ...props,
19
+ children: [
20
+ /* @__PURE__ */ jsx("span", {
21
+ "aria-hidden": true,
22
+ className: "size-1.5 shrink-0 animate-pulse rounded-full bg-stream motion-reduce:animate-none"
23
+ }),
24
+ /* @__PURE__ */ jsx(ShimmerLabel, {
25
+ className: "cue-elements-fade-in cue-elements-slide-in-from-bottom-1 cue-elements-animate-in relative inline-block leading-none duration-300",
26
+ children: label
27
+ }, label),
28
+ elapsed !== void 0 && /* @__PURE__ */ jsx("span", {
29
+ className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "text-fg-subtle tabular-nums"),
30
+ children: elapsed
31
+ })
32
+ ]
33
+ });
34
+ }
35
+ //#endregion
36
+ export { ThinkingIndicator };
@@ -0,0 +1,35 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/thread-list.d.ts
3
+ interface ThreadItem {
4
+ /** What the conversation is about, truncated to one line. */
5
+ title: string;
6
+ /** Pre-formatted age of the last message. The element does no date maths. */
7
+ time: string;
8
+ /** Whether the row carries the unread dot. */
9
+ unread?: boolean;
10
+ }
11
+ /**
12
+ * Conversation history with unread marks and actions that wait for hover.
13
+ *
14
+ * @example
15
+ * import { ThreadList } from "@cueplusplus/ui/elements";
16
+ *
17
+ * <ThreadList
18
+ * threads={[
19
+ * { title: "Composer polish", time: "2m", unread: true },
20
+ * { title: "Runtime migration", time: "1h" },
21
+ * ]}
22
+ * activeIndex={activeIndex}
23
+ * onActiveIndexChange={setActiveIndex}
24
+ * />
25
+ */
26
+ declare function ThreadList({ threads, activeIndex, onActiveIndexChange, className, ...props }: Omit<ComponentProps<"div">, "children" | "threads" | "activeIndex" | "onActiveIndexChange"> & {
27
+ /** Conversation rows with title, time, and optional unread mark. */
28
+ threads: readonly ThreadItem[];
29
+ /** Index of the currently selected thread. An index outside the list selects nothing. */
30
+ activeIndex: number;
31
+ /** Called when the user clicks a thread row. */
32
+ onActiveIndexChange?: (index: number) => void;
33
+ }): import("react").JSX.Element;
34
+ //#endregion
35
+ export { ThreadItem, ThreadList };
@@ -0,0 +1,68 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { field, mono } from "./surfaces.js";
4
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
+ import { PencilIcon, Trash2Icon } from "lucide-react";
6
+ //#region src/elements/thread-list.tsx
7
+ /**
8
+ * Conversation history with unread marks and actions that wait for hover.
9
+ *
10
+ * @example
11
+ * import { ThreadList } from "@cueplusplus/ui/elements";
12
+ *
13
+ * <ThreadList
14
+ * threads={[
15
+ * { title: "Composer polish", time: "2m", unread: true },
16
+ * { title: "Runtime migration", time: "1h" },
17
+ * ]}
18
+ * activeIndex={activeIndex}
19
+ * onActiveIndexChange={setActiveIndex}
20
+ * />
21
+ */
22
+ function ThreadList({ threads, activeIndex, onActiveIndexChange, className, ...props }) {
23
+ return /* @__PURE__ */ jsxs("div", {
24
+ "data-slot": "thread-list",
25
+ className: cn("flex w-full max-w-[240px] flex-col gap-0.5", className),
26
+ ...props,
27
+ children: [/* @__PURE__ */ jsx("div", {
28
+ className: cn(mono, "text-fg-subtle px-3 pb-1.5"),
29
+ children: "Today"
30
+ }), threads.map((thread, i) => {
31
+ const active = i === activeIndex;
32
+ return /* @__PURE__ */ jsxs("button", {
33
+ type: "button",
34
+ "aria-current": active || void 0,
35
+ onClick: () => onActiveIndexChange?.(i),
36
+ className: cn("group flex w-full items-center justify-between gap-2 rounded-(--radius-surface) px-3 py-2 text-start text-(length:--cue-text-body) transition-colors", active ? field : "hover:bg-surface-1"),
37
+ children: [
38
+ /* @__PURE__ */ jsx("span", {
39
+ className: "flex-1 truncate",
40
+ children: thread.title
41
+ }),
42
+ /* @__PURE__ */ jsxs("span", {
43
+ className: cn(mono, "text-fg-subtle flex items-center gap-1.5 tabular-nums group-hover:hidden"),
44
+ children: [thread.unread && !active && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
45
+ "aria-hidden": true,
46
+ className: "size-1.5 rounded-full bg-stream"
47
+ }), /* @__PURE__ */ jsx("span", {
48
+ className: "sr-only",
49
+ children: "unread"
50
+ })] }), thread.time]
51
+ }),
52
+ /* @__PURE__ */ jsxs("span", {
53
+ className: "hidden items-center gap-0.5 group-hover:flex",
54
+ children: [/* @__PURE__ */ jsx("span", {
55
+ className: "text-fg-muted hover:bg-surface-2 hover:text-fg rounded-full p-1",
56
+ children: /* @__PURE__ */ jsx(PencilIcon, { className: "size-3" })
57
+ }), /* @__PURE__ */ jsx("span", {
58
+ className: "text-fg-muted hover:bg-surface-2 hover:text-fg rounded-full p-1",
59
+ children: /* @__PURE__ */ jsx(Trash2Icon, { className: "size-3" })
60
+ })]
61
+ })
62
+ ]
63
+ }, thread.title);
64
+ })]
65
+ });
66
+ }
67
+ //#endregion
68
+ export { ThreadList };
@@ -0,0 +1,42 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/thread-search.d.ts
3
+ interface SearchableThread {
4
+ /** Stable identity, compared against activeId. */
5
+ id: string;
6
+ /** Thread title. Filtering matches this and preview together. */
7
+ title: string;
8
+ /** Date bucket the thread falls into: Today, Yesterday, Earlier. */
9
+ group: string;
10
+ /** Second line under the title. */
11
+ preview: string;
12
+ /** Lifts the thread out of its date group into its own pinned section. */
13
+ pinned?: boolean;
14
+ }
15
+ /**
16
+ * History you can actually get back into: pinned first, then grouped by when.
17
+ *
18
+ * @example
19
+ * import { ThreadSearch } from "@cueplusplus/ui/elements";
20
+ *
21
+ * <ThreadSearch
22
+ * threads={threads}
23
+ * query={query}
24
+ * activeId={activeId}
25
+ * onQueryChange={setQuery}
26
+ * onSelect={setActiveId}
27
+ * />
28
+ */
29
+ declare function ThreadSearch({ threads, query, activeId, onQueryChange, onSelect, className, ...props }: Omit<ComponentProps<"div">, "children" | "threads" | "query" | "activeId" | "onQueryChange" | "onSelect"> & {
30
+ /** All threads. Filtering matches title and preview together. */
31
+ threads: readonly SearchableThread[];
32
+ /** Current search text. */
33
+ query: string;
34
+ /** Which thread is open. */
35
+ activeId: string;
36
+ /** Called as the search is typed. */
37
+ onQueryChange?: (query: string) => void;
38
+ /** Called when a thread is opened. */
39
+ onSelect?: (id: string) => void;
40
+ }): import("react").JSX.Element;
41
+ //#endregion
42
+ export { SearchableThread, ThreadSearch };
@@ -0,0 +1,99 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { field, mono, paper } from "./surfaces.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { PinIcon, SearchIcon } from "lucide-react";
6
+ //#region src/elements/thread-search.tsx
7
+ /**
8
+ * History you can actually get back into: pinned first, then grouped by when.
9
+ *
10
+ * @example
11
+ * import { ThreadSearch } from "@cueplusplus/ui/elements";
12
+ *
13
+ * <ThreadSearch
14
+ * threads={threads}
15
+ * query={query}
16
+ * activeId={activeId}
17
+ * onQueryChange={setQuery}
18
+ * onSelect={setActiveId}
19
+ * />
20
+ */
21
+ function ThreadSearch({ threads, query, activeId, onQueryChange, onSelect, className, ...props }) {
22
+ const matches = threads.filter((thread) => `${thread.title} ${thread.preview}`.toLowerCase().includes(query.toLowerCase()));
23
+ const pinned = matches.filter((thread) => thread.pinned);
24
+ const groups = [...new Set(matches.filter((t) => !t.pinned).map((t) => t.group))];
25
+ const ordered = [...pinned, ...groups.flatMap((group) => matches.filter((thread) => !thread.pinned && thread.group === group))];
26
+ const move = (delta) => {
27
+ if (ordered.length === 0) return;
28
+ const at = ordered.findIndex((thread) => thread.id === activeId);
29
+ const next = ordered[((at === -1 ? delta > 0 ? -1 : 0 : at) + delta + ordered.length) % ordered.length];
30
+ if (next) onSelect?.(next.id);
31
+ };
32
+ const onKeyDown = (event) => {
33
+ if (event.nativeEvent.isComposing) return;
34
+ if (event.key === "ArrowDown") {
35
+ event.preventDefault();
36
+ move(1);
37
+ } else if (event.key === "ArrowUp") {
38
+ event.preventDefault();
39
+ move(-1);
40
+ }
41
+ };
42
+ const row = (thread) => /* @__PURE__ */ jsxs("button", {
43
+ type: "button",
44
+ onClick: () => onSelect?.(thread.id),
45
+ className: cn("flex flex-col gap-0.5 rounded-(--radius-surface) px-2 py-1 text-start transition-colors", thread.id === activeId ? "bg-surface-1" : "hover:bg-surface-1"),
46
+ children: [/* @__PURE__ */ jsxs("span", {
47
+ className: "flex items-center gap-1.5",
48
+ children: [thread.pinned && /* @__PURE__ */ jsx(PinIcon, { className: "text-fg-subtle size-2.5 shrink-0" }), /* @__PURE__ */ jsx("span", {
49
+ className: "min-w-0 flex-1 truncate text-(length:--cue-text-body)",
50
+ children: thread.title
51
+ })]
52
+ }), /* @__PURE__ */ jsx("span", {
53
+ className: "text-fg-subtle truncate text-(length:--cue-text-ui)",
54
+ children: thread.preview
55
+ })]
56
+ }, thread.id);
57
+ return /* @__PURE__ */ jsxs("div", {
58
+ "data-slot": "thread-search",
59
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-1.5 rounded-(--radius-overlay) p-3", className),
60
+ ...props,
61
+ children: [
62
+ /* @__PURE__ */ jsxs("div", {
63
+ className: cn(field, "flex items-center gap-2 rounded-(--radius-surface) px-2.5 py-1.5"),
64
+ children: [/* @__PURE__ */ jsx(SearchIcon, { className: "text-fg-subtle size-3.5 shrink-0" }), /* @__PURE__ */ jsx("input", {
65
+ value: query,
66
+ onChange: (event) => onQueryChange?.(event.target.value),
67
+ onKeyDown,
68
+ placeholder: "Search threads",
69
+ "aria-label": "Search threads",
70
+ className: "text-fg-muted placeholder:text-fg-subtle min-w-0 flex-1 bg-transparent text-(length:--cue-text-body) outline-none focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent"
71
+ })]
72
+ }),
73
+ pinned.length > 0 && /* @__PURE__ */ jsxs("div", {
74
+ className: "flex flex-col",
75
+ children: [/* @__PURE__ */ jsx("span", {
76
+ className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "text-fg-subtle px-2 pb-1"),
77
+ children: "pinned"
78
+ }), pinned.map(row)]
79
+ }),
80
+ groups.map((group) => /* @__PURE__ */ jsxs("div", {
81
+ className: "flex flex-col",
82
+ children: [/* @__PURE__ */ jsx("span", {
83
+ className: cn(mono, "text-fg-subtle px-2 pb-1"),
84
+ children: group
85
+ }), matches.filter((thread) => !thread.pinned && thread.group === group).map(row)]
86
+ }, group)),
87
+ matches.length === 0 && /* @__PURE__ */ jsxs("span", {
88
+ className: "text-fg-subtle px-2 py-4 text-center text-(length:--cue-text-ui)",
89
+ children: [
90
+ "No thread matches “",
91
+ query,
92
+ "”"
93
+ ]
94
+ })
95
+ ]
96
+ });
97
+ }
98
+ //#endregion
99
+ export { ThreadSearch };
@@ -0,0 +1,37 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/timeline.d.ts
3
+ /**
4
+ * Which side of now an event is on: `past`, `now`, or `future`. It decides the marker
5
+ * and the ink, which is what lets one list carry what happened and what is still
6
+ * coming.
7
+ */
8
+ type TimelineWhen = "past" | "now" | "future";
9
+ /** One event on the axis: when it is, what it is, and the line under it. */
10
+ interface TimelineEvent {
11
+ /** Stable identity for the row key. */
12
+ id: string;
13
+ /** past is filled, now gets a ring, future is an outline with a lighter rail. */
14
+ when: TimelineWhen;
15
+ /** Pre-formatted timestamp in the left rail. */
16
+ time: string;
17
+ /** What happened. */
18
+ title: string;
19
+ /** Optional second line under the title. */
20
+ detail?: string;
21
+ }
22
+ /**
23
+ * Events on a time axis, with what already happened and what is still coming.
24
+ *
25
+ * @example
26
+ * import { Timeline } from "@cueplusplus/ui/elements";
27
+ *
28
+ * <Timeline events={events} visibleCount={events.length} />
29
+ */
30
+ declare function ElementsTimeline({ events, visibleCount, className, ...props }: Omit<ComponentProps<"div">, "children" | "events" | "visibleCount"> & {
31
+ /** Events in chronological order, past and scheduled together. */
32
+ events: readonly TimelineEvent[];
33
+ /** How many events have been resolved. */
34
+ visibleCount: number;
35
+ }): import("react").JSX.Element;
36
+ //#endregion
37
+ export { ElementsTimeline, TimelineEvent, TimelineWhen };
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { mono, paper } from "./surfaces.js";
4
+ import { take } from "./range.js";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ //#region src/elements/timeline.tsx
7
+ /**
8
+ * Events on a time axis, with what already happened and what is still coming.
9
+ *
10
+ * @example
11
+ * import { Timeline } from "@cueplusplus/ui/elements";
12
+ *
13
+ * <Timeline events={events} visibleCount={events.length} />
14
+ */
15
+ function ElementsTimeline({ events, visibleCount, className, ...props }) {
16
+ return /* @__PURE__ */ jsx("div", {
17
+ "data-slot": "timeline",
18
+ className: cn(paper, "flex w-full max-w-sm flex-col rounded-(--radius-overlay) p-4", className),
19
+ ...props,
20
+ children: take(events, visibleCount).map((event, i, shown) => /* @__PURE__ */ jsxs("div", {
21
+ className: "cue-elements-fade-in cue-elements-slide-in-from-left-1 cue-elements-animate-in cue-elements-fill-mode-both grid grid-cols-[3.5rem_1rem_minmax(0,1fr)] gap-x-2 duration-300",
22
+ children: [
23
+ /* @__PURE__ */ jsx("span", {
24
+ className: cn(mono, "pt-[3px] text-end tabular-nums", event.when === "future" ? "text-fg-subtle" : "text-fg-subtle"),
25
+ children: event.time
26
+ }),
27
+ /* @__PURE__ */ jsxs("span", {
28
+ className: "flex flex-col items-center",
29
+ children: [/* @__PURE__ */ jsx("span", { className: cn("mt-1 size-2 shrink-0 rounded-full", event.when === "now" && "bg-stream ring-stream/15", event.when === "past" && "bg-surface-3", event.when === "future" && "border-border-strong border bg-transparent") }), i < shown.length - 1 && /* @__PURE__ */ jsx("span", { className: cn("w-px flex-1", event.when === "future" ? "bg-surface-2" : "bg-surface-3") })]
30
+ }),
31
+ /* @__PURE__ */ jsxs("div", {
32
+ className: cn("flex flex-col gap-0.5", i < shown.length - 1 && "pb-3"),
33
+ children: [/* @__PURE__ */ jsx("span", {
34
+ className: cn("text-(length:--cue-text-body) break-words", event.when === "future" ? "text-fg-subtle" : "text-fg", event.when === "now" && "font-medium"),
35
+ children: event.title
36
+ }), event.detail && /* @__PURE__ */ jsx("span", {
37
+ className: "text-fg-muted text-(length:--cue-text-ui) leading-relaxed break-words",
38
+ children: event.detail
39
+ })]
40
+ })
41
+ ]
42
+ }, event.id))
43
+ });
44
+ }
45
+ //#endregion
46
+ export { ElementsTimeline };
@@ -0,0 +1,42 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/todo-list.d.ts
3
+ /** Where one item stands: not started, being worked on, or finished. */
4
+ type TodoStatus = "pending" | "active" | "done";
5
+ /** One line of an agent's todo list. */
6
+ interface TodoItem {
7
+ /**
8
+ * Stable identity across revisions. Reusing an id keeps an item in place while its
9
+ * text or status changes.
10
+ */
11
+ id: string;
12
+ /** The item as the agent phrased it. */
13
+ text: string;
14
+ /** Per-item state. More than one item may be active if the agent works in parallel. */
15
+ status: TodoStatus;
16
+ }
17
+ /**
18
+ * The agent's own working list, rewritten mid-run as it discovers what else is needed.
19
+ *
20
+ * @example
21
+ * import { TodoList } from "@cueplusplus/ui/elements";
22
+ *
23
+ * <TodoList
24
+ * items={[
25
+ * { id: "read", text: "Read the failing test", status: "done" },
26
+ * { id: "fix", text: "Fix the converter", status: "active" },
27
+ * { id: "verify", text: "Re-run the suite", status: "pending" },
28
+ * ]}
29
+ * revision={2}
30
+ * />
31
+ */
32
+ declare function TodoList({ items, revision, className, ...props }: Omit<ComponentProps<"div">, "children" | "items" | "revision"> & {
33
+ /**
34
+ * The list as it stands right now. Each item carries its own status, so the agent
35
+ * can add, reorder, and complete items in any order between renders.
36
+ */
37
+ items: readonly TodoItem[];
38
+ /** Which rewrite of the list this is. Omit to show a plain done/total count instead. */
39
+ revision?: number;
40
+ }): import("react").JSX.Element;
41
+ //#endregion
42
+ export { TodoItem, TodoList, TodoStatus };
@@ -0,0 +1,59 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { mono } from "./surfaces.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { CheckIcon, Loader2Icon } from "lucide-react";
6
+ //#region src/elements/todo-list.tsx
7
+ /**
8
+ * The agent's own working list, rewritten mid-run as it discovers what else is needed.
9
+ *
10
+ * @example
11
+ * import { TodoList } from "@cueplusplus/ui/elements";
12
+ *
13
+ * <TodoList
14
+ * items={[
15
+ * { id: "read", text: "Read the failing test", status: "done" },
16
+ * { id: "fix", text: "Fix the converter", status: "active" },
17
+ * { id: "verify", text: "Re-run the suite", status: "pending" },
18
+ * ]}
19
+ * revision={2}
20
+ * />
21
+ */
22
+ function TodoList({ items, revision, className, ...props }) {
23
+ const done = items.filter((item) => item.status === "done").length;
24
+ return /* @__PURE__ */ jsxs("div", {
25
+ "data-slot": "todo-list",
26
+ className: cn("flex w-full max-w-sm flex-col gap-3", className),
27
+ ...props,
28
+ children: [/* @__PURE__ */ jsxs("div", {
29
+ className: "flex items-baseline justify-between",
30
+ children: [/* @__PURE__ */ jsx("span", {
31
+ className: "text-(length:--cue-text-body) font-medium",
32
+ children: "Todos"
33
+ }), /* @__PURE__ */ jsx("span", {
34
+ className: cn(mono, "text-fg-subtle tabular-nums"),
35
+ children: revision === void 0 ? `${done}/${items.length}` : `${done}/${items.length} · rev ${revision}`
36
+ })]
37
+ }), /* @__PURE__ */ jsx("ul", {
38
+ className: "flex flex-col gap-1",
39
+ children: items.map((item) => /* @__PURE__ */ jsxs("li", {
40
+ className: "cue-elements-fade-in cue-elements-slide-in-from-bottom-1 cue-elements-animate-in cue-elements-fill-mode-both flex items-start gap-2.5 py-0.5 text-(length:--cue-text-body) duration-300",
41
+ children: [/* @__PURE__ */ jsx("span", {
42
+ className: "flex size-4 h-5 shrink-0 items-center justify-center",
43
+ children: item.status === "done" ? /* @__PURE__ */ jsx("span", {
44
+ className: "border-border-strong bg-surface-2 flex size-3.5 items-center justify-center rounded-(--radius-control) border",
45
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "text-fg-muted size-2.5" })
46
+ }) : item.status === "active" ? /* @__PURE__ */ jsx(Loader2Icon, { className: "size-3.5 animate-spin text-stream motion-reduce:animate-none" }) : /* @__PURE__ */ jsx("span", {
47
+ "aria-hidden": true,
48
+ className: "border-border-strong size-3.5 rounded-(--radius-control) border"
49
+ })
50
+ }), /* @__PURE__ */ jsx("span", {
51
+ className: cn("min-w-0 flex-1 leading-5 break-words", item.status === "done" && "text-fg-subtle line-through decoration-[1.5px]", item.status === "active" && "text-fg", item.status === "pending" && "text-fg-muted"),
52
+ children: item.text
53
+ })]
54
+ }, item.id))
55
+ })]
56
+ });
57
+ }
58
+ //#endregion
59
+ export { TodoList };
@@ -0,0 +1,41 @@
1
+ //#region src/elements/tool-call.d.ts
2
+ interface ToolCallProps {
3
+ /** Tool name shown on the collapsed trigger row. */
4
+ label: string;
5
+ /** Verb shown with a shimmer while the tool is running, for example Searching the docs. */
6
+ activeLabel: string;
7
+ /** Short chip next to the label summarizing the call target. */
8
+ query: string;
9
+ /** Request payload shown inside the expanded disclosure. */
10
+ request: string;
11
+ /** Result payload shown once the call is no longer running. */
12
+ result: string;
13
+ /** When true a spinner replaces the success check on the trigger. */
14
+ running: boolean;
15
+ /** Whether the request and result panel is expanded. */
16
+ open: boolean;
17
+ /** Called when the user expands or collapses the call. */
18
+ onOpenChange: (open: boolean) => void;
19
+ /** Extra classes merged onto the root. */
20
+ className?: string;
21
+ }
22
+ /**
23
+ * One tool invocation with its request and result tucked behind a disclosure.
24
+ *
25
+ * @example
26
+ * import { ToolCall } from "@cueplusplus/ui/elements";
27
+ *
28
+ * <ToolCall
29
+ * label="Searched"
30
+ * activeLabel="Searching"
31
+ * query="composer props"
32
+ * request='{"q":"composer"}'
33
+ * result='{"hits":2}'
34
+ * running={false}
35
+ * open
36
+ * onOpenChange={setOpen}
37
+ * />
38
+ */
39
+ declare function ToolCall({ label, activeLabel, query, request, result, running, open, onOpenChange, className }: ToolCallProps): import("react").JSX.Element;
40
+ //#endregion
41
+ export { ToolCall, ToolCallProps };