@aceshooting/lyra-ui 9.1.1 → 11.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 (585) hide show
  1. package/CHANGELOG.md +785 -0
  2. package/custom-elements.json +1 -1
  3. package/design-tokens.json +13 -0
  4. package/dist/cli/migrate-wa.mjs +216 -1
  5. package/dist/cli/migration-contract.json +1 -1
  6. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +1 -1
  7. package/dist/components/agent-tools/activity-feed/activity-feed.styles.js +0 -16
  8. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.js +1 -1
  9. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.js +7 -5
  10. package/dist/components/agent-tools/agent-run/agent-run.class.js +2 -2
  11. package/dist/components/agent-tools/agent-run/agent-run.styles.js +0 -13
  12. package/dist/components/agent-tools/agent-trace/agent-trace.styles.js +7 -4
  13. package/dist/components/agent-tools/approval-queue/approval-queue.styles.js +7 -5
  14. package/dist/components/agent-tools/artifact-panel/artifact-panel.styles.js +0 -3
  15. package/dist/components/agent-tools/browser-frame/browser-frame.styles.js +3 -5
  16. package/dist/components/agent-tools/commit-card/commit-card.styles.js +0 -10
  17. package/dist/components/agent-tools/compare-panel/compare-panel.styles.js +11 -6
  18. package/dist/components/agent-tools/confirm-bar/confirm-bar.styles.js +0 -46
  19. package/dist/components/agent-tools/eval-dataset/eval-dataset.styles.js +0 -7
  20. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js +2 -2
  21. package/dist/components/agent-tools/prompt-studio/prompt-studio.styles.js +0 -15
  22. package/dist/components/agent-tools/result-card/result-card.styles.js +0 -7
  23. package/dist/components/agent-tools/result-card/result-field.styles.js +0 -5
  24. package/dist/components/agent-tools/schema-viewer/schema-viewer.styles.js +0 -3
  25. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +0 -15
  26. package/dist/components/agent-tools/stack-trace/stack-trace.styles.js +0 -20
  27. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +2 -2
  28. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js +0 -3
  29. package/dist/components/agent-tools/task-list/task-list.styles.js +0 -15
  30. package/dist/components/agent-tools/terminal/terminal.class.d.ts +11 -6
  31. package/dist/components/agent-tools/terminal/terminal.class.js +4 -4
  32. package/dist/components/agent-tools/terminal/terminal.styles.js +0 -46
  33. package/dist/components/agent-tools/test-results/test-results.class.js +2 -2
  34. package/dist/components/agent-tools/test-results/test-results.styles.js +0 -5
  35. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +0 -41
  36. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.styles.js +0 -41
  37. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.styles.js +0 -30
  38. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +6 -6
  39. package/dist/components/agent-tools/tool-param-form/tool-param-form.styles.js +0 -5
  40. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +0 -20
  41. package/dist/components/agent-tools/tool-result-view/tool-result-view.styles.js +0 -4
  42. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.styles.js +0 -21
  43. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +7 -31
  44. package/dist/components/charts/chart/box-plot.class.d.ts +27 -0
  45. package/dist/components/charts/chart/box-plot.class.js +14 -4
  46. package/dist/components/charts/chart/box-plot.styles.js +28 -20
  47. package/dist/components/charts/chart/chart-colors.d.ts +1 -1
  48. package/dist/components/charts/chart/chart-colors.js +1 -1
  49. package/dist/components/charts/chart/chart-core-loader.d.ts +1 -0
  50. package/dist/components/charts/chart/chart-core-loader.js +1 -1
  51. package/dist/components/charts/chart/chart-feature-loader.d.ts +35 -0
  52. package/dist/components/charts/chart/chart-feature-loader.js +1 -1
  53. package/dist/components/charts/chart/chart.class.d.ts +120 -0
  54. package/dist/components/charts/chart/chart.class.js +16 -6
  55. package/dist/components/charts/chart/chart.styles.js +28 -27
  56. package/dist/components/charts/chart/lite-chart.class.d.ts +20 -1
  57. package/dist/components/charts/chart/lite-chart.class.js +4 -4
  58. package/dist/components/charts/chart/lite-chart.styles.js +0 -27
  59. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +20 -0
  60. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +3 -1
  61. package/dist/components/conversation/agent-workspace/agent-workspace.styles.js +3 -0
  62. package/dist/components/conversation/audio-visualizer/audio-visualizer.styles.js +0 -7
  63. package/dist/components/conversation/branch-picker/branch-picker.styles.js +0 -3
  64. package/dist/components/conversation/chat-composer/chat-composer.styles.js +0 -51
  65. package/dist/components/conversation/chat-message/chat-message.styles.js +7 -35
  66. package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
  67. package/dist/components/conversation/chat-viewport/chat-viewport.styles.js +0 -33
  68. package/dist/components/conversation/checkpoint/checkpoint.class.js +1 -1
  69. package/dist/components/conversation/checkpoint/checkpoint.styles.js +0 -3
  70. package/dist/components/conversation/code-block/code-block-shared.d.ts +5 -2
  71. package/dist/components/conversation/code-block/code-block.class.js +1 -1
  72. package/dist/components/conversation/code-block/code-block.styles.js +4 -95
  73. package/dist/components/conversation/code-block/code-loader.d.ts +11 -0
  74. package/dist/components/conversation/code-block/code-loader.js +1 -1
  75. package/dist/components/conversation/code-block/shiki-types.d.ts +12 -0
  76. package/dist/components/conversation/code-block/shiki-types.js +1 -1
  77. package/dist/components/conversation/conversation-item/conversation-item.styles.js +8 -54
  78. package/dist/components/conversation/generation-metrics/generation-metrics.class.js +2 -2
  79. package/dist/components/conversation/generation-metrics/generation-metrics.styles.js +0 -17
  80. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  81. package/dist/components/conversation/markdown/markdown.styles.js +0 -41
  82. package/dist/components/conversation/message-actions/message-actions.styles.js +0 -3
  83. package/dist/components/conversation/message-feedback/message-feedback.styles.js +0 -35
  84. package/dist/components/conversation/message-parts/message-parts.class.d.ts +1 -1
  85. package/dist/components/conversation/message-parts/message-parts.styles.js +0 -5
  86. package/dist/components/conversation/model-select/model-select.class.js +3 -3
  87. package/dist/components/conversation/model-select/model-select.styles.js +12 -47
  88. package/dist/components/conversation/model-settings-panel/model-settings-panel.styles.js +0 -6
  89. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +3 -0
  90. package/dist/components/conversation/prompt-input/prompt-input.styles.js +0 -10
  91. package/dist/components/conversation/push-to-talk/push-to-talk.styles.js +0 -8
  92. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js +1 -11
  93. package/dist/components/conversation/stream-status/stream-status.styles.js +0 -16
  94. package/dist/components/conversation/streaming-text/streaming-text.styles.js +0 -15
  95. package/dist/components/conversation/suggestion-chips/suggestion-chips.styles.js +0 -5
  96. package/dist/components/conversation/thread-list/thread-list.styles.js +0 -23
  97. package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts +16 -4
  98. package/dist/components/conversation/transcript-feed/transcript-feed.class.js +1 -1
  99. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +0 -1
  100. package/dist/components/conversation/typing-indicator/typing-indicator.styles.js +0 -23
  101. package/dist/components/conversation/usage-badge/usage-badge.styles.js +0 -3
  102. package/dist/components/conversation/voice-picker/voice-picker.class.js +3 -3
  103. package/dist/components/conversation/voice-picker/voice-picker.styles.js +9 -29
  104. package/dist/components/conversation/widget-renderer/resolve.d.ts +2 -0
  105. package/dist/components/conversation/widget-renderer/resolve.js +1 -1
  106. package/dist/components/data/calendar/calendar.class.d.ts +15 -2
  107. package/dist/components/data/calendar/calendar.class.js +2 -2
  108. package/dist/components/data/calendar/calendar.styles.js +2 -28
  109. package/dist/components/data/condition-builder/condition-builder.class.d.ts +10 -6
  110. package/dist/components/data/condition-builder/condition-builder.class.js +2 -2
  111. package/dist/components/data/condition-builder/condition-builder.styles.js +0 -6
  112. package/dist/components/data/context-meter/context-meter.styles.js +0 -24
  113. package/dist/components/data/data-grid/data-grid.class.js +3 -3
  114. package/dist/components/data/data-grid/data-grid.styles.js +0 -22
  115. package/dist/components/data/document-library/document-library.class.js +2 -2
  116. package/dist/components/data/document-library/document-library.styles.js +0 -4
  117. package/dist/components/data/env-list/env-list.class.js +1 -1
  118. package/dist/components/data/env-list/env-list.styles.js +7 -4
  119. package/dist/components/data/file-tree/file-tree.class.d.ts +12 -0
  120. package/dist/components/data/flow-canvas/flow-canvas.styles.js +12 -19
  121. package/dist/components/data/flow-controls/flow-controls.class.js +2 -2
  122. package/dist/components/data/flow-controls/flow-controls.styles.js +3 -36
  123. package/dist/components/data/flow-minimap/flow-minimap.class.js +1 -1
  124. package/dist/components/data/flow-minimap/flow-minimap.styles.js +0 -9
  125. package/dist/components/data/flow-node/flow-node.styles.js +0 -23
  126. package/dist/components/data/flow-run-status/flow-run-status.class.js +1 -1
  127. package/dist/components/data/flow-run-status/flow-run-status.styles.js +0 -7
  128. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +0 -7
  129. package/dist/components/data/graph-query-builder/graph-query-builder.class.js +1 -1
  130. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +0 -10
  131. package/dist/components/data/heatmap/heatmap-scale.d.ts +20 -0
  132. package/dist/components/data/heatmap/heatmap-scale.js +1 -1
  133. package/dist/components/data/heatmap/heatmap.class.d.ts +117 -1
  134. package/dist/components/data/heatmap/heatmap.class.js +2 -2
  135. package/dist/components/data/heatmap/heatmap.styles.js +0 -54
  136. package/dist/components/data/pagination/pagination.styles.js +23 -46
  137. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +34 -1
  138. package/dist/components/data/sequence-strip/sequence-strip.class.js +5 -2
  139. package/dist/components/data/sequence-strip/sequence-strip.styles.js +14 -20
  140. package/dist/components/data/sparkline/sparkline.class.js +1 -1
  141. package/dist/components/data/stat/stat.styles.js +0 -67
  142. package/dist/components/data/table/table.class.d.ts +42 -3
  143. package/dist/components/data/table/table.class.js +4 -4
  144. package/dist/components/data/table/table.styles.js +20 -91
  145. package/dist/components/data/timeline/timeline-item.styles.js +0 -30
  146. package/dist/components/data/timeline/timeline.class.d.ts +89 -1
  147. package/dist/components/data/timeline/timeline.class.js +2 -2
  148. package/dist/components/data/timeline/timeline.styles.js +111 -31
  149. package/dist/components/data/tree/tree-item.styles.js +1 -28
  150. package/dist/components/data/tree/tree.class.js +2 -2
  151. package/dist/components/data/tree/tree.styles.js +0 -6
  152. package/dist/components/data/word-cloud/word-cloud.styles.js +0 -5
  153. package/dist/components/forms/button/button.class.js +1 -1
  154. package/dist/components/forms/button/button.styles.js +0 -105
  155. package/dist/components/forms/checkbox/checkbox.class.d.ts +3 -0
  156. package/dist/components/forms/checkbox/checkbox.class.js +1 -1
  157. package/dist/components/forms/checkbox/checkbox.styles.js +0 -39
  158. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +21 -2
  159. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  160. package/dist/components/forms/checkbox-group/checkbox-group.styles.js +0 -18
  161. package/dist/components/forms/code-editor/code-editor.styles.js +0 -30
  162. package/dist/components/forms/color-picker/color-picker.class.js +2 -2
  163. package/dist/components/forms/color-picker/color-picker.styles.js +0 -69
  164. package/dist/components/forms/combobox/combobox.class.d.ts +71 -3
  165. package/dist/components/forms/combobox/combobox.class.js +5 -3
  166. package/dist/components/forms/combobox/combobox.styles.js +31 -111
  167. package/dist/components/forms/combobox/option.styles.js +7 -1
  168. package/dist/components/forms/date-picker/date-input.class.js +1 -1
  169. package/dist/components/forms/date-picker/date-input.styles.js +12 -67
  170. package/dist/components/forms/date-picker/date-picker.class.d.ts +47 -0
  171. package/dist/components/forms/date-picker/date-picker.class.js +36 -22
  172. package/dist/components/forms/date-picker/date-picker.styles.js +82 -29
  173. package/dist/components/forms/emoji-picker/emoji-data-loader.d.ts +6 -3
  174. package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
  175. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +8 -1
  176. package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
  177. package/dist/components/forms/emoji-picker/emoji-picker.styles.js +3 -41
  178. package/dist/components/forms/icon-button/icon-button.class.js +1 -1
  179. package/dist/components/forms/icon-button/icon-button.styles.js +0 -16
  180. package/dist/components/forms/input/input.styles.js +0 -54
  181. package/dist/components/forms/input/number-input.styles.d.ts +4 -5
  182. package/dist/components/forms/input/number-input.styles.js +0 -11
  183. package/dist/components/forms/input/time-input-shared.d.ts +11 -0
  184. package/dist/components/forms/input/time-input-shared.js +1 -1
  185. package/dist/components/forms/input/time-input.class.d.ts +11 -2
  186. package/dist/components/forms/input/time-input.class.js +1 -1
  187. package/dist/components/forms/input/time-input.styles.js +0 -6
  188. package/dist/components/forms/locale-picker/locale-picker.class.js +2 -2
  189. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -26
  190. package/dist/components/forms/otp-input/otp-input.class.js +3 -3
  191. package/dist/components/forms/otp-input/otp-input.styles.js +0 -16
  192. package/dist/components/forms/phone-input/phone-input.class.d.ts +9 -1
  193. package/dist/components/forms/phone-input/phone-input.class.js +2 -2
  194. package/dist/components/forms/phone-input/phone-input.styles.js +0 -37
  195. package/dist/components/forms/radio/radio-button.styles.js +1 -30
  196. package/dist/components/forms/radio/radio-group.styles.js +0 -4
  197. package/dist/components/forms/radio/radio.styles.js +0 -44
  198. package/dist/components/forms/rubric-form/rubric-form.styles.js +0 -5
  199. package/dist/components/forms/select/select.class.js +1 -1
  200. package/dist/components/forms/select/select.styles.js +14 -114
  201. package/dist/components/forms/slider/slider.styles.js +0 -55
  202. package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts +0 -11
  203. package/dist/components/forms/swatch-picker/swatch-picker.class.js +2 -2
  204. package/dist/components/forms/swatch-picker/swatch-picker.styles.js +0 -77
  205. package/dist/components/forms/switch/switch.class.d.ts +3 -0
  206. package/dist/components/forms/switch/switch.class.js +1 -1
  207. package/dist/components/forms/switch/switch.styles.js +0 -37
  208. package/dist/components/forms/textarea/textarea.styles.js +0 -28
  209. package/dist/components/forms/time-range/time-range.styles.js +12 -84
  210. package/dist/components/forms/token-input/token-input.class.d.ts +23 -9
  211. package/dist/components/forms/token-input/token-input.class.js +1 -1
  212. package/dist/components/forms/token-input/token-input.styles.js +1 -54
  213. package/dist/components/layout/app-rail/app-rail-item.class.js +2 -2
  214. package/dist/components/layout/app-rail/app-rail-item.styles.js +0 -13
  215. package/dist/components/layout/app-rail/app-rail.class.d.ts +5 -0
  216. package/dist/components/layout/app-rail/app-rail.class.js +1 -1
  217. package/dist/components/layout/app-rail/app-rail.styles.js +0 -46
  218. package/dist/components/layout/button-group/button-group.styles.js +0 -6
  219. package/dist/components/layout/card/card.class.d.ts +12 -0
  220. package/dist/components/layout/card/card.styles.js +3 -11
  221. package/dist/components/layout/carousel/carousel.styles.js +0 -1
  222. package/dist/components/layout/command-palette/command-palette.class.d.ts +8 -0
  223. package/dist/components/layout/command-palette/command-palette.class.js +3 -1
  224. package/dist/components/layout/command-palette/command-palette.styles.js +1 -13
  225. package/dist/components/layout/control-group/control-group.styles.js +0 -7
  226. package/dist/components/layout/dashboard-grid/dashboard-grid.styles.js +6 -25
  227. package/dist/components/layout/details/accordion.class.d.ts +13 -0
  228. package/dist/components/layout/details/accordion.class.js +1 -1
  229. package/dist/components/layout/details/details.class.js +1 -1
  230. package/dist/components/layout/details/details.styles.js +0 -12
  231. package/dist/components/layout/dock-panel/dock-panel.styles.js +0 -45
  232. package/dist/components/layout/drilldown-panel/drilldown-panel.class.d.ts +2 -0
  233. package/dist/components/layout/drilldown-panel/drilldown-panel.class.js +2 -2
  234. package/dist/components/layout/drilldown-panel/drilldown-panel.styles.js +0 -4
  235. package/dist/components/layout/filter-bar/filter-bar.class.js +1 -1
  236. package/dist/components/layout/filter-bar/filter-bar.styles.js +0 -9
  237. package/dist/components/layout/menu/menu-item.class.d.ts +5 -0
  238. package/dist/components/layout/menu/menu-item.class.js +1 -1
  239. package/dist/components/layout/menu/menu-item.styles.js +0 -49
  240. package/dist/components/layout/menu/menu-label.styles.js +0 -2
  241. package/dist/components/layout/menu/menu.styles.js +0 -18
  242. package/dist/components/layout/multi-split/multi-split.styles.js +0 -63
  243. package/dist/components/layout/page/page.class.d.ts +4 -0
  244. package/dist/components/layout/page/page.class.js +1 -1
  245. package/dist/components/layout/reorder-list/reorder-item.styles.js +0 -4
  246. package/dist/components/layout/responsive-panel/responsive-panel.styles.js +0 -27
  247. package/dist/components/layout/scroller/scroller.styles.js +0 -20
  248. package/dist/components/layout/segmented/segmented.class.d.ts +7 -1
  249. package/dist/components/layout/segmented/segmented.class.js +1 -1
  250. package/dist/components/layout/segmented/segmented.styles.js +69 -37
  251. package/dist/components/layout/split-panel/split-panel.styles.js +1 -7
  252. package/dist/components/layout/stepper/stepper.class.d.ts +8 -1
  253. package/dist/components/layout/stepper/stepper.class.js +1 -1
  254. package/dist/components/layout/stepper/stepper.styles.js +140 -41
  255. package/dist/components/layout/tab-group/tab-group.class.d.ts +4 -1
  256. package/dist/components/layout/tab-group/tab-group.styles.js +9 -75
  257. package/dist/components/layout/tab-group/tab.styles.js +0 -2
  258. package/dist/components/layout/virtual-list/virtual-list.class.d.ts +4 -4
  259. package/dist/components/layout/virtual-list/virtual-list.class.js +1 -1
  260. package/dist/components/layout/virtual-list/virtual-list.styles.js +0 -68
  261. package/dist/components/layout/widget/widget.class.d.ts +5 -1
  262. package/dist/components/layout/widget/widget.class.js +1 -1
  263. package/dist/components/layout/widget/widget.styles.js +97 -40
  264. package/dist/components/media/animated-image/animated-image.class.d.ts +3 -0
  265. package/dist/components/media/animated-image/animated-image.class.js +1 -1
  266. package/dist/components/media/animated-image/animated-image.styles.js +0 -28
  267. package/dist/components/media/attachment-chip/attachment-chip.class.d.ts +1 -1
  268. package/dist/components/media/attachment-chip/attachment-chip.class.js +1 -1
  269. package/dist/components/media/attachment-chip/attachment-chip.styles.js +0 -31
  270. package/dist/components/media/attachment-trigger/attachment-trigger.class.js +3 -3
  271. package/dist/components/media/attachment-trigger/attachment-trigger.styles.js +0 -40
  272. package/dist/components/media/av-player/av-player.class.d.ts +5 -6
  273. package/dist/components/media/av-player/av-player.class.js +1 -1
  274. package/dist/components/media/av-player/av-player.styles.js +0 -45
  275. package/dist/components/media/avatar/avatar.styles.js +3 -16
  276. package/dist/components/media/file-icon/file-icon.class.d.ts +1 -2
  277. package/dist/components/media/file-icon/file-icon.class.js +1 -1
  278. package/dist/components/media/file-input/file-input.class.d.ts +12 -0
  279. package/dist/components/media/file-input/file-input.styles.js +3 -24
  280. package/dist/components/media/flag/flag.class.d.ts +23 -1
  281. package/dist/components/media/flag/flag.class.js +4 -2
  282. package/dist/components/media/flag/flag.styles.js +7 -1
  283. package/dist/components/media/flag/language-map.d.ts +10 -0
  284. package/dist/components/media/flag/language-map.js +1 -1
  285. package/dist/components/media/image-comparer/image-comparer.styles.js +4 -33
  286. package/dist/components/media/image-viewer/image-viewer.class.js +0 -2
  287. package/dist/components/media/image-viewer/image-viewer.styles.js +7 -27
  288. package/dist/components/media/lightbox/lightbox.class.js +0 -2
  289. package/dist/components/media/lightbox/lightbox.styles.js +0 -21
  290. package/dist/components/media/map/map-loader.d.ts +19 -1
  291. package/dist/components/media/map/map-loader.js +1 -1
  292. package/dist/components/media/map/map.class.d.ts +178 -1
  293. package/dist/components/media/map/map.class.js +15 -3
  294. package/dist/components/media/map/map.styles.js +20 -17
  295. package/dist/components/media/media-card/media-card.class.d.ts +14 -3
  296. package/dist/components/media/media-card/media-card.class.js +1 -1
  297. package/dist/components/media/media-card/media-card.styles.js +2 -28
  298. package/dist/components/media/pan-zoom/pan-zoom.styles.js +0 -3
  299. package/dist/components/media/qr-code/qr-code.class.d.ts +3 -2
  300. package/dist/components/media/qr-code/qr-code.class.js +2 -2
  301. package/dist/components/media/qr-code/qr-code.styles.js +0 -3
  302. package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +2 -0
  303. package/dist/components/media/sequence-playback/sequence-playback.class.js +2 -1
  304. package/dist/components/media/sequence-playback/sequence-playback.styles.js +0 -19
  305. package/dist/components/media/video/video.class.d.ts +23 -2
  306. package/dist/components/media/video/video.class.js +3 -3
  307. package/dist/components/media/video/video.styles.js +4 -2
  308. package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts +3 -2
  309. package/dist/components/media/zoomable-frame/zoomable-frame.class.js +2 -2
  310. package/dist/components/media/zoomable-frame/zoomable-frame.styles.js +0 -5
  311. package/dist/components/overlays/alert/alert.styles.js +4 -2
  312. package/dist/components/overlays/badge/badge.styles.js +4 -48
  313. package/dist/components/overlays/badge/tag.styles.js +0 -14
  314. package/dist/components/overlays/callout/callout.styles.js +0 -11
  315. package/dist/components/overlays/chip/chip-group.styles.js +0 -18
  316. package/dist/components/overlays/chip/chip.styles.js +6 -69
  317. package/dist/components/overlays/dialog/confirm.d.ts +1 -4
  318. package/dist/components/overlays/dialog/confirm.js +1 -1
  319. package/dist/components/overlays/dialog/dialog.class.d.ts +32 -9
  320. package/dist/components/overlays/dialog/dialog.class.js +1 -1
  321. package/dist/components/overlays/dialog/dialog.styles.js +0 -43
  322. package/dist/components/overlays/drawer/drawer.class.d.ts +2 -2
  323. package/dist/components/overlays/drawer/drawer.styles.js +0 -9
  324. package/dist/components/overlays/empty/empty.styles.js +0 -12
  325. package/dist/components/overlays/kbd/kbd.styles.js +0 -8
  326. package/dist/components/overlays/overlay/dropdown.class.d.ts +1 -6
  327. package/dist/components/overlays/overlay/dropdown.class.js +2 -2
  328. package/dist/components/overlays/overlay/overlay.styles.js +0 -28
  329. package/dist/components/overlays/overlay/popover.class.d.ts +28 -4
  330. package/dist/components/overlays/overlay/popover.class.js +2 -2
  331. package/dist/components/overlays/overlay/tooltip.class.d.ts +10 -0
  332. package/dist/components/overlays/overlay/tooltip.class.js +1 -1
  333. package/dist/components/overlays/popup/popup.class.d.ts +1 -0
  334. package/dist/components/overlays/popup/popup.class.js +1 -1
  335. package/dist/components/overlays/popup/popup.styles.js +0 -15
  336. package/dist/components/overlays/progress/progress-ring.class.d.ts +9 -1
  337. package/dist/components/overlays/progress/progress-ring.class.js +3 -3
  338. package/dist/components/overlays/progress/progress.styles.js +0 -21
  339. package/dist/components/overlays/rating/rating.styles.js +0 -25
  340. package/dist/components/overlays/skeleton/skeleton.styles.js +0 -4
  341. package/dist/components/overlays/spinner/spinner.styles.js +0 -3
  342. package/dist/components/overlays/toast/toast-item.styles.js +3 -45
  343. package/dist/components/retrieval/chunk-inspector/chunk-inspector.styles.js +0 -35
  344. package/dist/components/retrieval/citation-badge/citation-badge.class.d.ts +2 -2
  345. package/dist/components/retrieval/citation-badge/citation-badge.class.js +3 -3
  346. package/dist/components/retrieval/citation-badge/citation-badge.styles.js +0 -20
  347. package/dist/components/retrieval/claim-evidence/claim-evidence.styles.js +0 -8
  348. package/dist/components/retrieval/community-card/community-card.class.d.ts +1 -0
  349. package/dist/components/retrieval/community-card/community-card.styles.js +0 -6
  350. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js +8 -12
  351. package/dist/components/retrieval/entity-card/entity-card.class.d.ts +4 -3
  352. package/dist/components/retrieval/entity-card/entity-card.class.js +1 -1
  353. package/dist/components/retrieval/entity-card/entity-card.styles.js +0 -12
  354. package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts +10 -4
  355. package/dist/components/retrieval/entity-chip/entity-chip.class.js +3 -3
  356. package/dist/components/retrieval/entity-chip/entity-chip.styles.js +6 -9
  357. package/dist/components/retrieval/entity-dossier/entity-dossier.class.d.ts +19 -5
  358. package/dist/components/retrieval/graph/graph.class.d.ts +5 -0
  359. package/dist/components/retrieval/graph/graph.class.js +1 -1
  360. package/dist/components/retrieval/graph/graph.styles.js +0 -30
  361. package/dist/components/retrieval/graph-legend/graph-legend.styles.js +0 -3
  362. package/dist/components/retrieval/ingestion-queue/ingestion-queue.styles.js +0 -25
  363. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts +2 -0
  364. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js +0 -7
  365. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +20 -6
  366. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +2 -2
  367. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +0 -16
  368. package/dist/components/retrieval/mind-map/mind-map.class.d.ts +5 -3
  369. package/dist/components/retrieval/mind-map/mind-map.class.js +1 -1
  370. package/dist/components/retrieval/mind-map/mind-map.styles.js +0 -2
  371. package/dist/components/retrieval/neighbor-list/neighbor-list.class.d.ts +3 -2
  372. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +1 -1
  373. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +0 -30
  374. package/dist/components/retrieval/node-palette/node-palette.styles.js +0 -11
  375. package/dist/components/retrieval/path-strip/path-strip.styles.js +0 -10
  376. package/dist/components/retrieval/provenance-panel/provenance-panel.class.d.ts +12 -3
  377. package/dist/components/retrieval/provenance-panel/provenance-panel.styles.js +0 -2
  378. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.d.ts +3 -2
  379. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js +2 -2
  380. package/dist/components/retrieval/retrieval-results/retrieval-results.styles.js +0 -28
  381. package/dist/components/retrieval/retrieval-search/retrieval-search.styles.js +0 -4
  382. package/dist/components/retrieval/retrieval-trace/retrieval-trace.styles.js +0 -2
  383. package/dist/components/retrieval/source-card/source-card.styles.js +0 -13
  384. package/dist/components/retrieval/source-list/source-list.styles.js +0 -7
  385. package/dist/components/retrieval/source-picker/source-picker.styles.js +0 -7
  386. package/dist/components/utility/copy-button/copy-button.styles.js +0 -10
  387. package/dist/components/utility/diff-view/diff-view.styles.js +0 -14
  388. package/dist/components/utility/export-button/export-button.styles.js +0 -22
  389. package/dist/components/utility/icon/icon.styles.js +0 -6
  390. package/dist/components/utility/json-viewer/json-viewer.styles.js +2 -48
  391. package/dist/components/utility/known-date/known-date.class.d.ts +7 -3
  392. package/dist/components/utility/known-date/known-date.styles.js +10 -51
  393. package/dist/components/utility/live-region/live-region.styles.js +0 -4
  394. package/dist/components/utility/mention-popover/mention-popover.styles.js +0 -25
  395. package/dist/components/utility/poll-status/poll-status.styles.js +0 -4
  396. package/dist/components/utility/random-content/random-content.class.d.ts +22 -0
  397. package/dist/components/utility/random-content/random-content.class.js +3 -2
  398. package/dist/components/utility/random-content/random-content.styles.js +6 -13
  399. package/dist/components/utility/tour/tour.class.d.ts +4 -2
  400. package/dist/components/utility/tour/tour.class.js +3 -3
  401. package/dist/components/utility/tour/tour.styles.js +0 -13
  402. package/dist/components/utility/visually-hidden/visually-hidden.styles.js +0 -5
  403. package/dist/components/viewers/archive-viewer/archive-viewer.class.js +1 -1
  404. package/dist/components/viewers/archive-viewer/archive-viewer.styles.d.ts +2 -2
  405. package/dist/components/viewers/archive-viewer/archive-viewer.styles.js +0 -10
  406. package/dist/components/viewers/csv-viewer/csv-viewer.class.js +1 -1
  407. package/dist/components/viewers/csv-viewer/csv-viewer.styles.js +0 -19
  408. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js +1 -1
  409. package/dist/components/viewers/dataset-viewer/dataset-viewer.styles.js +0 -15
  410. package/dist/components/viewers/document-compare/document-compare.styles.js +0 -3
  411. package/dist/components/viewers/document-preview/document-preview.styles.js +0 -25
  412. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +2 -1
  413. package/dist/components/viewers/document-viewer/document-viewer.class.js +1 -1
  414. package/dist/components/viewers/document-viewer/document-viewer.styles.js +0 -5
  415. package/dist/components/viewers/docx-viewer/docx-viewer.styles.js +0 -17
  416. package/dist/components/viewers/ebook-viewer/ebook-viewer.styles.js +0 -4
  417. package/dist/components/viewers/email-viewer/email-viewer.styles.js +0 -7
  418. package/dist/components/viewers/geojson-view/geojson-view.styles.js +0 -5
  419. package/dist/components/viewers/highlight-layer/highlight-layer.styles.js +0 -3
  420. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +1 -1
  421. package/dist/components/viewers/notebook-viewer/notebook-viewer.styles.js +0 -38
  422. package/dist/components/viewers/page-rail/page-rail.class.js +1 -1
  423. package/dist/components/viewers/page-rail/page-rail.styles.js +0 -13
  424. package/dist/components/viewers/pdf-viewer/pdf-loader.d.ts +13 -2
  425. package/dist/components/viewers/pdf-viewer/pdf-loader.js +1 -1
  426. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts +32 -2
  427. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +4 -4
  428. package/dist/components/viewers/pdf-viewer/pdf-viewer.styles.js +1 -27
  429. package/dist/components/viewers/pptx-viewer/pptx-viewer.styles.js +0 -3
  430. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.js +1 -1
  431. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.styles.js +0 -14
  432. package/dist/components/viewers/svg-viewer/svg-viewer.styles.js +0 -7
  433. package/dist/components/viewers/xml-viewer/xml-viewer.styles.js +2 -24
  434. package/dist/custom-elements-jsx.d.ts +72 -40
  435. package/dist/events.d.ts +43 -33
  436. package/dist/internal/agent-status-variants.d.ts +18 -0
  437. package/dist/internal/agent-status-variants.js +1 -0
  438. package/dist/internal/announcer.d.ts +8 -3
  439. package/dist/internal/announcer.js +1 -1
  440. package/dist/internal/autoloader-manifest.js +1 -1
  441. package/dist/internal/canvas-color.d.ts +16 -0
  442. package/dist/internal/canvas-color.js +1 -1
  443. package/dist/internal/catalog-picker.d.ts +0 -1
  444. package/dist/internal/catalog-picker.js +1 -1
  445. package/dist/internal/default-strings.generated.d.ts +1 -0
  446. package/dist/internal/default-strings.generated.js +1 -1
  447. package/dist/internal/dev-mode-attribute-warning.d.ts +27 -4
  448. package/dist/internal/dev-mode-attribute-warning.js +1 -1
  449. package/dist/internal/localization-runtime.js +1 -1
  450. package/dist/internal/localization-types.d.ts +1 -1
  451. package/dist/internal/localization.js +1 -1
  452. package/dist/internal/lyra-element.d.ts +13 -0
  453. package/dist/internal/lyra-element.js +1 -1
  454. package/dist/internal/media-controller.js +1 -1
  455. package/dist/internal/package-metadata.d.ts +1 -1
  456. package/dist/internal/package-metadata.js +1 -1
  457. package/dist/internal/scroll-overflow.d.ts +35 -13
  458. package/dist/internal/scroll-overflow.js +1 -1
  459. package/dist/internal/sizes.styles.js +0 -2
  460. package/dist/internal/specialist-tokens.styles.js +6 -11
  461. package/dist/internal/text-highlights.d.ts +4 -1
  462. package/dist/internal/text-highlights.js +1 -1
  463. package/dist/internal/tokens/palette.styles.js +0 -15
  464. package/dist/internal/tokens.styles.js +20 -113
  465. package/dist/lyra.d.ts +9 -6
  466. package/dist/styles/reservations.css +82 -0
  467. package/dist/svelte.d.ts +72 -40
  468. package/dist/translations/ar.js +1 -1
  469. package/dist/translations/de.js +1 -1
  470. package/dist/translations/es.js +1 -1
  471. package/dist/translations/fa.js +1 -1
  472. package/dist/translations/fr.js +1 -1
  473. package/dist/translations/he.js +1 -1
  474. package/dist/translations/ja.js +1 -1
  475. package/dist/translations/pt-BR.js +1 -1
  476. package/dist/translations/ru.js +1 -1
  477. package/dist/translations/zh-CN.js +1 -1
  478. package/dist/vue.d.ts +72 -40
  479. package/llms/components/lr-accordion-item.md +12 -3
  480. package/llms/components/lr-accordion.md +11 -2
  481. package/llms/components/lr-agent-eval-dashboard.md +1 -1
  482. package/llms/components/lr-agent-trace.md +3 -1
  483. package/llms/components/lr-agent-workspace.md +20 -0
  484. package/llms/components/lr-artifact-panel.md +10 -4
  485. package/llms/components/lr-attachment-chip.md +7 -4
  486. package/llms/components/lr-attachment-trigger.md +7 -4
  487. package/llms/components/lr-av-player.md +3 -1
  488. package/llms/components/lr-avatar.md +6 -6
  489. package/llms/components/lr-bar-chart.md +8 -6
  490. package/llms/components/lr-box-plot.md +15 -4
  491. package/llms/components/lr-browser-frame.md +7 -3
  492. package/llms/components/lr-bubble-chart.md +8 -6
  493. package/llms/components/lr-calendar.md +9 -2
  494. package/llms/components/lr-card.md +24 -0
  495. package/llms/components/lr-chart.md +45 -11
  496. package/llms/components/lr-chat-viewport.md +7 -2
  497. package/llms/components/lr-checkbox-group.md +13 -5
  498. package/llms/components/lr-checkbox.md +5 -2
  499. package/llms/components/lr-checkpoint.md +6 -2
  500. package/llms/components/lr-combobox.md +47 -8
  501. package/llms/components/lr-command-palette.md +4 -1
  502. package/llms/components/lr-confirm-bar.md +7 -3
  503. package/llms/components/lr-context-meter.md +12 -11
  504. package/llms/components/lr-conversation-item.md +7 -4
  505. package/llms/components/lr-date-input.md +22 -2
  506. package/llms/components/lr-date-picker.md +23 -3
  507. package/llms/components/lr-details.md +11 -2
  508. package/llms/components/lr-dialog.md +16 -10
  509. package/llms/components/lr-dock-panel.md +7 -10
  510. package/llms/components/lr-document-preview.md +6 -1
  511. package/llms/components/lr-document-viewer.md +3 -2
  512. package/llms/components/lr-doughnut-chart.md +8 -6
  513. package/llms/components/lr-drawer.md +3 -3
  514. package/llms/components/lr-entity-card.md +3 -3
  515. package/llms/components/lr-entity-chip.md +1 -1
  516. package/llms/components/lr-entity-dossier.md +4 -1
  517. package/llms/components/lr-file-input.md +2 -2
  518. package/llms/components/lr-flag.md +30 -8
  519. package/llms/components/lr-heatmap.md +46 -0
  520. package/llms/components/lr-histogram.md +7 -4
  521. package/llms/components/lr-icon.md +1 -1
  522. package/llms/components/lr-json-schema-viewer.md +2 -1
  523. package/llms/components/lr-knowledge-graph-explorer.md +8 -3
  524. package/llms/components/lr-known-date.md +4 -2
  525. package/llms/components/lr-line-chart.md +8 -6
  526. package/llms/components/lr-lite-chart.md +16 -6
  527. package/llms/components/lr-map.md +91 -10
  528. package/llms/components/lr-markdown-core.md +3 -2
  529. package/llms/components/lr-media-card.md +28 -12
  530. package/llms/components/lr-message-parts.md +2 -1
  531. package/llms/components/lr-model-select.md +9 -10
  532. package/llms/components/lr-model-settings-panel.md +9 -9
  533. package/llms/components/lr-neighbor-list.md +1 -1
  534. package/llms/components/lr-notebook-viewer.md +6 -3
  535. package/llms/components/lr-option.md +46 -7
  536. package/llms/components/lr-pdf-viewer.md +62 -2
  537. package/llms/components/lr-pie-chart.md +8 -6
  538. package/llms/components/lr-polar-area-chart.md +8 -6
  539. package/llms/components/lr-popover.md +25 -1
  540. package/llms/components/lr-progress-ring.md +8 -1
  541. package/llms/components/lr-prompt-studio.md +1 -1
  542. package/llms/components/lr-provenance-panel.md +4 -2
  543. package/llms/components/lr-qr-code.md +1 -1
  544. package/llms/components/lr-radar-chart.md +8 -6
  545. package/llms/components/lr-rag-eval-dashboard.md +2 -2
  546. package/llms/components/lr-random-content.md +13 -0
  547. package/llms/components/lr-reorder-item.md +6 -1
  548. package/llms/components/lr-reorder-list.md +6 -1
  549. package/llms/components/lr-responsive-panel.md +11 -7
  550. package/llms/components/lr-scatter-chart.md +8 -6
  551. package/llms/components/lr-sequence-strip.md +16 -2
  552. package/llms/components/lr-slider.md +12 -5
  553. package/llms/components/lr-sparkline.md +1 -1
  554. package/llms/components/lr-suggestion-chips.md +7 -2
  555. package/llms/components/lr-swatch-picker.md +5 -5
  556. package/llms/components/lr-switch.md +5 -2
  557. package/llms/components/lr-table.md +30 -4
  558. package/llms/components/lr-terminal.md +3 -1
  559. package/llms/components/lr-thread-list.md +8 -8
  560. package/llms/components/lr-time-input.md +6 -1
  561. package/llms/components/lr-timeline-item.md +24 -0
  562. package/llms/components/lr-timeline.md +25 -1
  563. package/llms/components/lr-token-input.md +7 -2
  564. package/llms/components/lr-tool-approval-dialog.md +7 -8
  565. package/llms/components/lr-tool-call-chip.md +5 -1
  566. package/llms/components/lr-tool-param-form.md +14 -12
  567. package/llms/components/lr-tool-result-dialog.md +11 -9
  568. package/llms/components/lr-tool-result-view.md +7 -6
  569. package/llms/components/lr-tool-select-dialog.md +18 -16
  570. package/llms/components/lr-trace-tree.md +3 -1
  571. package/llms/components/lr-usage-badge.md +4 -1
  572. package/llms/components/lr-video-playlist.md +1 -1
  573. package/llms/components/lr-virtual-list.md +22 -14
  574. package/llms/components/lr-voice-picker.md +8 -5
  575. package/llms/components/lr-widget-renderer.md +3 -3
  576. package/llms/components/lr-widget.md +1 -1
  577. package/llms/components/lr-word-cloud.md +6 -2
  578. package/llms/peers.md +12 -2
  579. package/llms/shared.md +70 -2
  580. package/llms/tokens.md +15 -1
  581. package/llms-full.txt +1335 -306
  582. package/package.json +17 -5
  583. package/vscode-css-data.json +93 -2
  584. package/vscode-html-data.json +513 -59
  585. package/web-types.json +457 -72
