@cueplusplus/ui 0.3.0 → 0.6.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 (541) hide show
  1. package/CHANGELOG.md +2263 -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/chat/index.d.ts +2 -2
  12. package/dist/chat/message-list.d.ts +6 -0
  13. package/dist/chat/message-list.js +35 -0
  14. package/dist/chrome/_drag.js +59 -0
  15. package/dist/chrome/_status-bar-item.js +85 -0
  16. package/dist/chrome/_status-bar.d.ts +15 -0
  17. package/dist/chrome/_status-bar.js +171 -0
  18. package/dist/chrome/app-shell.d.ts +120 -2
  19. package/dist/chrome/app-shell.js +107 -8
  20. package/dist/chrome/index.d.ts +4 -3
  21. package/dist/chrome/status-bar.d.ts +87 -4
  22. package/dist/chrome/status-bar.js +80 -16
  23. package/dist/chrome/title-bar.d.ts +11 -1
  24. package/dist/chrome/title-bar.js +1 -3
  25. package/dist/configurator/_export.js +3 -2
  26. package/dist/configurator/_overrides.d.ts +1 -1
  27. package/dist/configurator/token-editor.js +4 -1
  28. package/dist/date/_segments.js +52 -6
  29. package/dist/elements/activity-graph.d.ts +40 -0
  30. package/dist/elements/activity-graph.js +81 -0
  31. package/dist/elements/agent-card.d.ts +49 -0
  32. package/dist/elements/agent-card.js +91 -0
  33. package/dist/elements/agent-handoff.d.ts +24 -0
  34. package/dist/elements/agent-handoff.js +53 -0
  35. package/dist/elements/agent-mode-badge.d.ts +72 -0
  36. package/dist/elements/agent-mode-badge.js +110 -0
  37. package/dist/elements/agent-plan.d.ts +24 -0
  38. package/dist/elements/agent-plan.js +74 -0
  39. package/dist/elements/agent-status.d.ts +29 -0
  40. package/dist/elements/agent-status.js +46 -0
  41. package/dist/elements/agent-surface.d.ts +65 -0
  42. package/dist/elements/agent-surface.js +68 -0
  43. package/dist/elements/animated-number.d.ts +86 -0
  44. package/dist/elements/animated-number.js +118 -0
  45. package/dist/elements/approval-card.d.ts +40 -0
  46. package/dist/elements/approval-card.js +78 -0
  47. package/dist/elements/artifact-card.d.ts +30 -0
  48. package/dist/elements/artifact-card.js +58 -0
  49. package/dist/elements/background-inbox.d.ts +39 -0
  50. package/dist/elements/background-inbox.js +60 -0
  51. package/dist/elements/canvas-split.d.ts +77 -0
  52. package/dist/elements/canvas-split.js +138 -0
  53. package/dist/elements/chart.d.ts +41 -0
  54. package/dist/elements/chart.js +117 -0
  55. package/dist/elements/chat-panel.d.ts +46 -0
  56. package/dist/elements/chat-panel.js +104 -0
  57. package/dist/elements/checkpoint-history.d.ts +31 -0
  58. package/dist/elements/checkpoint-history.js +65 -0
  59. package/dist/elements/clamp.d.ts +90 -0
  60. package/dist/elements/clamp.js +109 -0
  61. package/dist/elements/code-diff.d.ts +42 -0
  62. package/dist/elements/code-diff.js +69 -0
  63. package/dist/elements/code-runner.d.ts +38 -0
  64. package/dist/elements/code-runner.js +84 -0
  65. package/dist/elements/command-palette.d.ts +48 -0
  66. package/dist/elements/command-palette.js +129 -0
  67. package/dist/elements/compaction-row.d.ts +63 -0
  68. package/dist/elements/compaction-row.js +110 -0
  69. package/dist/elements/comparison-card.d.ts +47 -0
  70. package/dist/elements/comparison-card.js +69 -0
  71. package/dist/elements/composer.d.ts +274 -0
  72. package/dist/elements/composer.js +505 -0
  73. package/dist/elements/computer-use.d.ts +40 -0
  74. package/dist/elements/computer-use.js +92 -0
  75. package/dist/elements/confidence-marker.d.ts +39 -0
  76. package/dist/elements/confidence-marker.js +64 -0
  77. package/dist/elements/connection-state.d.ts +29 -0
  78. package/dist/elements/connection-state.js +66 -0
  79. package/dist/elements/context-breakdown.d.ts +30 -0
  80. package/dist/elements/context-breakdown.js +86 -0
  81. package/dist/elements/context-usage.d.ts +99 -0
  82. package/dist/elements/context-usage.js +225 -0
  83. package/dist/elements/conversation-search.d.ts +48 -0
  84. package/dist/elements/conversation-search.js +88 -0
  85. package/dist/elements/cost-meter.d.ts +33 -0
  86. package/dist/elements/cost-meter.js +75 -0
  87. package/dist/elements/data-table.d.ts +31 -0
  88. package/dist/elements/data-table.js +67 -0
  89. package/dist/elements/day-separator.d.ts +34 -0
  90. package/dist/elements/day-separator.js +50 -0
  91. package/dist/elements/diagram.d.ts +34 -0
  92. package/dist/elements/diagram.js +75 -0
  93. package/dist/elements/document-reference.d.ts +37 -0
  94. package/dist/elements/document-reference.js +66 -0
  95. package/dist/elements/draft-restore.d.ts +27 -0
  96. package/dist/elements/draft-restore.js +54 -0
  97. package/dist/elements/edit-message.d.ts +36 -0
  98. package/dist/elements/edit-message.js +77 -0
  99. package/dist/elements/elements.css +459 -0
  100. package/dist/elements/elicitation-form.d.ts +48 -0
  101. package/dist/elements/elicitation-form.js +106 -0
  102. package/dist/elements/empty-state.d.ts +52 -0
  103. package/dist/elements/empty-state.js +98 -0
  104. package/dist/elements/end-of-turn-summary.d.ts +60 -0
  105. package/dist/elements/end-of-turn-summary.js +75 -0
  106. package/dist/elements/error-state.d.ts +29 -0
  107. package/dist/elements/error-state.js +55 -0
  108. package/dist/elements/feedback-dialog.d.ts +36 -0
  109. package/dist/elements/feedback-dialog.js +81 -0
  110. package/dist/elements/file-tree.d.ts +45 -0
  111. package/dist/elements/file-tree.js +84 -0
  112. package/dist/elements/flow-graph.d.ts +45 -0
  113. package/dist/elements/flow-graph.js +78 -0
  114. package/dist/elements/generative/chart.js +200 -0
  115. package/dist/elements/generative/faults.js +111 -0
  116. package/dist/elements/generative/icons.d.ts +41 -0
  117. package/dist/elements/generative/icons.js +190 -0
  118. package/dist/elements/generative/intrinsics.js +483 -0
  119. package/dist/elements/generative/spec.d.ts +110 -0
  120. package/dist/elements/generative/spec.js +366 -0
  121. package/dist/elements/generative.css +1145 -0
  122. package/dist/elements/generative.d.ts +144 -0
  123. package/dist/elements/generative.js +126 -0
  124. package/dist/elements/guardrail-notice.d.ts +29 -0
  125. package/dist/elements/guardrail-notice.js +63 -0
  126. package/dist/elements/image-generation.d.ts +18 -0
  127. package/dist/elements/image-generation.js +64 -0
  128. package/dist/elements/index.d.ts +116 -0
  129. package/dist/elements/index.js +115 -0
  130. package/dist/elements/inline-citation.d.ts +43 -0
  131. package/dist/elements/inline-citation.js +93 -0
  132. package/dist/elements/job-progress.d.ts +49 -0
  133. package/dist/elements/job-progress.js +74 -0
  134. package/dist/elements/launcher-bubble.d.ts +34 -0
  135. package/dist/elements/launcher-bubble.js +72 -0
  136. package/dist/elements/live-region-announcer.d.ts +130 -0
  137. package/dist/elements/live-region-announcer.js +230 -0
  138. package/dist/elements/loading-state.d.ts +27 -0
  139. package/dist/elements/loading-state.js +36 -0
  140. package/dist/elements/map-answer.d.ts +38 -0
  141. package/dist/elements/map-answer.js +93 -0
  142. package/dist/elements/markdown.d.ts +131 -0
  143. package/dist/elements/markdown.js +528 -0
  144. package/dist/elements/math-block.d.ts +51 -0
  145. package/dist/elements/math-block.js +70 -0
  146. package/dist/elements/mcp-server-panel.d.ts +41 -0
  147. package/dist/elements/mcp-server-panel.js +115 -0
  148. package/dist/elements/memory-chips.d.ts +30 -0
  149. package/dist/elements/memory-chips.js +43 -0
  150. package/dist/elements/message-actions.d.ts +38 -0
  151. package/dist/elements/message-actions.js +71 -0
  152. package/dist/elements/message-attachment.d.ts +48 -0
  153. package/dist/elements/message-attachment.js +63 -0
  154. package/dist/elements/message-branches.d.ts +25 -0
  155. package/dist/elements/message-branches.js +65 -0
  156. package/dist/elements/message-pair.d.ts +33 -0
  157. package/dist/elements/message-pair.js +65 -0
  158. package/dist/elements/message-queue.d.ts +31 -0
  159. package/dist/elements/message-queue.js +80 -0
  160. package/dist/elements/message-timing.d.ts +33 -0
  161. package/dist/elements/message-timing.js +37 -0
  162. package/dist/elements/mobile-composer.d.ts +44 -0
  163. package/dist/elements/mobile-composer.js +88 -0
  164. package/dist/elements/model-picker.d.ts +38 -0
  165. package/dist/elements/model-picker.js +69 -0
  166. package/dist/elements/number-ticker.d.ts +18 -0
  167. package/dist/elements/number-ticker.js +47 -0
  168. package/dist/elements/onboarding.d.ts +30 -0
  169. package/dist/elements/onboarding.js +75 -0
  170. package/dist/elements/permission-grant.d.ts +35 -0
  171. package/dist/elements/permission-grant.js +86 -0
  172. package/dist/elements/permission-scopes.d.ts +215 -0
  173. package/dist/elements/permission-scopes.js +249 -0
  174. package/dist/elements/prompt-library.d.ts +43 -0
  175. package/dist/elements/prompt-library.js +117 -0
  176. package/dist/elements/queue-dock.d.ts +101 -0
  177. package/dist/elements/queue-dock.js +132 -0
  178. package/dist/elements/quota-banner.d.ts +26 -0
  179. package/dist/elements/quota-banner.js +66 -0
  180. package/dist/elements/quote-reply.d.ts +44 -0
  181. package/dist/elements/quote-reply.js +79 -0
  182. package/dist/elements/range.d.ts +29 -0
  183. package/dist/elements/range.js +45 -0
  184. package/dist/elements/read-aloud.d.ts +45 -0
  185. package/dist/elements/read-aloud.js +75 -0
  186. package/dist/elements/reasoning-effort.d.ts +36 -0
  187. package/dist/elements/reasoning-effort.js +67 -0
  188. package/dist/elements/reasoning-panel.d.ts +46 -0
  189. package/dist/elements/reasoning-panel.js +75 -0
  190. package/dist/elements/recommendation-card.d.ts +45 -0
  191. package/dist/elements/recommendation-card.js +83 -0
  192. package/dist/elements/regenerate-menu.d.ts +45 -0
  193. package/dist/elements/regenerate-menu.js +51 -0
  194. package/dist/elements/replay.d.ts +217 -0
  195. package/dist/elements/replay.js +498 -0
  196. package/dist/elements/research-report.d.ts +38 -0
  197. package/dist/elements/research-report.js +69 -0
  198. package/dist/elements/retrieval-chunks.d.ts +43 -0
  199. package/dist/elements/retrieval-chunks.js +81 -0
  200. package/dist/elements/revert-dock.d.ts +159 -0
  201. package/dist/elements/revert-dock.js +327 -0
  202. package/dist/elements/reviewable-diff.d.ts +45 -0
  203. package/dist/elements/reviewable-diff.js +110 -0
  204. package/dist/elements/risk-badge.d.ts +52 -0
  205. package/dist/elements/risk-badge.js +91 -0
  206. package/dist/elements/schedule-card.d.ts +42 -0
  207. package/dist/elements/schedule-card.js +90 -0
  208. package/dist/elements/score-breakdown.d.ts +47 -0
  209. package/dist/elements/score-breakdown.js +82 -0
  210. package/dist/elements/scroll-anchor.d.ts +32 -0
  211. package/dist/elements/scroll-anchor.js +121 -0
  212. package/dist/elements/settings-panel.d.ts +52 -0
  213. package/dist/elements/settings-panel.js +107 -0
  214. package/dist/elements/shared-conversation.d.ts +39 -0
  215. package/dist/elements/shared-conversation.js +68 -0
  216. package/dist/elements/sources.d.ts +33 -0
  217. package/dist/elements/sources.js +61 -0
  218. package/dist/elements/speaker-identity.d.ts +32 -0
  219. package/dist/elements/speaker-identity.js +51 -0
  220. package/dist/elements/spec-sheet.d.ts +31 -0
  221. package/dist/elements/spec-sheet.js +45 -0
  222. package/dist/elements/stopped-run.d.ts +22 -0
  223. package/dist/elements/stopped-run.js +50 -0
  224. package/dist/elements/streaming-text.d.ts +31 -0
  225. package/dist/elements/streaming-text.js +45 -0
  226. package/dist/elements/subagent-list.d.ts +37 -0
  227. package/dist/elements/subagent-list.js +79 -0
  228. package/dist/elements/suggestions.d.ts +30 -0
  229. package/dist/elements/suggestions.js +36 -0
  230. package/dist/elements/surfaces.d.ts +85 -0
  231. package/dist/elements/surfaces.js +107 -0
  232. package/dist/elements/tail-status.d.ts +131 -0
  233. package/dist/elements/tail-status.js +94 -0
  234. package/dist/elements/terminal-block.d.ts +29 -0
  235. package/dist/elements/terminal-block.js +54 -0
  236. package/dist/elements/thinking-indicator.d.ts +18 -0
  237. package/dist/elements/thinking-indicator.js +36 -0
  238. package/dist/elements/thread-list.d.ts +35 -0
  239. package/dist/elements/thread-list.js +68 -0
  240. package/dist/elements/thread-search.d.ts +42 -0
  241. package/dist/elements/thread-search.js +99 -0
  242. package/dist/elements/timeline.d.ts +37 -0
  243. package/dist/elements/timeline.js +46 -0
  244. package/dist/elements/todo-list.d.ts +42 -0
  245. package/dist/elements/todo-list.js +59 -0
  246. package/dist/elements/tool-call.d.ts +41 -0
  247. package/dist/elements/tool-call.js +85 -0
  248. package/dist/elements/tool-error.d.ts +39 -0
  249. package/dist/elements/tool-error.js +76 -0
  250. package/dist/elements/tool-group.d.ts +45 -0
  251. package/dist/elements/tool-group.js +71 -0
  252. package/dist/elements/tool-timeline.d.ts +65 -0
  253. package/dist/elements/tool-timeline.js +88 -0
  254. package/dist/elements/trace-waterfall.d.ts +37 -0
  255. package/dist/elements/trace-waterfall.js +69 -0
  256. package/dist/elements/transcript-rules.d.ts +67 -0
  257. package/dist/elements/transcript-rules.js +95 -0
  258. package/dist/elements/turn-footer.d.ts +74 -0
  259. package/dist/elements/turn-footer.js +101 -0
  260. package/dist/elements/typing-indicator.d.ts +16 -0
  261. package/dist/elements/typing-indicator.js +51 -0
  262. package/dist/elements/verdict-row.d.ts +89 -0
  263. package/dist/elements/verdict-row.js +150 -0
  264. package/dist/elements/vocabulary.d.ts +612 -0
  265. package/dist/elements/vocabulary.js +611 -0
  266. package/dist/elements/voice-conversation.d.ts +49 -0
  267. package/dist/elements/voice-conversation.js +123 -0
  268. package/dist/elements/web-preview.d.ts +32 -0
  269. package/dist/elements/web-preview.js +66 -0
  270. package/dist/elements/web-search.d.ts +37 -0
  271. package/dist/elements/web-search.js +66 -0
  272. package/dist/elements/work-collapse.d.ts +103 -0
  273. package/dist/elements/work-collapse.js +131 -0
  274. package/dist/forms/_chassis.d.ts +104 -4
  275. package/dist/forms/_chassis.js +104 -4
  276. package/dist/forms/input-group.d.ts +8 -3
  277. package/dist/forms/input-group.js +8 -3
  278. package/dist/forms/number-field.d.ts +3 -2
  279. package/dist/forms/number-field.js +3 -2
  280. package/dist/icons/containers.d.ts +89 -0
  281. package/dist/icons/containers.js +295 -0
  282. package/dist/icons/index.d.ts +2 -0
  283. package/dist/index.d.ts +12 -6
  284. package/dist/index.js +5 -1
  285. package/dist/instruments/_data-row.js +118 -0
  286. package/dist/instruments/data-row.d.ts +94 -0
  287. package/dist/instruments/data-row.js +151 -0
  288. package/dist/instruments/data-tree.d.ts +126 -0
  289. package/dist/instruments/data-tree.js +303 -0
  290. package/dist/instruments/index.d.ts +5 -2
  291. package/dist/instruments/index.js +4 -1
  292. package/dist/instruments/ledger.d.ts +105 -0
  293. package/dist/instruments/ledger.js +114 -0
  294. package/dist/instruments/table.d.ts +70 -2
  295. package/dist/instruments/table.js +133 -39
  296. package/dist/instruments/two-step-button.js +25 -6
  297. package/dist/layout/sidebar.d.ts +19 -1
  298. package/dist/layout/sidebar.js +19 -1
  299. package/dist/primitives/button.js +11 -1
  300. package/dist/primitives/chip.d.ts +35 -9
  301. package/dist/primitives/chip.js +97 -11
  302. package/dist/system/agent-skin.d.ts +27 -0
  303. package/dist/system/agent-skin.js +20 -0
  304. package/dist/system/portal.d.ts +5 -3
  305. package/dist/system/portal.js +19 -5
  306. package/dist/system/theme-provider.js +54 -9
  307. package/dist/system/use-density.d.ts +9 -0
  308. package/dist/system/use-density.js +9 -0
  309. package/dist/system/use-isomorphic-layout-effect.js +19 -1
  310. package/dist/theming/_presets.d.ts +1 -1
  311. package/dist/theming/_presets.js +74 -11
  312. package/dist/theming/contrast.d.ts +16 -4
  313. package/dist/theming/contrast.js +33 -6
  314. package/dist/theming/create-theme.d.ts +6 -2
  315. package/dist/theming/create-theme.js +32 -5
  316. package/dist/theming/serialize.d.ts +10 -1
  317. package/dist/theming/serialize.js +62 -8
  318. package/manifest/components/activity-graph.json +88 -0
  319. package/manifest/components/agent-card.json +120 -0
  320. package/manifest/components/agent-handoff.json +87 -0
  321. package/manifest/components/agent-mode-badge.json +84 -0
  322. package/manifest/components/agent-plan.json +67 -0
  323. package/manifest/components/agent-status.json +73 -0
  324. package/manifest/components/agent-surface.json +78 -0
  325. package/manifest/components/alert-dialog.json +1 -1
  326. package/manifest/components/animated-number.json +67 -0
  327. package/manifest/components/app-shell.json +142 -9
  328. package/manifest/components/approval-card.json +106 -0
  329. package/manifest/components/artifact-card.json +81 -0
  330. package/manifest/components/audience-icon.json +52 -0
  331. package/manifest/components/autocomplete.json +2 -0
  332. package/manifest/components/background-inbox.json +71 -0
  333. package/manifest/components/branch-picker.json +124 -0
  334. package/manifest/components/button.json +1 -0
  335. package/manifest/components/canvas-split-body.json +62 -0
  336. package/manifest/components/canvas-split-document.json +54 -0
  337. package/manifest/components/canvas-split-header.json +83 -0
  338. package/manifest/components/canvas-split-line.json +62 -0
  339. package/manifest/components/canvas-split-message.json +62 -0
  340. package/manifest/components/canvas-split-thread.json +54 -0
  341. package/manifest/components/canvas-split.json +60 -0
  342. package/manifest/components/catalogue-icon.json +52 -0
  343. package/manifest/components/channel-beta-icon.json +52 -0
  344. package/manifest/components/channel-released-icon.json +52 -0
  345. package/manifest/components/chart.json +93 -0
  346. package/manifest/components/chat-empty-state.json +55 -0
  347. package/manifest/components/chat-panel-assistant-message.json +51 -0
  348. package/manifest/components/chat-panel-composer.json +66 -0
  349. package/manifest/components/chat-panel-messages.json +51 -0
  350. package/manifest/components/chat-panel-typing.json +51 -0
  351. package/manifest/components/chat-panel-user-message.json +51 -0
  352. package/manifest/components/chat-panel.json +57 -0
  353. package/manifest/components/checkpoint-history.json +80 -0
  354. package/manifest/components/chip.json +24 -12
  355. package/manifest/components/clamp.json +102 -0
  356. package/manifest/components/cli-tool-icon.json +52 -0
  357. package/manifest/components/code-diff.json +87 -0
  358. package/manifest/components/code-runner.json +97 -0
  359. package/manifest/components/color-field.json +2 -0
  360. package/manifest/components/color-picker.json +2 -0
  361. package/manifest/components/combobox.json +2 -0
  362. package/manifest/components/compaction-row.json +100 -0
  363. package/manifest/components/comparison-card.json +83 -0
  364. package/manifest/components/composer-actions.json +65 -0
  365. package/manifest/components/composer-attach-button.json +65 -0
  366. package/manifest/components/composer-attachment-chip.json +75 -0
  367. package/manifest/components/composer-attachments.json +60 -0
  368. package/manifest/components/composer-bar.json +73 -0
  369. package/manifest/components/composer-command-item.json +79 -0
  370. package/manifest/components/composer-context.json +67 -0
  371. package/manifest/components/composer-input.json +73 -0
  372. package/manifest/components/composer-menu-item.json +72 -0
  373. package/manifest/components/composer-menu.json +79 -0
  374. package/manifest/components/composer-model-item.json +75 -0
  375. package/manifest/components/composer-model-trigger.json +75 -0
  376. package/manifest/components/composer-person-item.json +79 -0
  377. package/manifest/components/composer-send.json +80 -0
  378. package/manifest/components/composer-toolbar.json +65 -0
  379. package/manifest/components/composer-voice-button.json +68 -0
  380. package/manifest/components/composer-voice.json +75 -0
  381. package/manifest/components/composer.json +2 -0
  382. package/manifest/components/computer-use.json +84 -0
  383. package/manifest/components/confidence-marker.json +74 -0
  384. package/manifest/components/connection-state.json +84 -0
  385. package/manifest/components/context-breakdown.json +65 -0
  386. package/manifest/components/context-usage.json +85 -0
  387. package/manifest/components/conversation-search.json +92 -0
  388. package/manifest/components/cost-meter.json +74 -0
  389. package/manifest/components/cue-portal-frame.json +1 -1
  390. package/manifest/components/data-row.json +203 -0
  391. package/manifest/components/data-tree.json +151 -0
  392. package/manifest/components/date-field.json +2 -0
  393. package/manifest/components/date-picker.json +2 -0
  394. package/manifest/components/date-range-picker.json +2 -0
  395. package/manifest/components/day-separator.json +58 -0
  396. package/manifest/components/delegation-card.json +1 -1
  397. package/manifest/components/density.json +1 -1
  398. package/manifest/components/diagram.json +100 -0
  399. package/manifest/components/document-reference.json +90 -0
  400. package/manifest/components/draft-restore.json +82 -0
  401. package/manifest/components/drawer.json +1 -1
  402. package/manifest/components/dropdown-menu.json +1 -1
  403. package/manifest/components/edit-message.json +105 -0
  404. package/manifest/components/elements-command-palette.json +100 -0
  405. package/manifest/components/elements-composer.json +71 -0
  406. package/manifest/components/elements-data-table.json +68 -0
  407. package/manifest/components/elements-timeline.json +69 -0
  408. package/manifest/components/elicitation-form.json +103 -0
  409. package/manifest/components/empty-state-composer.json +64 -0
  410. package/manifest/components/empty-state-greeting.json +49 -0
  411. package/manifest/components/empty-state-suggestion.json +57 -0
  412. package/manifest/components/empty-state-suggestions.json +49 -0
  413. package/manifest/components/end-of-turn-summary.json +77 -0
  414. package/manifest/components/env-var-input.json +2 -0
  415. package/manifest/components/error-state.json +80 -0
  416. package/manifest/components/feedback-dialog.json +107 -0
  417. package/manifest/components/file-tree.json +83 -0
  418. package/manifest/components/flow-graph.json +75 -0
  419. package/manifest/components/folder-icon.json +52 -0
  420. package/manifest/components/frac.json +59 -0
  421. package/manifest/components/generation-loader.json +64 -0
  422. package/manifest/components/generative-ui.json +93 -0
  423. package/manifest/components/guardrail-notice.json +91 -0
  424. package/manifest/components/hover-card.json +1 -1
  425. package/manifest/components/image-generation.json +67 -0
  426. package/manifest/components/info-tip.json +1 -1
  427. package/manifest/components/inline-citation.json +77 -0
  428. package/manifest/components/input-group.json +4 -2
  429. package/manifest/components/input.json +3 -1
  430. package/manifest/components/job-progress.json +96 -0
  431. package/manifest/components/launcher-bubble.json +105 -0
  432. package/manifest/components/ledger.json +187 -0
  433. package/manifest/components/live-region-announcer.json +79 -0
  434. package/manifest/components/map-answer.json +83 -0
  435. package/manifest/components/markdown-text.json +94 -0
  436. package/manifest/components/math-block.json +74 -0
  437. package/manifest/components/mcp-server-icon.json +52 -0
  438. package/manifest/components/mcp-server-panel.json +87 -0
  439. package/manifest/components/memory-chips.json +65 -0
  440. package/manifest/components/message-actions.json +99 -0
  441. package/manifest/components/message-attachments.json +63 -0
  442. package/manifest/components/message-branches.json +71 -0
  443. package/manifest/components/message-list.json +1 -1
  444. package/manifest/components/message-pair.json +86 -0
  445. package/manifest/components/message-queue.json +74 -0
  446. package/manifest/components/message-timing.json +62 -0
  447. package/manifest/components/mobile-composer.json +126 -0
  448. package/manifest/components/model-picker.json +76 -0
  449. package/manifest/components/multi-select.json +2 -0
  450. package/manifest/components/musical-time-input.json +2 -0
  451. package/manifest/components/node-card.json +1 -1
  452. package/manifest/components/node-handle.json +1 -1
  453. package/manifest/components/number-field.json +3 -1
  454. package/manifest/components/number-ticker.json +61 -0
  455. package/manifest/components/onboarding.json +84 -0
  456. package/manifest/components/otp-field.json +9 -7
  457. package/manifest/components/password-input.json +2 -0
  458. package/manifest/components/permission-grant.json +92 -0
  459. package/manifest/components/permission-scopes.json +139 -0
  460. package/manifest/components/popover.json +1 -1
  461. package/manifest/components/prompt-library.json +99 -0
  462. package/manifest/components/queue-dock.json +110 -0
  463. package/manifest/components/quota-banner.json +94 -0
  464. package/manifest/components/quote-reply.json +105 -0
  465. package/manifest/components/read-aloud.json +111 -0
  466. package/manifest/components/reasoning-effort.json +81 -0
  467. package/manifest/components/reasoning-panel.json +108 -0
  468. package/manifest/components/recommendation-card.json +107 -0
  469. package/manifest/components/regenerate-menu.json +89 -0
  470. package/manifest/components/replay-player.json +102 -0
  471. package/manifest/components/research-report.json +76 -0
  472. package/manifest/components/retrieval-chunks.json +84 -0
  473. package/manifest/components/revert-dock.json +150 -0
  474. package/manifest/components/reviewable-diff.json +93 -0
  475. package/manifest/components/risk-badge.json +74 -0
  476. package/manifest/components/schedule-card.json +101 -0
  477. package/manifest/components/score-breakdown.json +91 -0
  478. package/manifest/components/scroll-anchor.json +72 -0
  479. package/manifest/components/scroll-area.json +7 -7
  480. package/manifest/components/scrub-input.json +2 -0
  481. package/manifest/components/search-input.json +9 -7
  482. package/manifest/components/segmented-control.json +21 -21
  483. package/manifest/components/select.json +1 -0
  484. package/manifest/components/settings-panel.json +118 -0
  485. package/manifest/components/shared-conversation.json +89 -0
  486. package/manifest/components/shimmer-label.json +59 -0
  487. package/manifest/components/skill-icon.json +52 -0
  488. package/manifest/components/sources.json +83 -0
  489. package/manifest/components/speaker-identity.json +61 -0
  490. package/manifest/components/spec-sheet.json +80 -0
  491. package/manifest/components/stack-icon.json +52 -0
  492. package/manifest/components/stacks-matrix-icon.json +52 -0
  493. package/manifest/components/stat.json +1 -1
  494. package/manifest/components/status-bar.json +146 -12
  495. package/manifest/components/status-dot.json +1 -1
  496. package/manifest/components/stopped-run.json +81 -0
  497. package/manifest/components/streaming-text.json +71 -0
  498. package/manifest/components/sub.json +44 -0
  499. package/manifest/components/subagent-list.json +88 -0
  500. package/manifest/components/suggestions.json +84 -0
  501. package/manifest/components/sup.json +44 -0
  502. package/manifest/components/swap-label.json +71 -0
  503. package/manifest/components/table-scroll-region.json +6 -0
  504. package/manifest/components/table.json +88 -4
  505. package/manifest/components/tags-input.json +2 -0
  506. package/manifest/components/tail-status.json +109 -0
  507. package/manifest/components/terminal-block.json +91 -0
  508. package/manifest/components/textarea.json +3 -1
  509. package/manifest/components/theme-provider.json +2 -2
  510. package/manifest/components/thinking-indicator.json +63 -0
  511. package/manifest/components/thread-list.json +76 -0
  512. package/manifest/components/thread-search.json +90 -0
  513. package/manifest/components/threshold-rail.json +2 -2
  514. package/manifest/components/time-boundary.json +62 -0
  515. package/manifest/components/time-field.json +2 -0
  516. package/manifest/components/timeline.json +1 -1
  517. package/manifest/components/title-bar.json +1 -1
  518. package/manifest/components/todo-list.json +69 -0
  519. package/manifest/components/toggle-group.json +9 -7
  520. package/manifest/components/toggle.json +2 -0
  521. package/manifest/components/token-editor.json +1 -1
  522. package/manifest/components/tool-call-card.json +200 -0
  523. package/manifest/components/tool-call.json +119 -0
  524. package/manifest/components/tool-error.json +114 -0
  525. package/manifest/components/tool-group.json +83 -0
  526. package/manifest/components/tool-timeline.json +119 -0
  527. package/manifest/components/toolbar.json +7 -7
  528. package/manifest/components/tooltip.json +1 -1
  529. package/manifest/components/trace-waterfall.json +74 -0
  530. package/manifest/components/turn-footer.json +105 -0
  531. package/manifest/components/typing-indicator.json +53 -0
  532. package/manifest/components/unread-divider.json +55 -0
  533. package/manifest/components/usage-chart.json +1 -1
  534. package/manifest/components/verdict-row.json +91 -0
  535. package/manifest/components/voice-conversation.json +109 -0
  536. package/manifest/components/web-preview.json +87 -0
  537. package/manifest/components/web-search.json +92 -0
  538. package/manifest/components/work-collapse.json +102 -0
  539. package/manifest/manifest.json +2736 -60
  540. package/manifest/tokens.json +22 -1
  541. package/package.json +44 -2
