@aceshooting/lyra-ui 16.0.0 → 18.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 (358) hide show
  1. package/CHANGELOG.md +758 -0
  2. package/README.md +2 -2
  3. package/custom-elements.json +1 -1
  4. package/dist/cli/migration-contract.json +1 -1
  5. package/dist/components/agent-tools/browser-frame/browser-frame.class.d.ts +3 -3
  6. package/dist/components/agent-tools/browser-frame/browser-frame.class.js +2 -2
  7. package/dist/components/agent-tools/compare-panel/compare-panel.class.d.ts +2 -2
  8. package/dist/components/agent-tools/compare-panel/compare-panel.class.js +3 -3
  9. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.d.ts +37 -13
  10. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js +2 -2
  11. package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
  12. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +4 -0
  13. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +2 -2
  14. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts +3 -3
  15. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +1 -1
  16. package/dist/components/charts/chart/chart.class.d.ts +117 -17
  17. package/dist/components/charts/chart/chart.class.js +3 -3
  18. package/dist/components/charts/chart/histogram-bin.d.ts +5 -1
  19. package/dist/components/charts/chart/histogram-bin.js +1 -1
  20. package/dist/components/charts/chart/lite-chart.class.d.ts +9 -0
  21. package/dist/components/conversation/code-block/code-block.styles.js +1 -1
  22. package/dist/components/conversation/message-actions/message-actions.styles.js +1 -1
  23. package/dist/components/conversation/model-select/model-select.class.d.ts +13 -4
  24. package/dist/components/conversation/model-select/model-select.class.js +2 -1
  25. package/dist/components/conversation/model-select/model-select.styles.js +1 -1
  26. package/dist/components/conversation/streaming-text/streaming-text-base.class.d.ts +40 -2
  27. package/dist/components/conversation/streaming-text/streaming-text-base.class.js +2 -2
  28. package/dist/components/conversation/streaming-text/streaming-text-core.class.d.ts +27 -3
  29. package/dist/components/conversation/streaming-text/streaming-text-core.class.js +11 -0
  30. package/dist/components/conversation/streaming-text/streaming-text.class.d.ts +31 -3
  31. package/dist/components/conversation/streaming-text/streaming-text.class.js +11 -0
  32. package/dist/components/conversation/suggestion-chips/suggestion-chips.class.d.ts +30 -2
  33. package/dist/components/conversation/suggestion-chips/suggestion-chips.class.js +4 -3
  34. package/dist/components/conversation/suggestion-chips/suggestion-chips.styles.js +1 -1
  35. package/dist/components/conversation/thread-list/thread-list.class.js +1 -1
  36. package/dist/components/conversation/transcript-feed/transcript-feed.class.js +1 -1
  37. package/dist/components/conversation/usage-badge/usage-badge-overlay-runtime.js +1 -1
  38. package/dist/components/conversation/usage-badge/usage-badge.class.d.ts +4 -0
  39. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +16 -4
  40. package/dist/components/conversation/voice-picker/voice-picker.class.js +2 -1
  41. package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
  42. package/dist/components/data/context-meter/context-meter.class.d.ts +23 -4
  43. package/dist/components/data/context-meter/context-meter.class.js +10 -7
  44. package/dist/components/data/context-meter/context-meter.styles.js +1 -1
  45. package/dist/components/data/data-grid/data-grid.class.d.ts +5 -2
  46. package/dist/components/data/data-grid/data-grid.class.js +1 -1
  47. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +32 -5
  48. package/dist/components/data/flow-canvas/flow-canvas.class.js +3 -1
  49. package/dist/components/data/flow-canvas/flow-canvas.styles.js +1 -1
  50. package/dist/components/data/flow-canvas/flow-model.js +1 -1
  51. package/dist/components/data/flow-canvas/flow-types.d.ts +10 -1
  52. package/dist/components/data/gauge/gauge.class.d.ts +15 -2
  53. package/dist/components/data/gauge/gauge.class.js +20 -20
  54. package/dist/components/data/gauge/gauge.styles.js +1 -1
  55. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +14 -5
  56. package/dist/components/data/graph-query-builder/graph-query-builder.class.js +2 -2
  57. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +28 -2
  58. package/dist/components/data/sequence-strip/sequence-strip.class.js +3 -2
  59. package/dist/components/data/sequence-strip/sequence-strip.styles.js +1 -1
  60. package/dist/components/data/table/table.class.d.ts +155 -30
  61. package/dist/components/data/table/table.class.js +6 -4
  62. package/dist/components/data/table/table.styles.js +1 -1
  63. package/dist/components/data/timeline/timeline-item.class.d.ts +9 -1
  64. package/dist/components/data/timeline/timeline-item.class.js +2 -2
  65. package/dist/components/data/word-cloud/word-cloud.class.js +1 -1
  66. package/dist/components/data/word-cloud/word-cloud.styles.js +1 -1
  67. package/dist/components/forms/button/button.class.d.ts +30 -1
  68. package/dist/components/forms/button/button.class.js +2 -2
  69. package/dist/components/forms/checkbox/checkbox.class.d.ts +8 -6
  70. package/dist/components/forms/checkbox/checkbox.class.js +2 -2
  71. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +7 -5
  72. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  73. package/dist/components/forms/color-picker/color-picker.class.d.ts +16 -2
  74. package/dist/components/forms/color-picker/color-picker.class.js +2 -2
  75. package/dist/components/forms/color-picker/color-picker.styles.js +1 -1
  76. package/dist/components/forms/combobox/combobox.class.d.ts +52 -7
  77. package/dist/components/forms/combobox/combobox.class.js +2 -2
  78. package/dist/components/forms/combobox/combobox.styles.js +1 -1
  79. package/dist/components/forms/date-picker/date-input.class.d.ts +4 -0
  80. package/dist/components/forms/date-picker/date-input.class.js +1 -1
  81. package/dist/components/forms/icon-button/icon-button.class.d.ts +20 -3
  82. package/dist/components/forms/icon-button/icon-button.class.js +1 -1
  83. package/dist/components/forms/icon-button/icon-button.styles.js +1 -1
  84. package/dist/components/forms/input/input.class.d.ts +5 -2
  85. package/dist/components/forms/input/input.class.js +1 -1
  86. package/dist/components/forms/input/time-input.class.d.ts +4 -0
  87. package/dist/components/forms/input/time-input.class.js +1 -1
  88. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +11 -5
  89. package/dist/components/forms/locale-picker/locale-picker.class.js +1 -1
  90. package/dist/components/forms/otp-input/otp-input.class.d.ts +7 -2
  91. package/dist/components/forms/otp-input/otp-input.class.js +2 -2
  92. package/dist/components/forms/radio/radio-button.class.d.ts +2 -1
  93. package/dist/components/forms/radio/radio-group.class.d.ts +9 -4
  94. package/dist/components/forms/radio/radio-group.class.js +1 -1
  95. package/dist/components/forms/radio/radio.class.d.ts +13 -7
  96. package/dist/components/forms/radio/radio.class.js +1 -1
  97. package/dist/components/forms/rubric-form/rubric-form.class.d.ts +16 -6
  98. package/dist/components/forms/rubric-form/rubric-form.class.js +2 -2
  99. package/dist/components/forms/select/select.class.d.ts +50 -13
  100. package/dist/components/forms/select/select.class.js +2 -2
  101. package/dist/components/forms/slider/slider.class.d.ts +4 -2
  102. package/dist/components/forms/slider/slider.class.js +1 -1
  103. package/dist/components/forms/switch/switch.class.d.ts +8 -6
  104. package/dist/components/forms/switch/switch.class.js +1 -1
  105. package/dist/components/forms/textarea/textarea.class.d.ts +5 -3
  106. package/dist/components/forms/textarea/textarea.class.js +1 -1
  107. package/dist/components/forms/time-range/time-range.class.d.ts +12 -7
  108. package/dist/components/forms/time-range/time-range.class.js +1 -1
  109. package/dist/components/forms/time-range/time-range.styles.js +1 -1
  110. package/dist/components/forms/token-input/token-input.class.d.ts +6 -4
  111. package/dist/components/forms/token-input/token-input.class.js +1 -1
  112. package/dist/components/layout/app-rail/app-rail-item.class.d.ts +109 -4
  113. package/dist/components/layout/app-rail/app-rail-item.class.js +34 -29
  114. package/dist/components/layout/app-rail/app-rail-item.styles.js +1 -1
  115. package/dist/components/layout/app-rail/app-rail.class.d.ts +25 -3
  116. package/dist/components/layout/app-rail/app-rail.styles.js +1 -1
  117. package/dist/components/layout/app-rail-group/app-rail-group.class.d.ts +2 -2
  118. package/dist/components/layout/app-rail-group/app-rail-group.class.js +2 -2
  119. package/dist/components/layout/carousel/carousel.class.d.ts +1 -1
  120. package/dist/components/layout/carousel/carousel.class.js +1 -1
  121. package/dist/components/layout/details/accordion.class.d.ts +2 -2
  122. package/dist/components/layout/details/accordion.class.js +2 -2
  123. package/dist/components/layout/filter-bar/filter-bar-register.d.ts +1 -0
  124. package/dist/components/layout/filter-bar/filter-bar-register.js +1 -0
  125. package/dist/components/layout/filter-bar/filter-bar.class.d.ts +153 -16
  126. package/dist/components/layout/filter-bar/filter-bar.class.js +8 -5
  127. package/dist/components/layout/menu/menu-item.class.d.ts +3 -3
  128. package/dist/components/layout/menu/menu-item.class.js +3 -3
  129. package/dist/components/layout/menu/menu.class.d.ts +5 -1
  130. package/dist/components/layout/menu/menu.class.js +2 -2
  131. package/dist/components/layout/reorder-list/reorder-item.styles.js +1 -1
  132. package/dist/components/layout/reorder-list/reorder-list.class.js +1 -1
  133. package/dist/components/layout/virtual-list/virtual-list.class.d.ts +107 -2
  134. package/dist/components/layout/virtual-list/virtual-list.class.js +12 -7
  135. package/dist/components/media/attachment-trigger/attachment-trigger.styles.js +1 -1
  136. package/dist/components/media/avatar-group/avatar-group.class.d.ts +12 -1
  137. package/dist/components/media/avatar-group/avatar-group.class.js +2 -2
  138. package/dist/components/media/drop-zone/drop-zone.class.d.ts +32 -11
  139. package/dist/components/media/drop-zone/drop-zone.class.js +2 -2
  140. package/dist/components/media/file-input/file-input.class.d.ts +40 -19
  141. package/dist/components/media/file-input/file-input.class.js +2 -2
  142. package/dist/components/media/map/map.class.d.ts +138 -12
  143. package/dist/components/media/map/map.class.js +25 -20
  144. package/dist/components/media/map/map.styles.js +1 -1
  145. package/dist/components/overlays/callout/callout.styles.js +1 -1
  146. package/dist/components/overlays/dialog/dialog.styles.js +1 -1
  147. package/dist/components/overlays/overlay/dropdown.class.d.ts +13 -3
  148. package/dist/components/overlays/overlay/dropdown.class.js +2 -2
  149. package/dist/components/overlays/overlay/popover.class.d.ts +12 -3
  150. package/dist/components/overlays/overlay/popover.class.js +2 -2
  151. package/dist/components/overlays/rating/rating.class.d.ts +9 -7
  152. package/dist/components/overlays/rating/rating.class.js +1 -1
  153. package/dist/components/retrieval/citation-badge/citation-badge.class.d.ts +5 -1
  154. package/dist/components/retrieval/citation-badge/citation-badge.class.js +1 -1
  155. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js +1 -1
  156. package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts +5 -1
  157. package/dist/components/retrieval/entity-chip/entity-chip.class.js +1 -1
  158. package/dist/components/retrieval/graph-legend/graph-legend.styles.js +1 -1
  159. package/dist/components/retrieval/retrieval-value-format.js +1 -1
  160. package/dist/components/retrieval/source-list/source-list.styles.js +1 -1
  161. package/dist/components/utility/copy-button/copy-button.class.d.ts +23 -11
  162. package/dist/components/utility/copy-button/copy-button.class.js +2 -2
  163. package/dist/components/utility/copy-button/copy-button.styles.js +1 -1
  164. package/dist/components/utility/diff-view/diff-view.styles.js +1 -1
  165. package/dist/components/utility/export-button/export-button.class.d.ts +4 -0
  166. package/dist/components/utility/export-button/export-button.class.js +1 -1
  167. package/dist/components/utility/json-viewer/json-viewer.styles.js +1 -1
  168. package/dist/components/utility/known-date/known-date.class.js +1 -1
  169. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +38 -3
  170. package/dist/components/utility/mention-popover/mention-popover.class.js +2 -1
  171. package/dist/components/utility/mention-popover/mention-popover.styles.js +1 -1
  172. package/dist/components/utility/poll-status/poll-status.styles.js +1 -1
  173. package/dist/components/utility/tour/tour.class.d.ts +4 -0
  174. package/dist/components/utility/tour/tour.class.js +1 -1
  175. package/dist/components/utility/tour/tour.styles.js +1 -1
  176. package/dist/components/viewers/document-preview/document-preview.class.js +2 -2
  177. package/dist/components/viewers/docx-viewer/docx-viewer.class.js +2 -2
  178. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +2 -2
  179. package/dist/components/viewers/highlight-layer/highlight-layer.class.js +2 -2
  180. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +2 -2
  181. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +2 -2
  182. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.js +2 -2
  183. package/dist/components/viewers/xml-viewer/xml-viewer.class.js +2 -2
  184. package/dist/custom-elements-jsx.d.ts +2 -2
  185. package/dist/events.d.ts +20 -13
  186. package/dist/internal/aggregate-file-limits.d.ts +33 -0
  187. package/dist/internal/aggregate-file-limits.js +1 -0
  188. package/dist/internal/catalog-picker.d.ts +15 -2
  189. package/dist/internal/catalog-picker.js +1 -1
  190. package/dist/internal/debounce-controller.d.ts +14 -0
  191. package/dist/internal/debounce-controller.js +1 -1
  192. package/dist/internal/default-strings.generated.d.ts +1 -1
  193. package/dist/internal/default-strings.generated.js +2 -2
  194. package/dist/internal/focus-navigation.d.ts +45 -0
  195. package/dist/internal/focus-navigation.js +1 -1
  196. package/dist/internal/form-associated.js +1 -1
  197. package/dist/internal/initial-slot-collection.d.ts +30 -0
  198. package/dist/internal/initial-slot-collection.js +1 -0
  199. package/dist/internal/intl-cache.js +1 -1
  200. package/dist/internal/invalid-event-alias.d.ts +46 -0
  201. package/dist/internal/invalid-event-alias.js +1 -1
  202. package/dist/internal/localization-runtime.d.ts +24 -0
  203. package/dist/internal/localization-runtime.js +1 -1
  204. package/dist/internal/localization-types.d.ts +1 -1
  205. package/dist/internal/localization.js +1 -1
  206. package/dist/internal/package-metadata.d.ts +1 -1
  207. package/dist/internal/package-metadata.js +1 -1
  208. package/dist/internal/positioning-strategy.d.ts +3 -1
  209. package/dist/internal/state-part.d.ts +49 -0
  210. package/dist/internal/state-part.js +1 -0
  211. package/dist/internal/variants.styles.js +1 -1
  212. package/dist/lyra.d.ts +1 -1
  213. package/dist/lyra.js +1 -1
  214. package/dist/svelte.d.ts +2 -2
  215. package/dist/testing/index.d.ts +1 -1
  216. package/dist/testing/index.js +1 -1
  217. package/dist/testing/lyra-tag-event-map.d.ts +2 -2
  218. package/dist/testing/lyra-tag-event-map.js +1 -1
  219. package/dist/testing/wait-for-mount.d.ts +46 -0
  220. package/dist/testing/wait-for-mount.js +1 -0
  221. package/dist/theme/theme-bootstrap.js +1 -1
  222. package/dist/theme/theme.d.ts +11 -2
  223. package/dist/theme/theme.js +1 -1
  224. package/dist/translations/ar/layout.js +1 -1
  225. package/dist/translations/ar/retrieval.js +1 -1
  226. package/dist/translations/ar/shared.js +1 -1
  227. package/dist/translations/de/layout.js +1 -1
  228. package/dist/translations/de/retrieval.js +1 -1
  229. package/dist/translations/de/shared.js +1 -1
  230. package/dist/translations/es/layout.js +1 -1
  231. package/dist/translations/es/retrieval.js +1 -1
  232. package/dist/translations/es/shared.js +1 -1
  233. package/dist/translations/fa/layout.js +1 -1
  234. package/dist/translations/fa/retrieval.js +1 -1
  235. package/dist/translations/fa/shared.js +1 -1
  236. package/dist/translations/fr/layout.js +1 -1
  237. package/dist/translations/fr/retrieval.js +1 -1
  238. package/dist/translations/fr/shared.js +1 -1
  239. package/dist/translations/he/layout.js +1 -1
  240. package/dist/translations/he/retrieval.js +1 -1
  241. package/dist/translations/he/shared.js +1 -1
  242. package/dist/translations/it/layout.js +1 -1
  243. package/dist/translations/it/retrieval.js +1 -1
  244. package/dist/translations/it/shared.js +1 -1
  245. package/dist/translations/ja/layout.js +1 -1
  246. package/dist/translations/ja/retrieval.js +1 -1
  247. package/dist/translations/ja/shared.js +1 -1
  248. package/dist/translations/pt-BR/layout.js +1 -1
  249. package/dist/translations/pt-BR/retrieval.js +1 -1
  250. package/dist/translations/pt-BR/shared.js +1 -1
  251. package/dist/translations/ro/agent-tools.d.ts +1 -0
  252. package/dist/translations/ro/agent-tools.js +1 -0
  253. package/dist/translations/ro/charts.d.ts +1 -0
  254. package/dist/translations/ro/charts.js +1 -0
  255. package/dist/translations/ro/conversation.d.ts +1 -0
  256. package/dist/translations/ro/conversation.js +1 -0
  257. package/dist/translations/ro/data.d.ts +1 -0
  258. package/dist/translations/ro/data.js +1 -0
  259. package/dist/translations/ro/forms.d.ts +1 -0
  260. package/dist/translations/ro/forms.js +1 -0
  261. package/dist/translations/ro/layout.d.ts +1 -0
  262. package/dist/translations/ro/layout.js +1 -0
  263. package/dist/translations/ro/media.d.ts +1 -0
  264. package/dist/translations/ro/media.js +1 -0
  265. package/dist/translations/ro/overlays.d.ts +1 -0
  266. package/dist/translations/ro/overlays.js +1 -0
  267. package/dist/translations/ro/retrieval.d.ts +1 -0
  268. package/dist/translations/ro/retrieval.js +1 -0
  269. package/dist/translations/ro/shared.d.ts +1 -0
  270. package/dist/translations/ro/shared.js +1 -0
  271. package/dist/translations/ro/utility.d.ts +1 -0
  272. package/dist/translations/ro/utility.js +1 -0
  273. package/dist/translations/ro/viewers.d.ts +1 -0
  274. package/dist/translations/ro/viewers.js +5 -0
  275. package/dist/translations/ro.d.ts +1 -0
  276. package/dist/translations/ro.js +1 -0
  277. package/dist/translations/ru/layout.js +1 -1
  278. package/dist/translations/ru/retrieval.js +1 -1
  279. package/dist/translations/ru/shared.js +1 -1
  280. package/dist/translations/zh-CN/layout.js +1 -1
  281. package/dist/translations/zh-CN/retrieval.js +1 -1
  282. package/dist/translations/zh-CN/shared.js +1 -1
  283. package/dist/utilities/format.d.ts +17 -0
  284. package/dist/utilities/format.js +1 -1
  285. package/dist/vue.d.ts +2 -2
  286. package/llms/components/lr-app-rail-group.md +87 -10
  287. package/llms/components/lr-app-rail-item.md +88 -11
  288. package/llms/components/lr-app-rail.md +88 -11
  289. package/llms/components/lr-attachment-trigger.md +21 -0
  290. package/llms/components/lr-bar-chart.md +3 -2
  291. package/llms/components/lr-bubble-chart.md +3 -2
  292. package/llms/components/lr-button.md +5 -4
  293. package/llms/components/lr-callout.md +10 -0
  294. package/llms/components/lr-card.md +2 -1
  295. package/llms/components/lr-chart.md +43 -12
  296. package/llms/components/lr-citation-badge.md +7 -1
  297. package/llms/components/lr-code-block.md +21 -0
  298. package/llms/components/lr-color-picker.md +12 -7
  299. package/llms/components/lr-combobox.md +20 -1
  300. package/llms/components/lr-confirm-bar.md +36 -7
  301. package/llms/components/lr-context-meter.md +17 -4
  302. package/llms/components/lr-date-input.md +7 -1
  303. package/llms/components/lr-date-picker.md +6 -0
  304. package/llms/components/lr-dialog.md +21 -0
  305. package/llms/components/lr-doughnut-chart.md +3 -2
  306. package/llms/components/lr-drawer.md +10 -0
  307. package/llms/components/lr-drop-zone.md +16 -7
  308. package/llms/components/lr-dropdown-item.md +7 -0
  309. package/llms/components/lr-entity-chip.md +7 -1
  310. package/llms/components/lr-export-button.md +7 -1
  311. package/llms/components/lr-file-input.md +21 -10
  312. package/llms/components/lr-filter-bar.md +177 -18
  313. package/llms/components/lr-flow-canvas.md +16 -9
  314. package/llms/components/lr-gauge.md +22 -2
  315. package/llms/components/lr-histogram.md +7 -2
  316. package/llms/components/lr-icon-button.md +17 -8
  317. package/llms/components/lr-input.md +3 -1
  318. package/llms/components/lr-line-chart.md +3 -2
  319. package/llms/components/lr-lite-chart.md +13 -0
  320. package/llms/components/lr-locale-picker.md +7 -1
  321. package/llms/components/lr-map.md +63 -6
  322. package/llms/components/lr-mention-popover.md +16 -3
  323. package/llms/components/lr-menu-item.md +7 -0
  324. package/llms/components/lr-menu.md +8 -1
  325. package/llms/components/lr-message-actions.md +10 -0
  326. package/llms/components/lr-model-select.md +8 -3
  327. package/llms/components/lr-native-time-input.md +8 -1
  328. package/llms/components/lr-number-input.md +8 -1
  329. package/llms/components/lr-option.md +19 -0
  330. package/llms/components/lr-otp-input.md +6 -0
  331. package/llms/components/lr-pie-chart.md +3 -2
  332. package/llms/components/lr-polar-area-chart.md +3 -2
  333. package/llms/components/lr-prompt-input.md +2 -2
  334. package/llms/components/lr-radar-chart.md +3 -2
  335. package/llms/components/lr-reorder-item.md +12 -0
  336. package/llms/components/lr-reorder-list.md +12 -0
  337. package/llms/components/lr-scatter-chart.md +3 -2
  338. package/llms/components/lr-select.md +19 -2
  339. package/llms/components/lr-sequence-strip.md +10 -4
  340. package/llms/components/lr-streaming-text-core.md +28 -11
  341. package/llms/components/lr-streaming-text.md +41 -6
  342. package/llms/components/lr-suggestion-chips.md +8 -4
  343. package/llms/components/lr-table.md +47 -10
  344. package/llms/components/lr-textarea.md +1 -1
  345. package/llms/components/lr-time-input.md +7 -1
  346. package/llms/components/lr-tool-call-chip.md +7 -1
  347. package/llms/components/lr-tour.md +7 -1
  348. package/llms/components/lr-usage-badge.md +7 -1
  349. package/llms/components/lr-virtual-list.md +53 -0
  350. package/llms/components/lr-voice-picker.md +7 -3
  351. package/llms/shared.md +175 -19
  352. package/llms/tokens.md +17 -1
  353. package/llms-full.txt +1214 -169
  354. package/package.json +43 -3
  355. package/registrations.json +1 -1
  356. package/vscode-css-data.json +1 -1
  357. package/vscode-html-data.json +1 -1
  358. package/web-types.json +1 -1
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [llms-full.txt](../../llms-full.txt)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `dompurify`, `katex`, `marked`, `shiki` — see `llms/peers.md`
12
- - **Themeable via** 2 parts, 2 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 13 parts, 2 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -36,6 +36,32 @@ not a delta — this component does no accumulation or ordering of its own.
36
36
  `<lr-code-block>`/`<lr-markdown>` support. Unset leaves the composed element's own default
