@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,251 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ //#region src/agent-runtime/use-agent-thread.ts
4
+ /**
5
+ * The runtime says `assistant`; this library has said `agent` since its first
6
+ * chat component, because a turn here can come from one of a dozen named
7
+ * workers rather than the assistant.
8
+ */
9
+ const ROLES = {
10
+ assistant: "agent",
11
+ system: "system",
12
+ user: "user"
13
+ };
14
+ /** Every text part of a turn, as one block of prose. */
15
+ function joinText(content) {
16
+ return content.flatMap((part) => part.type === "text" ? [part.text] : []).join("\n\n");
17
+ }
18
+ /** Every reasoning part, or nothing at all when the model showed none. */
19
+ function joinReasoning(content) {
20
+ const thoughts = content.flatMap((part) => part.type === "reasoning" ? [part.text] : []);
21
+ return thoughts.length === 0 ? void 0 : thoughts.join("\n\n");
22
+ }
23
+ /**
24
+ * While a call is still streaming, `args` is a partial parse — often `{}` for
25
+ * several frames — and `argsText` is what the model has actually said. Show the
26
+ * parse once there is one, the raw text until then, and nothing invented in
27
+ * either case.
28
+ */
29
+ function formatArgs(part) {
30
+ const args = part.args;
31
+ if (typeof args === "object" && args !== null && Object.keys(args).length > 0) return JSON.stringify(args, null, 2);
32
+ return part.argsText ?? "";
33
+ }
34
+ /** A result as text, whatever the tool returned. Never parsed, never rendered as markup. */
35
+ function formatResult(result) {
36
+ if (result === void 0) return void 0;
37
+ if (typeof result === "string") return result;
38
+ return JSON.stringify(result, null, 2) ?? String(result);
39
+ }
40
+ /**
41
+ * A call has no status of its own until it has an outcome, so until then it
42
+ * borrows the turn's: a call inside a running turn is working, one inside a
43
+ * turn parked on a human is waiting.
44
+ */
45
+ function toolStatus(part, message) {
46
+ if (part.isError === true) return "failed";
47
+ if (part.result !== void 0) return "done";
48
+ switch (message.status?.type) {
49
+ case "running": return "working";
50
+ case "requires-action": return "idle";
51
+ case "incomplete": return "failed";
52
+ default: return "done";
53
+ }
54
+ }
55
+ /** The turn's tool calls, in the order the model made them. */
56
+ function toolCalls(message) {
57
+ return message.content.flatMap((part) => part.type === "tool-call" ? [{
58
+ id: part.toolCallId,
59
+ tool: part.toolName,
60
+ args: formatArgs(part),
61
+ result: formatResult(part.result),
62
+ status: toolStatus(part, message)
63
+ }] : []);
64
+ }
65
+ /** The runtime's status vocabulary, in this library's words. */
66
+ function turnStatus(message) {
67
+ if (message.role !== "assistant") return "complete";
68
+ switch (message.status.type) {
69
+ case "running": return "streaming";
70
+ case "requires-action": return "requires-action";
71
+ case "incomplete": return message.status.reason === "cancelled" ? "cancelled" : "failed";
72
+ default: return "complete";
73
+ }
74
+ }
75
+ /** Where the turn sits among its regenerated siblings. */
76
+ function branchOf(runtime, id) {
77
+ try {
78
+ const state = runtime.thread.getMessageById(id).getState();
79
+ return {
80
+ index: state.branchNumber,
81
+ count: state.branchCount
82
+ };
83
+ } catch {
84
+ return {
85
+ index: 1,
86
+ count: 1
87
+ };
88
+ }
89
+ }
90
+ /** One runtime message, in the props the Chat group takes. */
91
+ function toTurn(runtime, message, agent) {
92
+ const role = ROLES[message.role];
93
+ const status = turnStatus(message);
94
+ return {
95
+ id: message.id,
96
+ role,
97
+ agent: role !== "agent" ? void 0 : typeof agent === "function" ? agent(message) : agent,
98
+ text: joinText(message.content),
99
+ reasoning: joinReasoning(message.content),
100
+ toolCalls: toolCalls(message),
101
+ status,
102
+ pending: status === "streaming",
103
+ createdAt: message.createdAt,
104
+ branch: branchOf(runtime, message.id),
105
+ message
106
+ };
107
+ }
108
+ /**
109
+ * An assistant-ui runtime, read as the props the Chat group already takes.
110
+ *
111
+ * `Message`, `MessageList` and `Composer` render turns that have finished
112
+ * arriving. The hard part of a turn that is *still* arriving — assembling
113
+ * tokens, tracking a run, cancelling one, keeping a regenerated answer beside
114
+ * its sibling — is a solved problem, so this library does not re-derive it. You
115
+ * build a runtime with one line of assistant-ui, typically
116
+ * `useExternalStoreRuntime(adapter)`, and hand the object over; every field
117
+ * that comes back is named for the prop it feeds.
118
+ *
119
+ * It is provider-free by construction: a `useSyncExternalStore` over the
120
+ * runtime's thread, and nothing else. No `AssistantRuntimeProvider`, no
121
+ * primitive, no context and no borrowed DOM — this library renders 100% of what
122
+ * the reader sees, and the peer is only a type in the shipped modules.
123
+ *
124
+ * `MessageList` follows a turn that is still growing on its own: the items
125
+ * container is watched for growth, so a streaming bubble keeps the bottom in
126
+ * view without the host adding anything, while a tool-call card the reader
127
+ * folds away leaves the view where it was.
128
+ *
129
+ * Four things are worth knowing before wiring an `ExternalStoreAdapter` to it:
130
+ *
131
+ * - **Pass `convertMessage`, and keep its identity.** Without it your messages
132
+ * must already be complete runtime messages, and a missing `metadata`
133
+ * throws; `convertMessage: (m) => m` lets the runtime fill the defaults in.
134
+ * Declare it outside the component (or memoise it): the runtime caches the
135
+ * conversion against that function, so a fresh arrow every render re-converts
136
+ * the whole thread, which re-renders, which converts it again — an inline
137
+ * arrow turns the next message change into "Maximum update depth exceeded".
138
+ * - **`onReload` takes two arguments** — `(parentId, config)`. Regenerating a
139
+ * turn re-runs its *parent*, which is what puts the new answer beside the old
140
+ * one rather than after it.
141
+ * - **A branch switch is host-owned.** Under an ExternalStore runtime
142
+ * `switchBranch` does not move the thread: it arrives at the adapter's
143
+ * `setMessages` with the newly visible list, and the host writes it back. A
144
+ * host that ignores `setMessages` gets a picker that does nothing.
145
+ * - **`onStop`, `regenerate` and `switchBranch` are `undefined`** until the
146
+ * matching callback exists on the adapter (`onCancel`, `onReload`,
147
+ * `setMessages`). That is deliberate: `Composer` keeps drawing Send while
148
+ * `onStop` is missing, so a control that cannot work is never drawn.
149
+ *
150
+ * @example
151
+ * // Outside the component: the runtime caches the conversion against this
152
+ * // function, and a new one every render is an update loop.
153
+ * const convertMessage = (m: ThreadMessageLike) => m;
154
+ *
155
+ * const runtime = useExternalStoreRuntime({
156
+ * messages,
157
+ * isRunning,
158
+ * convertMessage,
159
+ * onNew,
160
+ * onCancel,
161
+ * onReload,
162
+ * setMessages,
163
+ * });
164
+ * const thread = useAgentThread(runtime, { agent: "planner" });
165
+ *
166
+ * <MessageList aria-label="Thread">
167
+ * {thread.turns.map((t) => (
168
+ * <Message
169
+ * key={t.id}
170
+ * role={t.role}
171
+ * agent={t.agent}
172
+ * pending={t.pending}
173
+ * footer={
174
+ * t.branch.count > 1 && thread.switchBranch ? (
175
+ * <BranchPicker
176
+ * index={t.branch.index}
177
+ * count={t.branch.count}
178
+ * onNavigate={(d) => thread.switchBranch?.(t.id, d)}
179
+ * disabled={thread.busy}
180
+ * />
181
+ * ) : undefined
182
+ * }
183
+ * >
184
+ * {t.text}
185
+ * {t.toolCalls.map((c) => (
186
+ * <ToolCallCard key={c.id} tool={c.tool} args={c.args} result={c.result} status={c.status} />
187
+ * ))}
188
+ * </Message>
189
+ * ))}
190
+ * </MessageList>
191
+ * <Composer
192
+ * onSend={thread.onSend}
193
+ * busy={thread.busy}
194
+ * disabled={thread.disabled || thread.busy}
195
+ * onStop={thread.onStop}
196
+ * />
197
+ */
198
+ function useAgentThread(runtime, options) {
199
+ const agent = options?.agent;
200
+ const agentRef = React.useRef(agent);
201
+ agentRef.current = agent;
202
+ const agentKey = typeof agent === "function" ? "fn" : agent;
203
+ const subscribe = React.useCallback((onStoreChange) => runtime.thread.subscribe(onStoreChange), [runtime]);
204
+ const getState = React.useCallback(() => runtime.thread.getState(), [runtime]);
205
+ const { capabilities, isDisabled, isRunning, messages } = React.useSyncExternalStore(subscribe, getState, getState);
206
+ const turns = React.useMemo(() => messages.map((message) => toTurn(runtime, message, agentRef.current)), [
207
+ messages,
208
+ runtime,
209
+ agentKey
210
+ ]);
211
+ const onSend = React.useCallback((text) => {
212
+ runtime.thread.append({
213
+ role: "user",
214
+ content: [{
215
+ type: "text",
216
+ text
217
+ }]
218
+ });
219
+ }, [runtime]);
220
+ const cancel = React.useCallback(() => {
221
+ runtime.thread.cancelRun();
222
+ }, [runtime]);
223
+ const reload = React.useCallback((turnId) => {
224
+ runtime.thread.getMessageById(turnId).reload();
225
+ }, [runtime]);
226
+ const switchTo = React.useCallback((turnId, direction) => {
227
+ runtime.thread.getMessageById(turnId).switchToBranch({ position: direction });
228
+ }, [runtime]);
229
+ return React.useMemo(() => ({
230
+ turns,
231
+ busy: isRunning,
232
+ disabled: isDisabled,
233
+ onSend,
234
+ onStop: capabilities.cancel ? cancel : void 0,
235
+ regenerate: capabilities.reload ? reload : void 0,
236
+ switchBranch: capabilities.switchToBranch ? switchTo : void 0,
237
+ runtime
238
+ }), [
239
+ turns,
240
+ isRunning,
241
+ isDisabled,
242
+ capabilities,
243
+ onSend,
244
+ cancel,
245
+ reload,
246
+ switchTo,
247
+ runtime
248
+ ]);
249
+ }
250
+ //#endregion
251
+ export { useAgentThread };
@@ -22,7 +22,7 @@ type BrandSize = "sm" | "md" | "lg";
22
22
  *