package/CHANGELOG.md CHANGED
@@ -1,5 +1,790 @@
1
1
  # Changelog
2
2
 
3
+ ## 11.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - 5066d4b: **Version note: this major carries no known breaking change for consumers.**
8
+
9
+ Everything in this release is additive or a bug fix — no public member was removed, renamed, or
10
+ had its behaviour or default altered. The major bump is taken because the public-API semver gate
11
+ (`check:public-api`) classifies 328 changes as breaking, and every one of them is fingerprint or
12
+ generated-type churn rather than a real break:
13
+
14
+ - 248 `:dependencies` and 39 `:contract` hash changes — a symbol's transitive-dependency
15
+ fingerprint moves whenever a widely-composed base class gains a member, so adding one property to
16
+ `LyraChart` rewrites the hash of every chart subclass and every subpath that re-exports it.
17
+ - 39 generated React/Vue/Svelte props **type strings**, widened by the newly added props. The
18
+ differ compares the printed type text, which cannot distinguish an additive union widening from a
19
+ removal.
20
+ - 2 `lr-popover` `popup-role` default entries moving `null → 'dialog'`. The default did not change;
21
+ this release simply documents it with `@default` for the first time, so the manifest records a
22
+ value where it previously recorded none.
23
+
24
+ Consumers upgrading from 10.x should not need code changes. If you use the generated framework
25
+ prop types, the unions gained members but lost none.
26
+
27
+ ### Minor Changes
28
+
29
+ - 2fb4af7: `<lr-chart>` (and every chart subclassing it — bar, line, pie, doughnut, radar, polar-area,
30
+ scatter, bubble, histogram) and `<lr-box-plot>` gain `dataTableToggle` (`data-table-toggle`), which
31
+ renders a localized disclosure button above the accessible data table.
32
+
33
+ `showDataTable` was all-or-nothing: the table was either permanently screen-reader-only or
34
+ permanently visible, so a sighted reader who wanted the numbers behind a chart could only get them
35
+ if the consumer hand-rolled a `<details>` around a duplicated copy of the table. With the toggle
36
+ on, `showDataTable` becomes the disclosure's initial state rather than its whole behavior. The
37
+ table stays in the DOM in both states, so assistive technology never loses it, and the button
38
+ carries `aria-expanded` plus `aria-controls`. A new `data-table-toggle` CSS part styles the
39
+ control. Unset, nothing renders and behavior is unchanged.
40
+ - e084afb: `<lr-combobox>` now renders `<lr-option>`'s adornment slots, and gains `visibleOptions` for bounding
41
+ the suggestion popup's height.
42
+
43
+ **Adornments (a fixed contract, not just a new feature).** `<lr-option>` documented `start`/`end`
44
+ slots, their `prefix`/`suffix` aliases, and four matching CSS parts — but `<lr-combobox>` builds its
45
+ popup from normalized row *data* rather than from the light-DOM nodes, so inside the one component
46
+ `<lr-option>` exists to feed, none of them rendered. A row could show a colour dot, a badge and a
47
+ sub-line but not a 16px image, which is the one adornment a country, currency, language or user
48
+ picker most often wants, and neither documented workaround was available (`::part(option)` cannot be
49
+ compounded past the part, and `dot-color` rejects `url()`).
50
+
51
+ Adornments now render as new `option-start` / `option-end` parts, inert and `aria-hidden` so they
52
+ never join the option's accessible name. The nodes are **cloned** into the row, so the author's own
53
+ `<lr-option>` subtree is left exactly where they put it rather than being moved into a shadow root
54
+ as a side effect of opening a dropdown. Async `source` rows can supply the same `start`/`end`
55
+ fields alongside the existing `icon`.
56
+
57
+ **`visibleOptions`** (`visible-options`) bounds the popup to about that many rows, leaving the rest
58
+ reachable by scrolling. It is measured from where row N actually starts, since a row's height varies
59
+ with sub-lines, adornments and group labels. Unset, the listbox keeps exactly its previous
60
+ max-height behavior.
61
+
62
+ The doc comments on all three caps — `visibleOptions`, `maxRender`, and `maxOptionsVisible` — now
63
+ each state how they differ from the other two, which was the confusion that prompted this.
64
+ - 3b3af14: `<lr-date-picker>` gains `presets`, a quick-range button row for the dashboard time-filter shape
65
+ (Today / Last 7 days / Last 30 days / This month / All time).
66
+
67
+ The pieces for this existed but were split across two components that each held half the contract:
68
+ the date components had the calendar, locale and range logic but no preset affordance, while
69
+ `<lr-time-range>` had exactly the wanted preset API but is a two-handle numeric brush with no date
70
+ logic, so a caller had to map a time axis onto `[min, max]` themselves and got no calendar. Building
71
+ it by hand meant a ~260-line control plus its own preset/custom state machine.
72
+
73
+ `LyraDateRangePreset` is deliberately the same `label`/`start`/`end` shape as `TimeRangePreset`, so
74
+ the library has one preset vocabulary rather than two — only the unit differs (ISO `YYYY-MM-DD`
75
+ instead of numbers). Range mode only; unset renders nothing. Applying a preset commits through the
76
+ same path a two-click selection uses, so ISO serialization, `min`/`max` clamping and the
77
+ `input`-then-`change` pair are identical. A reversed preset normalizes, and a malformed one is
78
+ ignored rather than clearing the value, so a bad entry in a config-driven list never reads as "the
79
+ user picked nothing". New `presets` and `preset-button` CSS parts.
80
+ - c915980: Added `--lr-focus-ring`, a composite outline shorthand (`var(--lr-focus-ring-width) solid
81
+ var(--lr-focus-ring-color)`) alongside the three existing parts, which stay exactly as they are.
82
+
83
+ Web Awesome exposes `--wa-focus-ring` as a ready-made outline value, so the common consumer idiom
84
+ is `outline: var(--wa-focus-ring)`. Migrating it meant hand-expanding every site, which is easy to
85
+ get subtly wrong — omitting the `solid` keyword yields an outline that renders in some engines and
86
+ not others — and each hand-expanded copy stops tracking any future change to how the ring is
87
+ composed. `--lr-focus-ring-offset` stays separate because `outline-offset` is its own property, not
88
+ part of the `outline` shorthand.
89
+
90
+ `llms/tokens.md` also now documents why an ancestor `--lr-*` override does not survive a nested
91
+ component boundary: every component re-derives that layer from `--lr-theme-*` on its own `:host`,
92
+ so the override is reset at the first `lr-*` inside another `lr-*`'s shadow root and degrades
93
+ silently. The `--lr-theme-*` input layer is the one that inherits.
94
+ - 3d7a6a5: `<lr-heatmap>` matrix mode gains `colLabelRotation` (`col-label-rotation`) and an `'auto'` value for
95
+ `colLabelHeight` (`col-label-height`), giving column labels the escape hatch the row gutter got in
96
+ 10.0.0.
97
+
98
+ Column labels were horizontal-only in a fixed 20px band, so in a dense matrix — where every column
99
+ is far narrower than a typical label — adjacent labels collided and the axis became unreadable,
100
+ with no rotation or angle property anywhere in the surface. Each label now rotates about an anchor
101
+ at its own column's centre with the label's end at that anchor, so it leans back over the columns
102
+ to its left and the last column's label cannot overflow the canvas. `col-label-height="auto"`
103
+ measures the labels and projects their width through the rotation, so the band sizes itself.
104
+
105
+ Unset, both are inert and painting is unchanged. Values outside `[0, 90]` clamp and non-finite
106
+ values normalize to `0`. Rotation is deliberately not mirrored under `dir="rtl"`, matching the
107
+ documented rule that both grid modes retain physical LTR geometry.
108
+ - 20728fb: `<lr-map>` gains a `'step'` choropleth interpolation and independent fill/stroke colours on
109
+ `dataLayers` — the two declarative gaps that stopped an application migrating off a first-party
110
+ MapLibre wrapper after every other property already matched.
111
+
112
+ **`interpolation: 'step'`** emits maplibre's `['step', …]` instead of `['interpolate', …]`, giving
113
+ discrete bands rather than a continuous ramp. A ramp is wrong whenever the legend advertises a fixed
114
+ set of ranges with one swatch each: it puts colours on the map that appear nowhere in the legend and
115
+ renders two regions in the same advertised band as visibly different colours. `stepBaseColor` sets
116
+ the colour below the first threshold (which `['step', …]` requires) and defaults to the first stop's
117
+ own colour.
118
+
119
+ **`dataLayers[].color` / `.strokeColor`** override `tone` for the fill and for the line/circle
120
+ layers respectively, falling back to `color` and then `tone`. They are separable because a fill and
121
+ its outline want opposite things on a choropleth-plus-overlay map: the fill competes for area and
122
+ must sit quiet, while the 1px outline competes with nothing and is the only thing keeping a no-data
123
+ region's shape readable once the fill is that faint. Deriving one from the other measured 1.41:1
124
+ against a light basemap, under WCAG 1.4.11's 3:1 floor for graphical objects. A `var(--lr-…)`
125
+ reference is resolved against the host first, since MapLibre paints to a WebGL canvas and never sees
126
+ the CSS cascade.
127
+
128
+ Both are additive: an unset `interpolation` still interpolates linearly, and a `tone`-only data
129
+ layer paints exactly as before.
130
+ - 4a701e7: `<lr-popover>` gains a third `popupRole` value, `none`, so the library can express the WAI-ARIA
131
+ disclosure-navigation pattern. Previously `popupRole` was `dialog | menu` only, which left a header
132
+ nav flyout with no correct option: `menu` announces "menu, menu item" and expects `menuitem`
133
+ children, while a navigation flyout is a list of links, and `dialog` implies an interruptive
134
+ surface. Consumers had to abandon the library's overlays and hand-roll a
135
+ `button[aria-expanded][aria-controls]` plus a plain list.
136
+
137
+ Under `popup-role="none"` the popup surface renders no `role` and no generated `aria-label`, and
138
+ the trigger carries no `aria-haspopup`, so the slotted `<nav>` owns the semantics and the
139
+ accessible name. Everything else — `aria-expanded`/`aria-controls`, light dismiss, Escape, focus
140
+ return, positioning — is unchanged. Purely additive: `dialog` remains the default, and
141
+ `lr-dropdown` still pins its own role to `menu`.
142
+
143
+ ### Patch Changes
144
+
145
+ - e6ed0ca: The migration codemod now warns about four classes of `wa-*`/`sl-*` reference it does not rewrite,
146
+ instead of leaving them silent: tag selectors inside a `` css`` `` tagged template, `::slotted()`,
147
+ DOM selector strings reached through `this`/`this.shadowRoot`, and `--wa-*`/`--sl-*` custom
148
+ properties.
149
+
150
+ Each of these fails silently at runtime after a migration — a CSS rule keyed on a tag that no
151
+ longer exists matches nothing, `::slotted()` likewise, `querySelector` returns null, and a `var()`
152
+ naming a removed token falls back to its second argument or to nothing. Nothing throws, nothing
153
+ fails a build, and a typechecker cannot see inside a template literal. Because `--check` is
154
+ documented as a CI gate, the silence meant CI certified a migration that had visibly broken the
155
+ component's styling.
156
+
157
+ Tokens are deliberately reported rather than rewritten: the two spacing scales are offset by one
158
+ step (Web Awesome `m` is 1rem, Lyra `m` is 0.75rem), so renaming by name alone silently tightens
159
+ every gap, while mapping by value has no target for 1.5rem or 2.5rem. Warnings are filtered against
160
+ the rewrites the same pass produced, so a reference the inventory does map is never both rewritten
161
+ and warned about, and a self-declared `--wa-*` property (the consumer's own, merely sharing the
162
+ prefix) is exempt.
163
+
164
+ `<lr-dialog>`'s docs also now warn that `lr-close` is not a dialog-scoped name — nine components
165
+ emit it, several of which are routinely nested inside a dialog, and library events bubble and are
166
+ composed, so a listener bound on the dialog also receives a descendant's close.
167
+ - c5baec5: `<lr-flag>` now warns once in the console when `country`/`language` is set but no flag resolver has
168
+ been registered, naming the offending code and the `flag-peer.js` import that fixes it. Previously
169
+ this failed to the visible `[part="error"]` state in complete silence, which is indistinguishable
170
+ from missing flag data — the resolver is deliberately absent from the core component's module
171
+ graph, so an unimported peer entry is the single likeliest cause and was the hardest to diagnose.
172
+ The warning is emitted once per resolver-registration generation, so a page of many flags does not
173
+ repeat it. An already-resolved `src`, a registered resolver, and a well-formed-but-unmapped code
174
+ (which is data, not a defect) all stay silent.
175
+ - b573859: The `lr-locale-picker` Storybook page now registers the optional flag peer, so its rows render real
176
+ flags instead of silently empty frames. Found by the new `<lr-flag>` missing-resolver warning on its
177
+ first run — `flag.stories.ts` had always imported `flag-peer.js` for exactly this reason, and the
178
+ locale-picker page never did.
179
+ - c915980: The `lyra-ui-migrate` CLI no longer silently does nothing when launched through a package manager's
180
+ bin shim. Its entry guard compared `process.argv[1]` to `import.meta.url` as raw paths; under pnpm
181
+ the package directory is a symlink into the virtual store, so the two never matched and `run()`
182
+ never executed. The process printed nothing — not even `--help` — rewrote nothing, wrote no report,
183
+ and exited 0.
184
+
185
+ The serious half is that `--check` is documented as a CI gate that "exits nonzero while rewrites or
186
+ warnings remain". A silent exit 0 is indistinguishable from success, so on every pnpm project the
187
+ gate passed unconditionally — worse than having no gate, because it is trusted. npm and yarn were
188
+ unaffected, which is why it survived. The guard now compares realpaths, and a regression test
189
+ invokes the CLI through a symlink that mimics the pnpm layout.
190
+
191
+ ## 10.0.1
192
+
193
+ ### Patch Changes
194
+
195
+ - 84a28c2: Fixed `lr-combobox`, `lr-token-input` and `lr-radio-button` declaring a
196
+ `text-overflow: ellipsis` that could never fire.
197
+
198
+ `text-overflow` only applies to content that overflows its line box inline. Each
199
+ of these parts was left at `white-space: normal`, so the text wrapped instead of
200
+ overflowing and the box never had horizontal overflow at any label length --
201
+ `scrollWidth === clientWidth` in every case. `lr-combobox`'s and
202
+ `lr-token-input`'s labels additionally set `overflow-wrap: anywhere`, which put
203
+ the wrap *inside* a word.
204
+
205
+ The visible effect was worst on `lr-combobox`, whose tag caps at
206
+ `--tag-max-size` (80px by default): a selected `Received` rendered as `Receiv/ed`
207
+ across two lines, and a wrapped tag row could overflow a trigger pinned with
208
+ `--lr-combobox-trigger-height`.
209
+
210
+ All three now carry `white-space: nowrap`, matching `lr-select`'s
211
+ `[part='tag-label']`, which has always had it. Content that fits today is
212
+ unchanged; content that used to wrap now truncates, which is what the existing
213
+ declaration asked for.
214
+
215
+ `--tag-max-size` still defaults to 80px on `lr-combobox` against `lr-select`'s
216
+ 12rem. That difference is deliberate for now -- changing it alters default
217
+ rendering rather than fixing a dead declaration -- and is tracked separately.
218
+
219
+ ## 10.0.0
220
+
221
+ ### Major Changes
222
+
223
+ - c640e0a: **10.0.0.** This release removes the members deprecated during 9.x, which is the whole of its
224
+ breaking surface. Everything else in 10.0.0 is additive — no component's default rendering changes,
225
+ and no existing property, event, slot, part or CSS custom property was renamed or repointed.
226
+
227
+ Removed, each with a like-for-like replacement that has shipped since 9.x:
228
+
229
+ - `confirm()`: the `tone` option on `ConfirmOptions` → `variant`. (An earlier draft of this note
230
+ attributed the rename to `<lr-confirm-bar>`; that component's `tone` → `variant` landed in 9.x
231
+ and left no alias, so nothing changes there in 10.0.0. The member removed here is the one on the
232
+ `confirm()` helper in `overlays/dialog/confirm.ts`.)
233
+ - `<lr-swatch-picker>`: `options` → `items`, `label` → `accessibleLabel` (or the host `aria-label`),
234
+ and the `SwatchOption` type → `SwatchPickerItem`.
235
+
236
+ Deliberately **kept**, so migrating consumers are not caught out:
237
+
238
+ - `<lr-icon>`'s `autoWidth` / `auto-width` stays, deprecation notice and all. Web Awesome's own
239
+ pinned manifest still publishes `auto-width` on `wa-icon`, and a mirrored tag owes its whole
240
+ upstream surface — dropping it classifies `wa-icon` as an `unsupported` mapping, which is a
241
+ release blocker. Prefer `canvas="auto"`; the alias goes when upstream's does.
242
+ - The same holds for **seven more** deprecated aliases whose records say `removalNotBefore: 10.0.0`
243
+ and which are therefore, on paper, removable now: the `base` part on `<lr-accordion-item>`,
244
+ `<lr-file-input>`, `<lr-qr-code>`, `<lr-sparkline>` and `<lr-video-playlist>`, and the `label`
245
+ part on `<lr-file-input>` and `<lr-known-date>`. Every one is published by the pinned upstream
246
+ manifest, and removing them was measured against the real comparison pipeline: each produces an
247
+ `unsupported` mapping. `<lr-qr-code>`'s `base` is the sharpest case — `sl-qr-code` publishes it as
248
+ its ONLY part and does not deprecate it at all.
249
+
250
+ That `10.0.0` is not a plan anyone made. Policy requires a removal to clear one whole subsequent
251
+ major, so `10.0.0` is simply the earliest legal value for a deprecation dating to 8.x. The records
252
+ now say so, because read literally they promised a removal that will never happen while upstream
253
+ ships the same names.
254
+
255
+ - `lr-geojson-view` stays. It is a permanent compatibility class for the pre-v9 tag, not a
256
+ deprecation.
257
+ - `base` / `wrapper` on `<lr-switch>` and `<lr-checkbox>` stay pointing at the control owner. They
258
+ are Web Awesome / Shoelace compatibility names, and the library's parity contract is that a
259
+ mirrored name keeps its meaning; `row` (new in this release) names the row wrapper instead.
260
+ - 082b885: **10.0.0.** A set of public-contract corrections that need a major boundary, plus a larger set of
261
+ additive fixes. Breaking items first; each one states what to change if you relied on the old
262
+ behavior.
263
+
264
+ ### Breaking
265
+
266
+ **`<lr-calendar>` derives the week start from the locale.** `firstDayOfWeek` defaulted to a
267
+ hardcoded `1` (Monday) and never consulted the locale — while the very same component already
268
+ threaded `effectiveLocale` through its weekday *label* formatting. Measured, same `en-US` page:
269
+ `<lr-calendar>` rendered `Mon Tue Wed…` while `<lr-date-picker>` rendered `Sun Mon Tue…`. The
270
+ default is now `'auto'`, resolved through the same `resolveFirstDayOfWeek()` contract
271
+ `<lr-date-picker>`/`<lr-date-input>` already use. The type is now exactly
272
+ `'auto' | 'sun' | … | 'sat'`: the bare `0`–`6` integer form is gone rather than kept as a second
273
+ spelling, so there is one way to express a week start instead of two that had to be sanitized and
274
+ wrapped against each other. Replace `first-day-of-week="1"` with `first-day-of-week="mon"` to keep
275
+ the old rendering. There is no `wa-calendar`, so no upstream parity is affected.
276
+
277
+ **`<lr-progress-ring>` gains `show-value`, defaulting to `false`.** A determinate ring rendered its
278
+ percentage unconditionally, with no way to suppress it short of slotting replacement content — while
279
+ its sibling `<lr-progress-bar>` has had opt-in `show-value` all along, and the reference has always
280
+ claimed the two share "the same value contract". They now actually do. Add `show-value` to keep the
281
+ percentage. `aria-valuetext` still carries it either way, so the accessible value is unchanged.
282
+
283
+ **`<lr-media-card>`'s `alt` becomes optional, so a decorative image is expressible.** It was
284
+ `alt: string = ''`, and the render read `this.alt || this.filename || <localized generic>` — so an
285
+ explicit `alt=""` was indistinguishable from an absent one and came out as `alt="Image attachment"`.
286
+ There was no way to mark the image decorative, which is the one thing `alt=""` means in HTML. The
287
+ type is now `alt?: string` and the render uses `??`, matching `<lr-image-viewer>` and
288
+ `<lr-document-preview>`, which already documented that contract. Omitting `alt` is unchanged; only
289
+ the value read back from an unset property differs (`''` becomes `undefined`), so a consumer
290
+ comparing `el.alt === ''` should read `el.alt ?? ''`. The nested `<video controls>` label
291
+ deliberately does NOT follow: an empty `alt` there would leave an interactive player with no
292
+ accessible name, and "decorative" is not a state a media control can be in.
293
+
294
+ **`<lr-attachment-chip>`'s `lr-preview-request` is no longer cancelable.** It was advertised as a
295
+ veto point, but the chip never read `defaultPrevented` and owns no preview default action to
296
+ cancel — its own docs say it "never registers or owns a viewer/overlay" — so `preventDefault()` was
297
+ a no-op. The flag is removed rather than left as a promise the component cannot keep.
298
+
299
+ ### Event vocabulary: one name per event
300
+
301
+ Several events had two spellings. 10.0.0 keeps the canonical name and **removes the old one
302
+ outright** rather than shipping a deprecated alias into a library that has no released consumers
303
+ yet — a dual-emit alias is a permanent tax paid to protect users who do not exist.
304
+
305
+ Rename the listener; the detail object is unchanged in every case.
306
+
307
+ | Removed | Use instead | On |
308
+ |---|---|---|
309
+ | `lr-entity-activate` | `lr-entity-select` | `<lr-entity-card>`, `<lr-entity-chip>`, `<lr-neighbor-list>` |
310
+ | `lr-visible-range-changed` | `lr-visible-range-change` | `<lr-virtual-list>` |
311
+ | `lr-run-select` | `lr-run-change` | `<lr-rag-eval-dashboard>` |
312
+ | `lr-dialog-close` | `lr-close` | `<lr-dialog>`, `<lr-drawer>` |
313
+
314
+ `lr-visible-range-changed` was the only past-tense `-changed` spelling among 58 `-change`-family
315
+ events, so a convention-driven listener silently missed it — on a component embedded in ten viewers.
316
+
317
+ Two deliberate non-removals. `<lr-community-card>` and `<lr-path-strip>` keep `lr-entity-activate`:
318
+ it is their only name and never was an alias. `<lr-accordion>` keeps `lr-expand`/`lr-collapse`,
319
+ which mirror `wa-accordion`'s real event names — removing them would have broken upstream parity
320
+ rather than tidied it. `lr-citation-badge` was also left alone: `lr-citation-select` is an
321
+ established *container*-level event with a richer `{ citation }` detail that containers translate
322
+ its `{ sourceId, index }` into, so unifying there would have delivered two shapes under one name.
323
+
324
+ ### Interaction, focus and visibility corrections
325
+
326
+ A sweep with a CSS-specificity analyzer found rules that were supposed to win losing to another rule
327
+ in the same shadow stylesheet, so their declarations never applied. The code read correctly and the
328
+ tests were green; only a rendered probe showed the difference.
329
+
330
+ - **The keyboard highlight is visible on the selected row again** in `<lr-select>`, `<lr-combobox>`,
331
+ `<lr-model-select>` and `<lr-voice-picker>`. Each had `[aria-selected="true"]` written after the
332
+ active-descendant rule at equal specificity, so arrow-keying onto the already-selected option
333
+ produced no visible highlight at all.
334
+ - **`appearance="filled"` has a focus indicator again** on `<lr-combobox>` and `<lr-date-input>`.
335
+ Both had none: the appearance rule out-ranked `:focus-within`, and the only `outline` in the focus
336
+ rule was `solid transparent`. Both now express appearance as private custom properties, so no
337
+ `[part]` rule can out-rank another and the failure mode is structurally impossible.
338
+ - **Pointer feedback restored** where a state rule or a resting rule was swallowing it:
339
+ `<lr-code-block>`'s line-gutter button (neither hover nor press, ever), `<lr-pagination>`'s page
340
+ input, `<lr-table>`'s sticky sortable header, `<lr-time-range>`'s active preset,
341
+ `<lr-agent-trace>`'s active handoff, `<lr-compare-panel>`'s cast vote, `<lr-flow-canvas>`'s
342
+ selected edge, `<lr-conversation-item>`'s open session, `<lr-option>`, `<lr-entity-chip>` and
343
+ `<lr-approval-queue>`.
344
+ - **Focus rings restored** on `<lr-calendar>`'s today cell, `<lr-sequence-strip>`'s selected cell,
345
+ `<lr-embedding-explorer>`'s selected point, and `<lr-dashboard-grid>`/`<lr-flow-canvas>` cells in a
346
+ collision or drop state.
347
+ - **`hidden` works again** where the component's own stylesheet was defeating the UA default:
348
+ `<lr-flag>` painted a full-size broken image beside its skeleton while loading, `<lr-video>` kept
349
+ the controls play button both painted and focusable behind a poster, and nine components let a
350
+ consumer's `hidden` slotted child stay visible.
351
+ - **Disabled controls look disabled**: `<lr-entity-chip>` and `<lr-approval-queue>` rendered their
352
+ disabled buttons pixel-identical to enabled ones, with a pointer cursor and full hover feedback.
353
+ - **`<lr-random-content>` actually hides** the candidates it is not showing; its rotation was
354
+ previously observable only to assistive technology.
355
+ - **`<lr-video>` keeps captions** for a `<track>` with no `kind` attribute, whose HTML missing-value
356
+ default is `subtitles`.
357
+
358
+ ### Additive
359
+
360
+ - **`lr-search-change` detail is consistent again.** `<lr-terminal>` and `<lr-av-player>` now emit
361
+ the canonical `LyraSearchChangeDetail` including `matchCountExact`, which 18 of 21 emitters already
362
+ did. This matters most on `<lr-terminal>`, which truncates at 10,000 matches and previously had no
363
+ way to signal that its count was a lower bound. `<lr-knowledge-graph-explorer>`'s detail is now exactly
364
+ `{ query, matchCount, matchCountExact }` — `searchQuery` is replaced by the canonical `query`
365
+ rather than carried beside it; it deliberately has no `activeIndex`, being a live node filter
366
+ rather than a cursor-based search. (The `searchQuery` *property* is unaffected.)
367
+ - **`<lr-token-input>` can veto all three mutations.** `lr-add` and `lr-token-edit` are now
368
+ cancelable, matching `lr-remove`, which already was. A vetoed add keeps the typed draft so the user
369
+ can correct it; a vetoed edit leaves the inline editor open with the edited text intact.
370
+ - **`<lr-dialog>`'s close event is `lr-close`** (`DialogCloseReason` detail, cancelable);
371
+ `<lr-drawer>` inherits it. See the removal table above.
372
+ - **`<lr-accordion>` also emits a cancelable `lr-toggle-request`** (`{ collapsed, item }`) alongside
373
+ its upstream-mirroring `lr-expand`/`lr-collapse`, matching the convention
374
+ `<lr-code-block>`/`<lr-chat-message>` use. `preventDefault()` on either vetoes the transition.
375
+ - **`<lr-popover>` gains `disabled`.** Both `<lr-tooltip>` and its own subclass `<lr-dropdown>` had
376
+ it; the base did not. `<lr-dropdown>` now inherits it, with byte-identical behavior.
377
+ - **`<lr-table>` emits `lr-selection-change`** when a `selectionMode` flip to `'single'` coerces a
378
+ multi-row selection down to one key — previously a silent mutation a host mirroring the event could
379
+ not see.
380
+ - **`<lr-command-palette>` re-emits `focus`/`blur`** from its search input; native ones neither bubble
381
+ nor cross the shadow boundary.
382
+ - **`PptxViewerAdapter` and friends are importable.** `pptx-loader.js` had no `package.json#exports`
383
+ entry despite the reference documenting the import, so it failed with
384
+ `ERR_PACKAGE_PATH_NOT_EXPORTED`. A new check now requires every helper module to be classified
385
+ public or internal, closing the same class that stranded `archive-viewer-register.js` in 9.0.0.
386
+ - **`PlaceSync`** is re-exported from `dropdown.class.js`, and ~13 constituent types are re-exported
387
+ from the composite components whose public properties use them.
388
+ - **`<lr-knowledge-graph-explorer>` no longer announces on mount.** A preset `search-query` fired its
389
+ live region before any user action.
390
+
391
+ ### Minor Changes
392
+
393
+ - 357ee35: `<lr-chart>`: declarative reference lines and shaded bands via a new `annotations` property.
394
+
395
+ Marking a threshold, an event year, a regime change or a highlighted period previously meant
396
+ importing `chartjs-plugin-annotation` yourself and wiring it through the raw `config` passthrough —
397
+ the point where a declarative component dropped the user into raw Chart.js, for one of the most
398
+ common things anyone needs on a time series.
399
+
400
+ - `annotations: readonly LyraChartAnnotation[]`, where `LyraChartAnnotation` is
401
+ `{ axis?: 'x' | 'y'; value?: number; from?: number; to?: number; label?: string; tone?: 'neutral'
402
+ | 'brand' | 'success' | 'warning' | 'danger' }`. A finite `value` renders a reference line on that
403
+ axis; a finite `from`/`to` pair renders a band bounded on that axis and spanning the other. `axis`
404
+ defaults to `'y'`.
405
+ - Entries specifying neither a finite value nor a finite range are dropped rather than handed to
406
+ Chart.js, where they render nothing at best; a reversed range is normalized rather than rejected.
407
+ - Tones resolve through the same `getComputedStyle`-then-`resolveCanvasColor` path every other chart
408
+ color takes, since canvas silently ignores an unparseable `strokeStyle`/`fillStyle`.
409
+ - Labelled entries are included in the generated accessible description, mirroring `lr-heatmap`. The
410
+ label is consumer-supplied text and so is not localized; an unlabelled line has no nameable
411
+ meaning to announce beyond a coordinate.
412
+ - The optional `chartjs-plugin-annotation` peer loads on first actual demand, so a page with no
413
+ annotated charts never downloads it. Without it installed the chart still renders and a single
414
+ console warning explains the no-op — the same fail-closed contract `data-labels` uses.
415
+
416
+ On the filed concern about Chart.js's page-wide singleton registry: this plugin is registered
417
+ globally, like `chartjs-plugin-zoom` and unlike `chartjs-plugin-datalabels`. The distinction is that
418
+ datalabels draws on every dataset the moment it is globally registered, whereas annotation draws
419
+ nothing at all unless a chart supplies annotation options — so the registration is unobservable to a
420
+ chart that sets none, covered by an explicit test. It also *has* to be global: registration is what
421
+ installs the plugin's own element types and defaults, and an inline `config.plugins` entry skips
422
+ that, leaving the plugin to throw on missing `borderWidth`/`borderCapStyle` the moment it draws.
423
+ - 8e3f602: `<lr-chart>`: add a logarithmic value axis via a new `scaleType` property.
424
+
425
+ The core loader registered `LinearScale`, `CategoryScale` and `RadialLinearScale` but never
426
+ Chart.js's `LogarithmicScale`, so a logarithmic axis was unreachable — there was no property for it,
427
+ and the raw `config` passthrough could not supply one either, because Chart.js rejects an
428
+ unregistered scale type at construction. Any dataset spanning several orders of magnitude (prices,
429
+ growth, population, latency percentiles, file sizes) could not be charted honestly, since a linear
430
+ axis collapses everything below the maximum into the baseline.
431
+
432
+ - `scaleType: 'linear' | 'logarithmic' = 'linear'` (attribute `scale-type`, type
433
+ `LyraChartScaleType`, exported from the root barrel) targets the **value** axis; the categorical
434
+ axis is never affected. Inherited by `lr-line-chart`, `lr-scatter-chart` and `lr-bar-chart`, and
435
+ applied to the secondary `y2` axis when one is present.
436
+ - `beginAtZero` is not forwarded on a logarithmic axis, since `log(0)` is `-Infinity` and Chart.js
437
+ would otherwise be handed a bound it cannot place.
438
+ - `LogarithmicScale` is registered with the core rather than behind the feature loader: unlike the
439
+ zoom and datalabels plugins it is not a separate package, so it already ships inside the
440
+ `chart.js` module namespace the loader imports and costs no extra download weight.
441
+
442
+ Default is unchanged and covered by an explicit unset test.
443
+ - 744da58: Four consumer-filed defects, plus one the sweep for the same defect class turned up.
444
+
445
+ **`<lr-checkbox-group>`: `value` is settable.** It was a getter with no setter. Reading was fine,
446
+ but `.value=${...}` — the binding every other form control here accepts — compiles to a plain
447
+ property assignment that `readonly` cannot catch at the binding site, so it threw
448
+ "Cannot set property value ... which has only a getter" from inside lit-html during a *later*
449
+ render, blaming framework internals rather than the offending line. Assigning now mirrors the array
450
+ onto the owned checkboxes; it is controlled input, so it emits no `lr-change`, and an assignment
451
+ made before the children exist is applied once they arrive.
452
+
453
+ **`<lr-time-input>`: `valueAsNumber` and `valueAsDate` are settable.** Nobody filed this — sweeping
454
+ the library for the same "public getter a consumer would naturally bind, with no setter" shape found
455
+ it. `<lr-input>`, `<lr-date-picker>`, `<lr-slider>` and `<lr-known-date>` all ship both, and the
456
+ native `<input type="time">` this mirrors accepts both; `<lr-time-input>` was the lone outlier.
457
+ Out-of-range or non-finite figures clear the field rather than wrapping into a different time.
458
+
459
+ **`<lr-map>`: `lr-map-click` resolves `feature` against `dataLayers`, not only the choropleth.**
460
+ Clicking a shape painted through `dataLayers` reported `feature: undefined`, indistinguishable from
461
+ clicking empty ocean — which broke the pattern the two properties invite: choropleth for features
462
+ that have a value, a data layer for features that exist but have none. The detail gains `origin`
463
+ (`'choropleth' | 'data-layer'`) and `sourceId` (the authored `dataLayers[].sourceId`) so a hit is
464
+ attributable.
465
+
466
+ **`<lr-map>`: an untileable numeric feature property is now named up front.** MapLibre GL tiles
467
+ GeoJSON through a worker, where an oversized integer throws "Given varint doesn't fit into 10
468
+ bytes" — uncatchable by the app, invisible except as an opaque message, and with the rest of the
469
+ layer still painting. Sources are pre-scanned and any property beyond `Number.MAX_SAFE_INTEGER`
470
+ draws a dev-mode warning naming the feature and property.
471
+
472
+ **`<lr-heatmap>`: the matrix row-label gutter is configurable, and labels truncate.** It was a
473
+ hardcoded 60px with no measurement, so a longer row label was clipped mid-word by whatever was
474
+ painted beside it on the canvas — which reads as a rendering fault. `rowLabelWidth` now pins a
475
+ width or takes `'auto'` to measure the widest label and size to fit (floored at 60, capped at 40%
476
+ of the host so one label cannot squeeze out the cells it describes), `colLabelHeight` does the same
477
+ for the column band, and a label too wide for the resolved gutter is truncated with an ellipsis
478
+ instead of clipped. The default stays 60: auto-sizing every chart would silently reflow layouts
479
+ whose labels already fit, which is a bigger change than the clipping it fixes.
480
+ - d92bfb2: Two dev-mode defects that shipped in 9.x, plus the per-point chart color cost behind them.
481
+
482
+ **The unknown-attribute diagnostic no longer reports a component's own API as a mistake.**
483
+ Components can now declare a `knownUnobservedAttributes` static for attributes they own without
484
+ observing, and four do. Without it the diagnostic fired on correct markup and on state components
485
+ set on themselves:
486
+
487
+ - `<lr-page disable-sticky="header">` is documented public API read only by
488
+ `:host([disable-sticky~="..."])` rules, so it has no reactive property — authoring it correctly
489
+ drew a warning saying it was wrong.
490
+ - `<lr-animated-image>` (`playing`), `<lr-menu-item>` (`submenu-open`) and `<lr-app-rail>`
491
+ (`mode`, `dragging`) reflect read-only state onto their own host. Each reported its own output
492
+ as an unknown attribute, in every consumer app, the moment that state turned on.
493
+
494
+ **Per-point chart colors are resolved once per distinct color, not once per point.**
495
+ `resolveCanvasColor` inserts a probe element and forces a synchronous style recalculation on every
496
+ call, which `<lr-chart>` paid for each entry of a series' `color`, `segmentColors` and
497
+ `pointColors` arrays — 2,000 probe insertions for a 2,000-point series, before drawing anything.
498
+ The new `resolveCanvasColors` memoizes by color string across the batch, and authored ramps are
499
+ typically a handful of distinct colors repeated across many points. The cache lives for one call,
500
+ so a later draw still picks up live `--lr-*` theme changes.
501
+
502
+ **`<lr-tooltip>` no longer schedules a wasted second render on close.** Its `anchorPositioned`
503
+ reset moved from `updated()` to `willUpdate()`, where it belongs — nothing visible changes, since
504
+ that render already hides the popup via `open`.
505
+ - 19d15f6: Five consumer-reported gaps, several of them follow-ups to the charts/timeline work in this release.
506
+
507
+ **`<lr-chart>`: the formatter now receives the `export` and `spoken` surfaces.** `LyraChartFormatSurface`
508
+ has always declared both and `<lr-lite-chart>` has always emitted them, but `lr-chart` only ever
509
+ passed `visual` and `table` — so one formatter written against the documented contract behaved
510
+ differently depending on which chart rendered it, silently, in exactly the places unit formatting
511
+ matters most. CSV cells now route through `export` and the live announcement through `spoken`. With
512
+ no formatter installed, CSV cells stay the raw machine-readable number (no locale grouping a
513
+ spreadsheet would misparse) and announcements keep their locale format.
514
+
515
+ **`<lr-map>`: choropleth interpolation is selectable.** The fill expression was hard-coded to
516
+ `['interpolate', ['linear'], …]`, so a heavy-tailed quantity — price, population, income — put every
517
+ value below the maximum into the first colour band. `LyraMapChoroplethLayer.interpolation`
518
+ (`'linear' | 'logarithmic'`, default `'linear'`) emits maplibre's own
519
+ `['interpolate', ['exponential', 0.25], …]`, exposing an existing capability rather than adding one.
520
+ **`stops` stay in the data's own units**, so the legend keeps reading in real values instead of log
521
+ units.
522
+
523
+ **`<lr-heatmap>`: a dev-mode warning when `legendStops` and `colorSteps` disagree.** Both are
524
+ deliberate and independent — that independence is what lets a `cellColor` consumer describe a ramp
525
+ the grid no longer uses — but nothing checked they described the same thing, and a legend that
526
+ confidently labels colours the cells never use is worse than no legend. Warning rather than deriving
527
+ one from the other: deriving would silently change what an existing `colorSteps`-only consumer sees
528
+ and would break that escape hatch. Caption-only stops (the `less ▢▢▢▢ more` shape) claim no colour
529
+ and never warn.
530
+
531
+ **`<lr-timeline>`: `collision="stack"` for dense `scale="time"` chronologies.** Coincident items
532
+ overlapped, which is the common case rather than the exception at realistic density. `'stack'` steps
533
+ each colliding item one lane along the cross axis (`--lr-timeline-collision-offset`); an isolated
534
+ item returns to lane 0 rather than inheriting a preceding run's depth. No `'cluster'` mode: collapsing
535
+ items into one expandable marker needs a selection model and click events this deliberately passive
536
+ component does not have.
537
+
538
+ **`<lr-sequence-strip>`: activation and a controlled selection.** The strip read as pickable but had
539
+ no click handling and no event to hook. `lr-item-activate` (`detail: { index, id, item }`) fires on
540
+ click and on Enter/Space at the roving-tabindex focus, and `selectedIndex` marks the current item
541
+ with `aria-current` and `data-selected`. Controlled on purpose: activation does not move the
542
+ selection itself, so the strip cannot drift from a playback index it does not own. The selection is
543
+ drawn as a ring, not a tint — a cell's background is data (its category colour).
544
+
545
+ All five are additive; unset, every component renders as before.
546
+ - b3b9d30: `<lr-flag>`: accept ISO 3166-1 alpha-3 country codes, and render a neutral fallback for codes that
547
+ cannot resolve.
548
+
549
+ Two related consumer reports.
550
+
551
+ **Alpha-3.** `country` took alpha-2 only, while public statistical sources — World Bank, UN, IMF and
552
+ most open-data portals — key country records on alpha-3, so every consumer plotting country-level
553
+ data shipped and maintained its own ~249-row conversion table purely to satisfy this component.
554
+ `country` now accepts either: length alone disambiguates the two code spaces, so no format hint or
555
+ new API is needed. The 249 officially-assigned mappings are packed as a ~1.2 KB fixed-width string
556
+ and expanded into a lookup lazily on the first alpha-3 use, so an alpha-2-only app never pays for
557
+ them. Withdrawn and user-assigned codes deliberately do **not** map to a successor state — a
558
+ dissolved federation has no current flag, so it takes the unresolved path below.
559
+
560
+ **Unresolved ≠ error.** An unresolvable code rendered localized error text into `[part="error"]` and
561
+ reflected `data-error`. That is right for a genuine mistake, but historical and longitudinal
562
+ datasets legitimately contain states with no current ISO code, and in a table or card grid those
563
+ rows want a neutral placeholder occupying the same footprint, not wording that reads to a user as a
564
+ bug. Styling `[part="error"]` could not fix it, because the localized string is contained text
565
+ rather than substitutable content.
566
+
567
+ - A new `fallback` slot renders in place of the flag for an unresolvable code, and a `fallback`
568
+ property takes a placeholder image URL (rendered as `[part="fallback-image"]`) when no slot
569
+ content is supplied.
570
+ - The host now reflects `data-unresolved` separately from `data-error`, so the two cases can be
571
+ styled apart.
572
+
573
+ Both additive: a resolvable code renders exactly as before, covered by an explicit inert-by-default
574
+ test.
575
+ - 990f4d6: `<lr-heatmap>`: support signed data via new `domain` and `midpoint` properties, and stop dropping
576
+ the negative half of a signed dataset.
577
+
578
+ Two related reports. The ramp always spanned the data's own `min`…`max`, so two heatmaps of
579
+ comparable data could not share a scale — each silently normalized to its own extremes — and a
580
+ diverging palette could not be centred: with data running -4.93 to +28.8, the neutral colour landed
581
+ at 15% of the range rather than on zero, painting "no change" onto a substantial decrease.
582
+ Separately, the cell-fill guard was `value < 0 || !Number.isFinite(value)`, so *every* negative
583
+ rendered as no-data, not just the documented `-1` sentinel — indistinguishable from a genuinely
584
+ missing cell, and silent (32.7% of cells in the reporter's dataset).
585
+
586
+ - `domain?: [number, number]` pins the ramp's input domain, so comparable charts can share a scale.
587
+ A reversed pair is normalized; a degenerate or non-finite one falls back to the derived range.
588
+ - `midpoint?: number` anchors a diverging ramp's neutral colour, scaling the two halves
589
+ independently (`lo`→0, `midpoint`→0.5, `hi`→1). A midpoint outside the domain degrades to plain
590
+ normalization rather than distorting the ramp.
591
+ - Setting either one opts into **signed data**, where only a non-finite value is no-data. That
592
+ gating is deliberate: `-1` is the long-documented sentinel and a matrix of counts has no
593
+ meaningful negative, so declaring a domain or midpoint is what disambiguates the two. With
594
+ neither set, behavior is byte-identical to before — covered by an explicit unset-regression test.
595
+ - A structurally absent matrix cell now reads as `NaN` in signed mode (non-finite is no-data in
596
+ both modes), so it stays a hole while a real `-1` beside it renders on the ramp. The default
597
+ mode still resolves an absent cell to `-1`, keeping `valueAt()` and the `lr-cell-click` payload
598
+ unchanged.
599
+ - The accessible cell labels track the painted contract, so a rendered negative is announced with
600
+ its value instead of "no data".
601
+ - `scale="sqrt"` continues to reject negatives — a square root of a negative has no meaning — now
602
+ explicitly rather than as a side effect of the shared guard.
603
+ - 17b540a: `<lr-lite-chart>`: add a base-10 `scale="logarithmic"` value axis.
604
+
605
+ The dependency-free SVG chart does not extend `LyraChart`, so it did not inherit the `scaleType`
606
+ support added for the Chart.js-backed charts, leaving no way to plot data spanning several orders of
607
+ magnitude honestly — a linear axis collapses everything below the maximum into the baseline.
608
+
609
+ - `scale` now accepts `'logarithmic'` alongside `'linear'` and `'sqrt'`, defaulting to `'linear'`.
610
+ - Unlike `'sqrt'` (which compresses bars only, by long-standing design), the logarithmic axis
611
+ applies to **bars, line points and gridlines alike** — a log axis whose gridlines stayed linear
612
+ would misrepresent the plot. All three now resolve through one `valueFraction()` dispatcher so the
613
+ scale can never apply to some marks and not others.
614
+ - Its lower bound is the smallest *positive* datum, not the linear `lo`. `beginAtZero` defaults to
615
+ true, so `lo` is normally `0`, which has no logarithm; deriving the floor from the data is what
616
+ makes a 1…1000 series span three even decades instead of collapsing onto one. Measured: decade
617
+ gaps of 80.7/80.6/80.7px versus linear's 2.2/21.8/217.8px on the same data.
618
+ - Zero and negative values pin to the axis floor rather than reaching the SVG as `-Infinity`, which
619
+ would blank the series — this renderer has no Chart.js-style "drop the point" fallback. A
620
+ degenerate domain falls back to the linear fraction.
621
+
622
+ `'linear'` and `'sqrt'` render exactly as before, covered by an explicit unchanged-default test.
623
+ - 1b0aa52: `<lr-map>`: render a continuous choropleth legend, via a new `legendGradient` property and a
624
+ `legend` slot.
625
+
626
+ `choropleth` builds an interpolated fill expression from `stops` — a continuous ramp — but `legend`
627
+ accepted only `{ color, label, pattern }` rows rendered as discrete swatches, and the component
628
+ exposed no slots. The standard key for a choropleth (a gradient bar with endpoint ticks) could not
629
+ be rendered inside the component that produces the gradient, so a consumer had to draw a second,
630
+ unaligned legend outside the map and keep its stops manually in sync with the layer's.
631
+
632
+ - `legendGradient: readonly (readonly [number, string])[]` takes the same `[value, color]` shape as
633
+ `choropleth.stops`, so the usual assignment is `map.legendGradient = myChoropleth.stops` and the
634
+ key cannot drift from the layer it describes. Stops are sorted ascending, bounded to 64, and
635
+ filtered to finite values with a CSS-parsable color; fewer than two usable stops render no bar,
636
+ since a one-stop "gradient" is a flat block that describes nothing. Each stop sits at its true
637
+ proportion of the value range rather than being evenly spaced.
638
+ - `legendGradientLoLabel` / `legendGradientHiLabel` override the endpoint captions, which otherwise
639
+ default to the lowest/highest stop value in the component's own locale-aware formatting.
640
+ - New `legend-gradient`, `legend-lo` and `legend-hi` parts, named to mirror `lr-heatmap`'s gradient
641
+ legend as the request asked, so one styling vocabulary covers both. The bar is `aria-hidden` and
642
+ `inert`; the captions carry the meaning. It mirrors under RTL like the heatmap's does.
643
+ - A new `legend` slot renders custom legend content inside the panel's own layout, so it stays
644
+ positioned with the map. Supplying it opens the panel even when both legend inputs are empty.
645
+
646
+ All additive: with none of them set the component renders exactly as before, covered by an explicit
647
+ unset test.
648
+ - 1625356: Ship an optional `reservations.css` stylesheet that prevents layout shift from lazy-upgrading
649
+ elements, and document the library's scope boundaries.
650
+
651
+ An undefined custom element is an inline box with no intrinsic size, so every `lr-*` in the initial
652
+ viewport contributes a reflow as its definition loads; components that additionally defer on an
653
+ optional peer (`lr-chart`, `lr-map`, `lr-flag`, `lr-flow-canvas`, `lr-knowledge-graph-explorer`)
654
+ can cost a second shift when the peer resolves. Each is individually well-behaved — the aggregate on
655
+ a first paint is what costs a Cumulative Layout Shift score. Until now every consumer derived its own
656
+ `:not(:defined)` sizing rules per component by measurement, and those rules rotted silently whenever
657
+ a component's default dimensions changed.
658
+
659
+ ```css
660
+ @import "@aceshooting/lyra-ui/reservations.css";
661
+ ```
662
+
663
+ - Reserves each component's intrinsic footprint before upgrade, styling **only** `:not(:defined)`
664
+ elements inside an `@layer lr-reservations`, so it is inert the moment a definition upgrades and
665
+ can never fight a component's own layout. No colors, no `:root` rules.
666
+ - Every reservation is expressed with the **same custom property and fallback token the component's
667
+ own stylesheet uses** (`--lr-chart-height`/`--lr-size-280px`, `--lr-flag-aspect-ratio`,
668
+ `--lr-form-control-height`, …). That is what makes it worth shipping rather than documenting
669
+ measured pixels: the reservations track the components, and theming a component re-themes its
670
+ reservation with it.
671
+ - Reservations target each component's *final* default size rather than its skeleton's, so a
672
+ skeleton-to-content swap stays stable too.
673
+
674
+ `llms/shared.md` gains a matching CLS section with the hand-rolled equivalent for consumers who
675
+ prefer their own rules, plus a new **Scope: what this library does not provide** section stating the
676
+ boundaries explicitly — client-side routing (there is no router and no route outlet; the navigation
677
+ components expose active state as ordinary properties to be driven by the application's own router),
678
+ data fetching/state management, and form-submission orchestration.
679
+ - 870ed4f: `<lr-switch>` and `<lr-checkbox>`: expose the row wrapper as a new `row` CSS part.
680
+
681
+ Both controls render the track/box owner and the rich label as *siblings* inside a wrapper element
682
+ that carried no `part` at all, while `base` names the owner box rather than the row. A consumer
683
+ laying out a column of switches therefore had no selector for "the row": `inline-size: 100%` on any
684
+ part inside it resolved against a shrink-to-fit parent, and because the owner box centers its track
685
+ and its width tracks the label's, a longer label shifted the track's x-position from row to row —
686
+ visibly ragged.
687
+
688
+ `row` names the real wrapper, so `::part(row)` can stretch or align it. `base`/`switch`/`wrapper`
689
+ and `base`/`checkbox` keep their existing nodes and meaning — they are documented Web Awesome /
690
+ Shoelace compatibility names, so repointing them would have broken shipped consumers. This is
691
+ purely additive; an unstyled control renders identically.
692
+ - 8cb3545: Four more consumer-filed defects, two per component.
693
+
694
+ **`<lr-table>`: cell links are themeable.** A column's `cell(row)` renders its TemplateResult inside
695
+ the component's shadow root, so an anchor it returns is unreachable from page CSS — and `::part()`
696
+ cannot select past the first compound selector to reach it either. It computed to the UA default
697
+ link blue, the one colour on the page belonging to no design system. Cells now take
698
+ `--lr-table-cell-color`, and a cell anchor takes `--lr-table-cell-link-color` (brand by default)
699
+ plus `--lr-table-cell-link-hover-color`. `:where()` keeps specificity at zero so an inline style on
700
+ the returned anchor still wins, and `revert` hands the UA default back.
701
+
702
+ **`<lr-table>`: `scroll-mode="page"` makes an uncapped table's sticky header work.** `[part="base"]`
703
+ was unconditionally `overflow: auto`, which makes it the sticky containing block for the header
704
+ whether or not anything can scroll in it — so with no `--lr-table-max-height` the header scrolled
705
+ away with the page, and an uncapped page-scrolling table and a pinned header were mutually
706
+ exclusive. That is a real CSS constraint rather than an oversight: a scroll container clips *both*
707
+ axes. The fix is therefore an explicit opt-in, not a changed default, since dropping the overflow
708
+ unconditionally would cost every uncapped wide table its horizontal scrolling.
709
+
710
+ **`<lr-map>`: a guarded `maxBounds`.** Calling `map.setMaxBounds()` through the `.map` escape hatch
711
+ can wedge maplibre-gl at a sub-1 fractional zoom in a wide container: `getZoom()` returns `null`
712
+ permanently, every frame throws from inside the peer's matrix math, and the canvas never paints
713
+ again — a blank map, with nothing thrown at the call site. The property applies the same call, reads
714
+ the camera back, and reverts if it did not survive, so the worst case is an unconstrained map plus a
715
+ dev-mode warning.
716
+
717
+ **`<lr-map>`: property-only choropleth updates no longer re-tile the whole source.** `setData()`
718
+ re-tiles unconditionally, which is invisible on a static map and expensive on an animated one. When
719
+ an update changes only feature properties, the component now emits maplibre-gl's incremental
720
+ `updateData()`. The fast path requires the same feature count, an addressable `id` per feature, and
721
+ geometry that is the *same object* as last time — a deep compare would cost about what the re-tile
722
+ costs, and a false positive would paint stale geometry. Anything else falls back to `setData()`.
723
+ - 10b7d14: `<lr-timeline>`: position items along a real time axis with the new `scale="time"` mode.
724
+
725
+ The timeline was an evenly-spaced sequence in which `timestamp` was rendered as text but never used
726
+ for placement, so a chronology spanning a long period lost the main thing a timeline conveys — two
727
+ events weeks apart and the next decades later all looked equidistant, and the shape of the history
728
+ was invisible.
729
+
730
+ - `scale: 'flow' | 'time' = 'flow'` (type `LyraTimelineScale`, exported from the root barrel).
731
+ `'flow'` is today's layout, unchanged and still the default. `'time'` positions each item at its
732
+ true proportion of the range.
733
+ - `rangeStart` / `rangeEnd` pin the axis instead of deriving it from the earliest and latest items;
734
+ a reversed or non-finite pair falls back to the derived range.
735
+ - `--lr-timeline-time-extent` (default `var(--lr-size-20rem)`) sets the distance to distribute
736
+ along — `block-size` when vertical, `inline-size` when horizontal. Items are absolutely
737
+ positioned, and a percentage against an auto-sized track would resolve to zero.
738
+ - An item with no parseable `timestamp` — including one supplied only through the `timestamp` slot,
739
+ which carries no machine-readable instant — keeps document order and is spread evenly, so a
740
+ partially-timestamped list degrades instead of stacking every unknown at the origin.
741
+ - Positions are written to each child as a private `--_lr-timeline-item-offset` custom property and
742
+ removed again when switching back to `'flow'`, so the component still never alters its children's
743
+ content or structure.
744
+
745
+ Scope note: this covers the request's preferred option. Items sharing an instant overlap rather than
746
+ being fanned into lanes — the denser case (parallel lanes by category, a brushable/zoomable range,
747
+ per-event click events, collision handling) would change this component's deliberately passive,
748
+ zero-event contract, so it belongs in a sibling component with its own design, not here.
749
+
750
+ ### Patch Changes
751
+
752
+ - c174d2d: Fix three defects found while auditing test coverage:
753
+
754
+ - `<lr-chat-message>`: with `actions-position="outside"`, the slotted actions row is a sibling of
755
+ the bubble rather than a flex item nested inside the footer, so the footer's role-conditional
756
+ auto-margin alignment became a no-op (a box that already fills its container has no spare space
757
+ for `auto` margins to distribute). A user turn's actions stayed pinned to the inline-start edge
758
+ instead of aligning to the inline-end edge next to its own right-aligned bubble. Now aligned via
759
+ `justify-content` on the actions row itself.
760
+ - `<lr-file-input>`: the dropzone collapsed to its own intrinsic content height instead of filling
761
+ a host given a definite block size (e.g. absolutely positioned with `inset: 0` over a sized
762
+ panel) — none of `[part="form-control"]`, `.dropzone`, or `[part~="base"]` propagated the host's
763
+ height down the chain.
764
+ - `<lr-chart>`: a chart whose row count exceeded the 1,000-record rendering budget but whose series
765
+ count did not got its shared `labels` array correctly sampled down, but each series' own
766
+ `data`/`color`/`pointRadius`/`pointColors`/`segmentColors` arrays stayed at full source length —
767
+ a length mismatch handed straight to Chart.js. Row sampling now applies to every series
768
+ regardless of whether the series dimension itself also needed sampling.
769
+ - bf447ca: `<lr-tooltip>`: close a pointer-held tooltip when a re-render replaces its trigger.
770
+
771
+ A list that re-renders — a chat transcript, a log view, anything virtualized — replaces the `for`
772
+ target with a fresh node rather than moving the existing one. The outgoing element is detached
773
+ before it can fire the `mouseleave` that normally closes a resting tooltip, and the incoming element
774
+ is not necessarily under the pointer. `adoptTrigger()` correctly rebound its listeners to the new
775
+ node but let the tooltip inherit the outgoing node's open state, so the tooltip hung open over a
776
+ trigger nobody was pointing at. Reported live as several resting tooltips visible at once with the
777
+ pointer over none of them, via `<lr-copy-button>`'s default `tooltip="full"`.
778
+
779
+ A trigger swap now re-derives the open state from the incoming element: the tooltip stays open only
780
+ while that element is genuinely held — the pointer resting over it (`:hover`) or focus inside it —
781
+ and closes otherwise. Focus-, click- and `manual`-opened tooltips are untouched, and re-rendering a
782
+ row the pointer still rests on leaves its tooltip alone. Verified on Chromium, Firefox and WebKit.
783
+
784
+ The same report's secondary note about a tooltip being clipped inside a scroll container is existing
785
+ behavior with existing API: pass `hoist` (`<lr-copy-button>` already forwards it to its tooltip) to
786
+ render the popup in the top layer and escape the clipping ancestor.
787
+
3
788
  ## 9.1.1
4
789
 
5
790
  ### Patch Changes