37
37
  untouched.
38
38
 
39
+ The rest of `<lr-markdown>`'s configuration surface forwards verbatim too, each defaulting to
40
+ exactly `<lr-markdown>`'s own default so leaving it unset renders identically to before these
41
+ properties existed:
42
+
43
+ - `tabSize: number = 4` (attribute `tab-size`) — forwarded to the composed `<lr-markdown>`'s own
44
+ `tabSize`.
45
+ - `htmlMode: 'sanitize' | 'escape' | 'trusted' = 'sanitize'` (attribute `html-mode`) — forwarded to
46
+ the composed `<lr-markdown>`'s own `htmlMode`.
47
+ - `gfm: boolean = true` — forwarded to the composed `<lr-markdown>`'s own `gfm`.
48
+ - `linkTarget: string | null = '_blank'` (attribute `link-target`) — forwarded to the composed
49
+ `<lr-markdown>`'s own `linkTarget`; the composed element always applies its own
50
+ `rel="noopener noreferrer"` guard whenever a `target` is emitted, including a forwarded
51
+ non-default value, and never a bare `opener`.
52
+ - `internalLinkPrefix: string = ''` (attribute `internal-link-prefix`) — forwarded to the composed
53
+ `<lr-markdown>`'s own `internalLinkPrefix`.
54
+ - `headingOffset: number = 0` (attribute `heading-offset`) — forwarded to the composed
55
+ `<lr-markdown>`'s own `headingOffset`.
56
+ - `highlightCode: boolean = true` (attribute `highlight-code`) — forwarded to the composed
57
+ `<lr-markdown>`'s own `highlightCode`.
58
+ - `headingAnchors: boolean = false` (attribute `heading-anchors`) — forwarded to the composed
59
+ `<lr-markdown>`'s own `headingAnchors`.
60
+ - `math: boolean = false` — forwarded to the composed `<lr-markdown>`'s own `math`; the transitive
61
+ `katex` peer is requested only once this is set.
62
+ - `maxHeight: string = ''` (attribute `max-height`) — forwarded to the composed `<lr-markdown>`'s
63
+ own `maxHeight`.
64
+
39
65
  **Exported helper:** `looksLikeMarkdown(text: string): boolean` — runs a fixed, ordered list of