23
23
  * Not a light/dark pair. The source artwork ships two files that hard-code
24
24
  * `white`, `black` and `#1E1E1E`; this library ships one component that reads
25
- * the token layer, so a single element is correct in all eight presets and both
25
+ * the token layer, so a single element is correct in all ten presets and both
26
26
  * modes without anybody choosing a file.
27
27
  */
28
28
  type BrandTone = "inherit" | "fg" | "accent";
@@ -8,7 +8,7 @@ interface CueMarkProps extends BrandAssetProps {}
8
8
  * Square at every size, drawn from the artwork's own path data, and painted
9
9
  * entirely from tokens — the disc takes the tone's ink and the two "+" glyphs
10
10
  * take the ground, which is exactly the relationship the two shipped SVGs
11
- * encode by hand. One element is therefore correct in all eight presets and
11
+ * encode by hand. One element is therefore correct in all ten presets and
12
12
  * both modes, and there is no light/dark variant to pick.
13
13
  *
14
14
  * The two glyphs are {@link Plussie}'s eyes; both components read one geometry
@@ -10,7 +10,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
10
10
  * Square at every size, drawn from the artwork's own path data, and painted
11
11
  * entirely from tokens — the disc takes the tone's ink and the two "+" glyphs
12
12
  * take the ground, which is exactly the relationship the two shipped SVGs
