@aceshooting/lyra-ui 1.2.0 → 2.1.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 (384) hide show
  1. package/README.md +98 -14
  2. package/custom-elements.json +30279 -12124
  3. package/dist/components/app-rail/app-rail-item.d.ts +30 -0
  4. package/dist/components/app-rail/app-rail-item.js +68 -0
  5. package/dist/components/app-rail/app-rail-item.styles.d.ts +1 -0
  6. package/dist/components/app-rail/app-rail-item.styles.js +65 -0
  7. package/dist/components/app-rail/app-rail.d.ts +168 -0
  8. package/dist/components/app-rail/app-rail.js +419 -0
  9. package/dist/components/app-rail/app-rail.styles.d.ts +1 -0
  10. package/dist/components/app-rail/app-rail.styles.js +128 -0
  11. package/dist/components/attachment-chip/attachment-chip.d.ts +141 -0
  12. package/dist/components/attachment-chip/attachment-chip.js +356 -0
  13. package/dist/components/attachment-chip/attachment-chip.styles.d.ts +1 -0
  14. package/dist/components/attachment-chip/attachment-chip.styles.js +184 -0
  15. package/dist/components/attachment-trigger/attachment-trigger.d.ts +96 -0
  16. package/dist/components/attachment-trigger/attachment-trigger.js +270 -0
  17. package/dist/components/attachment-trigger/attachment-trigger.styles.d.ts +1 -0
  18. package/dist/components/attachment-trigger/attachment-trigger.styles.js +90 -0
  19. package/dist/components/chart/bar-chart.js +2 -18
  20. package/dist/components/chart/box-plot.d.ts +25 -1
  21. package/dist/components/chart/box-plot.js +147 -7
  22. package/dist/components/chart/box-plot.styles.js +13 -0
  23. package/dist/components/chart/bubble-chart.js +2 -18
  24. package/dist/components/chart/chart-loader.d.ts +44 -13
  25. package/dist/components/chart/chart-loader.js +65 -18
  26. package/dist/components/chart/chart.d.ts +55 -12
  27. package/dist/components/chart/chart.js +247 -49
  28. package/dist/components/chart/doughnut-chart.js +2 -18
  29. package/dist/components/chart/histogram-bin.d.ts +7 -1
  30. package/dist/components/chart/histogram-bin.js +32 -14
  31. package/dist/components/chart/histogram.js +8 -16
  32. package/dist/components/chart/line-chart.js +2 -18
  33. package/dist/components/chart/lite-chart.d.ts +134 -3
  34. package/dist/components/chart/lite-chart.js +382 -67
  35. package/dist/components/chart/lite-chart.styles.js +9 -0
  36. package/dist/components/chart/pie-chart.js +2 -18
  37. package/dist/components/chart/polar-area-chart.js +2 -18
  38. package/dist/components/chart/radar-chart.js +2 -18
  39. package/dist/components/chart/scatter-chart.js +2 -18
  40. package/dist/components/chat-composer/chat-composer.d.ts +133 -0
  41. package/dist/components/chat-composer/chat-composer.js +366 -0
  42. package/dist/components/chat-composer/chat-composer.styles.d.ts +1 -0
  43. package/dist/components/chat-composer/chat-composer.styles.js +145 -0
  44. package/dist/components/chat-message/chat-message.d.ts +141 -0
  45. package/dist/components/chat-message/chat-message.js +331 -0
  46. package/dist/components/chat-message/chat-message.styles.d.ts +1 -0
  47. package/dist/components/chat-message/chat-message.styles.js +203 -0
  48. package/dist/components/checkbox/checkbox.d.ts +117 -0
  49. package/dist/components/checkbox/checkbox.js +353 -0
  50. package/dist/components/checkbox/checkbox.styles.d.ts +1 -0
  51. package/dist/components/checkbox/checkbox.styles.js +77 -0
  52. package/dist/components/chip/chip-group.d.ts +56 -0
  53. package/dist/components/chip/chip-group.js +130 -0
  54. package/dist/components/chip/chip-group.styles.d.ts +1 -0
  55. package/dist/components/chip/chip-group.styles.js +57 -0
  56. package/dist/components/chip/chip.d.ts +64 -0
  57. package/dist/components/chip/chip.js +122 -0
  58. package/dist/components/chip/chip.styles.d.ts +1 -0
  59. package/dist/components/chip/chip.styles.js +115 -0
  60. package/dist/components/citation-badge/citation-badge.d.ts +113 -0
  61. package/dist/components/citation-badge/citation-badge.js +318 -0
  62. package/dist/components/citation-badge/citation-badge.styles.d.ts +1 -0
  63. package/dist/components/citation-badge/citation-badge.styles.js +96 -0
  64. package/dist/components/code-block/code-block.d.ts +127 -0
  65. package/dist/components/code-block/code-block.js +382 -0
  66. package/dist/components/code-block/code-block.styles.d.ts +1 -0
  67. package/dist/components/code-block/code-block.styles.js +187 -0
  68. package/dist/components/code-block/code-loader.d.ts +87 -0
  69. package/dist/components/code-block/code-loader.js +142 -0
  70. package/dist/components/combobox/combobox.d.ts +65 -6
  71. package/dist/components/combobox/combobox.js +258 -48
  72. package/dist/components/combobox/combobox.styles.js +3 -3
  73. package/dist/components/combobox/option.d.ts +5 -1
  74. package/dist/components/combobox/option.js +35 -0
  75. package/dist/components/context-meter/context-meter.d.ts +53 -0
  76. package/dist/components/context-meter/context-meter.js +159 -0
  77. package/dist/components/context-meter/context-meter.styles.d.ts +1 -0
  78. package/dist/components/context-meter/context-meter.styles.js +114 -0
  79. package/dist/components/conversation-item/conversation-item.d.ts +125 -0
  80. package/dist/components/conversation-item/conversation-item.js +331 -0
  81. package/dist/components/conversation-item/conversation-item.styles.d.ts +1 -0
  82. package/dist/components/conversation-item/conversation-item.styles.js +155 -0
  83. package/dist/components/date-picker/calendar-core.d.ts +24 -0
  84. package/dist/components/date-picker/calendar-core.js +51 -4
  85. package/dist/components/date-picker/date-input.d.ts +100 -9
  86. package/dist/components/date-picker/date-input.js +383 -66
  87. package/dist/components/date-picker/date-picker.d.ts +35 -4
  88. package/dist/components/date-picker/date-picker.js +171 -44
  89. package/dist/components/dialog/confirm.d.ts +40 -0
  90. package/dist/components/dialog/confirm.js +76 -0
  91. package/dist/components/dialog/dialog.d.ts +129 -0
  92. package/dist/components/dialog/dialog.js +288 -0
  93. package/dist/components/dialog/dialog.styles.d.ts +1 -0
  94. package/dist/components/dialog/dialog.styles.js +96 -0
  95. package/dist/components/dock-panel/dock-panel.d.ts +142 -0
  96. package/dist/components/dock-panel/dock-panel.js +359 -0
  97. package/dist/components/dock-panel/dock-panel.styles.d.ts +1 -0
  98. package/dist/components/dock-panel/dock-panel.styles.js +159 -0
  99. package/dist/components/document-preview/document-preview.d.ts +143 -0
  100. package/dist/components/document-preview/document-preview.js +388 -0
  101. package/dist/components/document-preview/document-preview.styles.d.ts +1 -0
  102. package/dist/components/document-preview/document-preview.styles.js +191 -0
  103. package/dist/components/empty/empty.d.ts +1 -2
  104. package/dist/components/empty/empty.js +18 -12
  105. package/dist/components/empty/empty.styles.js +0 -3
  106. package/dist/components/export-button/csv.js +1 -1
  107. package/dist/components/export-button/export-button.d.ts +12 -0
  108. package/dist/components/export-button/export-button.js +35 -5
  109. package/dist/components/export-button/export-button.styles.js +5 -1
  110. package/dist/components/file-input/accept.js +2 -0
  111. package/dist/components/file-input/file-input.d.ts +10 -1
  112. package/dist/components/file-input/file-input.js +36 -5
  113. package/dist/components/flag/flag.d.ts +29 -13
  114. package/dist/components/flag/flag.js +54 -14
  115. package/dist/components/flag/flag.styles.js +1 -1
  116. package/dist/components/flag/language-map.d.ts +4 -1
  117. package/dist/components/flag/language-map.js +6 -3
  118. package/dist/components/gauge/gauge.d.ts +10 -1
  119. package/dist/components/gauge/gauge.js +41 -13
  120. package/dist/components/generation-status/generation-status.d.ts +117 -0
  121. package/dist/components/generation-status/generation-status.js +327 -0
  122. package/dist/components/generation-status/generation-status.styles.d.ts +1 -0
  123. package/dist/components/generation-status/generation-status.styles.js +84 -0
  124. package/dist/components/graph/graph.d.ts +37 -3
  125. package/dist/components/graph/graph.js +132 -20
  126. package/dist/components/heatmap/calendar-grid.d.ts +19 -7
  127. package/dist/components/heatmap/calendar-grid.js +42 -18
  128. package/dist/components/heatmap/heatmap-scale.d.ts +11 -1
  129. package/dist/components/heatmap/heatmap-scale.js +14 -2
  130. package/dist/components/heatmap/heatmap.d.ts +227 -12
  131. package/dist/components/heatmap/heatmap.js +488 -93
  132. package/dist/components/json-viewer/json-viewer.d.ts +70 -0
  133. package/dist/components/json-viewer/json-viewer.js +361 -0
  134. package/dist/components/json-viewer/json-viewer.styles.d.ts +1 -0
  135. package/dist/components/json-viewer/json-viewer.styles.js +177 -0
  136. package/dist/components/kbd/kbd.d.ts +77 -0
  137. package/dist/components/kbd/kbd.js +231 -0
  138. package/dist/components/kbd/kbd.styles.d.ts +1 -0
  139. package/dist/components/kbd/kbd.styles.js +52 -0
  140. package/dist/components/live-region/live-region.d.ts +90 -0
  141. package/dist/components/live-region/live-region.js +189 -0
  142. package/dist/components/live-region/live-region.styles.d.ts +1 -0
  143. package/dist/components/live-region/live-region.styles.js +10 -0
  144. package/dist/components/map/map.d.ts +32 -7
  145. package/dist/components/map/map.js +133 -32
  146. package/dist/components/markdown/markdown-loader.d.ts +58 -0
  147. package/dist/components/markdown/markdown-loader.js +77 -0
  148. package/dist/components/markdown/markdown.d.ts +119 -0
  149. package/dist/components/markdown/markdown.js +389 -0
  150. package/dist/components/markdown/markdown.styles.d.ts +1 -0
  151. package/dist/components/markdown/markdown.styles.js +88 -0
  152. package/dist/components/media-card/media-card.d.ts +130 -0
  153. package/dist/components/media-card/media-card.js +273 -0
  154. package/dist/components/media-card/media-card.styles.d.ts +1 -0
  155. package/dist/components/media-card/media-card.styles.js +132 -0
  156. package/dist/components/mention-popover/mention-popover.d.ts +203 -0
  157. package/dist/components/mention-popover/mention-popover.js +493 -0
  158. package/dist/components/mention-popover/mention-popover.styles.d.ts +1 -0
  159. package/dist/components/mention-popover/mention-popover.styles.js +101 -0
  160. package/dist/components/menu/menu-item.d.ts +91 -0
  161. package/dist/components/menu/menu-item.js +206 -0
  162. package/dist/components/menu/menu-item.styles.d.ts +1 -0
  163. package/dist/components/menu/menu-item.styles.js +75 -0
  164. package/dist/components/menu/menu.d.ts +167 -0
  165. package/dist/components/menu/menu.js +461 -0
  166. package/dist/components/menu/menu.styles.d.ts +1 -0
  167. package/dist/components/menu/menu.styles.js +67 -0
  168. package/dist/components/model-select/model-select.d.ts +170 -0
  169. package/dist/components/model-select/model-select.js +588 -0
  170. package/dist/components/model-select/model-select.styles.d.ts +1 -0
  171. package/dist/components/model-select/model-select.styles.js +203 -0
  172. package/dist/components/model-settings-panel/model-settings-panel.d.ts +93 -0
  173. package/dist/components/model-settings-panel/model-settings-panel.js +209 -0
  174. package/dist/components/model-settings-panel/model-settings-panel.styles.d.ts +1 -0
  175. package/dist/components/model-settings-panel/model-settings-panel.styles.js +82 -0
  176. package/dist/components/playback/playback.d.ts +19 -3
  177. package/dist/components/playback/playback.js +109 -33
  178. package/dist/components/playback/playback.styles.js +6 -1
  179. package/dist/components/responsive-panel/responsive-panel.d.ts +163 -0
  180. package/dist/components/responsive-panel/responsive-panel.js +363 -0
  181. package/dist/components/responsive-panel/responsive-panel.styles.d.ts +1 -0
  182. package/dist/components/responsive-panel/responsive-panel.styles.js +103 -0
  183. package/dist/components/result-card/result-card.d.ts +50 -0
  184. package/dist/components/result-card/result-card.js +89 -0
  185. package/dist/components/result-card/result-card.styles.d.ts +1 -0
  186. package/dist/components/result-card/result-card.styles.js +49 -0
  187. package/dist/components/result-card/result-field.d.ts +36 -0
  188. package/dist/components/result-card/result-field.js +87 -0
  189. package/dist/components/result-card/result-field.styles.d.ts +1 -0
  190. package/dist/components/result-card/result-field.styles.js +32 -0
  191. package/dist/components/select/select.d.ts +84 -4
  192. package/dist/components/select/select.js +251 -36
  193. package/dist/components/skeleton/skeleton.d.ts +3 -0
  194. package/dist/components/skeleton/skeleton.js +7 -1
  195. package/dist/components/skeleton/skeleton.styles.js +5 -4
  196. package/dist/components/slider/slider.d.ts +141 -0
  197. package/dist/components/slider/slider.js +467 -0
  198. package/dist/components/slider/slider.styles.d.ts +1 -0
  199. package/dist/components/slider/slider.styles.js +87 -0
  200. package/dist/components/source-card/source-card.d.ts +104 -0
  201. package/dist/components/source-card/source-card.js +195 -0
  202. package/dist/components/source-card/source-card.styles.d.ts +1 -0
  203. package/dist/components/source-card/source-card.styles.js +69 -0
  204. package/dist/components/source-list/source-list.d.ts +63 -0
  205. package/dist/components/source-list/source-list.js +130 -0
  206. package/dist/components/source-list/source-list.styles.d.ts +1 -0
  207. package/dist/components/source-list/source-list.styles.js +59 -0
  208. package/dist/components/sparkline/sparkline.js +58 -20
  209. package/dist/components/split/split.d.ts +224 -5
  210. package/dist/components/split/split.js +617 -43
  211. package/dist/components/split/split.styles.js +47 -0
  212. package/dist/components/stat/stat.d.ts +15 -4
  213. package/dist/components/stat/stat.js +53 -12
  214. package/dist/components/stream-status/stream-status.d.ts +126 -0
  215. package/dist/components/stream-status/stream-status.js +292 -0
  216. package/dist/components/stream-status/stream-status.styles.d.ts +1 -0
  217. package/dist/components/stream-status/stream-status.styles.js +103 -0
  218. package/dist/components/streaming-text/streaming-text.d.ts +104 -0
  219. package/dist/components/streaming-text/streaming-text.js +224 -0
  220. package/dist/components/streaming-text/streaming-text.styles.d.ts +1 -0
  221. package/dist/components/streaming-text/streaming-text.styles.js +63 -0
  222. package/dist/components/switch/switch.d.ts +103 -0
  223. package/dist/components/switch/switch.js +250 -0
  224. package/dist/components/switch/switch.styles.d.ts +1 -0
  225. package/dist/components/switch/switch.styles.js +75 -0
  226. package/dist/components/table/table.d.ts +89 -5
  227. package/dist/components/table/table.js +243 -26
  228. package/dist/components/table/table.styles.js +6 -1
  229. package/dist/components/tabs/tabs.d.ts +74 -0
  230. package/dist/components/tabs/tabs.js +254 -0
  231. package/dist/components/tabs/tabs.styles.d.ts +1 -0
  232. package/dist/components/tabs/tabs.styles.js +74 -0
  233. package/dist/components/thinking-panel/thinking-panel.d.ts +123 -0
  234. package/dist/components/thinking-panel/thinking-panel.js +260 -0
  235. package/dist/components/thinking-panel/thinking-panel.styles.d.ts +1 -0
  236. package/dist/components/thinking-panel/thinking-panel.styles.js +123 -0
  237. package/dist/components/time-range/time-range.d.ts +59 -2
  238. package/dist/components/time-range/time-range.js +163 -67
  239. package/dist/components/toast/toast-item.d.ts +12 -2
  240. package/dist/components/toast/toast-item.js +106 -44
  241. package/dist/components/toast/toast-item.styles.js +59 -28
  242. package/dist/components/toast/toast.js +17 -5
  243. package/dist/components/toast/toaster.js +10 -1
  244. package/dist/components/tool-approval-dialog/tool-approval-dialog.d.ts +131 -0
  245. package/dist/components/tool-approval-dialog/tool-approval-dialog.js +329 -0
  246. package/dist/components/tool-approval-dialog/tool-approval-dialog.styles.d.ts +1 -0
  247. package/dist/components/tool-approval-dialog/tool-approval-dialog.styles.js +160 -0
  248. package/dist/components/tool-call-chip/tool-call-chip.d.ts +105 -0
  249. package/dist/components/tool-call-chip/tool-call-chip.js +349 -0
  250. package/dist/components/tool-call-chip/tool-call-chip.styles.d.ts +1 -0
  251. package/dist/components/tool-call-chip/tool-call-chip.styles.js +203 -0
  252. package/dist/components/tool-param-form/tool-param-form.d.ts +206 -0
  253. package/dist/components/tool-param-form/tool-param-form.js +610 -0
  254. package/dist/components/tool-param-form/tool-param-form.styles.d.ts +1 -0
  255. package/dist/components/tool-param-form/tool-param-form.styles.js +75 -0
  256. package/dist/components/tool-result-dialog/tool-result-dialog.d.ts +122 -0
  257. package/dist/components/tool-result-dialog/tool-result-dialog.js +358 -0
  258. package/dist/components/tool-result-dialog/tool-result-dialog.styles.d.ts +1 -0
  259. package/dist/components/tool-result-dialog/tool-result-dialog.styles.js +176 -0
  260. package/dist/components/tool-result-view/registry.d.ts +73 -0
  261. package/dist/components/tool-result-view/registry.js +89 -0
  262. package/dist/components/tool-result-view/tool-result-view.d.ts +58 -0
  263. package/dist/components/tool-result-view/tool-result-view.js +152 -0
  264. package/dist/components/tool-result-view/tool-result-view.styles.d.ts +1 -0
  265. package/dist/components/tool-result-view/tool-result-view.styles.js +13 -0
  266. package/dist/components/tool-select-dialog/tool-select-dialog.d.ts +151 -0
  267. package/dist/components/tool-select-dialog/tool-select-dialog.js +350 -0
  268. package/dist/components/tool-select-dialog/tool-select-dialog.styles.d.ts +1 -0
  269. package/dist/components/tool-select-dialog/tool-select-dialog.styles.js +191 -0
  270. package/dist/components/tree/tree-node.d.ts +15 -3
  271. package/dist/components/tree/tree-node.js +20 -7
  272. package/dist/components/tree/tree.d.ts +25 -10
  273. package/dist/components/tree/tree.js +39 -31
  274. package/dist/components/typing-indicator/typing-indicator.d.ts +70 -0
  275. package/dist/components/typing-indicator/typing-indicator.js +108 -0
  276. package/dist/components/typing-indicator/typing-indicator.styles.d.ts +1 -0
  277. package/dist/components/typing-indicator/typing-indicator.styles.js +132 -0
  278. package/dist/components/virtual-list/virtual-list.d.ts +210 -0
  279. package/dist/components/virtual-list/virtual-list.js +607 -0
  280. package/dist/components/virtual-list/virtual-list.styles.d.ts +1 -0
  281. package/dist/components/virtual-list/virtual-list.styles.js +56 -0
  282. package/dist/components/widget/widget.d.ts +5 -4
  283. package/dist/components/widget/widget.js +54 -120
  284. package/dist/components/widget/widget.styles.js +8 -2
  285. package/dist/components/word-cloud/word-cloud-layout.d.ts +7 -0
  286. package/dist/components/word-cloud/word-cloud-layout.js +29 -2
  287. package/dist/components/word-cloud/word-cloud.d.ts +28 -2
  288. package/dist/components/word-cloud/word-cloud.js +69 -19
  289. package/dist/components/word-cloud/word-cloud.styles.js +16 -3
  290. package/dist/internal/anchored-validity.d.ts +1 -0
  291. package/dist/internal/anchored-validity.js +86 -0
  292. package/dist/internal/announcer.d.ts +57 -0
  293. package/dist/internal/announcer.js +71 -0
  294. package/dist/internal/form-associated.d.ts +8 -0
  295. package/dist/internal/form-associated.js +98 -15
  296. package/dist/internal/group-by-recency.d.ts +50 -0
  297. package/dist/internal/group-by-recency.js +80 -0
  298. package/dist/internal/numbers.d.ts +12 -0
  299. package/dist/internal/numbers.js +26 -0
  300. package/dist/internal/overlay-manager.d.ts +51 -0
  301. package/dist/internal/overlay-manager.js +523 -0
  302. package/dist/internal/positioner.js +27 -3
  303. package/dist/internal/rtl.d.ts +23 -0
  304. package/dist/internal/rtl.js +28 -0
  305. package/dist/internal/safe-url.d.ts +12 -0
  306. package/dist/internal/safe-url.js +41 -0
  307. package/dist/internal/scroll-lock.d.ts +10 -5
  308. package/dist/internal/scroll-lock.js +30 -14
  309. package/dist/internal/tokens.styles.js +22 -10
  310. package/dist/lyra.d.ts +133 -31
  311. package/dist/lyra.js +96 -26
  312. package/llms-full.txt +4546 -183
  313. package/llms.txt +21 -5
  314. package/package.json +41 -6
  315. package/dist/components/chart/bar-chart.stories.d.ts +0 -5
  316. package/dist/components/chart/bar-chart.stories.js +0 -20
  317. package/dist/components/chart/box-plot.stories.d.ts +0 -5
  318. package/dist/components/chart/box-plot.stories.js +0 -29
  319. package/dist/components/chart/bubble-chart.stories.d.ts +0 -5
  320. package/dist/components/chart/bubble-chart.stories.js +0 -26
  321. package/dist/components/chart/chart.stories.d.ts +0 -32
  322. package/dist/components/chart/chart.stories.js +0 -141
  323. package/dist/components/chart/doughnut-chart.stories.d.ts +0 -5
  324. package/dist/components/chart/doughnut-chart.stories.js +0 -26
  325. package/dist/components/chart/histogram.stories.d.ts +0 -5
  326. package/dist/components/chart/histogram.stories.js +0 -17
  327. package/dist/components/chart/line-chart.stories.d.ts +0 -22
  328. package/dist/components/chart/line-chart.stories.js +0 -99
  329. package/dist/components/chart/lite-chart.stories.d.ts +0 -14
  330. package/dist/components/chart/lite-chart.stories.js +0 -114
  331. package/dist/components/chart/pie-chart.stories.d.ts +0 -5
  332. package/dist/components/chart/pie-chart.stories.js +0 -26
  333. package/dist/components/chart/polar-area-chart.stories.d.ts +0 -5
  334. package/dist/components/chart/polar-area-chart.stories.js +0 -20
  335. package/dist/components/chart/radar-chart.stories.d.ts +0 -5
  336. package/dist/components/chart/radar-chart.stories.js +0 -20
  337. package/dist/components/chart/scatter-chart.stories.d.ts +0 -5
  338. package/dist/components/chart/scatter-chart.stories.js +0 -31
  339. package/dist/components/combobox/combobox.stories.d.ts +0 -24
  340. package/dist/components/combobox/combobox.stories.js +0 -102
  341. package/dist/components/date-picker/date-input.stories.d.ts +0 -10
  342. package/dist/components/date-picker/date-input.stories.js +0 -48
  343. package/dist/components/date-picker/date-picker.stories.d.ts +0 -10
  344. package/dist/components/date-picker/date-picker.stories.js +0 -25
  345. package/dist/components/empty/empty.stories.d.ts +0 -7
  346. package/dist/components/empty/empty.stories.js +0 -34
  347. package/dist/components/export-button/export-button.stories.d.ts +0 -7
  348. package/dist/components/export-button/export-button.stories.js +0 -37
  349. package/dist/components/file-input/file-input.stories.d.ts +0 -7
  350. package/dist/components/file-input/file-input.stories.js +0 -19
  351. package/dist/components/flag/flag.stories.d.ts +0 -6
  352. package/dist/components/flag/flag.stories.js +0 -31
  353. package/dist/components/gauge/gauge.stories.d.ts +0 -8
  354. package/dist/components/gauge/gauge.stories.js +0 -19
  355. package/dist/components/graph/graph.stories.d.ts +0 -8
  356. package/dist/components/graph/graph.stories.js +0 -68
  357. package/dist/components/heatmap/heatmap.stories.d.ts +0 -27
  358. package/dist/components/heatmap/heatmap.stories.js +0 -179
  359. package/dist/components/map/map.stories.d.ts +0 -15
  360. package/dist/components/map/map.stories.js +0 -135
  361. package/dist/components/playback/playback.stories.d.ts +0 -7
  362. package/dist/components/playback/playback.stories.js +0 -16
  363. package/dist/components/select/select.stories.d.ts +0 -21
  364. package/dist/components/select/select.stories.js +0 -91
  365. package/dist/components/skeleton/skeleton.stories.d.ts +0 -5
  366. package/dist/components/skeleton/skeleton.stories.js +0 -16
  367. package/dist/components/sparkline/sparkline.stories.d.ts +0 -11
  368. package/dist/components/sparkline/sparkline.stories.js +0 -39
  369. package/dist/components/split/split.stories.d.ts +0 -7
  370. package/dist/components/split/split.stories.js +0 -36
  371. package/dist/components/stat/stat.stories.d.ts +0 -9
  372. package/dist/components/stat/stat.stories.js +0 -81
  373. package/dist/components/table/table.stories.d.ts +0 -12
  374. package/dist/components/table/table.stories.js +0 -67
  375. package/dist/components/time-range/time-range.stories.d.ts +0 -8
  376. package/dist/components/time-range/time-range.stories.js +0 -26
  377. package/dist/components/toast/toast.stories.d.ts +0 -8
  378. package/dist/components/toast/toast.stories.js +0 -72
  379. package/dist/components/tree/tree.stories.d.ts +0 -9
  380. package/dist/components/tree/tree.stories.js +0 -52
  381. package/dist/components/widget/widget.stories.d.ts +0 -9
  382. package/dist/components/widget/widget.stories.js +0 -74
  383. package/dist/components/word-cloud/word-cloud.stories.d.ts +0 -10
  384. package/dist/components/word-cloud/word-cloud.stories.js +0 -55