40
66
  lightweight regexes (ATX heading, fenced code block, `**bold**`, `_italic_`, inline code, bullet
41
67
  list item, numbered list item, `[text](url)` link, blockquote) against the whole string and returns
@@ -57,7 +83,12 @@ never see that update happen. See `<lr-thinking-panel>`'s own reference at `llms
57
83
 
58
84
  **Slots:** none — content renders from `content`, not a slot.
59
85
 
60
- **CSS parts:** `base`, `cursor` (only rendered while `streaming` is `true`)
86
+ **CSS parts:** `base`, `cursor` (only rendered while `streaming` is `true`), plus every part
87
+ `<lr-markdown>` documents forwarded verbatim (no aliasing — none collides with `base`/`cursor`)
88
+ from the composed `<lr-markdown>` in Markdown mode via `exportparts`: `content`, `heading`,
89
+ `paragraph`, `list`, `code-block`, `inline-code`, `link`, `table`, `blockquote`, `img`, `math`. A
90
+ host-level `lr-streaming-text::part(link)`/`::part(img)` rule reaches the rendered `<a>`/`<img>`
91
+ exactly as the same rule does applied directly to `<lr-markdown>`.
61
92
 
62
93
  **Themeable custom properties:** `--lr-inline-cursor-width` (default
63
94
  `var(--lr-size-0-125rem)`, the shared inline cursor width), `--lr-inline-cursor-height` (default
@@ -72,8 +103,9 @@ does not register it separately), so its optional-peer module graph includes `ma
72
103
  stay on the peer-free plain-text path; Markdown rendering lazy-loads `marked` plus the default
73
104
  `dompurify` sanitizer and falls back to readable plain text if either is unavailable. Fenced code
74
105
  can additionally use `shiki`, whose absence only leaves code unhighlighted. The composed Markdown
75
- implementation contains the opt-in `katex` loader, but this wrapper does not enable its `math`
76
- property and therefore never requests `katex` itself.
106
+ implementation contains the opt-in `katex` loader; this wrapper forwards its own `math` property
107
+ (default `false`) to the composed element verbatim, so `katex` is requested only once a consumer
108
+ sets `math` here.
77
109
 
78
110
  ```html
