@aceshooting/lyra-ui 1.2.0 → 2.0.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 (330) hide show
  1. package/README.md +11 -0
  2. package/custom-elements.json +23341 -11202
  3. package/dist/components/app-rail/app-rail.d.ts +171 -0
  4. package/dist/components/app-rail/app-rail.js +483 -0
  5. package/dist/components/app-rail/app-rail.styles.d.ts +1 -0
  6. package/dist/components/app-rail/app-rail.styles.js +125 -0
  7. package/dist/components/attachment-chip/attachment-chip.d.ts +114 -0
  8. package/dist/components/attachment-chip/attachment-chip.js +312 -0
  9. package/dist/components/attachment-chip/attachment-chip.styles.d.ts +1 -0
  10. package/dist/components/attachment-chip/attachment-chip.styles.js +184 -0
  11. package/dist/components/attachment-trigger/attachment-trigger.d.ts +83 -0
  12. package/dist/components/attachment-trigger/attachment-trigger.js +258 -0
  13. package/dist/components/attachment-trigger/attachment-trigger.styles.d.ts +1 -0
  14. package/dist/components/attachment-trigger/attachment-trigger.styles.js +68 -0
  15. package/dist/components/chart/box-plot.js +11 -1
  16. package/dist/components/chart/chart-loader.d.ts +44 -13
  17. package/dist/components/chart/chart-loader.js +65 -18
  18. package/dist/components/chart/chart.d.ts +1 -2
  19. package/dist/components/chart/chart.js +67 -12
  20. package/dist/components/chart/histogram-bin.d.ts +4 -1
  21. package/dist/components/chart/histogram-bin.js +24 -14
  22. package/dist/components/chart/lite-chart.d.ts +54 -0
  23. package/dist/components/chart/lite-chart.js +140 -22
  24. package/dist/components/chart/lite-chart.styles.js +9 -0
  25. package/dist/components/chat-composer/chat-composer.d.ts +92 -0
  26. package/dist/components/chat-composer/chat-composer.js +285 -0
  27. package/dist/components/chat-composer/chat-composer.styles.d.ts +1 -0
  28. package/dist/components/chat-composer/chat-composer.styles.js +135 -0
  29. package/dist/components/chat-message/chat-message.d.ts +113 -0
  30. package/dist/components/chat-message/chat-message.js +291 -0
  31. package/dist/components/chat-message/chat-message.styles.d.ts +1 -0
  32. package/dist/components/chat-message/chat-message.styles.js +203 -0
  33. package/dist/components/checkbox/checkbox.d.ts +59 -0
  34. package/dist/components/checkbox/checkbox.js +230 -0
  35. package/dist/components/checkbox/checkbox.styles.d.ts +1 -0
  36. package/dist/components/checkbox/checkbox.styles.js +70 -0
  37. package/dist/components/chip/chip-group.d.ts +56 -0
  38. package/dist/components/chip/chip-group.js +124 -0
  39. package/dist/components/chip/chip-group.styles.d.ts +1 -0
  40. package/dist/components/chip/chip-group.styles.js +57 -0
  41. package/dist/components/chip/chip.d.ts +64 -0
  42. package/dist/components/chip/chip.js +115 -0
  43. package/dist/components/chip/chip.styles.d.ts +1 -0
  44. package/dist/components/chip/chip.styles.js +115 -0
  45. package/dist/components/citation-badge/citation-badge.d.ts +113 -0
  46. package/dist/components/citation-badge/citation-badge.js +300 -0
  47. package/dist/components/citation-badge/citation-badge.styles.d.ts +1 -0
  48. package/dist/components/citation-badge/citation-badge.styles.js +96 -0
  49. package/dist/components/code-block/code-block.d.ts +89 -0
  50. package/dist/components/code-block/code-block.js +317 -0
  51. package/dist/components/code-block/code-block.styles.d.ts +1 -0
  52. package/dist/components/code-block/code-block.styles.js +187 -0
  53. package/dist/components/code-block/code-loader.d.ts +44 -0
  54. package/dist/components/code-block/code-loader.js +79 -0
  55. package/dist/components/combobox/combobox.d.ts +19 -1
  56. package/dist/components/combobox/combobox.js +84 -14
  57. package/dist/components/combobox/option.d.ts +5 -1
  58. package/dist/components/combobox/option.js +35 -0
  59. package/dist/components/context-meter/context-meter.d.ts +53 -0
  60. package/dist/components/context-meter/context-meter.js +150 -0
  61. package/dist/components/context-meter/context-meter.styles.d.ts +1 -0
  62. package/dist/components/context-meter/context-meter.styles.js +120 -0
  63. package/dist/components/conversation-item/conversation-item.d.ts +128 -0
  64. package/dist/components/conversation-item/conversation-item.js +322 -0
  65. package/dist/components/conversation-item/conversation-item.styles.d.ts +1 -0
  66. package/dist/components/conversation-item/conversation-item.styles.js +155 -0
  67. package/dist/components/date-picker/date-input.d.ts +24 -0
  68. package/dist/components/date-picker/date-input.js +134 -22
  69. package/dist/components/date-picker/date-picker.d.ts +7 -0
  70. package/dist/components/date-picker/date-picker.js +85 -16
  71. package/dist/components/dialog/confirm.d.ts +40 -0
  72. package/dist/components/dialog/confirm.js +79 -0
  73. package/dist/components/dialog/dialog.d.ts +85 -0
  74. package/dist/components/dialog/dialog.js +272 -0
  75. package/dist/components/dialog/dialog.styles.d.ts +1 -0
  76. package/dist/components/dialog/dialog.styles.js +52 -0
  77. package/dist/components/dock-panel/dock-panel.d.ts +134 -0
  78. package/dist/components/dock-panel/dock-panel.js +345 -0
  79. package/dist/components/dock-panel/dock-panel.styles.d.ts +1 -0
  80. package/dist/components/dock-panel/dock-panel.styles.js +145 -0
  81. package/dist/components/document-preview/document-preview.d.ts +135 -0
  82. package/dist/components/document-preview/document-preview.js +372 -0
  83. package/dist/components/document-preview/document-preview.styles.d.ts +1 -0
  84. package/dist/components/document-preview/document-preview.styles.js +191 -0
  85. package/dist/components/export-button/csv.js +1 -1
  86. package/dist/components/export-button/export-button.js +2 -0
  87. package/dist/components/flag/flag.d.ts +29 -13
  88. package/dist/components/flag/flag.js +39 -13
  89. package/dist/components/gauge/gauge.js +19 -10
  90. package/dist/components/generation-status/generation-status.d.ts +109 -0
  91. package/dist/components/generation-status/generation-status.js +273 -0
  92. package/dist/components/generation-status/generation-status.styles.d.ts +1 -0
  93. package/dist/components/generation-status/generation-status.styles.js +84 -0
  94. package/dist/components/heatmap/calendar-grid.d.ts +4 -1
  95. package/dist/components/heatmap/calendar-grid.js +25 -12
  96. package/dist/components/heatmap/heatmap-scale.d.ts +6 -0
  97. package/dist/components/heatmap/heatmap-scale.js +7 -1
  98. package/dist/components/heatmap/heatmap.d.ts +74 -0
  99. package/dist/components/heatmap/heatmap.js +135 -23
  100. package/dist/components/json-viewer/json-viewer.d.ts +53 -0
  101. package/dist/components/json-viewer/json-viewer.js +283 -0
  102. package/dist/components/json-viewer/json-viewer.styles.d.ts +1 -0
  103. package/dist/components/json-viewer/json-viewer.styles.js +176 -0
  104. package/dist/components/kbd/kbd.d.ts +77 -0
  105. package/dist/components/kbd/kbd.js +214 -0
  106. package/dist/components/kbd/kbd.styles.d.ts +1 -0
  107. package/dist/components/kbd/kbd.styles.js +52 -0
  108. package/dist/components/live-region/live-region.d.ts +81 -0
  109. package/dist/components/live-region/live-region.js +153 -0
  110. package/dist/components/live-region/live-region.styles.d.ts +1 -0
  111. package/dist/components/live-region/live-region.styles.js +10 -0
  112. package/dist/components/map/map.d.ts +8 -6
  113. package/dist/components/map/map.js +44 -8
  114. package/dist/components/markdown/markdown-loader.d.ts +34 -0
  115. package/dist/components/markdown/markdown-loader.js +43 -0
  116. package/dist/components/markdown/markdown.d.ts +81 -0
  117. package/dist/components/markdown/markdown.js +284 -0
  118. package/dist/components/markdown/markdown.styles.d.ts +1 -0
  119. package/dist/components/markdown/markdown.styles.js +82 -0
  120. package/dist/components/media-card/media-card.d.ts +122 -0
  121. package/dist/components/media-card/media-card.js +295 -0
  122. package/dist/components/media-card/media-card.styles.d.ts +1 -0
  123. package/dist/components/media-card/media-card.styles.js +132 -0
  124. package/dist/components/mention-popover/mention-popover.d.ts +200 -0
  125. package/dist/components/mention-popover/mention-popover.js +475 -0
  126. package/dist/components/mention-popover/mention-popover.styles.d.ts +1 -0
  127. package/dist/components/mention-popover/mention-popover.styles.js +101 -0
  128. package/dist/components/menu/menu-item.d.ts +62 -0
  129. package/dist/components/menu/menu-item.js +119 -0
  130. package/dist/components/menu/menu-item.styles.d.ts +1 -0
  131. package/dist/components/menu/menu-item.styles.js +67 -0
  132. package/dist/components/menu/menu.d.ts +143 -0
  133. package/dist/components/menu/menu.js +365 -0
  134. package/dist/components/menu/menu.styles.d.ts +1 -0
  135. package/dist/components/menu/menu.styles.js +66 -0
  136. package/dist/components/model-select/model-select.d.ts +125 -0
  137. package/dist/components/model-select/model-select.js +490 -0
  138. package/dist/components/model-select/model-select.styles.d.ts +1 -0
  139. package/dist/components/model-select/model-select.styles.js +189 -0
  140. package/dist/components/model-settings-panel/model-settings-panel.d.ts +69 -0
  141. package/dist/components/model-settings-panel/model-settings-panel.js +145 -0
  142. package/dist/components/model-settings-panel/model-settings-panel.styles.d.ts +1 -0
  143. package/dist/components/model-settings-panel/model-settings-panel.styles.js +82 -0
  144. package/dist/components/playback/playback.d.ts +13 -1
  145. package/dist/components/playback/playback.js +47 -14
  146. package/dist/components/responsive-panel/responsive-panel.d.ts +150 -0
  147. package/dist/components/responsive-panel/responsive-panel.js +365 -0
  148. package/dist/components/responsive-panel/responsive-panel.styles.d.ts +1 -0
  149. package/dist/components/responsive-panel/responsive-panel.styles.js +103 -0
  150. package/dist/components/result-card/result-card.d.ts +44 -0
  151. package/dist/components/result-card/result-card.js +83 -0
  152. package/dist/components/result-card/result-card.styles.d.ts +1 -0
  153. package/dist/components/result-card/result-card.styles.js +50 -0
  154. package/dist/components/result-card/result-field.d.ts +36 -0
  155. package/dist/components/result-card/result-field.js +87 -0
  156. package/dist/components/result-card/result-field.styles.d.ts +1 -0
  157. package/dist/components/result-card/result-field.styles.js +32 -0
  158. package/dist/components/select/select.d.ts +43 -2
  159. package/dist/components/select/select.js +150 -17
  160. package/dist/components/slider/slider.d.ts +89 -0
  161. package/dist/components/slider/slider.js +352 -0
  162. package/dist/components/slider/slider.styles.d.ts +1 -0
  163. package/dist/components/slider/slider.styles.js +87 -0
  164. package/dist/components/source-card/source-card.d.ts +92 -0
  165. package/dist/components/source-card/source-card.js +148 -0
  166. package/dist/components/source-card/source-card.styles.d.ts +1 -0
  167. package/dist/components/source-card/source-card.styles.js +69 -0
  168. package/dist/components/source-list/source-list.d.ts +63 -0
  169. package/dist/components/source-list/source-list.js +122 -0
  170. package/dist/components/source-list/source-list.styles.d.ts +1 -0
  171. package/dist/components/source-list/source-list.styles.js +59 -0
  172. package/dist/components/sparkline/sparkline.js +27 -13
  173. package/dist/components/split/split.d.ts +93 -1
  174. package/dist/components/split/split.js +284 -15
  175. package/dist/components/split/split.styles.js +30 -0
  176. package/dist/components/stat/stat.d.ts +6 -1
  177. package/dist/components/stat/stat.js +8 -2
  178. package/dist/components/stream-status/stream-status.d.ts +110 -0
  179. package/dist/components/stream-status/stream-status.js +210 -0
  180. package/dist/components/stream-status/stream-status.styles.d.ts +1 -0
  181. package/dist/components/stream-status/stream-status.styles.js +103 -0
  182. package/dist/components/streaming-text/streaming-text.d.ts +98 -0
  183. package/dist/components/streaming-text/streaming-text.js +209 -0
  184. package/dist/components/streaming-text/streaming-text.styles.d.ts +1 -0
  185. package/dist/components/streaming-text/streaming-text.styles.js +62 -0
  186. package/dist/components/switch/switch.d.ts +58 -0
  187. package/dist/components/switch/switch.js +179 -0
  188. package/dist/components/switch/switch.styles.d.ts +1 -0
  189. package/dist/components/switch/switch.styles.js +75 -0
  190. package/dist/components/table/table.d.ts +73 -4
  191. package/dist/components/table/table.js +169 -20
  192. package/dist/components/table/table.styles.js +6 -1
  193. package/dist/components/tabs/tabs.d.ts +51 -0
  194. package/dist/components/tabs/tabs.js +190 -0
  195. package/dist/components/tabs/tabs.styles.d.ts +1 -0
  196. package/dist/components/tabs/tabs.styles.js +63 -0
  197. package/dist/components/thinking-panel/thinking-panel.d.ts +121 -0
  198. package/dist/components/thinking-panel/thinking-panel.js +235 -0
  199. package/dist/components/thinking-panel/thinking-panel.styles.d.ts +1 -0
  200. package/dist/components/thinking-panel/thinking-panel.styles.js +117 -0
  201. package/dist/components/toast/toast-item.d.ts +1 -0
  202. package/dist/components/toast/toast-item.js +31 -6
  203. package/dist/components/tool-approval-dialog/tool-approval-dialog.d.ts +130 -0
  204. package/dist/components/tool-approval-dialog/tool-approval-dialog.js +403 -0
  205. package/dist/components/tool-approval-dialog/tool-approval-dialog.styles.d.ts +1 -0
  206. package/dist/components/tool-approval-dialog/tool-approval-dialog.styles.js +160 -0
  207. package/dist/components/tool-call-chip/tool-call-chip.d.ts +89 -0
  208. package/dist/components/tool-call-chip/tool-call-chip.js +288 -0
  209. package/dist/components/tool-call-chip/tool-call-chip.styles.d.ts +1 -0
  210. package/dist/components/tool-call-chip/tool-call-chip.styles.js +203 -0
  211. package/dist/components/tool-param-form/tool-param-form.d.ts +145 -0
  212. package/dist/components/tool-param-form/tool-param-form.js +366 -0
  213. package/dist/components/tool-param-form/tool-param-form.styles.d.ts +1 -0
  214. package/dist/components/tool-param-form/tool-param-form.styles.js +75 -0
  215. package/dist/components/tool-result-dialog/tool-result-dialog.d.ts +102 -0
  216. package/dist/components/tool-result-dialog/tool-result-dialog.js +393 -0
  217. package/dist/components/tool-result-dialog/tool-result-dialog.styles.d.ts +1 -0
  218. package/dist/components/tool-result-dialog/tool-result-dialog.styles.js +176 -0
  219. package/dist/components/tool-result-view/registry.d.ts +81 -0
  220. package/dist/components/tool-result-view/registry.js +84 -0
  221. package/dist/components/tool-result-view/tool-result-view.d.ts +55 -0
  222. package/dist/components/tool-result-view/tool-result-view.js +138 -0
  223. package/dist/components/tool-result-view/tool-result-view.styles.d.ts +1 -0
  224. package/dist/components/tool-result-view/tool-result-view.styles.js +13 -0
  225. package/dist/components/tool-select-dialog/tool-select-dialog.d.ts +151 -0
  226. package/dist/components/tool-select-dialog/tool-select-dialog.js +439 -0
  227. package/dist/components/tool-select-dialog/tool-select-dialog.styles.d.ts +1 -0
  228. package/dist/components/tool-select-dialog/tool-select-dialog.styles.js +182 -0
  229. package/dist/components/tree/tree-node.d.ts +11 -2
  230. package/dist/components/tree/tree-node.js +16 -6
  231. package/dist/components/tree/tree.d.ts +8 -2
  232. package/dist/components/tree/tree.js +18 -11
  233. package/dist/components/typing-indicator/typing-indicator.d.ts +60 -0
  234. package/dist/components/typing-indicator/typing-indicator.js +96 -0
  235. package/dist/components/typing-indicator/typing-indicator.styles.d.ts +1 -0
  236. package/dist/components/typing-indicator/typing-indicator.styles.js +132 -0
  237. package/dist/components/virtual-list/virtual-list.d.ts +173 -0
  238. package/dist/components/virtual-list/virtual-list.js +461 -0
  239. package/dist/components/virtual-list/virtual-list.styles.d.ts +1 -0
  240. package/dist/components/virtual-list/virtual-list.styles.js +44 -0
  241. package/dist/components/word-cloud/word-cloud-layout.js +14 -1
  242. package/dist/components/word-cloud/word-cloud.d.ts +6 -0
  243. package/dist/components/word-cloud/word-cloud.js +25 -14
  244. package/dist/components/word-cloud/word-cloud.styles.js +3 -2
  245. package/dist/internal/announcer.d.ts +57 -0
  246. package/dist/internal/announcer.js +71 -0
  247. package/dist/internal/form-associated.d.ts +1 -0
  248. package/dist/internal/form-associated.js +55 -11
  249. package/dist/internal/group-by-recency.d.ts +50 -0
  250. package/dist/internal/group-by-recency.js +80 -0
  251. package/dist/internal/rtl.d.ts +23 -0
  252. package/dist/internal/rtl.js +28 -0
  253. package/dist/internal/scroll-lock.d.ts +10 -5
  254. package/dist/internal/scroll-lock.js +30 -14
  255. package/dist/internal/tokens.styles.js +6 -0
  256. package/dist/lyra.d.ts +130 -31
  257. package/dist/lyra.js +94 -26
  258. package/llms-full.txt +3836 -17
  259. package/llms.txt +16 -1
  260. package/package.json +23 -5
  261. package/dist/components/chart/bar-chart.stories.d.ts +0 -5
  262. package/dist/components/chart/bar-chart.stories.js +0 -20
  263. package/dist/components/chart/box-plot.stories.d.ts +0 -5
  264. package/dist/components/chart/box-plot.stories.js +0 -29
  265. package/dist/components/chart/bubble-chart.stories.d.ts +0 -5
  266. package/dist/components/chart/bubble-chart.stories.js +0 -26
  267. package/dist/components/chart/chart.stories.d.ts +0 -32
  268. package/dist/components/chart/chart.stories.js +0 -141
  269. package/dist/components/chart/doughnut-chart.stories.d.ts +0 -5
  270. package/dist/components/chart/doughnut-chart.stories.js +0 -26
  271. package/dist/components/chart/histogram.stories.d.ts +0 -5
  272. package/dist/components/chart/histogram.stories.js +0 -17
  273. package/dist/components/chart/line-chart.stories.d.ts +0 -22
  274. package/dist/components/chart/line-chart.stories.js +0 -99
  275. package/dist/components/chart/lite-chart.stories.d.ts +0 -14
  276. package/dist/components/chart/lite-chart.stories.js +0 -114
  277. package/dist/components/chart/pie-chart.stories.d.ts +0 -5
  278. package/dist/components/chart/pie-chart.stories.js +0 -26
  279. package/dist/components/chart/polar-area-chart.stories.d.ts +0 -5
  280. package/dist/components/chart/polar-area-chart.stories.js +0 -20
  281. package/dist/components/chart/radar-chart.stories.d.ts +0 -5
  282. package/dist/components/chart/radar-chart.stories.js +0 -20
  283. package/dist/components/chart/scatter-chart.stories.d.ts +0 -5
  284. package/dist/components/chart/scatter-chart.stories.js +0 -31
  285. package/dist/components/combobox/combobox.stories.d.ts +0 -24
  286. package/dist/components/combobox/combobox.stories.js +0 -102
  287. package/dist/components/date-picker/date-input.stories.d.ts +0 -10
  288. package/dist/components/date-picker/date-input.stories.js +0 -48
  289. package/dist/components/date-picker/date-picker.stories.d.ts +0 -10
  290. package/dist/components/date-picker/date-picker.stories.js +0 -25
  291. package/dist/components/empty/empty.stories.d.ts +0 -7
  292. package/dist/components/empty/empty.stories.js +0 -34
  293. package/dist/components/export-button/export-button.stories.d.ts +0 -7
  294. package/dist/components/export-button/export-button.stories.js +0 -37
  295. package/dist/components/file-input/file-input.stories.d.ts +0 -7
  296. package/dist/components/file-input/file-input.stories.js +0 -19
  297. package/dist/components/flag/flag.stories.d.ts +0 -6
  298. package/dist/components/flag/flag.stories.js +0 -31
  299. package/dist/components/gauge/gauge.stories.d.ts +0 -8
  300. package/dist/components/gauge/gauge.stories.js +0 -19
  301. package/dist/components/graph/graph.stories.d.ts +0 -8
  302. package/dist/components/graph/graph.stories.js +0 -68
  303. package/dist/components/heatmap/heatmap.stories.d.ts +0 -27
  304. package/dist/components/heatmap/heatmap.stories.js +0 -179
  305. package/dist/components/map/map.stories.d.ts +0 -15
  306. package/dist/components/map/map.stories.js +0 -135
  307. package/dist/components/playback/playback.stories.d.ts +0 -7
  308. package/dist/components/playback/playback.stories.js +0 -16
  309. package/dist/components/select/select.stories.d.ts +0 -21
  310. package/dist/components/select/select.stories.js +0 -91
  311. package/dist/components/skeleton/skeleton.stories.d.ts +0 -5
  312. package/dist/components/skeleton/skeleton.stories.js +0 -16
  313. package/dist/components/sparkline/sparkline.stories.d.ts +0 -11
  314. package/dist/components/sparkline/sparkline.stories.js +0 -39
  315. package/dist/components/split/split.stories.d.ts +0 -7
  316. package/dist/components/split/split.stories.js +0 -36
  317. package/dist/components/stat/stat.stories.d.ts +0 -9
  318. package/dist/components/stat/stat.stories.js +0 -81
  319. package/dist/components/table/table.stories.d.ts +0 -12
  320. package/dist/components/table/table.stories.js +0 -67
  321. package/dist/components/time-range/time-range.stories.d.ts +0 -8
  322. package/dist/components/time-range/time-range.stories.js +0 -26
  323. package/dist/components/toast/toast.stories.d.ts +0 -8
  324. package/dist/components/toast/toast.stories.js +0 -72
  325. package/dist/components/tree/tree.stories.d.ts +0 -9
  326. package/dist/components/tree/tree.stories.js +0 -52
  327. package/dist/components/widget/widget.stories.d.ts +0 -9
  328. package/dist/components/widget/widget.stories.js +0 -74
  329. package/dist/components/word-cloud/word-cloud.stories.d.ts +0 -10
  330. package/dist/components/word-cloud/word-cloud.stories.js +0 -55