@@ -0,0 +1,190 @@
1
+ "use client";
2
+ import "react";
3
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/elements/generative/icons.tsx
5
+ /**
6
+ * The 24 glyphs the vocabulary publishes, drawn here rather than imported.
7
+ *
8
+ * `Icon` takes a `name` from a fixed set — upstream's list, transcribed in the
9
+ * catalogue report §B — and every element in the elements family beside this
10
+ * one draws its icons with `lucide-react`, an optional peer of `./elements`.
11
+ * This subpath deliberately does not, and the reason is the same reason the
12
+ * stylesheet is plain CSS: a spec-driven widget has to render in a host that
13
+ * brought nothing. `./elements/generative` declares no optional peer at all, so
14
+ * an app can put a model's composition on the screen with `@cueplusplus/ui`
15
+ * installed and nothing else — and there is no package in the tree whose
16
+ * absence turns a weather card into a stack trace.
17
+ *
18
+ * It buys one more property, which the suite asserts: no element the renderer
19
+ * produces carries a `class` attribute. lucide stamps `class="lucide
20
+ * lucide-sun"` on every icon it draws, which is harmless and is still a name in
21
+ * the host app's global namespace that cue never asked for.
22
+ *
23
+ * The geometry is a 24×24 grid with a 2-unit margin, `currentColor` on the
24
+ * stroke and nothing on the fill, which is the convention every icon set in
25
+ * this repo already follows. Stroke weight is *not* an attribute here: the
26
+ * stylesheet sets it from `--aui-icon-stroke`, so it tracks the console's own
27
+ * `--cue-icon-stroke` and an island can change it without re-rendering.
28
+ */
29
+ /**
30
+ * Every name a model may put in `Icon.name`.
31
+ *
32
+ * The order is upstream's, which groups them by what they are for — weather,
33
+ * transport controls, marks, shapes, arrows, and the eight object glyphs — and
34
+ * that is worth keeping: it is the order the docs page lists, so a reader
35
+ * comparing the two is comparing like with like.
36
+ */
37
+ const GENERATIVE_ICONS = [
38
+ "sun",
39
+ "moon",
40
+ "cloud",
41
+ "rain",
42
+ "snow",
43
+ "wind",
44
+ "play",
45
+ "pause",
46
+ "check",
47
+ "x",
48
+ "star",
49
+ "heart",
50
+ "arrow-right",
51
+ "arrow-up-right",
52
+ "chevron-right",
53
+ "calendar",
54
+ "clock",
55
+ "map-pin",
56
+ "plane",
57
+ "truck",
58
+ "credit-card",
59
+ "user",
60
+ "search",
61
+ "bell"
62
+ ];
63
+ /** The eight rays of the sun, as one path so the glyph is two elements. */
64
+ const SUN_RAYS = "M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4";
65
+ /** The cloud body every weather glyph is built on. */
66
+ const CLOUD = "M17.5 18a4.5 4.5 0 0 0 .5-8.98A6 6 0 0 0 6.2 10.4 3.8 3.8 0 0 0 6.5 18Z";
67
+ /** The same body, lifted so the precipitation below it has room. */
68
+ const CLOUD_HIGH = "M17.5 15a4 4 0 0 0 .5-7.98A5.5 5.5 0 0 0 6.6 8.4 3.5 3.5 0 0 0 6.9 15Z";
69
+ /**
70
+ * The glyphs, keyed by name.
71
+ *
72
+ * Elements rather than components: each is created once at module scope and
73
+ * handed to React as-is, so drawing the same icon in forty list rows allocates
74
+ * nothing. React elements are frozen in development and immutable by contract,
75
+ * which makes sharing one across a tree safe.
76
+ */
77
+ const GLYPH = {
78
+ sun: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("circle", {
79
+ cx: "12",
80
+ cy: "12",
81
+ r: "4"
82
+ }), /* @__PURE__ */ jsx("path", { d: SUN_RAYS })] }),
83
+ moon: /* @__PURE__ */ jsx("path", { d: "M20 14.5A8.5 8.5 0 0 1 9.5 4a7.5 7.5 0 1 0 10.5 10.5Z" }),
84
+ cloud: /* @__PURE__ */ jsx("path", { d: CLOUD }),
85
+ rain: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("path", { d: CLOUD_HIGH }), /* @__PURE__ */ jsx("path", { d: "M8 18.5v2M12 18.5v2.5M16 18.5v2" })] }),
86
+ snow: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("path", { d: CLOUD_HIGH }), /* @__PURE__ */ jsx("path", { d: "M8 19h.01M12 21h.01M16 19h.01M8 22h.01M16 22h.01" })] }),
87
+ wind: /* @__PURE__ */ jsx("path", { d: "M3 8h9a2.5 2.5 0 1 0-2.5-2.5M3 12h13a2.5 2.5 0 1 1-2.5 2.5M3 16h7a2 2 0 1 1-2 2" }),
88
+ play: /* @__PURE__ */ jsx("path", { d: "M7 4.5 19 12 7 19.5Z" }),
89
+ pause: /* @__PURE__ */ jsx("path", { d: "M8.5 4.5v15M15.5 4.5v15" }),
90
+ check: /* @__PURE__ */ jsx("path", { d: "m4.5 12.5 5 5 10-11" }),
91
+ x: /* @__PURE__ */ jsx("path", { d: "m5.5 5.5 13 13M18.5 5.5l-13 13" }),
92
+ star: /* @__PURE__ */ jsx("path", { d: "m12 3.2 2.8 5.7 6.2.9-4.5 4.4 1.1 6.2-5.6-3-5.6 3 1.1-6.2L3 9.8l6.2-.9Z" }),
93
+ heart: /* @__PURE__ */ jsx("path", { d: "M12 20.5 4.3 13a4.8 4.8 0 0 1 6.8-6.8l.9.9.9-.9A4.8 4.8 0 0 1 19.7 13Z" }),
94
+ "arrow-right": /* @__PURE__ */ jsx("path", { d: "M4 12h15m-6-6 6 6-6 6" }),
95
+ "arrow-up-right": /* @__PURE__ */ jsx("path", { d: "M7 17 17 7m-7 0h7v7" }),
96
+ "chevron-right": /* @__PURE__ */ jsx("path", { d: "m9.5 5.5 7 6.5-7 6.5" }),
97
+ calendar: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("rect", {
98
+ x: "3.5",
99
+ y: "5",
100
+ width: "17",
101
+ height: "15.5",
102
+ rx: "2.5"
103
+ }), /* @__PURE__ */ jsx("path", { d: "M3.5 10h17M8 3v4M16 3v4" })] }),
104
+ clock: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("circle", {
105
+ cx: "12",
106
+ cy: "12",
107
+ r: "8.5"
108
+ }), /* @__PURE__ */ jsx("path", { d: "M12 7v5.3l3.4 2" })] }),
109
+ "map-pin": /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("path", { d: "M12 21.5s7-6.1 7-11a7 7 0 1 0-14 0c0 4.9 7 11 7 11Z" }), /* @__PURE__ */ jsx("circle", {
110
+ cx: "12",
111
+ cy: "10.5",
112
+ r: "2.5"
113
+ })] }),
114
+ plane: /* @__PURE__ */ jsx("path", { d: "M10.5 19.5 12 21l1.5-1.5V15l7.5 2.5v-2L13.5 10V4.5a1.5 1.5 0 0 0-3 0V10L3 15.5v2L10.5 15Z" }),
115
+ truck: /* @__PURE__ */ jsxs(Fragment, { children: [
116
+ /* @__PURE__ */ jsx("path", { d: "M2.5 6.5h10v9h-10ZM12.5 10h4l3 3v2.5h-7Z" }),
117
+ /* @__PURE__ */ jsx("circle", {
118
+ cx: "6.5",
119
+ cy: "17.5",
120
+ r: "1.8"
121
+ }),
122
+ /* @__PURE__ */ jsx("circle", {
123
+ cx: "16.5",
124
+ cy: "17.5",
125
+ r: "1.8"
126
+ })
127
+ ] }),
128
+ "credit-card": /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("rect", {
129
+ x: "2.5",
130
+ y: "5.5",
131
+ width: "19",
132
+ height: "13",
133
+ rx: "2.5"
134
+ }), /* @__PURE__ */ jsx("path", { d: "M2.5 10h19M6 14.5h3" })] }),
135
+ user: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("circle", {
136
+ cx: "12",
137
+ cy: "8",
138
+ r: "3.8"
139
+ }), /* @__PURE__ */ jsx("path", { d: "M4.5 20.5a7.5 7.5 0 0 1 15 0" })] }),
140
+ search: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("circle", {
141
+ cx: "10.5",
142
+ cy: "10.5",
143
+ r: "6.5"
144
+ }), /* @__PURE__ */ jsx("path", { d: "m15.5 15.5 4.5 4.5" })] }),
145
+ bell: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("path", { d: "M18 16.5V11a6 6 0 1 0-12 0v5.5L4.5 19h15Z" }), /* @__PURE__ */ jsx("path", { d: "M10 19a2 2 0 0 0 4 0" })] })
146
+ };
147
+ const KNOWN = new Set(GENERATIVE_ICONS);
148
+ /** Whether `name` is one of the 24 the vocabulary publishes. */
149
+ function isGenerativeIcon(name) {
150
+ return KNOWN.has(name);
151
+ }
152
+ /**
153
+ * One glyph, or the placeholder ring when the name is not one of the 24.
154
+ *
155
+ * The unknown case is deliberately *not* the unknown-component fallback. An
156
+ * `Icon` with a name nobody publishes is still an `Icon` — the node is
157
+ * well-formed, its place in the layout is correct, and the only thing missing
158
+ * is a drawing. Replacing it with a notice would break the row it sits in to
159
+ * report something a reader can see for themselves; a dotted ring keeps the
160
+ * shape, keeps the alignment, and reads as "there is a picture here that this
161
+ * version does not have".
162
+ *
163
+ * `aria-hidden`, always. Every icon in this vocabulary sits beside its own
164
+ * label — a button's text, a fact's value, a list row — and an announced name
165
+ * would double it. A model that wants an icon to carry meaning on its own has
166
+ * `Caption` for that.
167
+ */
168
+ function GenerativeIcon({ name, size }) {
169
+ const known = name !== void 0 && isGenerativeIcon(name);
170
+ return /* @__PURE__ */ jsx("span", {
171
+ "data-aui": "icon",
172
+ "data-aui-icon": known ? name : "unknown",
173
+ "data-aui-size": size,
174
+ children: /* @__PURE__ */ jsx("svg", {
175
+ viewBox: "0 0 24 24",
176
+ fill: "none",
177
+ stroke: "currentColor",
178
+ "aria-hidden": "true",
179
+ focusable: "false",
180
+ children: known ? GLYPH[name] : /* @__PURE__ */ jsx("circle", {
181
+ cx: "12",
182
+ cy: "12",
183
+ r: "7.5",
184
+ strokeDasharray: "3 3"
185
+ })
186
+ })
187
+ });
188
+ }
189
+ //#endregion
190
+ export { GENERATIVE_ICONS, GenerativeIcon, isGenerativeIcon };
@@ -0,0 +1,483 @@
1
+ "use client";
2
+ import { GenerativeFallback } from "./faults.js";
3
+ import { actionOf, childList, choice, columnList, describe, flag, isGenerativeType, isNode, list, num, optionList, rowCells, safeColor, safeLength, safeSrc, scale, str, strOr } from "./spec.js";
4
+ import { GenerativeChart } from "./chart.js";
5
+ import { GenerativeIcon } from "./icons.js";
6
+ import * as React from "react";
7
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
+ //#region src/elements/generative/intrinsics.tsx
9
+ /** How many slides a carousel draws, whatever the model sent. */
10
+ const MAX_SLIDES = 10;
11
+ /**
12
+ * One value from the tree, as elements.
13
+ *
14
+ * `path` is the dotted position from the root — `root.children.2.children.0` —
15
+ * and it is threaded rather than reconstructed because it is the only thing
16
+ * that makes a fault actionable. "Unknown component Cauldron" tells a
17
+ * developer what happened; "at root.children.2" tells them where to look in a
18
+ * spec that may be four hundred lines of JSON.
19
+ */
20
+ function renderValue(value, path, depth, ctx, within) {
21
+ if (depth > ctx.maxDepth) return fault(ctx, {
22
+ kind: "too-deep",
23
+ path,
24
+ message: `Nesting stops at ${ctx.maxDepth} levels; this branch goes further.`
25
+ });
26
+ if (!isNode(value)) return fault(ctx, {
27
+ kind: "not-a-node",
28
+ path,
29
+ message: `Expected a component here and found ${describe(value)}.`
30
+ });
31
+ if (!isGenerativeType(value.$type)) return fault(ctx, {
32
+ kind: "unknown-type",
33
+ path,
34
+ type: value.$type,
35
+ message: `“${value.$type}” is not a component this version can draw.`
36
+ });
37
+ return intrinsic(value, value.$type, path, depth, ctx, within);
38
+ }
39
+ /** Record a refusal and draw it in place. */
40
+ function fault(ctx, detail) {
41
+ ctx.faults.push(detail);
42
+ return /* @__PURE__ */ jsx(GenerativeFallback, { fault: detail });
43
+ }
44
+ /** A node's children, walked. */
45
+ function children(node, path, depth, ctx, within) {
46
+ return childList(node).map((child, at) => /* @__PURE__ */ jsx(React.Fragment, { children: renderValue(child, `${path}.children.${at}`, depth + 1, ctx, within) }, at));
47
+ }
48
+ /** Fire `$action`, if the node carries one and a caller is listening. */
49
+ function fire(ctx, node, type, value, values) {
50
+ const action = actionOf(node);
51
+ if (action === void 0 || ctx.onAction === void 0) return;
52
+ ctx.onAction({
53
+ action,
54
+ type,
55
+ ...value === void 0 ? {} : { value },
56
+ ...values === void 0 ? {} : { values }
57
+ });
58
+ }
59
+ /**
60
+ * Every named control in a submitted form, keyed by its `name`.
61
+ *
62
+ * `FormData` reads the DOM rather than any state this renderer keeps, which is
63
+ * deliberate: the intrinsics are uncontrolled — a model's spec supplies
64
+ * *defaults*, and what the person typed lives in the elements. Keeping a
65
+ * parallel copy in React state would mean a re-render on every keystroke of a
66
+ * tree that may be a hundred nodes, and two answers to "what is in this field".
67
+ *
68
+ * File entries are dropped. A generative form has no upload intrinsic, so the
69
+ * only way one appears is a spec that was not composed by this vocabulary.
70
+ */
71
+ function valuesOf(form) {
72
+ const values = {};
73
+ for (const [name, value] of new FormData(form).entries()) if (typeof value === "string") values[name] = value;
74
+ return values;
75
+ }
76
+ /**
77
+ * A form submit, always prevented.
78
+ *
79
+ * There is no URL for a generative form to post to, and the default action of
80
+ * an un-prevented submit inside a chat console is a full page navigation that
81
+ * loses the conversation. So the handler prevents first and decides second: a
82
+ * form with no `$action` is inert, not a page load.
83
+ */
84
+ function submitter(ctx, node, type) {
85
+ return (event) => {
86
+ event.preventDefault();
87
+ fire(ctx, node, type, void 0, valuesOf(event.currentTarget));
88
+ };
89
+ }
90
+ const SIZES = [
91
+ "sm",
92
+ "md",
93
+ "lg",
94
+ "xl",
95
+ "2xl",
96
+ "3xl"
97
+ ];
98
+ const WEIGHTS = [
99
+ "normal",
100
+ "medium",
101
+ "semibold",
102
+ "bold"
103
+ ];
104
+ const COLORS = [
105
+ "emphasis",
106
+ "secondary",
107
+ "alpha-70",
108
+ "white",
109
+ "white-70",
110
+ "white-50"
111
+ ];
112
+ const ALIGN = [
113
+ "start",
114
+ "center",
115
+ "end"
116
+ ];
117
+ const JUSTIFY = [
118
+ "start",
119
+ "center",
120
+ "end",
121
+ "between"
122
+ ];
123
+ const BUTTON_STYLES = [
124
+ "primary",
125
+ "secondary",
126
+ "outline",
127
+ "ghost",
128
+ "danger"
129
+ ];
130
+ const BADGE_VARIANTS = [
131
+ "default",
132
+ "secondary",
133
+ "info",
134
+ "success",
135
+ "warning"
136
+ ];
137
+ const TONES = [
138
+ "info",
139
+ "success",
140
+ "warning",
141
+ "danger"
142
+ ];
143
+ const IMAGE_SIZES = [
144
+ "sm",
145
+ "md",
146
+ "lg"
147
+ ];
148
+ /**
149
+ * The label half of a labelled control.
150
+ *
151
+ * Wrapped rather than associated by `id`. A model composes several forms into
152
+ * one message and has no idea what other ids are on the page, so generating
153
+ * them here would either collide or need a counter that survives re-renders;
154
+ * a `<label>` that contains its control needs neither and is what assistive
155
+ * technology reads either way.
156
+ */
157
+ function Labelled({ label, children: control }) {
158
+ if (label === void 0) return /* @__PURE__ */ jsx(Fragment, { children: control });
159
+ return /* @__PURE__ */ jsxs("label", {
160
+ "data-aui": "field",
161
+ children: [/* @__PURE__ */ jsx("span", {
162
+ "data-aui": "field-label",
163
+ children: label
164
+ }), control]
165
+ });
166
+ }
167
+ /**
168
+ * One node, drawn.
169
+ *
170
+ * The switch is exhaustive over {@link GenerativeTypeName}, which is what makes
171
+ * adding a 28th intrinsic a type error here rather than a silent fallback at
172
+ * runtime.
173
+ */
174
+ function intrinsic(node, type, path, depth, ctx, within) {
175
+ switch (type) {
176
+ case "Card": {
177
+ const title = str(node, "title");
178
+ const confirm = str(node, "confirm");
179
+ const cancel = str(node, "cancel");
180
+ const background = safeColor(node, "background");
181
+ const surface = background !== void 0 || confirm !== void 0 || cancel !== void 0;
182
+ const body = /* @__PURE__ */ jsxs(Fragment, { children: [
183
+ title === void 0 ? null : /* @__PURE__ */ jsx("h3", {
184
+ "data-aui": "card-title",
185
+ children: title
186
+ }),
187
+ children(node, path, depth, ctx),
188
+ confirm === void 0 && cancel === void 0 ? null : /* @__PURE__ */ jsxs("div", {
189
+ "data-aui": "card-footer",
190
+ children: [cancel === void 0 ? null : /* @__PURE__ */ jsx("button", {
191
+ "data-aui": "card-cancel",
192
+ type: "button",
193
+ onClick: () => fire(ctx, node, "Card", "cancel"),
194
+ children: cancel
195
+ }), confirm === void 0 ? null : /* @__PURE__ */ jsx("button", {
196
+ "data-aui": "card-confirm",
197
+ type: flag(node, "asForm") ? "submit" : "button",
198
+ onClick: flag(node, "asForm") ? void 0 : () => fire(ctx, node, "Card", "confirm"),
199
+ children: confirm
200
+ })]
201
+ })
202
+ ] });
203
+ const shared = {
204
+ "data-aui-padding": scale(node, "padding"),
205
+ style: background === void 0 ? void 0 : { background },
206
+ ...surface || within === "Carousel" ? { "data-aui-surface": "" } : {}
207
+ };
208
+ return flag(node, "asForm") ? /* @__PURE__ */ jsx("form", {
209
+ "data-aui": "card",
210
+ ...shared,
211
+ onSubmit: submitter(ctx, node, "Card"),
212
+ children: body
213
+ }) : /* @__PURE__ */ jsx("section", {
214
+ "data-aui": "card",
215
+ ...shared,
216
+ children: body
217
+ });
218
+ }
219
+ case "Row": return /* @__PURE__ */ jsx("div", {
220
+ "data-aui": "row",
221
+ "data-aui-gap": scale(node, "gap"),
222
+ "data-aui-align": choice(node, "align", ALIGN),
223
+ "data-aui-justify": choice(node, "justify", JUSTIFY),
224
+ children: children(node, path, depth, ctx)
225
+ });
226
+ case "Col": return /* @__PURE__ */ jsx("div", {
227
+ "data-aui": "col",
228
+ "data-aui-gap": scale(node, "gap"),
229
+ "data-aui-align": choice(node, "align", ALIGN),
230
+ children: children(node, path, depth, ctx)
231
+ });
232
+ case "Box": {
233
+ const radius = str(node, "radius") === "full" ? "9999px" : safeLength(node, "radius");
234
+ return /* @__PURE__ */ jsx("div", {
235
+ "data-aui": "box",
236
+ style: {
237
+ width: safeLength(node, "width"),
238
+ height: safeLength(node, "height"),
239
+ borderRadius: radius,
240
+ background: safeColor(node, "background")
241
+ },
242
+ children: children(node, path, depth, ctx)
243
+ });
244
+ }
245
+ case "Spacer": return /* @__PURE__ */ jsx("div", {
246
+ "data-aui": "spacer",
247
+ "aria-hidden": "true"
248
+ });
249
+ case "Divider": return /* @__PURE__ */ jsx("hr", {
250
+ "data-aui": "divider",
251
+ ...flag(node, "flush") ? { "data-aui-flush": "" } : {}
252
+ });
253
+ case "Carousel": {
254
+ const label = str(node, "label");
255
+ return /* @__PURE__ */ jsx("div", {
256
+ "data-aui": "carousel",
257
+ role: "group",
258
+ "aria-label": label,
259
+ "aria-roledescription": "carousel",
260
+ children: childList(node).slice(0, MAX_SLIDES).map((child, at) => /* @__PURE__ */ jsx("div", {
261
+ "data-aui": "carousel-slide",
262
+ children: renderValue(child, `${path}.children.${at}`, depth + 1, ctx, "Carousel")
263
+ }, at))
264
+ });
265
+ }
266
+ case "Header": return /* @__PURE__ */ jsx("h3", {
267
+ "data-aui": "header",
268
+ "data-aui-size": choice(node, "size", SIZES) ?? "lg",
269
+ children: strOr(node, "text", "")
270
+ });
271
+ case "Text": return /* @__PURE__ */ jsx("p", {
272
+ "data-aui": "text",
273
+ "data-aui-size": choice(node, "size", SIZES),
274
+ "data-aui-weight": choice(node, "weight", WEIGHTS),
275
+ "data-aui-color": choice(node, "color", COLORS),
276
+ children: strOr(node, "value", "")
277
+ });
278
+ case "Caption": return /* @__PURE__ */ jsx("p", {
279
+ "data-aui": "caption",
280
+ children: strOr(node, "value", "")
281
+ });
282
+ case "Markdown": {
283
+ const value = strOr(node, "value", "");
284
+ return /* @__PURE__ */ jsx("div", {
285
+ "data-aui": "markdown",
286
+ children: ctx.renderMarkdown?.(value) ?? value
287
+ });
288
+ }
289
+ case "Fact": return /* @__PURE__ */ jsxs("div", {
290
+ "data-aui": "fact",
291
+ children: [/* @__PURE__ */ jsx("span", {
292
+ "data-aui": "fact-label",
293
+ children: strOr(node, "label", "")
294
+ }), /* @__PURE__ */ jsx("span", {
295
+ "data-aui": "fact-value",
296
+ children: strOr(node, "value", "")
297
+ })]
298
+ });
299
+ case "Table": {
300
+ const columns = columnList(node["columns"]);
301
+ return /* @__PURE__ */ jsxs("table", {
302
+ "data-aui": "table",
303
+ children: [/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { children: columns.map((column, at) => /* @__PURE__ */ jsx("th", {
304
+ "data-aui": "table-col",
305
+ "data-aui-align": column.align,
306
+ scope: "col",
307
+ children: column.label
308
+ }, at)) }) }), /* @__PURE__ */ jsx("tbody", { children: list(node, "rows").map((row, at) => /* @__PURE__ */ jsx("tr", { children: rowCells(row, columns).map((cell, column) => /* @__PURE__ */ jsx("td", {
309
+ "data-aui-align": columns[column]?.align,
310
+ children: cell
311
+ }, column)) }, at)) })]
312
+ });
313
+ }
314
+ case "Chart": return /* @__PURE__ */ jsx(GenerativeChart, { node });
315
+ case "Badge": return /* @__PURE__ */ jsx("span", {
316
+ "data-aui": "badge",
317
+ "data-aui-variant": choice(node, "variant", BADGE_VARIANTS),
318
+ children: strOr(node, "value", "")
319
+ });
320
+ case "Image": {
321
+ const pixels = num(node, "size");
322
+ return /* @__PURE__ */ jsx("img", {
323
+ "data-aui": "image",
324
+ "data-aui-size": choice(node, "size", IMAGE_SIZES),
325
+ ...flag(node, "round") ? { "data-aui-round": "" } : {},
326
+ src: safeSrc(str(node, "src")),
327
+ alt: strOr(node, "alt", ""),
328
+ style: pixels === void 0 ? void 0 : {
329
+ width: `${pixels}px`,
330
+ height: `${pixels}px`
331
+ }
332
+ });
333
+ }
334
+ case "Icon": return /* @__PURE__ */ jsx(GenerativeIcon, {
335
+ name: str(node, "name"),
336
+ size: choice(node, "size", SIZES)
337
+ });
338
+ case "Button": return /* @__PURE__ */ jsx("button", {
339
+ "data-aui": "button",
340
+ "data-aui-style": choice(node, "buttonStyle", BUTTON_STYLES),
341
+ ...flag(node, "block") ? { "data-aui-block": "" } : {},
342
+ type: flag(node, "submit") ? "submit" : "button",
343
+ onClick: () => fire(ctx, node, "Button"),
344
+ children: strOr(node, "label", "")
345
+ });
346
+ case "Select": {
347
+ const options = optionList(node["options"]);
348
+ const placeholder = str(node, "placeholder");
349
+ return /* @__PURE__ */ jsx(Labelled, {
350
+ label: str(node, "label"),
351
+ children: /* @__PURE__ */ jsxs("select", {
352
+ "data-aui": "select",
353
+ name: str(node, "name"),
354
+ defaultValue: placeholder === void 0 ? void 0 : "",
355
+ onChange: (event) => fire(ctx, node, "Select", event.currentTarget.value),
356
+ children: [placeholder === void 0 ? null : /* @__PURE__ */ jsx("option", {
357
+ value: "",
358
+ disabled: true,
359
+ children: placeholder
360
+ }), options.map((option, at) => /* @__PURE__ */ jsx("option", {
361
+ value: option.value,
362
+ children: option.label
363
+ }, at))]
364
+ })
365
+ });
366
+ }
367
+ case "Input": {
368
+ const multiline = flag(node, "multiline");
369
+ const onBlur = (event) => {
370
+ fire(ctx, node, "Input", event.currentTarget.value);
371
+ };
372
+ return /* @__PURE__ */ jsx(Labelled, {
373
+ label: str(node, "label"),
374
+ children: multiline ? /* @__PURE__ */ jsx("textarea", {
375
+ "data-aui": "input",
376
+ "data-aui-multiline": "",
377
+ name: str(node, "name"),
378
+ placeholder: str(node, "placeholder"),
379
+ defaultValue: str(node, "value"),
380
+ onBlur
381
+ }) : /* @__PURE__ */ jsx("input", {
382
+ "data-aui": "input",
383
+ type: "text",
384
+ name: str(node, "name"),
385
+ placeholder: str(node, "placeholder"),
386
+ defaultValue: str(node, "value"),
387
+ onBlur
388
+ })
389
+ });
390
+ }
391
+ case "DatePicker": return /* @__PURE__ */ jsx(Labelled, {
392
+ label: str(node, "label"),
393
+ children: /* @__PURE__ */ jsx("input", {
394
+ "data-aui": "datepicker",
395
+ type: "date",
396
+ name: str(node, "name"),
397
+ defaultValue: str(node, "value"),
398
+ min: str(node, "min"),
399
+ max: str(node, "max"),
400
+ onChange: (event) => fire(ctx, node, "DatePicker", event.currentTarget.value)
401
+ })
402
+ });
403
+ case "Checkbox": return /* @__PURE__ */ jsxs("label", {
404
+ "data-aui": "checkbox",
405
+ children: [/* @__PURE__ */ jsx("input", {
406
+ type: "checkbox",
407
+ name: str(node, "name"),
408
+ defaultChecked: flag(node, "defaultChecked"),
409
+ onChange: (event) => fire(ctx, node, "Checkbox", event.currentTarget.checked)
410
+ }), /* @__PURE__ */ jsx("span", {
411
+ "data-aui": "field-label",
412
+ children: strOr(node, "label", "")
413
+ })]
414
+ });
415
+ case "RadioGroup": {
416
+ const name = str(node, "name");
417
+ const chosen = str(node, "defaultValue");
418
+ const label = str(node, "label");
419
+ return /* @__PURE__ */ jsxs("fieldset", {
420
+ "data-aui": "radiogroup",
421
+ children: [label === void 0 ? null : /* @__PURE__ */ jsx("legend", {
422
+ "data-aui": "field-label",
423
+ children: label
424
+ }), optionList(node["options"]).map((option, at) => /* @__PURE__ */ jsxs("label", {
425
+ "data-aui": "radiogroup-option",
426
+ children: [/* @__PURE__ */ jsx("input", {
427
+ type: "radio",
428
+ name,
429
+ value: option.value,
430
+ defaultChecked: chosen === option.value,
431
+ onChange: () => fire(ctx, node, "RadioGroup", option.value)
432
+ }), /* @__PURE__ */ jsx("span", {
433
+ "data-aui": "field-label",
434
+ children: option.label
435
+ })]
436
+ }, at))]
437
+ });
438
+ }
439
+ case "Form": return /* @__PURE__ */ jsx("form", {
440
+ "data-aui": "form",
441
+ "data-aui-gap": scale(node, "gap"),
442
+ onSubmit: submitter(ctx, node, "Form"),
443
+ children: children(node, path, depth, ctx)
444
+ });
445
+ case "ListView": return /* @__PURE__ */ jsx("ul", {
446
+ "data-aui": "listview",
447
+ children: children(node, path, depth, ctx, "ListView")
448
+ });
449
+ case "ListViewItem": {
450
+ const body = actionOf(node) === void 0 ? children(node, path, depth, ctx) : /* @__PURE__ */ jsx("button", {
451
+ "data-aui": "listview-item-trigger",
452
+ type: "button",
453
+ onClick: () => fire(ctx, node, "ListViewItem"),
454
+ children: children(node, path, depth, ctx)
455
+ });
456
+ return within === "ListView" ? /* @__PURE__ */ jsx("li", {
457
+ "data-aui": "listview-item",
458
+ children: body
459
+ }) : /* @__PURE__ */ jsx("div", {
460
+ "data-aui": "listview-item",
461
+ children: body
462
+ });
463
+ }
464
+ case "Alert": {
465
+ const tone = choice(node, "tone", TONES) ?? "info";
466
+ const description = str(node, "description");
467
+ return /* @__PURE__ */ jsxs("div", {
468
+ "data-aui": "alert",
469
+ "data-aui-tone": tone,
470
+ role: tone === "danger" ? "alert" : "status",
471
+ children: [/* @__PURE__ */ jsx("span", {
472
+ "data-aui": "alert-title",
473
+ children: strOr(node, "title", "")
474
+ }), description === void 0 ? null : /* @__PURE__ */ jsx("span", {
475
+ "data-aui": "alert-desc",
476
+ children: description
477
+ })]
478
+ });
479
+ }
480
+ }
481
+ }
482
+ //#endregion
483
+ export { renderValue };