13
- * encode by hand. One element is therefore correct in all eight presets and
13
+ * encode by hand. One element is therefore correct in all ten presets and
14
14
  * both modes, and there is no light/dark variant to pick.
15
15
  *
16
16
  * The two glyphs are {@link Plussie}'s eyes; both components read one geometry
@@ -1,8 +1,8 @@
1
+ import { AskAnswer, AskBox, AskBoxProps, AskDanger, AskKind, AskOption } from "./ask-box.js";
2
+ import { Message, MessageProps, MessageRole } from "./message.js";
1
3
  import { AGENT_COLOR_PROPERTY, AGENT_HUES, AGENT_ROOT_COLOR, AgentColorOptions, agentColor, agentColorStyle } from "./agent-color.js";
2
4
  import { AgentPile, AgentPileEntry, AgentPileProps, AgentPileSize } from "./agent-pile.js";
3
- import { AskAnswer, AskBox, AskBoxProps, AskDanger, AskKind, AskOption } from "./ask-box.js";
4
5
  import { Composer, ComposerProps, ComposerSubmitKey } from "./composer.js";
5
6
  import { DelegationCard, DelegationCardProps, DelegationDirection, DelegationStatus } from "./delegation-card.js";
6
- import { Message, MessageProps, MessageRole } from "./message.js";
7
7
  import { MessageList, MessageListProps } from "./message-list.js";
8
8
  export { AGENT_COLOR_PROPERTY, AGENT_HUES, AGENT_ROOT_COLOR, type AgentColorOptions, AgentPile, type AgentPileEntry, type AgentPileProps, type AgentPileSize, type AskAnswer, AskBox, type AskBoxProps, type AskDanger, type AskKind, type AskOption, Composer, type ComposerProps, type ComposerSubmitKey, DelegationCard, type DelegationCardProps, type DelegationDirection, type DelegationStatus, Message, MessageList, type MessageListProps, type MessageProps, type MessageRole, agentColor, agentColorStyle };
@@ -24,6 +24,12 @@ interface MessageListProps extends Omit<React.ComponentPropsWithoutRef<"div">, "
24
24
  * mid-sentence is the single most common reason people stop reading a chat
25
25
  * pane. Coming back to the bottom re-arms it.
26
26
  *
27
+ * It follows a turn that is still growing, too — the items container is watched
28
+ * for growth, so a streaming bubble keeps the bottom in view without the host
29
+ * adding anything, while something merely collapsing leaves the view alone. And
30
+ * when you have scrolled up, a turn that grows offers the pill instead of
31
+ * pulling you down.
32
+ *
27
33
  * Deliberately **not** virtualised. A virtualiser needs a measurable row height
28
34
  * and chat turns are variable-height by nature; the cost of getting that wrong
29
35
  * (jumping scrollbars) is worse than the cost of a few hundred DOM nodes. When