79
111
  <lr-streaming-text id="out" coalesce-ms="80" streaming></lr-streaming-text>
@@ -98,8 +130,11 @@ never be left stranded mid-window, and a stream restarting on a reused element c
98
130
  showing the previous stream's stale final content for the length of the window.
99
131
 
100
132
  Rendering itself is never reimplemented here: Markdown mode composes `<lr-markdown>` directly,
101
- forwarding this component's own `streaming` through as that component's `streaming` hint prop and
102
- `languages` verbatim; plain-text mode renders into a `white-space: pre-wrap` span instead. The
133
+ forwarding this component's own `streaming` through as that component's `streaming` hint prop,
134
+ `languages` verbatim, and the rest of `<lr-markdown>`'s configuration surface verbatim too
135
+ (`tabSize`, `htmlMode`, `gfm`, `linkTarget`, `internalLinkPrefix`, `headingOffset`,
136
+ `highlightCode`, `headingAnchors`, `math`, `maxHeight` — see **Properties** above); plain-text mode
137
+ renders into a `white-space: pre-wrap` span instead. The
103
138
  blinking cursor degrades
104
139
  to a static, always-visible bar under `prefers-reduced-motion: reduce`. In plain-text mode it sits
105
140
  inline at the tail of the final character; in Markdown mode it renders as its own trailing block
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [llms-full.txt](../../llms-full.txt)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 6 parts, 3 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 6 parts, 4 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -25,12 +25,15 @@ identifier disappears, focus repairs to the nearest surviving occurrence without
25
25
  external focus move.