@@ -35,15 +35,18 @@ export declare class LyraTree extends LyraElement {
35
35
  private get nodeElements();
36
36
  private childrenOf;
37
37
  /**
38
- * Memoized result of the last `visibleNodeElements()` walk. Every keydown
39
- * (ArrowUp/Down/Home/End especially) reads the full visible-node list, and
40
- * rebuilding it means a `shadowRoot.querySelectorAll` per currently-expanded
41
- * node -- invalidated below on the only two things that can change which
42
- * nodes are visible: a `data` reassignment, or a node expanding/collapsing.
38
+ * Every currently *visible* (ancestor-expanded) node, top-to-bottom.
39
+ *
40
+ * Recomputed on every call rather than memoized: `item`/`expanded` are
41
+ * plain public settable properties on `<lyra-tree-node>` (not just
42
+ * reachable through this class's own `data` setter or the bubbling
43
+ * `lyra-node-toggle` event), so a cache keyed off those two entry points
44
+ * alone would go stale the moment a caller mutated a node directly --
45
+ * e.g. `node.item = { ...node.item, children: [...] }` to append a child
46
+ * in place. This walk only runs from user-paced `keydown` handling (never
47
+ * a hot render-loop path), so the cost of a `shadowRoot.querySelectorAll`
48
+ * per currently-expanded node is not worth trading for that staleness risk.
43
49
  */
44
- private cachedVisible;
45
- private invalidateVisibleCache;
46
- /** Every currently *visible* (ancestor-expanded) node, top-to-bottom. */
47
50
  private visibleNodeElements;
48
51
  private findItem;
49
52
  protected willUpdate(changed: PropertyValues): void;
@@ -94,8 +97,20 @@ export declare class LyraTree extends LyraElement {
94
97
  */
95
98
  protected getUpdateComplete(): Promise<boolean>;
96
99
  private onTreeKeyDown;
97
- /** Expand every node in the tree, recursively. */
98
- expandAll(): void;
100
+ /**
101
+ * Expand every node in the tree, recursively. Resolves once every
102
+ * descendant has actually finished expanding (not just had `expanded` set)
103
+ * -- callers that immediately read `visibleNodeElements()`-derived state
104
+ * (or call `collapseAll()` right after) should `await` this instead of
105
+ * firing it and moving on.
106
+ *
107
+ * Guarded on `n.hasChildren`, matching `expand()`'s own invariant -- a leaf
108
+ * node's `expanded` must never be set to `true`, since `collapse()` (and
109
+ * this method's own counterpart, `collapseAll()`) refuse to act on a node
110
+ * that's `!hasChildren`, which would otherwise leave the leaf permanently
111
+ * stuck with a reflected `expanded` attribute nothing can clear.
112
+ */
113
+ expandAll(): Promise<void>;
99
114
  /**
100
115
  * Collapse every node in the tree, recursively. Goes through each node's
101
116
  * own `collapse()` (rather than assigning `expanded` directly) so its
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { html, nothing } from 'lit';
8
8
  import { property, state } from 'lit/decorators.js';
9
9
  import { LyraElement } from '../../internal/lyra-element.js';
10
- import { defineElement } from '../../internal/prefix.js';
10
+ import { defineElement, tag } from '../../internal/prefix.js';
11
11
  import { isRtl } from '../../internal/rtl.js';
12
12
  import { styles } from './tree.styles.js';
13
13
  import { cascadeUpdateComplete } from './update-cascade.js';
@@ -38,14 +38,6 @@ export class LyraTree extends LyraElement {
38
38
  this.activeId = null;
39
39
  /** Set by `willUpdate()` when a `data` reassignment removes the node that currently holds real DOM focus; consumed by `updated()` to refocus the newly-designated `activeId` node once it's actually focusable. */
40
40
  this.pendingFocusId = null;
41
- /**
42
- * Memoized result of the last `visibleNodeElements()` walk. Every keydown
43
- * (ArrowUp/Down/Home/End especially) reads the full visible-node list, and
44
- * rebuilding it means a `shadowRoot.querySelectorAll` per currently-expanded
45
- * node -- invalidated below on the only two things that can change which
46
- * nodes are visible: a `data` reassignment, or a node expanding/collapsing.
47
- */
48
- this.cachedVisible = null;
49
41
  /**
50
42
  * A mouse click always lands directly on the node it interacts with --
51
43
  * `select()`/`expand()`/`collapse()` all emit their own node's id --
@@ -62,8 +54,6 @@ export class LyraTree extends LyraElement {
62
54
  * same-value, no-op assignment for them.
63
55
  */
64
56
  this.onNodeActivate = (e) => {
65
- if (e.type === 'lyra-node-toggle')
66
- this.invalidateVisibleCache();
67
57
  this.activeId = e.detail.id;
68
58
  };
69
59
  this.onTreeKeyDown = (e) => {
@@ -133,18 +123,25 @@ export class LyraTree extends LyraElement {
133
123
  }
134
124
  static { this.styles = [LyraElement.styles, styles]; }
135
125
  get nodeElements() {
136
- return [...this.querySelectorAll('lyra-tree-node')];
126
+ return [...this.querySelectorAll(tag('tree-node'))];
137
127
  }
138
128
  childrenOf(node) {
139
- return [...(node.shadowRoot?.querySelectorAll('lyra-tree-node') ?? [])];
129
+ return [...(node.shadowRoot?.querySelectorAll(tag('tree-node')) ?? [])];
140
130
  }
141
- invalidateVisibleCache() {
142
- this.cachedVisible = null;
143
- }
144
- /** Every currently *visible* (ancestor-expanded) node, top-to-bottom. */
131
+ /**
132
+ * Every currently *visible* (ancestor-expanded) node, top-to-bottom.
133
+ *
134
+ * Recomputed on every call rather than memoized: `item`/`expanded` are
135
+ * plain public settable properties on `<lyra-tree-node>` (not just
136
+ * reachable through this class's own `data` setter or the bubbling
137
+ * `lyra-node-toggle` event), so a cache keyed off those two entry points
138
+ * alone would go stale the moment a caller mutated a node directly --
139
+ * e.g. `node.item = { ...node.item, children: [...] }` to append a child
140
+ * in place. This walk only runs from user-paced `keydown` handling (never
141
+ * a hot render-loop path), so the cost of a `shadowRoot.querySelectorAll`
142
+ * per currently-expanded node is not worth trading for that staleness risk.
143
+ */
145
144
  visibleNodeElements() {
146
- if (this.cachedVisible)
147
- return this.cachedVisible;
148
145
  const acc = [];
149
146
  const walk = (nodes) => {
150
147
  for (const n of nodes) {
@@ -154,7 +151,6 @@ export class LyraTree extends LyraElement {
154
151
  }
155
152
  };
156
153
  walk(this.nodeElements);
157
- this.cachedVisible = acc;
158
154
  return acc;
159
155
  }
160
156
  findItem(items, id) {
@@ -169,7 +165,6 @@ export class LyraTree extends LyraElement {
169
165
  }
170
166
  willUpdate(changed) {
171
167
  if (changed.has('data')) {
172
- this.invalidateVisibleCache();
173
168
  // `document.activeElement` collapses to the outermost light-DOM node
174
169
  // even when the real focus target is a nested descendant several
175
170
  // shadow roots down, so this also catches a focused nested node whose
@@ -206,7 +201,7 @@ export class LyraTree extends LyraElement {
206
201
  let previousSibling = null;
207
202
  for (const item of this.data) {
208
203
  const reused = !seen.has(item.id) ? existingById.get(item.id) : undefined;
209
- const node = reused ?? document.createElement('lyra-tree-node');
204
+ const node = reused ?? document.createElement(tag('tree-node'));
210
205
  node.item = item;
211
206
  node.depth = 0;
212
207
  seen.add(item.id);
@@ -263,16 +258,29 @@ export class LyraTree extends LyraElement {
263
258
  }
264
259
  return result;
265
260
  }
266
- /** Expand every node in the tree, recursively. */
267
- expandAll() {
268
- const setAll = (nodes) => {
269
- for (const n of nodes) {
270
- n.expanded = true;
271
- this.invalidateVisibleCache();
272
- void n.updateComplete.then(() => setAll(this.childrenOf(n)));
273
- }
261
+ /**
262
+ * Expand every node in the tree, recursively. Resolves once every
263
+ * descendant has actually finished expanding (not just had `expanded` set)
264
+ * -- callers that immediately read `visibleNodeElements()`-derived state
265
+ * (or call `collapseAll()` right after) should `await` this instead of
266
+ * firing it and moving on.
267
+ *
268
+ * Guarded on `n.hasChildren`, matching `expand()`'s own invariant -- a leaf
269
+ * node's `expanded` must never be set to `true`, since `collapse()` (and
270
+ * this method's own counterpart, `collapseAll()`) refuse to act on a node
271
+ * that's `!hasChildren`, which would otherwise leave the leaf permanently
272
+ * stuck with a reflected `expanded` attribute nothing can clear.
273
+ */
274
+ async expandAll() {
275
+ const setAll = async (nodes) => {
276
+ await Promise.all(nodes.map(async (n) => {
277
+ if (n.hasChildren)
278
+ n.expanded = true;
279
+ await n.updateComplete;
280
+ await setAll(this.childrenOf(n));
281
+ }));
274
282
  };
275
- setAll(this.nodeElements);
283
+ await setAll(this.nodeElements);
276
284
  }
277
285
  /**
278
286
  * Collapse every node in the tree, recursively. Goes through each node's
@@ -0,0 +1,70 @@
1
+ import { type TemplateResult, type PropertyValues } from 'lit';
2
+ import { LyraElement } from '../../internal/lyra-element.js';
3
+ export type TypingIndicatorVariant = 'dots' | 'pulse' | 'cursor';
4
+ export type TypingIndicatorSize = 'sm' | 'md';
5
+ /**
6
+ * `<lyra-typing-indicator>` — a purely presentational "assistant is
7
+ * responding" presence cue. No events, no interactivity: a consumer mounts
8
+ * it while a response is being generated and removes it (or hides it) once
9
+ * real content has arrived.
10
+ *
11
+ * Three visual variants share one component rather than three separate tags
12
+ * because callers pick between them along a single axis — how the
13
+ * surrounding surface wants the cue to read — and nothing else about the
14
+ * component differs:
15
+ * - `dots` (default) — three dots with a staggered bounce, the classic
16
+ * "typing…" affordance for a standalone status line.
17
+ * - `pulse` — a single breathing dot, a quieter cue for a tighter space
18
+ * (e.g. next to an avatar).
19
+ * - `cursor` — a blinking vertical bar, meant to sit inline at the tail end
20
+ * of streamed text that is still being appended to.
21
+ *
22
+ * Accessibility: this indicator typically mounts and unmounts around a real
23
+ * generation lifecycle (appears when a response starts, disappears once one
24
+ * arrives) rather than emitting a stream of updates of its own, so it does
25
+ * *not* route through `<lyra-live-region>`/`Announcer`
26
+ * (`../../internal/announcer.js`) — that machinery exists to coalesce many
27
+ * rapidly-changing announcements into one, and there is only ever a single
28
+ * announcement here: the mount itself. A plain `role="status"` plus an
29
+ * accessible name derived from `label` is sufficient, set both as an
30
+ * `aria-label` on the host *and* as a visually-hidden text node in the
31
+ * shadow tree, so the name survives even if only one of the two is picked up
32
+ * by a given assistive-tech/browser pairing. An empty or whitespace-only
33
+ * `label` falls back to the default "Thinking…" copy in both places, rather
34
+ * than leaving the component with no accessible name at all. The animated dots/pulse/cursor
35
+ * shape is `aria-hidden="true"` — it's decorative; `label` is the entire
36
+ * accessible content, so nothing narrates individual animation frames.
37
+ *
38
+ * @customElement lyra-typing-indicator
39
+ * @csspart base - The decorative (`aria-hidden`) wrapper around the animated shape.
40
+ * @csspart dot - Each of the three dots in the `dots` variant.
41
+ * @csspart pulse - The single pulsing dot in the `pulse` variant.
42
+ * @csspart cursor - The blinking bar in the `cursor` variant.
43
+ */
44
+ export declare class LyraTypingIndicator extends LyraElement {
45
+ static styles: import("lit").CSSResultGroup[];
46
+ /** Which decorative presentation to render. */
47
+ variant: TypingIndicatorVariant;
48
+ /** Accessible name, exposed via `role="status"`. Not re-announced on every
49
+ * animation frame — only mount (and any later change to this property)
50
+ * produces a new announcement. An empty or whitespace-only value falls
51
+ * back to the default "Thinking…" copy (see `accessibleLabel`) so the
52
+ * component never loses its accessible name. */
53
+ label: string;
54
+ /** Compact sizing for dense layouts (e.g. inline with a message bubble). */
55
+ size: TypingIndicatorSize;
56
+ /** The accessible name actually used, falling back to the default
57
+ * "Thinking…" copy when `label` is set to an empty or whitespace-only
58
+ * string -- otherwise both the `aria-label` and the sr-only text node
59
+ * would go blank, leaving this purely-decorative component with no
60
+ * accessible name at all. */
61
+ private get accessibleLabel();
62
+ protected willUpdate(changed: PropertyValues): void;
63
+ render(): TemplateResult;
64
+ private renderShape;
65
+ }
66
+ declare global {
67
+ interface HTMLElementTagNameMap {
68
+ 'lyra-typing-indicator': LyraTypingIndicator;
69
+ }
70
+ }
@@ -0,0 +1,108 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { html } from 'lit';
8
+ import { property } from 'lit/decorators.js';
9
+ import { LyraElement } from '../../internal/lyra-element.js';
10
+ import { defineElement } from '../../internal/prefix.js';
11
+ import { srOnly } from '../../internal/a11y.js';
12
+ import { styles } from './typing-indicator.styles.js';
13
+ /**
14
+ * `<lyra-typing-indicator>` — a purely presentational "assistant is
15
+ * responding" presence cue. No events, no interactivity: a consumer mounts
16
+ * it while a response is being generated and removes it (or hides it) once
17
+ * real content has arrived.
18
+ *
19
+ * Three visual variants share one component rather than three separate tags
20
+ * because callers pick between them along a single axis — how the
21
+ * surrounding surface wants the cue to read — and nothing else about the
22
+ * component differs:
23
+ * - `dots` (default) — three dots with a staggered bounce, the classic
24
+ * "typing…" affordance for a standalone status line.
25
+ * - `pulse` — a single breathing dot, a quieter cue for a tighter space
26
+ * (e.g. next to an avatar).
27
+ * - `cursor` — a blinking vertical bar, meant to sit inline at the tail end
28
+ * of streamed text that is still being appended to.
29
+ *
30
+ * Accessibility: this indicator typically mounts and unmounts around a real
31
+ * generation lifecycle (appears when a response starts, disappears once one
32
+ * arrives) rather than emitting a stream of updates of its own, so it does
33
+ * *not* route through `<lyra-live-region>`/`Announcer`
34
+ * (`../../internal/announcer.js`) — that machinery exists to coalesce many
35
+ * rapidly-changing announcements into one, and there is only ever a single
36
+ * announcement here: the mount itself. A plain `role="status"` plus an
37
+ * accessible name derived from `label` is sufficient, set both as an
38
+ * `aria-label` on the host *and* as a visually-hidden text node in the
39
+ * shadow tree, so the name survives even if only one of the two is picked up
40
+ * by a given assistive-tech/browser pairing. An empty or whitespace-only
41
+ * `label` falls back to the default "Thinking…" copy in both places, rather
42
+ * than leaving the component with no accessible name at all. The animated dots/pulse/cursor
43
+ * shape is `aria-hidden="true"` — it's decorative; `label` is the entire
44
+ * accessible content, so nothing narrates individual animation frames.
45
+ *
46
+ * @customElement lyra-typing-indicator
47
+ * @csspart base - The decorative (`aria-hidden`) wrapper around the animated shape.
48
+ * @csspart dot - Each of the three dots in the `dots` variant.
49
+ * @csspart pulse - The single pulsing dot in the `pulse` variant.
50
+ * @csspart cursor - The blinking bar in the `cursor` variant.
51
+ */
52
+ export class LyraTypingIndicator extends LyraElement {
53
+ constructor() {
54
+ super(...arguments);
55
+ /** Which decorative presentation to render. */
56
+ this.variant = 'dots';
57
+ /** Accessible name, exposed via `role="status"`. Not re-announced on every
58
+ * animation frame — only mount (and any later change to this property)
59
+ * produces a new announcement. An empty or whitespace-only value falls
60
+ * back to the default "Thinking…" copy (see `accessibleLabel`) so the
61
+ * component never loses its accessible name. */
62
+ this.label = 'Thinking…';
63
+ /** Compact sizing for dense layouts (e.g. inline with a message bubble). */
64
+ this.size = 'md';
65
+ }
66
+ static { this.styles = [LyraElement.styles, styles, srOnly]; }
67
+ /** The accessible name actually used, falling back to the default
68
+ * "Thinking…" copy when `label` is set to an empty or whitespace-only
69
+ * string -- otherwise both the `aria-label` and the sr-only text node
70
+ * would go blank, leaving this purely-decorative component with no
71
+ * accessible name at all. */
72
+ get accessibleLabel() {
73
+ return this.label.trim() || 'Thinking…';
74
+ }
75
+ willUpdate(changed) {
76
+ this.setAttribute('role', 'status');
77
+ if (changed.has('label')) {
78
+ this.setAttribute('aria-label', this.accessibleLabel);
79
+ }
80
+ }
81
+ render() {
82
+ return html `
83
+ <span part="base" aria-hidden="true">${this.renderShape()}</span>
84
+ <span class="sr-only">${this.accessibleLabel}</span>
85
+ `;
86
+ }
87
+ renderShape() {
88
+ switch (this.variant) {
89
+ case 'pulse':
90
+ return html `<span part="pulse"></span>`;
91
+ case 'cursor':
92
+ return html `<span part="cursor"></span>`;
93
+ case 'dots':
94
+ default:
95
+ return html `<span part="dot"></span><span part="dot"></span><span part="dot"></span>`;
96
+ }
97
+ }
98
+ }
99
+ __decorate([
100
+ property({ reflect: true })
101
+ ], LyraTypingIndicator.prototype, "variant", void 0);
102
+ __decorate([
103
+ property()
104
+ ], LyraTypingIndicator.prototype, "label", void 0);
105
+ __decorate([
106
+ property({ reflect: true })
107
+ ], LyraTypingIndicator.prototype, "size", void 0);
108
+ defineElement('typing-indicator', LyraTypingIndicator);
@@ -0,0 +1 @@
1
+ export declare const styles: import("lit").CSSResult;
@@ -0,0 +1,132 @@
1
+ import { css } from 'lit';
2
+ // `--lyra-transition-base` is used (rather than `--lyra-transition-fast`) as
3
+ // the animation-cycle length for every variant below: it's the token the
4
+ // rest of the library reserves for slightly-more-noticeable motion (gauge
5
+ // fill, dialog/popover open), whereas `-fast` is reserved for snappy
6
+ // discrete state flips (checkbox check, switch thumb). A continuous ambient
7
+ // loop reads calmer at the longer of the two. Note this token is a *compound*
8
+ // value (`180ms ease-out`, duration + timing-function together, exactly like
9
+ // every `transition:` shorthand elsewhere in this library) so it can only
10
+ // ever be spliced into the `animation:` *shorthand* below, never assigned to
11
+ // `animation-duration` alone -- that longhand requires a bare `<time>` and
12
+ // would silently invalidate (collapsing the duration to 0) if given the
13
+ // compound value. For the same reason no extra timing-function keyword can
14
+ // follow it in the shorthand: the token already supplies one.
15
+ export const styles = css `
16
+ :host {
17
+ display: inline-flex;
18
+ align-items: center;
19
+ vertical-align: middle;
20
+ line-height: 1;
21
+ --lyra-typing-dot-size: var(--lyra-space-s);
22
+ --lyra-typing-gap: var(--lyra-space-xs);
23
+ --lyra-typing-cursor-width: 0.125rem;
24
+ --lyra-typing-cursor-height: 1em;
25
+ }
26
+ :host([size='sm']) {
27
+ --lyra-typing-dot-size: 0.375rem;
28
+ --lyra-typing-gap: 0.1875rem;
29
+ --lyra-typing-cursor-width: 0.09375rem;
30
+ }
31
+
32
+ [part='base'] {
33
+ display: inline-flex;
34
+ align-items: center;
35
+ gap: var(--lyra-typing-gap);
36
+ }
37
+
38
+ /* -- dots -------------------------------------------------------------- */
39
+ [part='dot'] {
40
+ inline-size: var(--lyra-typing-dot-size);
41
+ block-size: var(--lyra-typing-dot-size);
42
+ border-radius: 50%;
43
+ background: currentColor;
44
+ opacity: 0.5;
45
+ animation: lyra-typing-dot-bounce var(--lyra-transition-base) infinite;
46
+ }
47
+ /* Fixed (not token-derived) stagger offsets -- --lyra-transition-base is
48
+ a compound "duration timing-function" value like every other transition
49
+ token in this library, so it can't be decomposed via calc() to derive a
50
+ fraction of just its duration; these two delays approximate a third and
51
+ two-thirds of that token's own fallback duration. */
52
+ [part='dot']:nth-child(2) {
53
+ animation-delay: 60ms;
54
+ }
55
+ [part='dot']:nth-child(3) {
56
+ animation-delay: 120ms;
57
+ }
58
+ @keyframes lyra-typing-dot-bounce {
59
+ 0%,
60
+ 80%,
61
+ 100% {
62
+ transform: translateY(0);
63
+ opacity: 0.5;
64
+ }
65
+ 40% {
66
+ transform: translateY(-35%);
67
+ opacity: 1;
68
+ }
69
+ }
70
+
71
+ /* -- pulse --------------------------------------------------------------
72
+ A single breathing dot, meant for tighter spaces than three dots allow. */
73
+ [part='pulse'] {
74
+ inline-size: var(--lyra-typing-dot-size);
75
+ block-size: var(--lyra-typing-dot-size);
76
+ border-radius: 50%;
77
+ background: currentColor;
78
+ opacity: 1;
79
+ transform: scale(1);
80
+ animation: lyra-typing-pulse var(--lyra-transition-base) infinite;
81
+ }
82
+ @keyframes lyra-typing-pulse {
83
+ 0%,
84
+ 100% {
85
+ transform: scale(0.85);
86
+ opacity: 0.55;
87
+ }
88
+ 50% {
89
+ transform: scale(1);
90
+ opacity: 1;
91
+ }
92
+ }
93
+
94
+ /* -- cursor -------------------------------------------------------------
95
+ A blinking vertical bar for inline placement at the tail of streamed
96
+ text. The two adjacent keyframe stops (49% / 50%) hold identical values
97
+ either side of an instant flip, so the blink still reads as a sharp
98
+ on/off even though the token's ease-out timing-function is in effect
99
+ across the whole animation. */
100
+ [part='cursor'] {
101
+ inline-size: var(--lyra-typing-cursor-width);
102
+ block-size: var(--lyra-typing-cursor-height);
103
+ background: currentColor;
104
+ border-radius: var(--lyra-typing-cursor-width);
105
+ opacity: 1;
106
+ animation: lyra-typing-cursor-blink var(--lyra-transition-base) infinite;
107
+ }
108
+ @keyframes lyra-typing-cursor-blink {
109
+ 0%,
110
+ 49% {
111
+ opacity: 1;
112
+ }
113
+ 50%,
114
+ 100% {
115
+ opacity: 0;
116
+ }
117
+ }
118
+
119
+ /* Every variant collapses to its plain, fully-visible resting state
120
+ under reduced motion -- never a static mid-animation frame (e.g. a
121
+ permanently-invisible cursor, had the blink's "off" half been frozen
122
+ instead). */
123
+ @media (prefers-reduced-motion: reduce) {
124
+ [part='dot'],
125
+ [part='pulse'],
126
+ [part='cursor'] {
127
+ animation: none !important;
128
+ opacity: 1;
129
+ transform: none;
130
+ }
131
+ }
132
+ `;