@@ -0,0 +1,203 @@
1
+ import { css } from 'lit';
2
+ export const styles = css `
3
+ :host {
4
+ display: inline-flex;
5
+ max-inline-size: 100%;
6
+ /* Per-status accent -- one custom property swapped by the :host([status])
7
+ rules below rather than repeating background/color per part per status.
8
+ Defaults to the 'pending' tone so an unset/unknown status still reads
9
+ as neutral instead of unstyled. */
10
+ --lyra-tool-call-chip-accent: var(--lyra-color-text-quiet);
11
+ --lyra-tool-call-chip-bg: var(--lyra-color-surface);
12
+ --lyra-tool-call-chip-border: var(--lyra-color-border);
13
+ }
14
+
15
+ :host([status='running']) {
16
+ --lyra-tool-call-chip-accent: var(--lyra-color-brand);
17
+ --lyra-tool-call-chip-bg: var(--lyra-color-brand-quiet);
18
+ --lyra-tool-call-chip-border: transparent;
19
+ }
20
+ :host([status='success']) {
21
+ --lyra-tool-call-chip-accent: var(--lyra-color-success);
22
+ --lyra-tool-call-chip-bg: var(--lyra-color-success-quiet);
23
+ --lyra-tool-call-chip-border: transparent;
24
+ }
25
+ :host([status='error']) {
26
+ --lyra-tool-call-chip-accent: var(--lyra-color-danger);
27
+ --lyra-tool-call-chip-bg: var(--lyra-color-danger-quiet);
28
+ --lyra-tool-call-chip-border: transparent;
29
+ }
30
+ /* 'denied' reads as a policy rejection, not a runtime failure -- the
31
+ warning (not danger) tint keeps it visually distinct from 'error',
32
+ matching lyra-tool-result-dialog's identical status vocabulary/tone so
33
+ the two components agree on what "denied" looks like. */
34
+ :host([status='denied']) {
35
+ --lyra-tool-call-chip-accent: var(--lyra-color-warning);
36
+ --lyra-tool-call-chip-bg: var(--lyra-color-warning-quiet);
37
+ --lyra-tool-call-chip-border: transparent;
38
+ }
39
+
40
+ [part='base'] {
41
+ display: inline-flex;
42
+ align-items: center;
43
+ gap: var(--lyra-space-xs);
44
+ max-inline-size: 100%;
45
+ box-sizing: border-box;
46
+ padding: 0.25rem var(--lyra-space-s);
47
+ border: 1px solid var(--lyra-tool-call-chip-border);
48
+ border-radius: 999px;
49
+ background: var(--lyra-tool-call-chip-bg);
50
+ color: var(--lyra-color-text);
51
+ font: inherit;
52
+ font-size: 0.8125rem;
53
+ line-height: 1.3;
54
+ text-align: start;
55
+ cursor: pointer;
56
+ -webkit-tap-highlight-color: transparent;
57
+ transition:
58
+ background-color var(--lyra-transition-fast),
59
+ border-color var(--lyra-transition-fast);
60
+ }
61
+ [part='base']:hover {
62
+ border-color: var(--lyra-color-brand);
63
+ }
64
+ [part='base']:focus-visible {
65
+ outline: var(--lyra-focus-ring-width) solid var(--lyra-focus-ring-color);
66
+ outline-offset: var(--lyra-focus-ring-offset);
67
+ }
68
+
69
+ [part='icon'] {
70
+ display: inline-flex;
71
+ flex: 0 0 auto;
72
+ align-items: center;
73
+ justify-content: center;
74
+ color: var(--lyra-tool-call-chip-accent);
75
+ }
76
+ [part='icon'] svg {
77
+ display: block;
78
+ }
79
+ /* A three-quarter arc (not a full ring) is what actually reads as
80
+ spinning once rotated -- a full circle looks identical at every
81
+ rotation frame. */
82
+ :host([status='running']) [part='icon'] svg {
83
+ animation: lyra-tool-call-chip-spin 1s linear infinite;
84
+ }
85
+ /* Subtler than the spin -- a slow opacity breathe, so a list of several
86
+ still-queued chips doesn't compete visually with any 'running' ones
87
+ next to it. */
88
+ :host([status='pending']) [part='icon'] svg {
89
+ animation: lyra-tool-call-chip-pulse 1.5s ease-in-out infinite;
90
+ }
91
+
92
+ [part='label'] {
93
+ display: inline-flex;
94
+ align-items: baseline;
95
+ gap: 0.3em;
96
+ flex: 1 1 auto;
97
+ min-inline-size: 0;
98
+ overflow: hidden;
99
+ }
100
+ [part='category'] {
101
+ flex: 0 0 auto;
102
+ /* Full-strength text, not --lyra-color-text-quiet -- this sits on top of
103
+ the per-status *-quiet tint backgrounds above (e.g. success-quiet),
104
+ and text-quiet's gray fails WCAG AA contrast against several of those
105
+ tints even though it comfortably passes against the plain surface
106
+ background used by the resting/denied states. */
107
+ color: var(--lyra-color-text);
108
+ font-size: 0.6875rem;
109
+ font-weight: 600;
110
+ text-transform: uppercase;
111
+ letter-spacing: 0.04em;
112
+ }
113
+ [part='category']::after {
114
+ content: '·';
115
+ margin-inline-start: 0.3em;
116
+ }
117
+ [part='name'] {
118
+ flex: 0 1 auto;
119
+ min-inline-size: 0;
120
+ overflow: hidden;
121
+ text-overflow: ellipsis;
122
+ white-space: nowrap;
123
+ font-weight: 600;
124
+ }
125
+ [part='summary'] {
126
+ flex: 1 1 auto;
127
+ min-inline-size: 3ch;
128
+ overflow: hidden;
129
+ text-overflow: ellipsis;
130
+ white-space: nowrap;
131
+ /* See [part='category']'s comment above -- same contrast rationale. */
132
+ color: var(--lyra-color-text);
133
+ }
134
+ [part='summary']::before {
135
+ content: ': ';
136
+ }
137
+
138
+ [part='meta'] {
139
+ display: inline-flex;
140
+ flex: 0 0 auto;
141
+ align-items: baseline;
142
+ gap: 0.4em;
143
+ margin-inline-start: auto;
144
+ font-size: 0.6875rem;
145
+ }
146
+ [part='status-text'] {
147
+ color: var(--lyra-tool-call-chip-accent);
148
+ font-weight: 600;
149
+ text-transform: uppercase;
150
+ letter-spacing: 0.03em;
151
+ white-space: nowrap;
152
+ }
153
+ [part='duration'] {
154
+ /* See [part='category']'s comment above -- same contrast rationale. */
155
+ color: var(--lyra-color-text);
156
+ font-variant-numeric: tabular-nums;
157
+ white-space: nowrap;
158
+ }
159
+
160
+ /* Positioned by internal/positioner.js's place() -- see combobox's
161
+ [part='listbox'] for the identical fixed/z-index/max-size shape. Unlike
162
+ that popup this one has no open/close transition: a tooltip that
163
+ tracks the pointer/focus target benefits from appearing instantly, not
164
+ chasing a fade. */
165
+ [part='tooltip'] {
166
+ position: fixed;
167
+ z-index: 900;
168
+ box-sizing: border-box;
169
+ max-inline-size: min(90vw, 24rem);
170
+ padding: var(--lyra-space-s) var(--lyra-space-m);
171
+ background: var(--lyra-color-surface);
172
+ border: 1px solid var(--lyra-color-border);
173
+ border-radius: var(--lyra-radius);
174
+ box-shadow: var(--lyra-shadow);
175
+ font-size: 0.8125rem;
176
+ line-height: 1.4;
177
+ color: var(--lyra-color-text);
178
+ }
179
+
180
+ @keyframes lyra-tool-call-chip-spin {
181
+ to {
182
+ transform: rotate(360deg);
183
+ }
184
+ }
185
+ @keyframes lyra-tool-call-chip-pulse {
186
+ 0%,
187
+ 100% {
188
+ opacity: 1;
189
+ }
190
+ 50% {
191
+ opacity: 0.35;
192
+ }
193
+ }
194
+ @media (prefers-reduced-motion: reduce) {
195
+ [part='base'] {
196
+ transition: none !important;
197
+ }
198
+ :host([status='running']) [part='icon'] svg,
199
+ :host([status='pending']) [part='icon'] svg {
200
+ animation: none !important;
201
+ }
202
+ }
203
+ `;
@@ -0,0 +1,145 @@
1
+ import { type TemplateResult, type PropertyValues } from 'lit';
2
+ import { LyraElement } from '../../internal/lyra-element.js';
3
+ import '../select/select.js';
4
+ import '../combobox/option.js';
5
+ import '../checkbox/checkbox.js';
6
+ /** The four leaf property types this phase's flat-schema renderer understands. */
7
+ export type ToolParamFormPropertyType = 'string' | 'number' | 'integer' | 'boolean';
8
+ /**
9
+ * One `schema.properties` entry. Deliberately shallow — see the class doc for
10
+ * the full scope limitation this type encodes.
11
+ */
12
+ export interface ToolParamFormProperty {
13
+ type: ToolParamFormPropertyType;
14
+ /** A closed set of string choices, rendered as a `<lyra-select>`. Only meaningful when `type` is `'string'`. */
15
+ enum?: string[];
16
+ /** Helper text rendered under the field. */
17
+ description?: string;
18
+ /** Display label. Falls back to the property key itself when omitted. */
19
+ title?: string;
20
+ /** Pre-filled value used whenever `value` doesn't already have this key. */
21
+ default?: unknown;
22
+ }
23
+ /**
24
+ * The (intentionally flat) JSON Schema subset this component can render:
25
+ * a plain object whose every property is a string, number/integer, boolean,
26
+ * or string enum. See the class doc for what's out of scope.
27
+ */
28
+ export interface ToolParamFormSchema {
29
+ type: 'object';
30
+ properties: Record<string, ToolParamFormProperty>;
31
+ required?: string[];
32
+ }
33
+ /**
34
+ * `<lyra-tool-param-form>` — renders one form control per top-level property
35
+ * of a JSON Schema object, for ad hoc tool invocation or approval-editing UIs
36
+ * (e.g. "the agent wants to call `create_event(title, attendees, allDay)` —
37
+ * let the user tweak the arguments before running it").
38
+ *
39
+ * **Scope limitation (intentional, not accidental):** this phase only
40
+ * understands a *flat* object schema — every `properties` entry must be
41
+ * `'string'`, `'number'`, `'integer'`, `'boolean'`, or a string `enum`.
42
+ * Nested objects, arrays, `oneOf`/`anyOf`/`allOf`, `$ref`, and any other
43
+ * JSON Schema keyword are not read. A full JSON-Schema-to-form renderer is
44
+ * out of scope for this component; a property whose `type` isn't one of the
45
+ * four above renders a visible "Unsupported field type" note instead of
46
+ * silently dropping it or throwing.
47
+ *
48
+ * Fields render in `Object.keys(schema.properties)` order (insertion order,
49
+ * which is reliable for a plain object's string keys). A field's label is
50
+ * `title ?? ` the property key; `description` renders as helper text below
51
+ * the control; a key listed in `required` gets a visible `*` and the
52
+ * underlying control's own `required` wiring.
53
+ *
54
+ * This component owns no Submit/Cancel/Approve chrome — a consumer composes
55
+ * it inside their own dialog (e.g. a tool-approval dialog) and reads
56
+ * `.value`/`.errors`/`checkValidity()` (or calls `reportValidity()` right
57
+ * before acting, which also reveals any inline errors that user interaction
58
+ * hasn't surfaced yet).
59
+ *
60
+ * `value` is exactly what the consumer last set it to — a field with no
61
+ * entry in `value` but a schema `default` displays (and is *emitted*, via
62
+ * `lyra-input`) as that default, but the `value` *property* itself is left
63
+ * alone until the user actually edits that field. This mirrors an
64
+ * uncontrolled `<input placeholder>` not writing to `.value`, and means the
65
+ * very first `lyra-input` a consumer receives already carries every default
66
+ * resolved, so round-tripping `e.detail.value` back into `.value` converges
67
+ * after one edit.
68
+ *
69
+ * Optional native `<form>` participation is implemented via `ElementInternals`
70
+ * attached directly (this component's value is a whole object, not a plain
71
+ * string, so the `FormAssociated` string-value mixin doesn't fit — same
72
+ * shape as `<lyra-combobox>`'s array-valued case). This is a nice-to-have
73
+ * layered on top of the primary integration contract (`value` +
74
+ * `lyra-input`/`lyra-validity-change`), not a requirement: a consumer that
75
+ * never puts this inside a `<form>` loses nothing.
76
+ *
77
+ * @customElement lyra-tool-param-form
78
+ * @event lyra-input - A field's value changed. `detail: { value }` — the
79
+ * full current value object (every property, defaults resolved), not just
80
+ * the field that changed.
81
+ * @event lyra-validity-change - Overall validity changed (a required field
82
+ * became empty/non-empty). `detail: { valid: boolean; errors: Record<string, string> }`.
83
+ * @csspart base - The outer wrapper around all fields.
84
+ * @csspart field - One property's wrapper (label + control + description + error).
85
+ * @csspart label - A field's label.
86
+ * @csspart description - A field's helper text, from `schema.description`.
87
+ * @csspart error - A field's inline validation message (only rendered once the field has been visited).
88
+ */
89
+ export declare class LyraToolParamForm extends LyraElement {
90
+ static formAssociated: boolean;
91
+ static styles: import("lit").CSSResultGroup[];
92
+ schema: ToolParamFormSchema;
93
+ value: Record<string, unknown>;
94
+ /** Submission key for the optional native `<form>` participation — see the class doc. */
95
+ name: string;
96
+ disabled: boolean;
97
+ private _errors;
98
+ private touchedFields;
99
+ private internals;
100
+ private baseId;
101
+ private lastValidityKey;
102
+ constructor();
103
+ connectedCallback(): void;
104
+ /** `value`, with any property missing from it filled in from `schema`'s own `default` — see the class doc. */
105
+ get effectiveValue(): Record<string, unknown>;
106
+ /**
107
+ * The current per-field validation errors (`{ [propertyKey]: message }`),
108
+ * required-and-empty only — mirrors the last `lyra-validity-change`
109
+ * event's `errors`. Independent of which fields have been visited; a
110
+ * consumer wanting the visited-only, screen-reader-announced subset
111
+ * should read the rendered `[part="error"]` elements instead.
112
+ */
113
+ get errors(): Record<string, string>;
114
+ /** The current per-field validation errors (required-and-empty only), independent of `touchedFields`. */
115
+ private computeErrors;
116
+ /** Non-mutating validity check — unlike `reportValidity()`, never reveals inline errors. */
117
+ checkValidity(): boolean;
118
+ /**
119
+ * Reveals inline errors for every currently-invalid required field (as if
120
+ * each had been visited) and returns overall validity — the hook a
121
+ * consumer's own Submit/Approve button should call right before acting,
122
+ * mirroring a native `<form>`'s `reportValidity()`.
123
+ */
124
+ reportValidity(): boolean;
125
+ formResetCallback(): void;
126
+ formDisabledCallback(disabled: boolean): void;
127
+ protected willUpdate(changed: PropertyValues): void;
128
+ /** Pushes `effectiveValue`/`errors` into `ElementInternals` — see the class doc's form-participation note. */
129
+ private syncInternals;
130
+ protected updated(changed: PropertyValues): void;
131
+ private setFieldValue;
132
+ private markTouched;
133
+ private onTextInput;
134
+ private onNumberInput;
135
+ private onSelectChange;
136
+ private onCheckboxChange;
137
+ private renderControl;
138
+ private renderField;
139
+ render(): TemplateResult;
140
+ }
141
+ declare global {
142
+ interface HTMLElementTagNameMap {
143
+ 'lyra-tool-param-form': LyraToolParamForm;
144
+ }
145
+ }