26
26
 
27
27
  **Properties:** `suggestions: readonly LyraChatSuggestion[] = []` (attribute: false) —
28
- `LyraChatSuggestion { suggestionId: string; label: string; icon?: string; detail?: string }`
28
+ `LyraChatSuggestion { suggestionId: string; label: string; icon?: string; detail?: string; disabled?: boolean }`
29
29
  (exported here). Identifiers must be nonempty and unique; invalid/later duplicates are omitted with
30
30
  the first valid occurrence winning. The input is clone-owned, bounded, and frozen; reassign a new
31
31
  array after changing the sequence or a row. `icon` is an optional
32
32
  peer-neutral literal hint (for example, an emoji), rendered decoratively before the text, and
33
- `detail` is an optional secondary line. Empty renders nothing at all. `wrap: boolean = false`
33
+ `detail` is an optional secondary line. `disabled` marks a suggestion non-actionable: its chip
34
+ renders a genuinely disabled `<button>` (no roving tab stop, no hover/press affordance), activating
35
+ it emits nothing, and arrow-key/Home/End roving navigation steps past it. Empty renders nothing at
36
+ all. `wrap: boolean = false`
34
37
  (reflected) — wraps into multiple rows instead of a single horizontally scrollable line. `label?:
35
38
  string` — accessible name for the group. Omitting it uses the localized `suggestionsLabel`; an
36
39
  explicit empty string intentionally leaves the group unnamed.
@@ -49,7 +52,8 @@ cannot do (once the chips wrap, the row fills the available inline size and each
49
52
  start). `--lr-suggestion-chips-hover-bg` (default `var(--lr-color-brand-quiet)`) — a `chip`'s
50
53
  background on hover. `--lr-suggestion-chips-hover-border` (default `var(--lr-color-brand)`) — a
51
54
  `chip`'s border color on hover. All three are declared as `var()` fallbacks at the point of use, not
52
- on `:host`. Plus shared tokens `--lr-space-xs/-m/-2xs`,
55
+ on `:host`. `--lr-suggestion-chips-disabled-opacity` (default `0.5`) — opacity of a chip whose
56
+ suggestion sets `disabled`. Plus shared tokens `--lr-space-xs/-m/-2xs`,
53
57
  `--lr-color-border/-surface/-text/-text-quiet`, `--lr-radius-pill`, `--lr-font-size-xs`,
54
58
  `--lr-focus-ring-width/-color/-offset`.
55
59
 
@@ -61,9 +61,11 @@ unchanged.
61
61
  headerCell?, width?, minWidth?, maxWidth?,
62
62
  resizable?, sortable?, sortValue?, defaultSortDir?: 'asc'|'desc', align?: 'start'|'end',
63
63
  priority?: 'medium'|'low',
64
- sticky?: 'start'|'end', editTrigger?: 'double-click'|'always', editValue?, editType?: 'text'|'number'|'select',
64
+ sticky?: 'start'|'end', editTrigger?: 'double-click'|'always', editValue?, editLabel?: (row) => string,
65
+ editType?: 'text'|'number'|'select',
65
66
  editOptions?: { value: string; label: string }[], footer?, cellStyle?, heatValue?,
66
- cell: (row) => unknown }` —
67
+ cell: (row) => unknown }` — `cell` is required for every `editTrigger` except `'always'`, whose
68
+ persistent editor renders unconditionally so the table's render path never falls back to it —
67
69
  `sortValue(row) => string | number | null | undefined` supplies the comparable value backing
68
70
  client-mode sorting for that column: a finite number sorts numerically, a string sorts through an
69
71
  `Intl.Collator` built from the component's effective locale with `numeric: true` (so `item2`