@@ -19,6 +19,12 @@ const ROOT_PX = 16;
19
19
  * mid-sentence is the single most common reason people stop reading a chat
20
20
  * pane. Coming back to the bottom re-arms it.
21
21
  *
22
+ * It follows a turn that is still growing, too — the items container is watched
23
+ * for growth, so a streaming bubble keeps the bottom in view without the host
24
+ * adding anything, while something merely collapsing leaves the view alone. And
25
+ * when you have scrolled up, a turn that grows offers the pill instead of
26
+ * pulling you down.
27
+ *
22
28
  * Deliberately **not** virtualised. A virtualiser needs a measurable row height
23
29
  * and chat turns are variable-height by nature; the cost of getting that wrong
24
30
  * (jumping scrollbars) is worse than the cost of a few hundred DOM nodes. When
@@ -31,8 +37,10 @@ const ROOT_PX = 16;
31
37
  */
32
38
  const MessageList = React.forwardRef(function MessageList({ className, children, follow = true, height, jumpLabel = "Jump to latest", emptyLabel = "No messages yet", "aria-label": ariaLabel, style, ...elementProps }, ref) {
33
39
  const scrollerRef = React.useRef(null);
40
+ const itemsRef = React.useRef(null);
34
41
  const [pinned, setPinned] = React.useState(true);
35
42
  const [behind, setBehind] = React.useState(false);
43
+ const lastHeightRef = React.useRef(0);
36
44
  const count = React.Children.count(children);
37
45
  const previousCountRef = React.useRef(count);
38
46
  const jumpToLatest = React.useCallback(() => {
@@ -58,6 +66,32 @@ const MessageList = React.forwardRef(function MessageList({ className, children,
58
66
  follow,
59
67
  pinned
60
68
  ]);
69
+ React.useEffect(() => {
70
+ const element = scrollerRef.current;
71
+ const items = itemsRef.current;
72
+ if (items === null) lastHeightRef.current = 0;
73
+ if (element === null || items === null || typeof ResizeObserver === "undefined") return;
74
+ const observer = new ResizeObserver((entries) => {
75
+ const entry = entries[0];
76
+ if (entry === void 0) return;
77
+ const height = entry.contentRect?.height ?? entry.target.getBoundingClientRect().height;
78
+ const grew = height > lastHeightRef.current;
79
+ lastHeightRef.current = height;
80
+ if (!grew) return;
81
+ if (follow && pinned) {
82
+ element.scrollTop = element.scrollHeight;
83
+ setBehind(false);
84
+ return;
85
+ }
86
+ setBehind(true);
87
+ });
88
+ observer.observe(items);
89
+ return () => observer.disconnect();
90
+ }, [
91
+ follow,
92
+ pinned,
93
+ count === 0
94
+ ]);
61
95
  const onScroll = React.useCallback(() => {
62
96
  const element = scrollerRef.current;
63
97
  if (element === null) return;
@@ -88,6 +122,7 @@ const MessageList = React.forwardRef(function MessageList({ className, children,
88
122
  className: "flex h-full items-center justify-center p-(--cue-space-6) font-mono text-(length:--cue-text-ui) text-fg-subtle",
89
123
  children: emptyLabel
90
124
  }) : /* @__PURE__ */ jsx("div", {
125
+ ref: itemsRef,
91
126
  "data-slot": "message-list-items",
92
127
  className: "flex min-w-0 flex-col items-stretch gap-(--cue-space-4) p-(--cue-space-4)",
93
128
  children
@@ -52,9 +52,20 @@ function useEdgeScroll(enabled = true) {
52
52
  el.addEventListener("scroll", sync, { passive: true });
53
53
  const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(() => sync());
54
54
  observer?.observe(el);
55
- if (el.firstElementChild !== null) observer?.observe(el.firstElementChild);
55
+ let observedChildren = /* @__PURE__ */ new Set();
56
+ const syncObservedChildren = () => {
57
+ const nextChildren = new Set(el.children);
58
+ for (const child of observedChildren) if (!nextChildren.has(child)) observer?.unobserve(child);
59
+ for (const child of nextChildren) if (!observedChildren.has(child)) observer?.observe(child);
60
+ observedChildren = nextChildren;
61
+ sync();
62
+ };
63
+ syncObservedChildren();
64
+ const mutations = typeof MutationObserver === "undefined" ? null : new MutationObserver(() => syncObservedChildren());
65
+ mutations?.observe(el, { childList: true });
56
66
  return () => {
57
67
  el.removeEventListener("scroll", sync);
68
+ mutations?.disconnect();
58
69
  observer?.disconnect();
59
70
  };
60
71
  }, [enabled, sync]);
@@ -50,7 +50,7 @@ declare function computeScrollEdges(scrollLeft: number, scrollWidth: number, cli
50
50
  * an overlay would have to re-create that background as an opaque colour and
51
51
  * would drift the moment the theme changed. Masking fades the content itself
52
52
  * and lets whatever is behind show through, so it matches by construction in
53
- * all eight themes and both modes.
53
+ * every theme and both modes.
54
54
  *
55
55
  * This softens the cut; it is NOT the whole affordance. What sits at an
56
56
  * overflowing edge is often the gap between two tabs, and fading empty space is
@@ -53,7 +53,7 @@ function computeScrollEdges(scrollLeft, scrollWidth, clientWidth) {
53
53
  * an overlay would have to re-create that background as an opaque colour and
54
54
  * would drift the moment the theme changed. Masking fades the content itself
55
55
  * and lets whatever is behind show through, so it matches by construction in
56
- * all eight themes and both modes.
56
+ * every theme and both modes.
57
57
  *
58
58
  * This softens the cut; it is NOT the whole affordance. What sits at an
59
59
  * overflowing edge is often the gap between two tabs, and fading empty space is
@@ -8,6 +8,47 @@ interface AppShellRootProps extends React.ComponentPropsWithoutRef<"div"> {
8
8
  defaultNavOpen?: boolean;
9
9
  /** Called with the next open state whenever the drawer is opened or dismissed. */
10
10
  onNavOpenChange?: (open: boolean) => void;
11
+ /**
12
+ * Whether the navigation column is collapsed to an icon rail, when
13
+ * controlled. Pass with `onRailChange`. Defaults to expanded.
14
+ *
15
+ * It is the column's own collapse, owned one level up. Collapsing is a
16
+ * property of the column, but the header cell over it is a child of the bar
17
+ * — a different branch of the tree — and a length only one of them knows is
18
+ * a length they will eventually disagree about. So the frame holds the
19
+ * state, stamps `data-rail` on itself for anything that has to answer to it,
20
+ * and hands it down to `Sidebar.Root` as its controlled `collapsed`.
21
+ *
22
+ * **Persistence is the caller's.** A rail is set once and expected to be
23
+ * remembered, and where it is remembered — `localStorage`, a cookie the
24
+ * server can read before first paint, a user record — is a decision about
25
+ * hydration and privacy that a layout component has no business making.
26
+ */
27
+ rail?: boolean;
28
+ /** Initial rail state when uncontrolled. Defaults to `false`. */
29
+ defaultRail?: boolean;
30
+ /** Called with the next rail state whenever the column is collapsed or expanded. */
31
+ onRailChange?: (rail: boolean) => void;
32
+ /** Width of the navigation column while expanded. Any CSS length. Defaults to `"14rem"`. */
33
+ navWidth?: string;
34
+ /**
35
+ * Width of the navigation column while railed. Any CSS length. Defaults to
36
+ * `"3.5rem"` — a `--cue-icon-md` glyph centred in a `--cue-control-md` row,
37
+ * with a gutter either side that still reads as a column rather than a strip.
38
+ */
39
+ railWidth?: string;
40
+ }
41
+ interface AppShellBarProps extends React.ComponentPropsWithoutRef<"div"> {
42
+ /**
43
+ * The header cell over the navigation column: the app mark, and whatever
44
+ * control rails it.
45
+ *
46
+ * Omit it and the bar is one undivided strip — no empty bordered cell, which
47
+ * is worse than no cell.
48
+ */
49
+ brand?: React.ReactNode;
50
+ /** Extra classes for the header cell. */
51
+ brandClassName?: string;
11
52
  }
12
53
  type AppShellBodyProps = React.ComponentPropsWithoutRef<"div">;
13
54
  interface AppShellSidebarProps extends SidebarRootProps {
@@ -85,7 +126,15 @@ interface AppShellAsideProps extends React.ComponentPropsWithoutRef<"aside"> {
85
126
  * side; the shell exists so no page has to get them right again.
86
127
  *
87
128
  * The bars are ordinary children — `TitleBar` and `StatusBar` are already
88
- * `shrink-0` and need no wrapper — so a shell reads as the page's outline.
129
+ * `shrink-0` and need no wrapper — so a shell reads as the page's outline. The
130
+ * one bar the shell does own is {@link AppShellBar}, and it owns it for one
131
+ * reason: it is divided by the navigation column, which means it has to be
132
+ * measured from the same length the column is.
133
+ *
134
+ * That length is `--cue-nav-width`, written on the frame. `rail` rewrites it,
135
+ * `data-rail` announces it, and the column and the header cell over it move
136
+ * together because neither holds a width of its own. Persistence and the
137
+ * toggle are the caller's — see {@link AppShellRootProps.rail}.
89
138
  *
90
139
  * This is also the only component in the library with a viewport breakpoint:
91
140
  * below `md` the navigation column becomes a drawer and a trigger appears in
@@ -114,6 +163,7 @@ interface AppShellAsideProps extends React.ComponentPropsWithoutRef<"aside"> {
114
163
  */
115
164
  declare const AppShell: {
116
165
  Root: React.ForwardRefExoticComponent<AppShellRootProps & React.RefAttributes<HTMLDivElement>>;
166
+ Bar: React.ForwardRefExoticComponent<AppShellBarProps & React.RefAttributes<HTMLDivElement>>;
117
167
  Body: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
118
168
  Sidebar: React.ForwardRefExoticComponent<AppShellSidebarProps & React.RefAttributes<HTMLElement>>;
119
169
  NavTrigger: React.ForwardRefExoticComponent<AppShellNavTriggerProps & React.RefAttributes<HTMLButtonElement>>;
@@ -122,4 +172,4 @@ declare const AppShell: {
122
172
  Aside: React.ForwardRefExoticComponent<AppShellAsideProps & React.RefAttributes<HTMLElement>>;
123
173
  };
124
174
  //#endregion
125
- export { AppShell, AppShellAsideProps, AppShellBodyProps, AppShellContentProps, AppShellNavTriggerProps, AppShellRootProps, AppShellScrollerProps, AppShellSidebarProps };
175
+ export { AppShell, AppShellAsideProps, AppShellBarProps, AppShellBodyProps, AppShellContentProps, AppShellNavTriggerProps, AppShellRootProps, AppShellScrollerProps, AppShellSidebarProps };
@@ -10,9 +10,29 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
10
10
  //#region src/chrome/app-shell.tsx
11
11
  const AppShellContext = React.createContext({
12
12
  navOpen: false,
13
- setNavOpen: () => {}
13
+ setNavOpen: () => {},
14
+ rail: false,
15
+ setRail: () => {}
14
16
  });
15
17
  /**
18
+ * The navigation column's current width, written once on the frame and read by
19
+ * everything that has to line up with it.
20
+ *
21
+ * The prototype this came from put it best: collapsing the rail rewrites one
22
+ * length, and the bar's header cell and the column move together because
23
+ * neither of them holds a length of its own. A custom property rather than two
24
+ * inline widths because the two boxes are on opposite sides of the tree — the
25
+ * cell is a child of the bar, above `AppShell.Body`, and the column is inside
26
+ * it — and because it is then also the handle a consumer's own CSS aligns to.
27
+ *
28
+ * {@link AppShellBar} spells the name a second time, in a Tailwind utility,
29
+ * because the scanner reads class strings and not constants. The two spellings
30
+ * move together, and the shell's own suite fails if they stop matching.
31
+ */
32
+ const NAV_WIDTH_PROPERTY = "--cue-nav-width";
33
+ /** What a box that spans the navigation column sets its width to. */
34
+ const NAV_WIDTH_VALUE = `var(${NAV_WIDTH_PROPERTY})`;
35
+ /**
16
36
  * The console frame: title bar, navigation, work area, status bar — one
17
37
  * viewport tall, with exactly one thing scrolling.
18
38
  *
@@ -26,7 +46,15 @@ const AppShellContext = React.createContext({
26
46
  * side; the shell exists so no page has to get them right again.
27
47
  *
28
48
  * The bars are ordinary children — `TitleBar` and `StatusBar` are already
29
- * `shrink-0` and need no wrapper — so a shell reads as the page's outline.
49
+ * `shrink-0` and need no wrapper — so a shell reads as the page's outline. The
50
+ * one bar the shell does own is {@link AppShellBar}, and it owns it for one
51
+ * reason: it is divided by the navigation column, which means it has to be
52
+ * measured from the same length the column is.
53
+ *
54
+ * That length is `--cue-nav-width`, written on the frame. `rail` rewrites it,
55
+ * `data-rail` announces it, and the column and the header cell over it move
56
+ * together because neither holds a width of its own. Persistence and the
57
+ * toggle are the caller's — see {@link AppShellRootProps.rail}.
30
58
  *
31
59
  * This is also the only component in the library with a viewport breakpoint:
32
60
  * below `md` the navigation column becomes a drawer and a trigger appears in
@@ -54,27 +82,62 @@ const AppShellContext = React.createContext({
54
82
  * </AppShell.Root>
55
83
  */
56
84
  const AppShell = {
57
- Root: React.forwardRef(function AppShellRoot({ className, navOpen: navOpenProp, defaultNavOpen = false, onNavOpenChange, ...elementProps }, ref) {
85
+ Root: React.forwardRef(function AppShellRoot({ className, navOpen: navOpenProp, defaultNavOpen = false, onNavOpenChange, rail: railProp, defaultRail = false, onRailChange, navWidth = "14rem", railWidth = "3.5rem", style, ...elementProps }, ref) {
58
86
  const [uncontrolled, setUncontrolled] = React.useState(defaultNavOpen);
59
87
  const navOpen = navOpenProp ?? uncontrolled;
60
88
  const setNavOpen = React.useCallback((open) => {
61
89
  if (navOpenProp === void 0) setUncontrolled(open);
62
90
  onNavOpenChange?.(open);
63
91
  }, [navOpenProp, onNavOpenChange]);
92
+ const [uncontrolledRail, setUncontrolledRail] = React.useState(defaultRail);
93
+ const rail = railProp ?? uncontrolledRail;
94
+ const setRail = React.useCallback((next) => {
95
+ if (railProp === void 0) setUncontrolledRail(next);
96
+ onRailChange?.(next);
97
+ }, [railProp, onRailChange]);
64
98
  const context = React.useMemo(() => ({
65
99
  navOpen,
66
- setNavOpen
67
- }), [navOpen, setNavOpen]);
100
+ setNavOpen,
101
+ rail,
102
+ setRail
103
+ }), [
104
+ navOpen,
105
+ setNavOpen,
106
+ rail,
107
+ setRail
108
+ ]);
68
109
  return /* @__PURE__ */ jsx(AppShellContext.Provider, {
69
110
  value: context,
70
111
  children: /* @__PURE__ */ jsx("div", {
71
112
  ref,
72
113
  "data-slot": "app-shell",
73
- className: cn("relative flex h-dvh flex-col overflow-clip bg-bg text-fg", className),
114
+ "data-rail": rail ? "" : void 0,
115
+ className: cn("group/app-shell relative flex h-dvh flex-col overflow-clip bg-bg text-fg", className),
116
+ style: {
117
+ [NAV_WIDTH_PROPERTY]: rail ? railWidth : navWidth,
118
+ ...style
119
+ },
74
120
  ...elementProps
75
121
  })
76
122
  });
77
123
  }),
124
+ Bar: React.forwardRef(function AppShellBar({ className, brand, brandClassName, children, ...elementProps }, ref) {
125
+ return /* @__PURE__ */ jsxs("div", {
126
+ ref,
127
+ "data-slot": "app-shell-bar",
128
+ className: cn("flex h-(--cue-chrome-titlebar) w-full shrink-0 items-stretch border-b border-border bg-surface-1", className),
129
+ ...elementProps,
130
+ children: [brand === void 0 ? null : /* @__PURE__ */ jsx("div", {
131
+ "data-slot": "app-shell-brand",
132
+ className: cn("flex w-auto min-w-0 shrink-0 items-center gap-(--cue-space-3) border-r border-border px-(--cue-pad-row-x) transition-[width] duration-150 ease-out md:w-(--cue-nav-width) motion-reduce:transition-none", brandClassName),
133
+ children: brand
134
+ }), /* @__PURE__ */ jsx("div", {
135
+ "data-slot": "app-shell-bar-rest",
136
+ className: "flex min-w-0 flex-1 items-center gap-(--cue-space-3) px-(--cue-pad-row-x)",
137
+ children
138
+ })]
139
+ });
140
+ }),
78
141
  Body: React.forwardRef(function AppShellBody({ className, ...elementProps }, ref) {
79
142
  return /* @__PURE__ */ jsx("div", {
80
143
  ref,
@@ -83,15 +146,24 @@ const AppShell = {
83
146
  ...elementProps
84
147
  });
85
148
  }),
86
- Sidebar: React.forwardRef(function AppShellSidebar({ className, drawerClassName, drawerTitle = "Navigation", closeLabel = "Close navigation", collapsible = true, landmark = "navigation", "aria-label": ariaLabel = "Navigation", children, ...sidebarProps }, ref) {
87
- const { navOpen, setNavOpen } = React.useContext(AppShellContext);
149
+ Sidebar: React.forwardRef(function AppShellSidebar({ className, drawerClassName, drawerTitle = "Navigation", closeLabel = "Close navigation", collapsible = true, landmark = "navigation", "aria-label": ariaLabel = "Navigation", collapsed, defaultCollapsed, onCollapsedChange, width, collapsedWidth, children, ...sidebarProps }, ref) {
150
+ const { navOpen, setNavOpen, rail, setRail } = React.useContext(AppShellContext);
88
151
  const DrawerLandmark = landmark === "complementary" ? "aside" : "nav";
152
+ const railed = collapsed === void 0 && defaultCollapsed === void 0;
89
153
  return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs(Sidebar.Root, {
90
154
  ref,
91
155
  "data-slot": "app-shell-sidebar",
92
156
  "aria-label": ariaLabel,
93
157
  landmark,
94
158
  className: cn("hidden md:flex", className),
159
+ collapsed: railed ? rail : collapsed,
160
+ defaultCollapsed,
161
+ onCollapsedChange: railed ? (next) => {
162
+ onCollapsedChange?.(next);
163
+ setRail(next);
164
+ } : onCollapsedChange,
165
+ width: width ?? (railed ? NAV_WIDTH_VALUE : void 0),
166
+ collapsedWidth: collapsedWidth ?? (railed ? NAV_WIDTH_VALUE : void 0),
95
167
  ...sidebarProps,
96
168
  children: [children, collapsible ? /* @__PURE__ */ jsx(Sidebar.Rail, {}) : null]
97
169
  }), /* @__PURE__ */ jsx(Drawer.Root, {
@@ -2,7 +2,7 @@ import { ScrollEdges, TAB_FADE_PX, computeScrollEdges, edgeFadeMask } from "./_t
2
2
  import { BarOverflow } from "./_edge-scroller.js";
3
3
  import { TREE_GUIDE_GLYPHS, TreeGuide, TreeItem, TreeRow, flattenTree } from "./_tree.js";
4
4
  import { AppBar, AppBarActionsProps, AppBarBrandProps, AppBarLinkProps, AppBarNavProps, AppBarRegister, AppBarRootProps, AppBarSeparatorProps } from "./app-bar.js";
5
- import { AppShell, AppShellAsideProps, AppShellBodyProps, AppShellContentProps, AppShellNavTriggerProps, AppShellRootProps, AppShellScrollerProps, AppShellSidebarProps } from "./app-shell.js";
5
+ import { AppShell, AppShellAsideProps, AppShellBarProps, AppShellBodyProps, AppShellContentProps, AppShellNavTriggerProps, AppShellRootProps, AppShellScrollerProps, AppShellSidebarProps } from "./app-shell.js";
6
6
  import { EmptyState, EmptyStateProps } from "./empty-state.js";
7
7
  import { Eyebrow, EyebrowProps } from "./eyebrow.js";
8
8
  import { Footer, FooterProps } from "./footer.js";
@@ -18,4 +18,4 @@ import { ScrollableTabsList, ScrollableTabsListProps, Tabs, TabsListProps, TabsP
18
18
  import { TitleBar, TitleBarProps } from "./title-bar.js";
19
19
  import { Tree, TreeProps, TreeVisibility, TreeVisibilityToggle, TreeVisibilityToggleProps } from "./tree.js";
20
20
  import { Toolbar, ToolbarButtonProps, ToolbarGroupProps, ToolbarRootProps, ToolbarSeparatorProps } from "./toolbar.js";
21
- export { AppBar, type AppBarActionsProps, type AppBarBrandProps, type AppBarLinkProps, type AppBarNavProps, type AppBarRegister, type AppBarRootProps, type AppBarSeparatorProps, AppShell, type AppShellAsideProps, type AppShellBodyProps, type AppShellContentProps, type AppShellNavTriggerProps, type AppShellRootProps, type AppShellScrollerProps, type AppShellSidebarProps, type BarOverflow, EmptyState, type EmptyStateProps, Eyebrow, type EyebrowProps, Footer, type FooterProps, NavigationMenu, type NavigationMenuContentProps, type NavigationMenuItemProps, type NavigationMenuLinkProps, type NavigationMenuListProps, type NavigationMenuRootProps, type NavigationMenuTriggerProps, type NavigationMenuViewportProps, PageShell, type PageShellProps, type PageWidth, Panel, PanelHeader, type PanelHeaderProps, type PanelProps, Row, type RowProps, ScrollArea, type ScrollAreaOrientation, type ScrollAreaProps, type ScrollEdges, ScrollableTabsList, type ScrollableTabsListProps, SeamList, type SeamListProps, SectionHeader, type SectionHeaderProps, SegmentedControl, type SegmentedControlItem, type SegmentedControlProps, type SegmentedControlSize, StatusBar, type StatusBarItemProps, type StatusBarProps, type StatusBarTone, TAB_FADE_PX, TREE_GUIDE_GLYPHS, Tabs, type TabsListProps, type TabsPanelProps, type TabsRootProps, type TabsTabProps, TitleBar, type TitleBarProps, Toolbar, type ToolbarButtonProps, type ToolbarGroupProps, type ToolbarRootProps, type ToolbarSeparatorProps, Tree, type TreeGuide, type TreeItem, type TreeProps, type TreeRow, type TreeVisibility, TreeVisibilityToggle, type TreeVisibilityToggleProps, computeScrollEdges, edgeFadeMask, flattenTree, rowVariants };
21
+ export { AppBar, type AppBarActionsProps, type AppBarBrandProps, type AppBarLinkProps, type AppBarNavProps, type AppBarRegister, type AppBarRootProps, type AppBarSeparatorProps, AppShell, type AppShellAsideProps, type AppShellBarProps, type AppShellBodyProps, type AppShellContentProps, type AppShellNavTriggerProps, type AppShellRootProps, type AppShellScrollerProps, type AppShellSidebarProps, type BarOverflow, EmptyState, type EmptyStateProps, Eyebrow, type EyebrowProps, Footer, type FooterProps, NavigationMenu, type NavigationMenuContentProps, type NavigationMenuItemProps, type NavigationMenuLinkProps, type NavigationMenuListProps, type NavigationMenuRootProps, type NavigationMenuTriggerProps, type NavigationMenuViewportProps, PageShell, type PageShellProps, type PageWidth, Panel, PanelHeader, type PanelHeaderProps, type PanelProps, Row, type RowProps, ScrollArea, type ScrollAreaOrientation, type ScrollAreaProps, type ScrollEdges, ScrollableTabsList, type ScrollableTabsListProps, SeamList, type SeamListProps, SectionHeader, type SectionHeaderProps, SegmentedControl, type SegmentedControlItem, type SegmentedControlProps, type SegmentedControlSize, StatusBar, type StatusBarItemProps, type StatusBarProps, type StatusBarTone, TAB_FADE_PX, TREE_GUIDE_GLYPHS, Tabs, type TabsListProps, type TabsPanelProps, type TabsRootProps, type TabsTabProps, TitleBar, type TitleBarProps, Toolbar, type ToolbarButtonProps, type ToolbarGroupProps, type ToolbarRootProps, type ToolbarSeparatorProps, Tree, type TreeGuide, type TreeItem, type TreeProps, type TreeRow, type TreeVisibility, TreeVisibilityToggle, type TreeVisibilityToggleProps, computeScrollEdges, edgeFadeMask, flattenTree, rowVariants };