@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,62 @@
1
+ import { css } from 'lit';
2
+ export const styles = css `
3
+ :host {
4
+ display: block;
5
+ overflow-wrap: break-word;
6
+ /* Not derived from any --lyra-* token in tokens.styles.ts -- there's no
7
+ shared "inline cursor bar" token to resolve through, so this component
8
+ defines its own scoped custom property, exactly the way
9
+ lyra-typing-indicator's --lyra-typing-cursor-width/-height do for its
10
+ own (near-identical) blinking cursor. */
11
+ --lyra-streaming-text-cursor-width: 0.125rem;
12
+ }
13
+
14
+ [part='base'] {
15
+ line-height: 1.6;
16
+ }
17
+
18
+ /* Plain-text path only (Markdown mode never renders this element) -- see
19
+ the class doc for why Markdown content can't share this same
20
+ white-space treatment. */
21
+ .plain {
22
+ white-space: pre-wrap;
23
+ }
24
+
25
+ /* inline-block (not inline) so it participates in text layout on the same
26
+ line as the preceding content while still accepting a fixed block-size
27
+ for the bar -- in plain-text mode this sits at the visual tail of the
28
+ final wrapped line, immediately after the last character. */
29
+ [part='cursor'] {
30
+ display: inline-block;
31
+ vertical-align: text-bottom;
32
+ inline-size: var(--lyra-streaming-text-cursor-width);
33
+ block-size: 1em;
34
+ margin-inline-start: var(--lyra-space-xs);
35
+ background: currentColor;
36
+ border-radius: var(--lyra-streaming-text-cursor-width);
37
+ animation: lyra-streaming-text-cursor-blink var(--lyra-transition-base) infinite;
38
+ }
39
+
40
+ /* Two adjacent keyframe stops (49% / 50%) either side of an instant flip,
41
+ same shape as lyra-typing-indicator's cursor variant, so the blink still
42
+ reads as a sharp on/off even under the token's own ease-out timing. */
43
+ @keyframes lyra-streaming-text-cursor-blink {
44
+ 0%,
45
+ 49% {
46
+ opacity: 1;
47
+ }
48
+ 50%,
49
+ 100% {
50
+ opacity: 0;
51
+ }
52
+ }
53
+
54
+ /* Degrades to a static, fully-visible bar -- never a frozen mid-blink
55
+ (invisible) frame. */
56
+ @media (prefers-reduced-motion: reduce) {
57
+ [part='cursor'] {
58
+ animation: none !important;
59
+ opacity: 1;
60
+ }
61
+ }
62
+ `;
@@ -0,0 +1,58 @@
1
+ import { type TemplateResult, type PropertyValues } from 'lit';
2
+ import { LyraElement } from '../../internal/lyra-element.js';
3
+ /**
4
+ * `<lyra-switch>` — a boolean toggle-switch form control. Structurally the
5
+ * same idea as a checkbox (form-associated via `ElementInternals`, click and
6
+ * Space/Enter both toggle) but with switch semantics: `role="switch"` +
7
+ * `aria-checked` read to assistive tech as an on/off state rather than a
8
+ * checked/unchecked one, and there is no indeterminate state.
9
+ *
10
+ * `checked` is not a plain string, so this attaches `ElementInternals`
11
+ * directly and implements its own `updateValidity()` rather than using the
12
+ * `FormAssociated` mixin (that mixin's `value` accessor assumes a string —
13
+ * see `<lyra-combobox>` for the same direct-`ElementInternals` shape with a
14
+ * non-string value).
15
+ *
16
+ * @customElement lyra-switch
17
+ * @slot - Label text, rendered next to the track. Clicking it toggles the
18
+ * switch, the same as clicking a checkbox's associated `<label>`. If left
19
+ * empty, set `aria-label` on the host so the control still has an
20
+ * accessible name.
21
+ * @event lyra-change - The user toggled the switch (click or Space/Enter). `detail: { checked }`.
22
+ * @csspart base - The whole interactive control (`role="switch"`); wraps the track and label.
23
+ * @csspart track - The pill-shaped background.
24
+ * @csspart thumb - The circular knob that slides across the track.
25
+ * @csspart label - The wrapper around the default slot.
26
+ */
27
+ export declare class LyraSwitch extends LyraElement {
28
+ static styles: import("lit").CSSResultGroup[];
29
+ static formAssociated: boolean;
30
+ checked: boolean;
31
+ disabled: boolean;
32
+ required: boolean;
33
+ name: string;
34
+ value: string;
35
+ private hasLabelSlot;
36
+ private internals;
37
+ private _defaultChecked;
38
+ private _defaultCaptured;
39
+ constructor();
40
+ connectedCallback(): void;
41
+ protected willUpdate(): void;
42
+ private updateValidity;
43
+ protected updated(changed: PropertyValues): void;
44
+ formResetCallback(): void;
45
+ formDisabledCallback(disabled: boolean): void;
46
+ checkValidity(): boolean;
47
+ reportValidity(): boolean;
48
+ private toggle;
49
+ private onClick;
50
+ private onKeyDown;
51
+ private onSlotChange;
52
+ render(): TemplateResult;
53
+ }
54
+ declare global {
55
+ interface HTMLElementTagNameMap {
56
+ 'lyra-switch': LyraSwitch;
57
+ }
58
+ }
@@ -0,0 +1,179 @@
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, nothing } from 'lit';
8
+ import { property, state } from 'lit/decorators.js';
9
+ import { LyraElement } from '../../internal/lyra-element.js';
10
+ import { defineElement } from '../../internal/prefix.js';
11
+ import { styles } from './switch.styles.js';
12
+ /**
13
+ * `<lyra-switch>` — a boolean toggle-switch form control. Structurally the
14
+ * same idea as a checkbox (form-associated via `ElementInternals`, click and
15
+ * Space/Enter both toggle) but with switch semantics: `role="switch"` +
16
+ * `aria-checked` read to assistive tech as an on/off state rather than a
17
+ * checked/unchecked one, and there is no indeterminate state.
18
+ *
19
+ * `checked` is not a plain string, so this attaches `ElementInternals`
20
+ * directly and implements its own `updateValidity()` rather than using the
21
+ * `FormAssociated` mixin (that mixin's `value` accessor assumes a string —
22
+ * see `<lyra-combobox>` for the same direct-`ElementInternals` shape with a
23
+ * non-string value).
24
+ *
25
+ * @customElement lyra-switch
26
+ * @slot - Label text, rendered next to the track. Clicking it toggles the
27
+ * switch, the same as clicking a checkbox's associated `<label>`. If left
28
+ * empty, set `aria-label` on the host so the control still has an
29
+ * accessible name.
30
+ * @event lyra-change - The user toggled the switch (click or Space/Enter). `detail: { checked }`.
31
+ * @csspart base - The whole interactive control (`role="switch"`); wraps the track and label.
32
+ * @csspart track - The pill-shaped background.
33
+ * @csspart thumb - The circular knob that slides across the track.
34
+ * @csspart label - The wrapper around the default slot.
35
+ */
36
+ export class LyraSwitch extends LyraElement {
37
+ static { this.styles = [LyraElement.styles, styles]; }
38
+ static { this.formAssociated = true; }
39
+ constructor() {
40
+ super();
41
+ this.checked = false;
42
+ this.disabled = false;
43
+ this.required = false;
44
+ this.name = '';
45
+ this.value = 'on';
46
+ // Tracks whether the default slot carries any real (non-whitespace)
47
+ // content, so the label wrapper — and the `gap` next to the track — can
48
+ // collapse to nothing for an icon-only/aria-label-only switch instead of
49
+ // leaving a stray empty gap. See combobox/date-input's `hasHintSlot`-style
50
+ // state fields; this one checks `assignedNodes` rather than
51
+ // `assignedElements` because a plain slotted text label (the expected
52
+ // common case here, e.g. `<lyra-switch>Enable notifications</lyra-switch>`)
53
+ // is a text node, which `assignedElements` would silently ignore.
54
+ this.hasLabelSlot = false;
55
+ // What `form.reset()` restores to — captured once, from whatever the
56
+ // `checked` property reads at first connect (i.e. whatever the declarative
57
+ // `checked` attribute parsed to, since attribute parsing happens before
58
+ // `connectedCallback`). `checked` reflects, so unlike
59
+ // `FormAssociated`'s non-reflecting `value` this can't be captured from
60
+ // `attributeChangedCallback` alone — that would also fire (and wrongly
61
+ // redefine the default) every time the property setter itself reflects a
62
+ // later user toggle back into the attribute. Guarding with a one-shot flag
63
+ // instead mirrors `<lyra-combobox>`'s `_defaultCaptured`/`_defaultSelected`.
64
+ this._defaultChecked = false;
65
+ this._defaultCaptured = false;
66
+ this.onClick = () => {
67
+ this.toggle();
68
+ };
69
+ this.onKeyDown = (e) => {
70
+ if (this.disabled)
71
+ return;
72
+ // Space/Enter both activate, matching `<lyra-table>`'s sortable
73
+ // header/row convention (`table.ts`'s `onHeaderKeyDown`/`onRowKeyDown`)
74
+ // for role-based clickable elements — bound to `keydown` rather than
75
+ // `keyup`/native `click`-forwarding like the rest of this library.
76
+ if (e.key === ' ' || e.key === 'Spacebar' || e.key === 'Enter') {
77
+ e.preventDefault();
78
+ this.toggle();
79
+ }
80
+ };
81
+ this.onSlotChange = (e) => {
82
+ const nodes = e.target.assignedNodes({ flatten: true });
83
+ this.hasLabelSlot = nodes.some((n) => (n.textContent ?? '').trim().length > 0);
84
+ };
85
+ this.internals = this.attachInternals();
86
+ }
87
+ connectedCallback() {
88
+ super.connectedCallback();
89
+ if (!this._defaultCaptured) {
90
+ this._defaultCaptured = true;
91
+ this._defaultChecked = this.checked;
92
+ }
93
+ this.updateValidity();
94
+ }
95
+ willUpdate() {
96
+ // Seed `hasLabelSlot` from the light-DOM children synchronously before
97
+ // the very first render (same `!hasUpdated` guard as combobox/date-input's
98
+ // `hasHintSlot` etc.) so declaratively-provided label text doesn't flash
99
+ // hidden for one frame while waiting on the first `slotchange` event.
100
+ if (!this.hasUpdated) {
101
+ this.hasLabelSlot = Array.from(this.childNodes).some((n) => (n.textContent ?? '').trim().length > 0);
102
+ }
103
+ }
104
+ updateValidity() {
105
+ if (this.required && !this.checked) {
106
+ this.internals.setValidity({ valueMissing: true }, 'Please turn this on.');
107
+ }
108
+ else {
109
+ this.internals.setValidity({});
110
+ }
111
+ }
112
+ updated(changed) {
113
+ if (changed.has('checked') || changed.has('value')) {
114
+ this.internals.setFormValue(this.checked ? this.value : null);
115
+ }
116
+ if (changed.has('checked') || changed.has('required')) {
117
+ this.updateValidity();
118
+ }
119
+ }
120
+ formResetCallback() {
121
+ this.checked = this._defaultChecked;
122
+ }
123
+ formDisabledCallback(disabled) {
124
+ this.disabled = disabled;
125
+ }
126
+ checkValidity() {
127
+ return this.internals.checkValidity();
128
+ }
129
+ reportValidity() {
130
+ return this.internals.reportValidity();
131
+ }
132
+ toggle() {
133
+ if (this.disabled)
134
+ return;
135
+ this.checked = !this.checked;
136
+ this.emit('lyra-change', { checked: this.checked });
137
+ }
138
+ render() {
139
+ return html `
140
+ <span
141
+ part="base"
142
+ role="switch"
143
+ tabindex=${this.disabled ? '-1' : '0'}
144
+ aria-checked=${this.checked ? 'true' : 'false'}
145
+ aria-required=${this.required ? 'true' : nothing}
146
+ aria-disabled=${this.disabled ? 'true' : nothing}
147
+ aria-label=${this.getAttribute('aria-label') || nothing}
148
+ @click=${this.onClick}
149
+ @keydown=${this.onKeyDown}
150
+ >
151
+ <span part="track">
152
+ <span part="thumb"></span>
153
+ </span>
154
+ <span part="label" ?hidden=${!this.hasLabelSlot}>
155
+ <slot @slotchange=${this.onSlotChange}></slot>
156
+ </span>
157
+ </span>
158
+ `;
159
+ }
160
+ }
161
+ __decorate([
162
+ property({ type: Boolean, reflect: true })
163
+ ], LyraSwitch.prototype, "checked", void 0);
164
+ __decorate([
165
+ property({ type: Boolean, reflect: true })
166
+ ], LyraSwitch.prototype, "disabled", void 0);
167
+ __decorate([
168
+ property({ type: Boolean, reflect: true })
169
+ ], LyraSwitch.prototype, "required", void 0);
170
+ __decorate([
171
+ property()
172
+ ], LyraSwitch.prototype, "name", void 0);
173
+ __decorate([
174
+ property()
175
+ ], LyraSwitch.prototype, "value", void 0);
176
+ __decorate([
177
+ state()
178
+ ], LyraSwitch.prototype, "hasLabelSlot", void 0);
179
+ defineElement('switch', LyraSwitch);
@@ -0,0 +1 @@
1
+ export declare const styles: import("lit").CSSResult;
@@ -0,0 +1,75 @@
1
+ import { css } from 'lit';
2
+ export const styles = css `
3
+ :host {
4
+ display: inline-block;
5
+ /* Component-local geometry knobs (same "define your own on :host"
6
+ pattern as lyra-toast's --gap/--width) — a fully-rounded pill/thumb
7
+ needs a radius well past --lyra-radius's small 0.375rem default, so
8
+ it's expressed here rather than bent onto that shared token. */
9
+ --track-inline-size: 2.25rem;
10
+ --track-block-size: 1.25rem;
11
+ --thumb-offset: 2px;
12
+ }
13
+ [part='base'] {
14
+ display: inline-flex;
15
+ align-items: center;
16
+ gap: var(--lyra-space-s);
17
+ cursor: pointer;
18
+ -webkit-tap-highlight-color: transparent;
19
+ }
20
+ [part='base']:focus-visible {
21
+ outline: var(--lyra-focus-ring-width) solid var(--lyra-focus-ring-color);
22
+ outline-offset: var(--lyra-focus-ring-offset);
23
+ }
24
+ :host([disabled]) [part='base'] {
25
+ cursor: not-allowed;
26
+ opacity: var(--lyra-opacity-disabled);
27
+ }
28
+
29
+ [part='track'] {
30
+ position: relative;
31
+ flex: 0 0 auto;
32
+ inline-size: var(--track-inline-size);
33
+ block-size: var(--track-block-size);
34
+ border-radius: 999px;
35
+ background: var(--lyra-color-border);
36
+ transition: background-color var(--lyra-transition-fast);
37
+ }
38
+ :host([checked]) [part='track'] {
39
+ background: var(--lyra-color-brand);
40
+ }
41
+
42
+ [part='thumb'] {
43
+ position: absolute;
44
+ inset-block-start: var(--thumb-offset);
45
+ inset-inline-start: var(--thumb-offset);
46
+ inline-size: calc(var(--track-block-size) - (var(--thumb-offset) * 2));
47
+ block-size: calc(var(--track-block-size) - (var(--thumb-offset) * 2));
48
+ border-radius: 50%;
49
+ background: var(--lyra-color-surface);
50
+ /* Animates the logical 'inset-inline-start' rather than a physical
51
+ 'transform: translateX()' so the slide direction mirrors correctly
52
+ under dir="rtl" — consistent with this library's CSS-logical-
53
+ properties approach to RTL (see internal/lyra-element.ts). */
54
+ transition: inset-inline-start var(--lyra-transition-fast);
55
+ }
56
+ :host([checked]) [part='thumb'] {
57
+ inset-inline-start: calc(var(--track-inline-size) - var(--track-block-size) + var(--thumb-offset));
58
+ }
59
+
60
+ /* No explicit "display" here (unlike e.g. lyra-combobox's
61
+ [part='form-control-label']), so the UA stylesheet's default
62
+ "[hidden] { display: none }" rule needs no author-side override to
63
+ take effect when hasLabelSlot is false. */
64
+ [part='label'] {
65
+ font-size: 0.875rem;
66
+ color: var(--lyra-color-text);
67
+ }
68
+
69
+ @media (prefers-reduced-motion: reduce) {
70
+ [part='track'],
71
+ [part='thumb'] {
72
+ transition: none !important;
73
+ }
74
+ }
75
+ `;
@@ -39,14 +39,23 @@ export interface TableColumn<T> {
39
39
  *
40
40
  * `columns[].priority` ('medium' | 'low') hides that column under
41
41
  * `[part='base']`'s `@container` breakpoints; `[part='reveal-columns-button']`
42
- * (rendered whenever any column has a priority) forces them all back into
43
- * view. `columns[].sticky` pins a column's header/cells to the inline-start
44
- * edge while the table scrolls horizontally.
42
+ * forces them all back into view. Rather than a *static* check of whether any
43
+ * column merely declares a `priority`, the button (and the public
44
+ * `columnsHidden` property, see below) reflects whether a `priority` column
45
+ * is *actually* hidden right now — measured via `ResizeObserver` on
46
+ * `[part='base']` plus a post-render DOM check — or `showAllColumns`
47
+ * force-visible mode is currently active (so there's still a way to toggle
48
+ * it back off). `columns[].sticky` pins a column's header/cells to the
49
+ * inline-start edge while the table scrolls horizontally.
45
50
  *
46
51
  * @customElement lyra-table
47
52
  * @event lyra-sort - A sortable header was activated. `detail: { key }`.
48
53
  * @event lyra-row-click - A row was activated. `detail: { row }`.
49
54
  * @event lyra-load-more - The "load more" control was activated.
55
+ * @event lyra-columns-hidden-change - `columnsHidden` actually changed value
56
+ * (a `priority` column just became hidden/un-hidden by the `@container`
57
+ * rules, or `showAllColumns` force-visible mode was toggled while a
58
+ * `priority` column was hidden). `detail: { hidden: boolean }`.
50
59
  * @csspart base, table, head, header-cell, row, cell, more-button, sort-icon, reveal-columns-button
51
60
  */
52
61
  export declare class LyraTable<T = unknown> extends LyraElement {
@@ -72,6 +81,16 @@ export declare class LyraTable<T = unknown> extends LyraElement {
72
81
  noColumnsDescription: string;
73
82
  revealColumnsLabel: string;
74
83
  hideColumnsLabel: string;
84
+ /** Whether a `priority` column is *actually* hidden right now by
85
+ * table.styles.ts's `@container` rules, or `showAllColumns` force-visible
86
+ * mode is currently active — the same computed value that gates whether
87
+ * `[part='reveal-columns-button']` renders at all (see `render()`), kept
88
+ * in sync by `recomputeColumnsHidden()`. Computed/read-only by
89
+ * convention: consumers may read it (and listen for
90
+ * `lyra-columns-hidden-change`), but setting it directly has no lasting
91
+ * effect, since it's recomputed on the very next render or
92
+ * `[part='base']` resize. */
93
+ columnsHidden: boolean;
75
94
  /** Forces `priority`-hidden columns back into view, overriding the
76
95
  * `@container` hide rules in table.styles.ts. Toggled by
77
96
  * `[part='reveal-columns-button']`. */
@@ -86,18 +105,68 @@ export declare class LyraTable<T = unknown> extends LyraElement {
86
105
  private activeRowKey;
87
106
  private rowsByKey;
88
107
  private columnsByKey;
108
+ /** Watches `[part='base']`'s own inline-size — the `@container` query
109
+ * container table.styles.ts's priority-hide rules react to — so a
110
+ * `priority` column flipping hidden/visible from an *external* width
111
+ * change (a window resize, an ancestor flex-layout reflow, ...) is caught
112
+ * even though no Lit-tracked property changed. Mirrors
113
+ * lite-chart.ts's connectedCallback()/disconnectedCallback() ResizeObserver
114
+ * lifecycle. */
115
+ private resizeObserver?;
116
+ /** The `[part='base']` element `resizeObserver` is currently observing —
117
+ * `render()`'s columns/rows-empty branches swap in `<lyra-empty>` instead,
118
+ * a different template shape that gives `[part='base']` a fresh DOM
119
+ * identity on the next non-empty render, so `updated()` re-observes
120
+ * whenever this no longer matches the live element. */
121
+ private observedBase?;
122
+ connectedCallback(): void;
123
+ disconnectedCallback(): void;
124
+ private observeBase;
125
+ /** Recomputes `columnsHidden` from the live DOM (mirrors `visibleHeaders()`'s
126
+ * own `offsetParent !== null` technique for detecting `@container`-hidden
127
+ * cells) and dispatches `lyra-columns-hidden-change` only on a real
128
+ * transition. Called from `updated()` (covers a change driven by
129
+ * `columns`/`rows`/`showAllColumns` rather than a container resize) and
130
+ * from the `ResizeObserver` callback (covers a container resize with no
131
+ * Lit-tracked property change at all). */
132
+ private recomputeColumnsHidden;
89
133
  private keyOf;
90
134
  /** The header cell that currently owns `tabindex="0"`. */
91
135
  private focusedColKey;
92
136
  /** The body row that currently owns `tabindex="0"`. */
93
137
  private focusedRowKey;
94
138
  protected willUpdate(changed: PropertyValues): void;
139
+ /** Each sticky column's cumulative left offset — the sum of the *rendered
140
+ * width* of every earlier sticky column — so multiple sticky columns
141
+ * stack left-to-right instead of all pinning to inset-inline-start: 0 and
142
+ * overlapping. Table columns are intrinsically sized (not fixed-width), so
143
+ * this can't be computed in CSS alone; it requires measuring the actual
144
+ * laid-out `offsetWidth` of each earlier sticky column's header cell. */
145
+ private stickyOffsets;
146
+ /** Applies stickyOffsets()'s measured per-column offsets as an inline
147
+ * `--lyra-table-sticky-offset` custom property on every header cell and
148
+ * body cell in that column (addressed by the shared `data-col-key`
149
+ * attribute). This is a post-render DOM measurement — column widths
150
+ * aren't known until after the browser has laid out this update's
151
+ * render() output — so it runs from `updated()`, not `willUpdate()`,
152
+ * intentionally kept as a separate pass from the rowsByKey/columnsByKey
153
+ * rebuild above: those two must stay in `willUpdate()` so `render()`'s
154
+ * own `focusedRowKey()` call sees the current update's identity maps
155
+ * (e.g. a freshly-assigned `selectedKey` resolving to the correct
156
+ * roving-tabindex row on the very first paint), whereas the sticky-offset
157
+ * measurement can only run after that same paint has happened. Only runs
158
+ * when `hasSticky` is true (opt-in) and simply recomputes on every
159
+ * update; a future optimization pass could cache column widths instead of
160
+ * re-querying every time — out of scope for this correctness fix. */
161
+ protected updated(): void;
95
162
  private activateColumn;
96
163
  private activateRow;
97
164
  /** Header cells currently in the tab sequence — excludes columns hidden by
98
165
  * a `priority`-driven `@container` rule (table.styles.ts), so Left/Right/
99
166
  * Home/End never strand the roving tab stop on a `display: none` cell
100
- * that `.focus()` would silently no-op on. */
167
+ * that `.focus()` would silently no-op on. Scoped to `th` — body `<td>`s
168
+ * now carry the same `data-col-key` attribute (for the sticky-offset
169
+ * measurement pass) but must never be treated as header cells here. */
101
170
  private visibleHeaders;
102
171
  private focusHeader;
103
172
  private focusRow;