@@ -103,13 +105,15 @@ cell: (row) => unknown }` —
103
105
  own ramp-token convention; `cellStyle` is applied directly to the generated `<td>` via `styleMap` — e.g. a computed heat-tint
104
106
  background a `cell()`-returned inner element can't paint into the cell's own padding — omit it for
105
107
  no per-cell style override (the default, unchanged output);
106
- `editTrigger: 'double-click'` opens a native editor on that cell's double-click (one cell at a
107
- time), while `'always'` renders a persistent editor in every body cell from first paint, for a
108
+ `editTrigger: 'double-click'` opens a native editor on that cell's double-click, `F2`, or `Enter`
109
+ (one cell at a time), while `'always'` renders a persistent editor in every body cell from first paint, for a
108
110
  settings/rate-style column meant to be typed straight into — while `editValue` supplies the editor
109
111
  value and `editType` selects `'text'`, `'number'`, or `'select'` (a native `<select>` populated
110
112
  from `editOptions: { value: string; label: string }[]`, one `<option>` per entry in order; a
111
113
  `'select'` column with no `editOptions` renders an empty, valueless `<select>` instead of
112
- throwing)
114
+ throwing); `editLabel(row) => string`, read once per row exactly like `editValue`/`cellTitle`,
115
+ overrides that editor's accessible name — omit it and every editor in the column shares the same
116
+ interpolated `tableEditCell` name instead (see the accessibility note under `editTrigger` below)
113
117
  `cellTitle(row) => string | undefined` is the `title` analogue of `cellStyle`, applied directly to
114
118
  the generated `<td>` — e.g. the untruncated text behind an ellipsized cell, or a formatted
115
119
  timestamp behind a relative one;
@@ -131,8 +135,21 @@ cell: (row) => unknown }` —
131
135
  Enter commits and closes, Escape cancels and closes, and blur-after-change commits. `'always'`
132
136
  renders an editor in
133
137
  every body cell of that column, permanently:
134
- - **Focus model.** Each editor is a plain tab stop — no `tabindex` of its own exactly like the
135
- existing row-expand toggle, and stays _outside_ the header/row roving-tabindex model. Tab walks
138
+ - **Keyboard entry (`'double-click'` columns).** The resting (not-currently-editing) cell of a
139
+ `'double-click'` column is its own roving-focus stop — `tabindex="-1"`, carrying `[data-editable]`
140
+ — reachable once the row itself has focus: ArrowRight (ArrowLeft under RTL) enters at the first
141
+ editable cell in the row and steps forward through any further ones; ArrowLeft (ArrowRight under
142
+ RTL) steps back and, from the first editable cell, returns focus to the row. None of this is a Tab
143
+ stop — a table with a `'double-click'` column gains no new entry in the page's Tab order, only a
144
+ new arrow-reachable one — and a table with no `editTrigger` column at all renders no `tabindex`/
145
+ `[data-editable]` anywhere. `F2` or `Enter` on the focused cell opens its editor; `Enter` on the
146
+ row itself (no cell focused) still only activates the row. `editCell(rowKey, columnKey)` (see
147
+ Methods above) is the same open action as a public method. Closing the editor, by commit or by
148
+ cancel, returns focus to the cell that opened it.
149
+ - **Focus model (`'always'` columns).** Each editor is a plain tab stop — no `tabindex` of its own
150
+ — exactly like the
151
+ existing row-expand toggle, and stays _outside_ the header/row/cell roving-tabindex model. Tab
152
+ walks
136
153
  down the column; arrow keys still navigate the grid from a row's own roving stop, and act as
137
154
  ordinary caret movement once focus is inside a field. Non-editable columns are unaffected.
138
155
  - **Value binding.** A persistent `'text'`/`'number'` editor binds its `value` as a **content
@@ -151,8 +168,14 @@ cell: (row) => unknown }` —
151
168
  `<input>` (the typed value rides along) and the table restores focus to the same logical cell
152
169
  afterwards. If the focused row leaves the rendered page entirely (pagination, filtering), focus
153
170
  is simply lost rather than yanked to whichever unrelated row now sits in that position.
154
- - Each editor keeps its own interpolated `tableEditCell` accessible name (`Edit {column}`), so a
155
- column of otherwise-identical inputs is still individually named to a screen reader.
171
+ - **Accessible name.** Each editor's name is `columns[].editLabel(row)` when the column defines
172
+ it, or otherwise the interpolated `tableEditCell` string (`Edit {column}`) identical for every
173
+ row in that column, since the default has no row context. That default is adequate for
174
+ `'double-click'`, where at most one editor is ever open, but not for `'always'`: every row's
175
+ editor there is a permanent, individually focusable Tab stop, so leaving `editLabel` unset on an
176
+ `'always'` column exposes as many identically named controls as there are rows (e.g. fifty "Edit
177
+ Status" comboboxes), failing WCAG 2.4.6 and 1.3.1. Define `editLabel` for any `'always'` column
178
+ to give each row's editor its own name.
156
179
  - `hasHiddenPriorityColumns: boolean = false` (attribute `has-hidden-priority-columns`, reflected) —
157
180
  computed/read-only and true only while a priority column is actually hidden. It becomes false
158
181
  when `priorityColumnsVisible` reveals the columns. Measured via a `ResizeObserver` on
@@ -290,6 +313,14 @@ cell: (row) => unknown }` —
290
313
  rendered panel anyway, `expandedContentElement(rowKey)` (below) resolves that `<td>`;
291
314
  `rowElement(rowKey)` does not, because the panel is a sibling `<tr>` rather than part of the row
292
315
  - `canExpand?: (row: T) => boolean` (attribute: false) — optional per-row gate for expansion
316
+ - `rowExpandLabel?: (row: T, expanded: boolean) => string | undefined` (attribute: false) —
317
+ accessible name for one row's expand/collapse chevron, read once per render for that row,
318
+ exactly like a column's `editLabel`/`cellTitle`; consumer-owned text used verbatim, never
319
+ passed through localization. Omit it and every chevron shares the same localized
320
+ `expand`/`collapse` name, which carries no row context — fine for a handful of rows, but each
321
+ chevron is its own Tab stop, so a long table otherwise announces the same two names over and
322
+ over with no way to tell the rows apart. There is no default row context to derive one from
323
+ here: this component has no row-header notion (`rowKey` is an opaque identity, not a label)
293
324
  - `expansionMode: 'none'|'single'|'multiple' = 'none'` (attribute `expansion-mode`, reflected) —
294
325
  mirrors `selectionMode` member for member, for expansion. The default `'none'` keeps
295
326
  `expandedRowKeys` fully consumer-controlled: an activation only reports `lr-row-expand-toggle`.
@@ -396,8 +427,14 @@ cell: (row) => unknown }` —
396
427
  - `expandedContentElement(rowKey)` — the rendered `[part='expanded-cell']` holding that row's
397
428
  `expandedContent(row)` output, or `null` when the row is not currently rendered, is not expanded,
398
429
  or the table sets no `expandedContent`
430
+ - `editCell(rowKey, columnKey)` — opens the inline editor at that row/column pair, exactly as a
431
+ double-click, `F2`, or `Enter` on the cell's own focus stop would (see `columns[].editTrigger`
432
+ below) — the entry point for a consumer's own key binding or menu action. A no-op for an unknown
433
+ row key, an unknown column key, or a column with no `editTrigger`. For an `editTrigger: 'always'`
434
+ column (already open from first paint) it moves focus into that editor instead of opening
435
+ anything.
399
436
 
400
- All three exist for code that has to reach content a `cell(row)`/`expandedContent(row)` callback
437
+ The first three exist for code that has to reach content a `cell(row)`/`expandedContent(row)` callback
401
438
  rendered into this component's shadow root — measuring it, scrolling it into view, or applying a
402
439
  style `::part()` cannot express, since only pseudo-classes may follow a part selector. One method per
403
440
  callback, and the split is not cosmetic: the expansion panel is a **sibling** `<tr part='expanded-row'>`
@@ -82,7 +82,7 @@ disabled state.
82
82
  | `enterKeyHint` | `enterkeyhint` | `string` | `''` | Virtual-keyboard Enter-key hint forwarded to the native `<textarea>`. |
83
83
  | `minlength` | `minlength` | `number \| undefined` | `undefined` | Minimum text length; forwarded to the native `<textarea>` and reported as `validity.tooShort`. |
84
84
  | `maxlength` | `maxlength` | `number \| undefined` | `undefined` | Maximum text length; forwarded to the native `<textarea>` (which also stops typing past it) and reported as `validity.tooLong`. |
85
- | `debounce` | `debounce` | `number \| undefined` | `undefined` | How long (ms) to wait after the last keystroke before emitting one `lr-input-settled`, while `input`/`lr-input` keep firing per keystroke as before. Omitted, `0`, or non-finite means no debounce: `lr-input-settled` never fires. A pending debounce is flushed immediately by `change`/Enter/blur and cancelled with no stray settle by disconnection and a programmatic `value` write. Shares its `DebounceController` primitive with `lr-filter-bar`'s own per-filter `debounce` and with `lr-input`'s identical property. |
85
+ | `debounce` | `debounce` | `number \| undefined` | `undefined` | How long (ms) to wait after the last keystroke before emitting one `lr-input-settled`, while `input`/`lr-input` keep firing per keystroke as before. Omitted, `0`, or non-finite means no debounce: `lr-input-settled` never fires. A pending debounce is flushed immediately by `change`/Enter/blur and cancelled with no stray settle by disconnection and by a programmatic `value` write that changes the value. A write of the value already held leaves it pending, so a framework binding that writes the just-typed value back on each render (the controlled-input pattern) still settles. Shares its `DebounceController` primitive with `lr-filter-bar`'s own per-filter `debounce` and with `lr-input`'s identical property. |
86
86
  | `name` | `name` | `string` | `''` | Form field name. |
87
87
  | `disabled` | `disabled` | `boolean` | `false` | Disables the control. |
88
88
  | `required` | `required` | `boolean` | `false` | Participates in native constraint validation. |
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [llms-full.txt](../../llms-full.txt)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 23 parts, 34 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 23 parts, 35 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -178,6 +178,12 @@ mode the raised tone is already distinct from the page, so this panel never had
178
178
  reads-as-a-hole problem the family exists to fix. Setting `--lr-overlay-surface` still repaints it
179
179
  along with every other popup.
180
180
 
181
+ `--lr-positioning-strategy` (16.0.0) — the `popup` panel reads this same cascading
182
+ `absolute`/`fixed` override documented on `<lr-popover>` when it is (re)positioned, falling back to
183
+ its own `fixed` default when nothing is set. There is no per-instance `positioning-strategy`
184
+ property on `<lr-time-input>`; set the custom property on `:root`, a theme, or one clipping
185
+ ancestor to change every unset time input beneath it.
186
+
181
187
  ```html
182
188
  <lr-time-input
183
189
  label="Start time"
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [llms-full.txt](../../llms-full.txt)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 10 parts, 9 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 10 parts, 10 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -86,6 +86,12 @@ The anchored detail tooltip is a floating surface and paints from the **shared o
86
86
  declared on `:host`, so one declaration on `:root` — or on any ancestor, to scope it — retints this
87
87
  surface together with every other floating surface in the library. `--lr-overlay-radius` (default `var(--lr-radius)`) is the matching corner radius.
88
88
 
89
+ `--lr-positioning-strategy` (16.0.0) — the detail tooltip reads this same cascading
90
+ `absolute`/`fixed` override documented on `<lr-popover>` when it is (re)positioned, falling back to
91
+ its own `fixed` default when nothing is set. There is no per-instance `positioning-strategy`
92
+ property on `<lr-tool-call-chip>`; set the custom property on `:root`, a theme, or one clipping
93
+ ancestor to change every unset chip beneath it.
94
+
89
95
  **Optional peer deps:** none.
90
96
 
91
97
  ```html
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [llms-full.txt](../../llms-full.txt)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 12 parts, 6 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 12 parts, 7 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -104,6 +104,12 @@ shared ceiling that keeps any floating surface inside a narrow viewport. `lr-tou
104
104
  retuning `--lr-theme-popover-viewport-clamp` once at `:root` narrows or widens all three together
105
105
  rather than per component.
106
106
 
107
+ `--lr-positioning-strategy` (16.0.0) — the step popover reads this same cascading `absolute`/`fixed`
108
+ override documented on `<lr-popover>` when a step is (re)positioned, falling back to its own `fixed`
109
+ default when nothing is set. There is no per-instance `positioning-strategy` property on `<lr-tour>`;
110
+ set the custom property on `:root`, a theme, or one clipping ancestor to change every unset tour
111
+ beneath it.
112
+
107
113
  **Known gotchas:**
108
114
 
109
115
  - By default the spotlighted target is **non-interactive**: it stays visible and announceable (not
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [llms-full.txt](../../llms-full.txt)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 7 parts, 4 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 7 parts, 5 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -56,6 +56,12 @@ family** (16.0.0): `--lr-overlay-surface` (default `var(--lr-color-surface-overl
56
56
  ancestor, to scope it — retints this surface together with every other floating surface in the
57
57
  library. `--lr-overlay-radius` (default `var(--lr-radius)`) is the matching corner radius.
58
58
 
59
+ `--lr-positioning-strategy` (16.0.0) — the breakdown tooltip reads this same cascading
60
+ `absolute`/`fixed` override documented on `<lr-popover>` when it is (re)positioned, falling back to
61
+ its own `fixed` default when nothing is set. There is no per-instance `positioning-strategy`
62
+ property on `<lr-usage-badge>`; set the custom property on `:root`, a theme, or one clipping
63
+ ancestor to change every unset usage badge beneath it.
64
+
59
65
  ```html
60
66
  <lr-chat-message message-role="assistant" status="sent">
61
67
  <lr-usage-badge
@@ -101,6 +101,17 @@ list's `base` scroll container exposes horizontal scrolling for that explicit op
101
101
  number `56` and fixes every row to that many pixels. Property callers assign a number, not a
102
102
  numeric string. Anything else (non-numeric, zero, negative, non-finite) safely canonicalizes to
103
103
  `'auto'` rather than throwing.
104
+ - `rowProjection: 'shadow' | 'light' = 'shadow'` (attribute `row-projection`) — where
105
+ `renderItem`'s output is instantiated. `'shadow'` (default) stamps it inside this component's own
106
+ shadow root, so only inherited custom properties and the public row parts reach it. `'light'`
107
+ renders the windowed rows into the host's own light DOM instead, assigned into the shadow viewport
108
+ through internal named slots, so ordinary document CSS styles a virtualized row exactly as it
109
+ styles the same row unvirtualized. The component keeps owning windowing, measurement, spacer
110
+ sizing, `scrollToIndex()`, the external-scroller mode and the ARIA contract either way, and
111
+ positioning stays on the shadow-side `[part="row"]` wrapper that document CSS cannot select — so
112
+ consumer styles can never break windowing. Any other value canonicalizes to `'shadow'`. Left
113
+ unset, the rendered output is byte-identical to before and the host's light DOM stays empty.
114
+ See **Light-DOM row projection** below for the trade-offs it carries.
104
115
  - `itemRole: 'listitem' | 'row' = 'listitem'` (attribute `item-role`) — `'listitem'` (default)
105
116
  preserves the plain `role="list"`/`role="listitem"` mapping with `aria-setsize`/`aria-posinset`.
106
117
  `'row'` additionally maps `[part="base"]` to `role="rowgroup"`, `[part="spacer"]` to
@@ -355,4 +366,46 @@ default estimate with sparse `ResizeObserver` measurements for rows that have ac
355
366
  decides: groups render before the rows, so an active row wins while (and only while) it needs to,
356
367
  which is right — a group header is a non-interactive `pointer-events: none` label.
357
368
 
369
+ ### Light-DOM row projection
370
+
371
+ `rowProjection="light"` exists for one shape: an application whose list rows are already styled by
372
+ its own global stylesheet, and which therefore could not adopt virtualization without rehoming a
373
+ dozen descendant rules per row into a new custom element or a growing set of custom properties. In
374
+ projection mode the windowed rows render into the host's own light DOM, so ordinary document CSS
375
+ reaches row content directly.
376
+
377
+ Positioning, measurement and semantics stay where they were. The `[part="row"]` wrapper remains in
378
+ the shadow root and keeps `position: absolute`, the per-frame `transform`, `role`, `aria-setsize`/
379
+ `aria-posinset` (or `aria-rowindex`) and the `ResizeObserver` box — document CSS cannot select it,
380
+ so consumer styles can never break windowing. The whole part vocabulary (`base`, `spacer`, `row`,
381
+ `group`, `sticky-group`) keeps matching in both modes, and `row-height="auto"` still measures
382
+ projected content because the light row is an ordinary in-flow child of that wrapper.
383
+
384
+ `projectedRows: HTMLElement[]` returns the projected light-DOM row wrappers in item order, and is
385
+ empty outside projection mode. The exported type is `LyraVirtualListRowProjection`; the reserved
386
+ attributes marking library-owned light-DOM nodes are exported as `VIRTUAL_LIST_ROW_ATTRIBUTE`
387
+ (`data-lr-virtual-list-row`) and `VIRTUAL_LIST_STICKY_ATTRIBUTE` (`data-lr-virtual-list-sticky`).
388
+
389
+ **Known gotchas, all inherent to handing the cascade back to the consumer:**
390
+
391
+ - **One component-owned wrapper sits between the host and your markup.** A slot cannot assign a text
392
+ node or a multi-root fragment by attribute, so each row's content lives inside a wrapper carrying
393
+ `data-lr-virtual-list-row`. Descendant selectors (`lr-virtual-list .row-title`) port unchanged;
394
+ child combinators (`lr-virtual-list > .row`), `:nth-child`, `:first-child` and sibling combinators
395
+ written against the unvirtualized markup do not. `:nth-child` on the wrappers reflects the current
396
+ *window*, not the item index.
397
+ - **`closest('[part="row"]')` stops resolving.** A delegated listener on the host now sees an
398
+ un-retargeted `event.target` inside the light DOM. Use `closest('[data-lr-virtual-list-row]')`.
399
+ - **The document cascade now reaches row content**, including resets and element-level rules that
400
+ previously could not, so a projected row can look different from the same row in shadow mode.
401
+ - **Per-row light-DOM state does not survive a disconnect/reconnect.** Disconnect removes the
402
+ projected rows completely (no rows, no markers, no anchor left behind), so a reparenting move
403
+ rebuilds them. Scroll position, measurements and the window are unaffected — they live in
404
+ component state, not in the rows.
405
+ - **Projection activates one task after hydration.** A server render has no DOM to project into, so
406
+ the first window is shadow-rendered, hydration matches the server markup, and the rows then swap
407
+ into the light DOM on the next task.
408
+ - **A row taken out of flow collapses its wrapper.** `position: fixed`/`absolute` or
409
+ `display: none` on your own row leaves nothing for the wrapper to measure.
410
+
358
411
  ---
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [llms-full.txt](../../llms-full.txt)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 17 parts, 27 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 17 parts, 28 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -43,8 +43,11 @@ popup. Ordinary keyboard behavior resumes after composition.
43
43
  **Exported types:** `LyraVoiceCatalogEntry extends LyraCatalogEntry { language?: string;
44
44
  description?: string; previewUrl?: string }` — `language`/`description` render as a quiet
45
45
  `[part="option-meta"]` second line. Voice catalogs use the shared
46
- `LyraCatalog<LyraVoiceCatalogEntry>` homogeneous readonly union documented under `lr-model-select`.
47
- The public `size` property uses `LyraSize`, including the long-form aliases.
46
+ `LyraCatalog<LyraVoiceCatalogEntry>` homogeneous readonly union documented under `lr-model-select`,
47
+ including the shared `disabled` field: a disabled voice row cannot be selected by click or keyboard
48
+ and is stepped over by arrow-key/Home/End navigation, but its own `[part="option-preview"]` stays
49
+ independently clickable, since previewing a voice is a separate affordance from selecting it. The
50
+ public `size` property uses `LyraSize`, including the long-form aliases.
48
51
  `LyraVoicePickerSelectionDirection = 'forward' | 'backward' | 'none'` is the native
49
52
  selection direction exposed in free-text mode.
50
53
 
@@ -204,6 +207,7 @@ trigger), `expand-icon`, `empty`, `hint`, `error`.
204
207
  - `--lr-voice-picker-option-selected-font-weight` — Selected option label weight. Default: `var(--lr-font-weight-semibold)`.
205
208
  - `--lr-voice-picker-option-synthetic-border-style` — Synthetic stale-value row border style. Default: `dashed`.
206
209
  - `--lr-voice-picker-option-synthetic-border-color` — Synthetic stale-value row border color. Default: `var(--lr-color-border)`.
210
+ - `--lr-voice-picker-option-disabled-opacity` — Opacity of an option row whose catalog entry sets `disabled`. Default: `0.5`.
207
211
  - `--lr-voice-picker-option-synthetic-font-style` — Synthetic stale-value option-label font style. Default: `italic`.
208
212
  - `--lr-voice-picker-preview-hover-bg` — Preview hover fill. Default: `var(--lr-color-brand-quiet)`.
209
213
  - `--lr-voice-picker-preview-hover-color` — Preview hover icon. Default: `var(--lr-color-brand)`.