@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
@@ -82,7 +82,7 @@
82
82
  "name": "lr-accordion-item",
83
83
  "description": {
84
84
  "kind": "markdown",
85
- "value": "`<lr-accordion-item>` — an accessible expandable section for `<lr-accordion>`.\n\nThe item deliberately owns only Web Awesome's accordion-item vocabulary. Use `expanded`,\n`label`, and `expand()`/`collapse()`/`toggle()` here; the independent `open`, `summary`, and\n`show()`/`hide()` disclosure vocabulary belongs to `<lr-details>`.\n\nA present host `aria-label`, including an explicitly empty value, names the trigger button.\nWhen absent, the trigger retains its native name-from-content behavior.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n- Deprecated part `base`: Deprecated since `8.2.3`. Use part `::part(accordion-item)`. Removal is not permitted before `10.0.0`. The accordion-item part names the outer wrapper explicitly; base remains on that same node during the compatibility window.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Panel content. |\n| `icon` | Optional decorative expand/collapse icon. Its flattened subtree remains visible but is inert and hidden from assistive technology; the trigger button is the sole action. |\n| `label` | Visible header label; takes priority over the `label` property. Its flattened subtree is inert and hidden from assistive technology, while its accessibility-visible text names the sole trigger button. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `accordion-item` | The outer wrapper. It is the same node as `base`. |\n| `base` | Deprecated compatibility name for the outer wrapper; use `accordion-item`. |\n| `button` | The trigger button. |\n| `content` | Content container inside the panel. |\n| `heading` | Heading around the trigger; omitted for `heading-level=\"none\"`. |\n| `icon` | Expand/collapse icon container. |\n| `label` | Label container. |\n| `panel` | Expandable panel. |\n\n---\n\n**CSS Custom Properties**\n\n- `--easing` — Upstream-compatible alias for `--lr-accordion-item-easing`.\n- `--hide-duration` — Upstream-compatible alias for `--lr-accordion-item-hide-duration`.\n- `--lr-accordion-item-button-active-bg` (default: `color-mix(...)`) — Trigger pressed background.\n- `--lr-accordion-item-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Trigger hover background.\n- `--lr-accordion-item-easing` (default: `var(--lr-easing-standard)`) — Expand/collapse easing.\n- `--lr-accordion-item-filled-bg` (default: `var(--lr-color-surface-raised)`) — Filled item background.\n- `--lr-accordion-item-filled-outlined-bg` (default: `var(--lr-color-surface-raised)`) — Filled-outlined item background.\n- `--lr-accordion-item-hide-duration` (default: `var(--lr-duration-base)`) — Collapse transition duration.\n- `--lr-accordion-item-outlined-bg` (default: `var(--lr-color-surface)`) — Outlined item background.\n- `--lr-accordion-item-show-duration` (default: `var(--lr-duration-base)`) — Expand transition duration.\n- `--lr-accordion-item-spacing` (default: `var(--lr-form-control-padding-inline)`) — Header/content spacing.\n- `--show-duration` — Upstream-compatible alias for `--lr-accordion-item-show-duration`.\n- `--spacing` — Upstream-compatible alias for `--lr-accordion-item-spacing`."
85
+ "value": "`<lr-accordion-item>` — an accessible expandable section for `<lr-accordion>`.\n\nThe item deliberately owns only Web Awesome's accordion-item vocabulary. Use `expanded`,\n`label`, and `expand()`/`collapse()`/`toggle()` here; the independent `open`, `summary`, and\n`show()`/`hide()` disclosure vocabulary belongs to `<lr-details>`.\n\nA present host `aria-label`, including an explicitly empty value, names the trigger button.\nWhen absent, the trigger retains its native name-from-content behavior.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n- Deprecated part `base`: Deprecated since `8.2.3`. Use part `::part(accordion-item)`. Removal is not permitted before `10.0.0`. The accordion-item part names the outer wrapper explicitly; base remains on that same node during the compatibility window. That version is a policy floor, not a plan: Web Awesome still publishes its own deprecated `base` part on `wa-accordion-item`, and a mirrored tag owes its whole upstream surface, so this alias is removed only when upstream's is.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Panel content. |\n| `icon` | Optional decorative expand/collapse icon. Its flattened subtree remains visible but is inert and hidden from assistive technology; the trigger button is the sole action. |\n| `label` | Visible header label; takes priority over the `label` property. Its flattened subtree is inert and hidden from assistive technology, while its accessibility-visible text names the sole trigger button. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `accordion-item` | The outer wrapper. It is the same node as `base`. |\n| `base` | Deprecated compatibility name for the outer wrapper; use `accordion-item`. |\n| `button` | The trigger button. |\n| `content` | Content container inside the panel. |\n| `heading` | Heading around the trigger; omitted for `heading-level=\"none\"`. |\n| `icon` | Expand/collapse icon container. |\n| `label` | Label container. |\n| `panel` | Expandable panel. |\n\n---\n\n**CSS Custom Properties**\n\n- `--easing` — Upstream-compatible alias for `--lr-accordion-item-easing`.\n- `--hide-duration` — Upstream-compatible alias for `--lr-accordion-item-hide-duration`.\n- `--lr-accordion-item-button-active-bg` (default: `color-mix(...)`) — Trigger pressed background.\n- `--lr-accordion-item-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Trigger hover background.\n- `--lr-accordion-item-easing` (default: `var(--lr-easing-standard)`) — Expand/collapse easing.\n- `--lr-accordion-item-filled-bg` (default: `var(--lr-color-surface-raised)`) — Filled item background.\n- `--lr-accordion-item-filled-outlined-bg` (default: `var(--lr-color-surface-raised)`) — Filled-outlined item background.\n- `--lr-accordion-item-hide-duration` (default: `var(--lr-duration-base)`) — Collapse transition duration.\n- `--lr-accordion-item-outlined-bg` (default: `var(--lr-color-surface)`) — Outlined item background.\n- `--lr-accordion-item-show-duration` (default: `var(--lr-duration-base)`) — Expand transition duration.\n- `--lr-accordion-item-spacing` (default: `var(--lr-form-control-padding-inline)`) — Header/content spacing.\n- `--show-duration` — Upstream-compatible alias for `--lr-accordion-item-show-duration`.\n- `--spacing` — Upstream-compatible alias for `--lr-accordion-item-spacing`."
86
86
  },
87
87
  "attributes": [
88
88
  {
@@ -389,7 +389,7 @@
389
389
  "name": "lr-agent-workspace",
390
390
  "description": {
391
391
  "kind": "markdown",
392
- "value": "`<lr-agent-workspace>` — a responsive, controlled shell for an AI conversation and its\nsupporting agent state. It renders the transcript and composer in the main pane, and composes\nexisting run, tool, retrieval, grounding, and context primitives in an optional details pane.\n\nThe component performs no network requests, model calls, retrieval, or persistence. Assign new\ndata to the public properties as the host application receives updates. The `messages` fallback\nrenders ordered `message.parts` through `<lr-message-parts>` when supplied, otherwise sanitized\nMarkdown from the legacy `message.text`; applications can replace the entire region with the\n`messages` slot. The `details` slot similarly replaces the built-in details pane while keeping\nthe responsive shell. Empty and duplicate message ids normalize first-wins before the bounded\nwindow is chosen; at most the latest 500 valid messages are materialized. Applications needing\na larger retained transcript can supply a virtualized `messages` slot.\nComposer value, follow state, and retrieval selection are request-only:\nchild events are forwarded, but the workspace never writes those public\nproperties. The host applies accepted state back to the component.\n\nPublic collection properties take bounded, clone-owned readonly snapshots. Create a new\ncollection and reassign it after changes; mutating the assigned array does not update the view.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.2.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `composer` | Replaces the built-in plain-frame `<lr-chat-composer>`; a supplied composer keeps its own frame. |\n| `details` | Replaces the built-in run/tool/retrieval/grounding/context details pane. |\n| `header-actions` | Header actions such as model selection, settings, or export controls. |\n| `messages` | Replaces the data-driven transcript message list. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root workspace wrapper. |\n| `body` | The main conversation/details layout. |\n| `composer` | The composer region. |\n| `composer-input` | The built-in `<lr-chat-composer>`. |\n| `conversation` | The main transcript pane. |\n| `details` | The responsive details pane. |\n| `details-content` | The built-in details content wrapper. |\n| `header` | The workspace heading and header-actions slot. |\n| `header-actions` | The header-actions slot wrapper. |\n| `heading` | The visible workspace heading. |\n| `message` | Each data-driven transcript message. |\n| `messages` | Each data-driven transcript message (also exposed as `message`). |\n| `messages-empty` | The empty transcript state. |\n| `section` | A built-in run, tools, retrieval, grounding, or context section. |\n| `section-heading` | A built-in details section heading. |\n| `viewport` | The composed `<lr-chat-viewport>`. |"
392
+ "value": "`<lr-agent-workspace>` — a responsive, controlled shell for an AI conversation and its\nsupporting agent state. It renders the transcript and composer in the main pane, and composes\nexisting run, tool, retrieval, grounding, and context primitives in an optional details pane.\n\nThe component performs no network requests, model calls, retrieval, or persistence. Assign new\ndata to the public properties as the host application receives updates. The `messages` fallback\nrenders ordered `message.parts` through `<lr-message-parts>` when supplied, otherwise sanitized\nMarkdown from the legacy `message.text`; applications can replace the entire region with the\n`messages` slot. The `details` slot similarly replaces the built-in details pane while keeping\nthe responsive shell. Empty and duplicate message ids normalize first-wins before the bounded\nwindow is chosen; at most the latest 500 valid messages are materialized. Applications needing\na larger retained transcript can supply a virtualized `messages` slot.\nComposer value, follow state, and retrieval selection are request-only:\nchild events are forwarded, but the workspace never writes those public\nproperties. The host applies accepted state back to the component.\n\nPublic collection properties take bounded, clone-owned readonly snapshots. Create a new\ncollection and reassign it after changes; mutating the assigned array does not update the view.\n\n**The transcript is the only region that scrolls.** `[part='base']` is a three-row grid —\nheader, conversation, composer — where only the middle row can shrink, so the composed\n`<lr-chat-viewport>` owns the scrolling and the chrome rows stay put. Header and composer\ncontent are therefore sized by their own content: give the workspace less block-size than they\nneed and the conversation row collapses to zero first, after which the chrome is clipped with no\nscrollbar. That only happens with unusually large slotted chrome — a very tall `header-actions`\ntoolbar, or a `composer` replacement much taller than the built-in one — and the fix belongs to\nwhoever supplied it, through the public parts:\n`lr-agent-workspace::part(header) { max-block-size: 4rem; overflow: auto; }` (the same applies\nto `::part(composer)`). No component-owned custom property duplicates that, because a\n`::part()` rule from the consumer's tree already wins over the shadow stylesheet regardless of\nspecificity and can set the cap and the overflow together.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.2.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `composer` | Replaces the built-in plain-frame `<lr-chat-composer>`; a supplied composer keeps its own frame. |\n| `details` | Replaces the built-in run/tool/retrieval/grounding/context details pane. |\n| `header-actions` | Header actions such as model selection, settings, or export controls. |\n| `messages` | Replaces the data-driven transcript message list. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root workspace wrapper. |\n| `body` | The main conversation/details layout. |\n| `composer` | The composer region. |\n| `composer-input` | The built-in `<lr-chat-composer>`. |\n| `conversation` | The main transcript pane. |\n| `details` | The responsive details pane. |\n| `details-content` | The built-in details content wrapper. |\n| `header` | The workspace heading and header-actions slot. |\n| `header-actions` | The header-actions slot wrapper. |\n| `heading` | The visible workspace heading. |\n| `message` | Each data-driven transcript message. |\n| `messages` | Each data-driven transcript message (also exposed as `message`). |\n| `messages-empty` | The empty transcript state. |\n| `section` | A built-in run, tools, retrieval, grounding, or context section. |\n| `section-heading` | A built-in details section heading. |\n| `viewport` | The composed `<lr-chat-viewport>`. |"
393
393
  },
394
394
  "attributes": [
395
395
  {
@@ -1945,9 +1945,16 @@
1945
1945
  "name": "lr-bar-chart",
1946
1946
  "description": {
1947
1947
  "kind": "markdown",
1948
- "value": "`<lr-bar-chart>` — `<lr-chart>` with a `\"bar\"` default. Like the mirrored Web Awesome tag,\nits writable `type` still accepts the complete chart-type vocabulary.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
1948
+ "value": "`<lr-bar-chart>` — `<lr-chart>` with a `\"bar\"` default. Like the mirrored Web Awesome tag,\nits writable `type` still accepts the complete chart-type vocabulary.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-table-toggle` | The disclosure button rendered by `dataTableToggle`. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-data-table-toggle-active-bg` — Pressed background of the `dataTableToggle` disclosure button; defaults to a mix of the hover background with the shared active mix partner.\n- `--lr-chart-data-table-toggle-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the `dataTableToggle` disclosure button.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
1949
1949
  },
1950
1950
  "attributes": [
1951
+ {
1952
+ "name": "annotations",
1953
+ "description": {
1954
+ "kind": "markdown",
1955
+ "value": "Declarative reference lines and shaded bands — a threshold, an event year, a regime change, a\nhighlighted period. Each entry marks either a single `value` or a `from`/`to` range on `axis`\n(default `'y'`), with an optional `label` and semantic `tone`.\n\nNeeds the optional `chartjs-plugin-annotation` peer, loaded on first actual demand so a page\nwith no annotated charts never downloads it. The plugin is registered globally, like\n`chartjs-plugin-zoom` and unlike `chartjs-plugin-datalabels`: it draws nothing unless a chart\nsupplies annotation options, so the registration is unobservable to charts that set none, and\nregistration is also what installs the plugin's own element defaults. Without the peer\ninstalled the chart still renders and a single console warning explains the no-op — the same\nfail-closed contract `data-labels` uses.\n\nEntries are included in the generated accessible description, mirroring `lr-heatmap`.\n\nType: `readonly LyraChartAnnotation[]` \nDefault: `[]`"
1956
+ }
1957
+ },
1951
1958
  {
1952
1959
  "name": "area",
1953
1960
  "description": {
@@ -1969,6 +1976,13 @@
1969
1976
  "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
1970
1977
  }
1971
1978
  },
1979
+ {
1980
+ "name": "data-table-toggle",
1981
+ "description": {
1982
+ "kind": "markdown",
1983
+ "value": "Render a disclosure button above the accessible data table so a sighted reader can reveal the\nnumbers behind the chart on demand. `showDataTable` alone is all-or-nothing -- the table is\neither permanently screen-reader-only or permanently visible -- which left a consumer wrapping\na duplicated table in their own `<details>`.\n\nWith this set, `showDataTable` becomes the disclosure's *initial* state rather than its whole\nbehavior. The table stays in the DOM in both states, so assistive technology never loses it.\n\nType: `boolean` \nDefault: `false`"
1984
+ }
1985
+ },
1972
1986
  {
1973
1987
  "name": "description",
1974
1988
  "description": {
@@ -2090,6 +2104,21 @@
2090
2104
  "value": "Chart.js plugins attached to this chart instance.\n\nType: `LyraChartPlugin[]` \nDefault: `[]`"
2091
2105
  }
2092
2106
  },
2107
+ {
2108
+ "name": "scale-type",
2109
+ "description": {
2110
+ "kind": "markdown",
2111
+ "value": "Scale type for the **value** axis (the categorical axis is unaffected). `'logarithmic'` plots\na dataset spanning several orders of magnitude honestly, where a linear axis collapses\neverything below the maximum into the baseline. Inherited by `lr-line-chart`,\n`lr-scatter-chart` and `lr-bar-chart`.\n\nA logarithmic axis cannot represent zero or negative values (`log(0)` is `-Infinity`), so\n`beginAtZero` is not forwarded in that mode -- Chart.js would otherwise be handed a bound it\ncannot place. Non-positive data points are dropped by Chart.js's own log scale.\n\nType: `LyraChartScaleType` \nDefault: `'linear'`"
2112
+ },
2113
+ "values": [
2114
+ {
2115
+ "name": "linear"
2116
+ },
2117
+ {
2118
+ "name": "logarithmic"
2119
+ }
2120
+ ]
2121
+ },
2093
2122
  {
2094
2123
  "name": "show-data-table",
2095
2124
  "description": {
@@ -2178,7 +2207,7 @@
2178
2207
  "name": "lr-box-plot",
2179
2208
  "description": {
2180
2209
  "kind": "markdown",
2181
- "value": "`<lr-box-plot>` — a box-and-whisker chart from precomputed five-number\nsummaries (no raw sample data is shipped to the browser). Beyond Web\nAwesome's chart set — useful for summarizing distributions.\n\nPublic collection properties take bounded, clone-owned readonly snapshots. Create a new\ncollection and reassign it after changes; mutating the assigned array does not update the view.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `data-table` | An optional consumer-provided complete/paginated accessible table alternative. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The box-plot canvas. A keyboard-navigable surface: Arrow keys/Home/End walk the individual boxes and Enter/Space activates the current one, mirroring `<lr-chart>`. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples more than 1,000 records. |\n| `description` | The accessible box-plot summary. |\n| `error` | Static visible error shown instead of the canvas when the optional box-plot peer fails to load; its transition is announced through a shared light-DOM alert. |\n| `legend` | The wrapping DOM legend rendered when `legend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its box series is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `plot` | The fixed-height canvas region. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`). Same token and default as `<lr-chart>`.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Canvas grid-line color.\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — Consumer-owned chart height. The `height` property supplies only a private fallback, so this public token always wins when set.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — DOM legend label color.\n- `--lr-chart-legend-item-active-bg` — Legend-item pressed background.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Legend-item hover background.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum side-legend track size.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where the eight-color series ramp collapses onto a repeating system-color cycle and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart. Shared verbatim with `<lr-chart>` and `<lr-lite-chart>`.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Canvas tick and axis-title color.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Canvas tooltip background.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Canvas tooltip text color."
2210
+ "value": "`<lr-box-plot>` — a box-and-whisker chart from precomputed five-number\nsummaries (no raw sample data is shipped to the browser). Beyond Web\nAwesome's chart set — useful for summarizing distributions.\n\nPublic collection properties take bounded, clone-owned readonly snapshots. Create a new\ncollection and reassign it after changes; mutating the assigned array does not update the view.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `data-table` | An optional consumer-provided complete/paginated accessible table alternative. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The box-plot canvas. A keyboard-navigable surface: Arrow keys/Home/End walk the individual boxes and Enter/Space activates the current one, mirroring `<lr-chart>`. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-table-toggle` | The disclosure button rendered by `dataTableToggle`. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples more than 1,000 records. |\n| `description` | The accessible box-plot summary. |\n| `error` | Static visible error shown instead of the canvas when the optional box-plot peer fails to load; its transition is announced through a shared light-DOM alert. |\n| `legend` | The wrapping DOM legend rendered when `legend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its box series is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `plot` | The fixed-height canvas region. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-box-plot-data-table-toggle-active-bg` — Pressed background of the `dataTableToggle` disclosure button; defaults to a mix of the hover background with the shared active mix partner.\n- `--lr-box-plot-data-table-toggle-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the `dataTableToggle` disclosure button.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`). Same token and default as `<lr-chart>`.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Canvas grid-line color.\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — Consumer-owned chart height. The `height` property supplies only a private fallback, so this public token always wins when set.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — DOM legend label color.\n- `--lr-chart-legend-item-active-bg` — Legend-item pressed background.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Legend-item hover background.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum side-legend track size.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where the eight-color series ramp collapses onto a repeating system-color cycle and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart. Shared verbatim with `<lr-chart>` and `<lr-lite-chart>`.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Canvas tick and axis-title color.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Canvas tooltip background.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Canvas tooltip text color."
2182
2211
  },
2183
2212
  "attributes": [
2184
2213
  {
@@ -2188,6 +2217,13 @@
2188
2217
  "value": "Type: `boolean` \nDefault: `true`"
2189
2218
  }
2190
2219
  },
2220
+ {
2221
+ "name": "data-table-toggle",
2222
+ "description": {
2223
+ "kind": "markdown",
2224
+ "value": "Render a disclosure button above the accessible data table so a sighted reader can reveal the\nnumbers behind the plot on demand. `showDataTable` alone is all-or-nothing -- the table is\neither permanently screen-reader-only or permanently visible -- which left a consumer wrapping\na duplicated table in their own `<details>`.\n\nWith this set, `showDataTable` becomes the disclosure's *initial* state rather than its whole\nbehavior. The table stays in the DOM in both states, so assistive technology never loses it.\n\nType: `boolean` \nDefault: `false`"
2225
+ }
2226
+ },
2191
2227
  {
2192
2228
  "name": "description",
2193
2229
  "description": {
@@ -2462,9 +2498,16 @@
2462
2498
  "name": "lr-bubble-chart",
2463
2499
  "description": {
2464
2500
  "kind": "markdown",
2465
- "value": "`<lr-bubble-chart>` — `<lr-chart>` with a `\"bubble\"` default and the mirrored writable type. Feed\npoints via `LyraChartSeries.points`, whose exported `LyraChartPoint` type carries\n`x`/`y`, optional bubble `r` (radius), and an optional per-point `label`.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
2501
+ "value": "`<lr-bubble-chart>` — `<lr-chart>` with a `\"bubble\"` default and the mirrored writable type. Feed\npoints via `LyraChartSeries.points`, whose exported `LyraChartPoint` type carries\n`x`/`y`, optional bubble `r` (radius), and an optional per-point `label`.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-table-toggle` | The disclosure button rendered by `dataTableToggle`. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-data-table-toggle-active-bg` — Pressed background of the `dataTableToggle` disclosure button; defaults to a mix of the hover background with the shared active mix partner.\n- `--lr-chart-data-table-toggle-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the `dataTableToggle` disclosure button.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
2466
2502
  },
2467
2503
  "attributes": [
2504
+ {
2505
+ "name": "annotations",
2506
+ "description": {
2507
+ "kind": "markdown",
2508
+ "value": "Declarative reference lines and shaded bands — a threshold, an event year, a regime change, a\nhighlighted period. Each entry marks either a single `value` or a `from`/`to` range on `axis`\n(default `'y'`), with an optional `label` and semantic `tone`.\n\nNeeds the optional `chartjs-plugin-annotation` peer, loaded on first actual demand so a page\nwith no annotated charts never downloads it. The plugin is registered globally, like\n`chartjs-plugin-zoom` and unlike `chartjs-plugin-datalabels`: it draws nothing unless a chart\nsupplies annotation options, so the registration is unobservable to charts that set none, and\nregistration is also what installs the plugin's own element defaults. Without the peer\ninstalled the chart still renders and a single console warning explains the no-op — the same\nfail-closed contract `data-labels` uses.\n\nEntries are included in the generated accessible description, mirroring `lr-heatmap`.\n\nType: `readonly LyraChartAnnotation[]` \nDefault: `[]`"
2509
+ }
2510
+ },
2468
2511
  {
2469
2512
  "name": "area",
2470
2513
  "description": {
@@ -2486,6 +2529,13 @@
2486
2529
  "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
2487
2530
  }
2488
2531
  },
2532
+ {
2533
+ "name": "data-table-toggle",
2534
+ "description": {
2535
+ "kind": "markdown",
2536
+ "value": "Render a disclosure button above the accessible data table so a sighted reader can reveal the\nnumbers behind the chart on demand. `showDataTable` alone is all-or-nothing -- the table is\neither permanently screen-reader-only or permanently visible -- which left a consumer wrapping\na duplicated table in their own `<details>`.\n\nWith this set, `showDataTable` becomes the disclosure's *initial* state rather than its whole\nbehavior. The table stays in the DOM in both states, so assistive technology never loses it.\n\nType: `boolean` \nDefault: `false`"
2537
+ }
2538
+ },
2489
2539
  {
2490
2540
  "name": "description",
2491
2541
  "description": {
@@ -2607,6 +2657,21 @@
2607
2657
  "value": "Chart.js plugins attached to this chart instance.\n\nType: `LyraChartPlugin[]` \nDefault: `[]`"
2608
2658
  }
2609
2659
  },
2660
+ {
2661
+ "name": "scale-type",
2662
+ "description": {
2663
+ "kind": "markdown",
2664
+ "value": "Scale type for the **value** axis (the categorical axis is unaffected). `'logarithmic'` plots\na dataset spanning several orders of magnitude honestly, where a linear axis collapses\neverything below the maximum into the baseline. Inherited by `lr-line-chart`,\n`lr-scatter-chart` and `lr-bar-chart`.\n\nA logarithmic axis cannot represent zero or negative values (`log(0)` is `-Infinity`), so\n`beginAtZero` is not forwarded in that mode -- Chart.js would otherwise be handed a bound it\ncannot place. Non-positive data points are dropped by Chart.js's own log scale.\n\nType: `LyraChartScaleType` \nDefault: `'linear'`"
2665
+ },
2666
+ "values": [
2667
+ {
2668
+ "name": "linear"
2669
+ },
2670
+ {
2671
+ "name": "logarithmic"
2672
+ }
2673
+ ]
2674
+ },
2610
2675
  {
2611
2676
  "name": "show-data-table",
2612
2677
  "description": {
@@ -3084,7 +3149,7 @@
3084
3149
  "name": "lr-calendar",
3085
3150
  "description": {
3086
3151
  "kind": "markdown",
3087
- "value": "`<lr-calendar>` — responsive month calendar with event markers and agenda mode.\n\nMonth-view event markers are real buttons inside each focusable gridcell, so\nkeyboard users can activate individual events without switching views.\nAgenda view renders the same events as full-width buttons.\n\nPublic collection properties take bounded, clone-owned readonly snapshots. Create a new\ncollection and reassign it after changes; mutating the assigned array does not update the view.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `agenda` | Agenda list. |\n| `agenda-event` | One focusable event button in agenda view (`view=\"agenda\"` only). |\n| `date` | The day-of-month number inside a day cell. |\n| `day` | Day cell. |\n| `event` | Event marker. |\n| `grid` | Month grid. |\n| `header` | Calendar header. |\n| `nav` | Either month-navigation button. |\n| `nav-glyph` | The previous/next chevron glyph, mirrored under RTL. |\n| `navigation` | Wrapper around both month-navigation controls and the title. |\n| `next-button` | Next-month button. |\n| `previous-button` | Previous-month button. |\n| `title` | The header's month/year title. |\n| `week` | One week row within the month grid. |\n| `weekday` | One weekday header cell. |\n| `weekdays` | Weekday header row. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-calendar-day-min-block-size` (default: `var(--lr-size-6rem)`) — Minimum block size of a day cell.\n- `--lr-calendar-day-min-block-size-narrow` (default: `var(--lr-size-4rem)`) — Minimum block size of a day cell once the host is narrower than 28rem.\n- `--lr-calendar-day-outside-bg` (default: `var(--lr-color-surface)`) — Background of an adjacent-month day cell.\n- `--lr-calendar-day-outside-color` (default: `var(--lr-color-text-quiet)`) — Text color of an adjacent-month day cell.\n- `--lr-calendar-day-selected-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a selected day cell, decoupled from the shared token also driving the nav-button/agenda-event hover background.\n- `--lr-calendar-day-today-outline-color` (default: `var(--lr-color-brand)`) — Outline color of today's day cell."
3152
+ "value": "`<lr-calendar>` — responsive month calendar with event markers and agenda mode.\n\nMonth-view event markers are real buttons inside each focusable gridcell, so\nkeyboard users can activate individual events without switching views.\nAgenda view renders the same events as full-width buttons.\n\nPublic collection properties take bounded, clone-owned readonly snapshots. Create a new\ncollection and reassign it after changes; mutating the assigned array does not update the view.\n\n`firstDayOfWeek` defaults to `'auto'`, deriving the week start from `effectiveLocale` (via the\nshared `resolveFirstDayOfWeek()` contract also used by `lr-date-picker`/`lr-date-input`), and\nalso accepts one of the shared weekday-name tokens (`'sun'` through `'sat'`) for an explicit,\nlocale-independent week start.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `agenda` | Agenda list. |\n| `agenda-event` | One focusable event button in agenda view (`view=\"agenda\"` only). |\n| `date` | The day-of-month number inside a day cell. |\n| `day` | Day cell. |\n| `event` | Event marker. |\n| `grid` | Month grid. |\n| `header` | Calendar header. |\n| `nav` | Either month-navigation button. |\n| `nav-glyph` | The previous/next chevron glyph, mirrored under RTL. |\n| `navigation` | Wrapper around both month-navigation controls and the title. |\n| `next-button` | Next-month button. |\n| `previous-button` | Previous-month button. |\n| `title` | The header's month/year title. |\n| `week` | One week row within the month grid. |\n| `weekday` | One weekday header cell. |\n| `weekdays` | Weekday header row. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-calendar-day-min-block-size` (default: `var(--lr-size-6rem)`) — Minimum block size of a day cell.\n- `--lr-calendar-day-min-block-size-narrow` (default: `var(--lr-size-4rem)`) — Minimum block size of a day cell once the host is narrower than 28rem.\n- `--lr-calendar-day-outside-bg` (default: `var(--lr-color-surface)`) — Background of an adjacent-month day cell.\n- `--lr-calendar-day-outside-color` (default: `var(--lr-color-text-quiet)`) — Text color of an adjacent-month day cell.\n- `--lr-calendar-day-selected-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a selected day cell, decoupled from the shared token also driving the nav-button/agenda-event hover background.\n- `--lr-calendar-day-today-outline-color` (default: `var(--lr-color-brand)`) — Outline color of today's day cell."
3088
3153
  },
3089
3154
  "attributes": [
3090
3155
  {
@@ -3098,8 +3163,34 @@
3098
3163
  "name": "first-day-of-week",
3099
3164
  "description": {
3100
3165
  "kind": "markdown",
3101
- "value": "Type: `number` \nDefault: `1`"
3102
- }
3166
+ "value": "Type: `LyraCalendarFirstDayOfWeek` \nDefault: `'auto'`"
3167
+ },
3168
+ "values": [
3169
+ {
3170
+ "name": "auto"
3171
+ },
3172
+ {
3173
+ "name": "sun"
3174
+ },
3175
+ {
3176
+ "name": "mon"
3177
+ },
3178
+ {
3179
+ "name": "tue"
3180
+ },
3181
+ {
3182
+ "name": "wed"
3183
+ },
3184
+ {
3185
+ "name": "thu"
3186
+ },
3187
+ {
3188
+ "name": "fri"
3189
+ },
3190
+ {
3191
+ "name": "sat"
3192
+ }
3193
+ ]
3103
3194
  },
3104
3195
  {
3105
3196
  "name": "locale",
@@ -3352,7 +3443,7 @@
3352
3443
  "name": "lr-card",
3353
3444
  "description": {
3354
3445
  "kind": "markdown",
3355
- "value": "`<lr-card>` — a generic, styled bordered content container: the \"small bordered surface with\npadding\" idiom common to hero highlights, clickable grid tiles, and management-list items. A\ndirect `<lr-*>` counterpart to `<wa-card>`'s contract, staying slot-compatible with\n`lr-result-card` where they overlap.\n\nThe header is allocation-responsive: long or translated header content can shrink and wrap,\nand the actions group moves onto another line when both no longer fit side by side.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The card body. |\n| `actions` | Horizontal-card actions; retained as the legacy header-actions alias vertically. |\n| `footer` | Footer content, rendered below the body. |\n| `footer-actions` | Controls rendered alongside the vertical footer. |\n| `header` | Header row content, rendered above the body. |\n| `header-actions` | Controls rendered alongside the vertical header. |\n| `image` | Shoelace-compatible alias for `media`. |\n| `media` | Media content, rendered above the header or at logical start when horizontal. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | Wrapper around the `actions` and `header-actions` slots. Hidden entirely when both are empty. |\n| `activation-button` | The native whole-card action, rendered while `actionable` without `href`. It is a sibling of slotted controls, so actionable descendants are never nested inside another actionable role. |\n| `base` | The outer container (a `<div>`, or a stretched `<a>` behind the consumer slots when `href` is set). |\n| `body` | Wrapper around the default slot. |\n| `footer` | Wrapper around the `footer` and `footer-actions` slots. Hidden entirely when both are empty. |\n| `header` | Wrapper around the `header` slot and `actions`. Hidden entirely when both are empty. |\n| `image` | Shoelace-compatible alias on the same wrapper as `media`. |\n| `media` | Wrapper around the `media` and `image` slots. Hidden entirely when empty. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color` (default: `var(--lr-color-border)`) — Shoelace-compatible border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Shoelace-compatible corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Shoelace-compatible border width.\n- `--lr-card-accent-border-color` (default: `var(--lr-color-brand)`) — Accent stripe color.\n- `--lr-card-filled-bg` (default: `var(--lr-color-brand-quiet)`) — Filled appearance background.\n- `--lr-card-filled-outlined-bg` (default: `var(--lr-color-brand-quiet)`) — Filled-outlined background.\n- `--lr-card-interactive-active-border-color` (default: `var(--lr-color-brand)`) — Interactive pressed border.\n- `--lr-card-interactive-active-overlay` — Interactive pressed overlay; defaults to the former transparent active mix.\n- `--lr-card-interactive-hover-border-color` (default: `var(--lr-color-brand)`) — Interactive hover border.\n- `--padding` (default: `var(--spacing,var(--lr-space-m))`) — Shoelace-compatible section padding.\n- `--spacing` (default: `var(--lr-space-m)`) — Space around and between card sections."
3446
+ "value": "`<lr-card>` — a generic, styled bordered content container: the \"small bordered surface with\npadding\" idiom common to hero highlights, clickable grid tiles, and management-list items. A\ndirect `<lr-*>` counterpart to `<wa-card>`'s contract, staying slot-compatible with\n`lr-result-card` where they overlap.\n\nThe header is allocation-responsive: long or translated header content can shrink and wrap,\nand the actions group moves onto another line when both no longer fit side by side.\n\n**Overflow is clipped, deliberately, and the card never picks a scroll owner for you.**\n`[part='base']` stretches to the host's allocated block-size and clips its overflow — that clip\nis what keeps a full-bleed `media`/`image` child inside the rounded border. So a card given a\n*definite* allocation (a fixed grid row, an explicit `block-size`) clips body content taller\nthan that allocation rather than growing or scrolling; in an auto-sized row it simply grows and\nnothing is clipped. Neither upstream card exposes an overflow, block-size, or scroll hook, and\nthis one deliberately adds none either: the public `body` part already carries the whole\ndecision, and a `::part()` rule from the consumer's tree wins over the shadow stylesheet\nregardless of specificity. A fixed-height tile whose body must hold more content therefore says\nso itself — `lr-card::part(body) { overflow: auto; }` — which also leaves `max-block-size`,\n`scrollbar-gutter`, and `overscroll-behavior` in the consumer's hands.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The card body. |\n| `actions` | Horizontal-card actions; retained as the legacy header-actions alias vertically. |\n| `footer` | Footer content, rendered below the body. |\n| `footer-actions` | Controls rendered alongside the vertical footer. |\n| `header` | Header row content, rendered above the body. |\n| `header-actions` | Controls rendered alongside the vertical header. |\n| `image` | Shoelace-compatible alias for `media`. |\n| `media` | Media content, rendered above the header or at logical start when horizontal. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | Wrapper around the `actions` and `header-actions` slots. Hidden entirely when both are empty. |\n| `activation-button` | The native whole-card action, rendered while `actionable` without `href`. It is a sibling of slotted controls, so actionable descendants are never nested inside another actionable role. |\n| `base` | The outer container (a `<div>`, or a stretched `<a>` behind the consumer slots when `href` is set). |\n| `body` | Wrapper around the default slot. |\n| `footer` | Wrapper around the `footer` and `footer-actions` slots. Hidden entirely when both are empty. |\n| `header` | Wrapper around the `header` slot and `actions`. Hidden entirely when both are empty. |\n| `image` | Shoelace-compatible alias on the same wrapper as `media`. |\n| `media` | Wrapper around the `media` and `image` slots. Hidden entirely when empty. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color` (default: `var(--lr-color-border)`) — Shoelace-compatible border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Shoelace-compatible corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Shoelace-compatible border width.\n- `--lr-card-accent-border-color` (default: `var(--lr-color-brand)`) — Accent stripe color.\n- `--lr-card-filled-bg` (default: `var(--lr-color-brand-quiet)`) — Filled appearance background.\n- `--lr-card-filled-outlined-bg` (default: `var(--lr-color-brand-quiet)`) — Filled-outlined background.\n- `--lr-card-interactive-active-border-color` (default: `var(--lr-color-brand)`) — Interactive pressed border.\n- `--lr-card-interactive-active-overlay` — Interactive pressed overlay; defaults to the former transparent active mix.\n- `--lr-card-interactive-hover-border-color` (default: `var(--lr-color-brand)`) — Interactive hover border.\n- `--padding` (default: `var(--spacing,var(--lr-space-m))`) — Shoelace-compatible section padding.\n- `--spacing` (default: `var(--lr-space-m)`) — Space around and between card sections."
3356
3447
  },
3357
3448
  "attributes": [
3358
3449
  {
@@ -3608,9 +3699,16 @@
3608
3699
  "name": "lr-chart",
3609
3700
  "description": {
3610
3701
  "kind": "markdown",
3611
- "value": "`<lr-chart>` — the core Chart.js wrapper used directly and by the typed\nChart.js tags plus `<lr-histogram>`. `<lr-lite-chart>` and `<lr-box-plot>`\nare independent implementations. Requires the optional peer dep `chart.js`; `chartjs-plugin-zoom`\n(for `zoom`) and `chartjs-plugin-datalabels` (for `data-labels`/`stack-totals`)\nare further optional peers loaded only on demand.\n\n**API mirror note:** the real `wa-chart` docs page\n(https://webawesome.com/docs/components/chart/) documents a `config:\nChartJS['config']` property alongside its simplified attributes — \"a\nflexible wrapper around Chart.js\" supporting *both* simplified attributes\nand full Chart.js configuration passthrough, not a `data`/`options` prop\npair. `lr-chart` mirrors that dual surface: the `LyraChartSeries`-based\n`datasets`/`labels`/`type`/`withoutLegend`/`xLabel`/`yLabel`/`zoom` attributes\nbelow are the simplified surface (compatible with WA's `type`, `xLabel`,\n`yLabel`, `withoutLegend`, etc.), and the additional\n`config` property is the raw-passthrough escape hatch — a\n`LyraChartConfiguration` deep-merged over the generated config in\n`buildConfig()`, mirroring WA's `config` property without discarding the\n`LyraChartSeries` shape the rest of this component family (subclasses, box-plot,\nhistogram) is built on.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
3702
+ "value": "`<lr-chart>` — the core Chart.js wrapper used directly and by the typed\nChart.js tags plus `<lr-histogram>`. `<lr-lite-chart>` and `<lr-box-plot>`\nare independent implementations. Requires the optional peer dep `chart.js`; `chartjs-plugin-zoom`\n(for `zoom`) and `chartjs-plugin-datalabels` (for `data-labels`/`stack-totals`)\nare further optional peers loaded only on demand.\n\n**API mirror note:** the real `wa-chart` docs page\n(https://webawesome.com/docs/components/chart/) documents a `config:\nChartJS['config']` property alongside its simplified attributes — \"a\nflexible wrapper around Chart.js\" supporting *both* simplified attributes\nand full Chart.js configuration passthrough, not a `data`/`options` prop\npair. `lr-chart` mirrors that dual surface: the `LyraChartSeries`-based\n`datasets`/`labels`/`type`/`withoutLegend`/`xLabel`/`yLabel`/`zoom` attributes\nbelow are the simplified surface (compatible with WA's `type`, `xLabel`,\n`yLabel`, `withoutLegend`, etc.), and the additional\n`config` property is the raw-passthrough escape hatch — a\n`LyraChartConfiguration` deep-merged over the generated config in\n`buildConfig()`, mirroring WA's `config` property without discarding the\n`LyraChartSeries` shape the rest of this component family (subclasses, box-plot,\nhistogram) is built on.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-table-toggle` | The disclosure button rendered by `dataTableToggle`. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-data-table-toggle-active-bg` — Pressed background of the `dataTableToggle` disclosure button; defaults to a mix of the hover background with the shared active mix partner.\n- `--lr-chart-data-table-toggle-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the `dataTableToggle` disclosure button.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
3612
3703
  },
3613
3704
  "attributes": [
3705
+ {
3706
+ "name": "annotations",
3707
+ "description": {
3708
+ "kind": "markdown",
3709
+ "value": "Declarative reference lines and shaded bands — a threshold, an event year, a regime change, a\nhighlighted period. Each entry marks either a single `value` or a `from`/`to` range on `axis`\n(default `'y'`), with an optional `label` and semantic `tone`.\n\nNeeds the optional `chartjs-plugin-annotation` peer, loaded on first actual demand so a page\nwith no annotated charts never downloads it. The plugin is registered globally, like\n`chartjs-plugin-zoom` and unlike `chartjs-plugin-datalabels`: it draws nothing unless a chart\nsupplies annotation options, so the registration is unobservable to charts that set none, and\nregistration is also what installs the plugin's own element defaults. Without the peer\ninstalled the chart still renders and a single console warning explains the no-op — the same\nfail-closed contract `data-labels` uses.\n\nEntries are included in the generated accessible description, mirroring `lr-heatmap`.\n\nType: `readonly LyraChartAnnotation[]` \nDefault: `[]`"
3710
+ }
3711
+ },
3614
3712
  {
3615
3713
  "name": "area",
3616
3714
  "description": {
@@ -3632,6 +3730,13 @@
3632
3730
  "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
3633
3731
  }
3634
3732
  },
3733
+ {
3734
+ "name": "data-table-toggle",
3735
+ "description": {
3736
+ "kind": "markdown",
3737
+ "value": "Render a disclosure button above the accessible data table so a sighted reader can reveal the\nnumbers behind the chart on demand. `showDataTable` alone is all-or-nothing -- the table is\neither permanently screen-reader-only or permanently visible -- which left a consumer wrapping\na duplicated table in their own `<details>`.\n\nWith this set, `showDataTable` becomes the disclosure's *initial* state rather than its whole\nbehavior. The table stays in the DOM in both states, so assistive technology never loses it.\n\nType: `boolean` \nDefault: `false`"
3738
+ }
3739
+ },
3635
3740
  {
3636
3741
  "name": "description",
3637
3742
  "description": {
@@ -3753,6 +3858,21 @@
3753
3858
  "value": "Chart.js plugins attached to this chart instance.\n\nType: `LyraChartPlugin[]` \nDefault: `[]`"
3754
3859
  }
3755
3860
  },
3861
+ {
3862
+ "name": "scale-type",
3863
+ "description": {
3864
+ "kind": "markdown",
3865
+ "value": "Scale type for the **value** axis (the categorical axis is unaffected). `'logarithmic'` plots\na dataset spanning several orders of magnitude honestly, where a linear axis collapses\neverything below the maximum into the baseline. Inherited by `lr-line-chart`,\n`lr-scatter-chart` and `lr-bar-chart`.\n\nA logarithmic axis cannot represent zero or negative values (`log(0)` is `-Infinity`), so\n`beginAtZero` is not forwarded in that mode -- Chart.js would otherwise be handed a bound it\ncannot place. Non-positive data points are dropped by Chart.js's own log scale.\n\nType: `LyraChartScaleType` \nDefault: `'linear'`"
3866
+ },
3867
+ "values": [
3868
+ {
3869
+ "name": "linear"
3870
+ },
3871
+ {
3872
+ "name": "logarithmic"
3873
+ }
3874
+ ]
3875
+ },
3756
3876
  {
3757
3877
  "name": "show-data-table",
3758
3878
  "description": {
@@ -4258,7 +4378,7 @@
4258
4378
  "name": "lr-checkbox",
4259
4379
  "description": {
4260
4380
  "kind": "markdown",
4261
- "value": "`<lr-checkbox>` — a boolean form control. Structurally the same idea as\n`<lr-switch>` (form-associated via `ElementInternals`, click and\nSpace both toggle) but with checkbox semantics: `role=\"checkbox\"` +\nan `aria-checked` that can also be `\"mixed\"`, and a visual box/checkmark\ninstead of a track/thumb.\n\n`checked` is not a plain string, so this attaches `ElementInternals`\ndirectly and implements its own `updateValidity()` rather than using the\n`FormAssociated` mixin — see `<lr-combobox>` for the same\ndirect-`ElementInternals` shape with a non-string value.\n\nSupporting text is optional through either Web Awesome's `hint` spelling or Shoelace's\n`help-text` spelling. `errorText` and the `error` slot provide the matching owned error surface;\nall rendered messages share an additive described-by relationship with external host ids.\nDeliberately no separate top-of-field label property/slot/part: the default slot already is the\nvisible, clickable checkbox label, matching `lr-switch`'s form-control shape.\nDefault-slot presence follows flattened rendered assignment and updates when forwarded content\nchanges. Visual elements, including decorative `aria-hidden` icons, keep the label wrapper;\naccessible naming remains the browser's slot semantics unless a host `aria-label` is present.\nThe public label and supporting/error text wrap at arbitrary boundaries in constrained rows;\nthe fixed checkbox square and shared interactive target never shrink to make that fit.\nThe internal checkbox role exposes explicit stateful `aria-invalid`: visible error chrome wins\nimmediately, while intrinsic/custom invalidity is exposed only after user interaction.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Label text, rendered next to the box. Clicking it toggles the checkbox, the same as clicking a native checkbox's associated `<label>`. If left empty, set `aria-label` on the host so the control still has an accessible name. Host `aria-label` is forwarded by presence, including an explicitly empty value. Interactive label content remains a separate focus stop outside the checkbox role; activating that content does not also toggle the checkbox. |\n| `error` | Custom error content on the owned error surface. A host `aria-describedby` attribute is resolved onto the internal `role=\"checkbox\"` through `ariaDescribedByElements` so externally-owned descriptions remain valid across the shadow boundary. |\n| `help-text` | Shoelace-compatible supporting text; the same surface as `hint`. |\n| `hint` | Web Awesome-compatible supporting text. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | Compatibility name for the interactive control; use `checkbox`. |\n| `box` | The small square that shows the checkmark/indeterminate dash. |\n| `checkbox` | The interactive `role=\"checkbox\"` owner around the box. It is the same node as `base`, retains the shared `--lr-icon-button-size` minimum target at every size tier, and keeps the rich default label as a sibling so nested actions remain valid focus stops. |\n| `checked-icon` | WA/Shoelace name for the checked glyph. |\n| `checkmark` | Lyra name for the visible glyph inside the box. |\n| `control` | WA/Shoelace name for `box`. |\n| `control--checked` | Shoelace state alias on the control while checked. |\n| `control--indeterminate` | Shoelace state alias on the control while indeterminate. |\n| `error` | The error message. |\n| `form-control` | The outer wrapper around the checkbox, error, and hint. |\n| `form-control-help-text` | Shoelace name for the same supporting-text wrapper. |\n| `hint` | Web Awesome name for the supporting-text wrapper. |\n| `indeterminate-icon` | WA/Shoelace name for the indeterminate glyph. |\n| `label` | The wrapper around the default slot. |\n\n---\n\n**CSS Custom Properties**\n\n- `--checked-icon-color` (default: `currentColor`) — WA-compatible color of the checked or indeterminate glyph.\n- `--checked-icon-scale` (default: `1`) — WA-compatible scale of the checked or indeterminate glyph.\n- `--lr-checkbox-active-border` (default: `var(--lr-color-brand)`) — Box border while pressed.\n- `--lr-checkbox-active-ring` (default: `var(--lr-color-brand-quiet)`) — Outer box ring while pressed.\n- `--lr-checkbox-box-size` (default: `min(var(--lr-icon-button-size), calc(var(--lr-form-control-height) * 0.7))`) — Edge length of `[part='box']`. Derived from the `size` tier's shared control height, so the box lines up with an `<lr-input>`/`<lr-select>`/`<lr-button>` of the same `size`; set it to pin the box independently of the tier.\n- `--lr-checkbox-checked-bg` (default: `var(--lr-color-brand)`) — Background of `[part='box']` while `checked` or `indeterminate`. Retint just this control's checked fill without touching the shared `--lr-color-brand` token every other component also reads.\n- `--lr-checkbox-checked-border` (default: `var(--lr-color-brand)`) — Border color of `[part='box']` while `checked` or `indeterminate`.\n- `--lr-checkbox-hover-border` (default: `var(--lr-color-brand)`) — Box border while the enabled interactive control is hovered.\n- `--lr-checkbox-invalid-border` (default: `var(--lr-color-danger)`) — Box border while invalid chrome is visible.\n- `--lr-checkbox-label-indent` (default: `calc(var(--lr-checkbox-box-size) + var(--lr-space-s))`) — The inline distance from the control's start edge to the start of the label text, i.e. the box's own floor plus the gap next to it — so it tracks `size` along with the box. Published so a consumer composing per-option hint text under the label can align it without re-deriving that formula from the shadow styles, and used as the source of the real gap so the two cannot drift. Setting it on the element (or on `lr-checkbox` in your own stylesheet) moves the label; because custom properties inherit down and not sideways, it is *not* readable from a sibling node in your tree — align a sibling by computing the same formula from `--lr-theme-icon-button-size`, `--lr-theme-form-control-height-*` and `--lr-theme-space-s`, which you control."
4381
+ "value": "`<lr-checkbox>` — a boolean form control. Structurally the same idea as\n`<lr-switch>` (form-associated via `ElementInternals`, click and\nSpace both toggle) but with checkbox semantics: `role=\"checkbox\"` +\nan `aria-checked` that can also be `\"mixed\"`, and a visual box/checkmark\ninstead of a track/thumb.\n\n`checked` is not a plain string, so this attaches `ElementInternals`\ndirectly and implements its own `updateValidity()` rather than using the\n`FormAssociated` mixin — see `<lr-combobox>` for the same\ndirect-`ElementInternals` shape with a non-string value.\n\nSupporting text is optional through either Web Awesome's `hint` spelling or Shoelace's\n`help-text` spelling. `errorText` and the `error` slot provide the matching owned error surface;\nall rendered messages share an additive described-by relationship with external host ids.\nDeliberately no separate top-of-field label property/slot/part: the default slot already is the\nvisible, clickable checkbox label, matching `lr-switch`'s form-control shape.\nDefault-slot presence follows flattened rendered assignment and updates when forwarded content\nchanges. Visual elements, including decorative `aria-hidden` icons, keep the label wrapper;\naccessible naming remains the browser's slot semantics unless a host `aria-label` is present.\nThe public label and supporting/error text wrap at arbitrary boundaries in constrained rows;\nthe fixed checkbox square and shared interactive target never shrink to make that fit.\nThe internal checkbox role exposes explicit stateful `aria-invalid`: visible error chrome wins\nimmediately, while intrinsic/custom invalidity is exposed only after user interaction.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Label text, rendered next to the box. Clicking it toggles the checkbox, the same as clicking a native checkbox's associated `<label>`. If left empty, set `aria-label` on the host so the control still has an accessible name. Host `aria-label` is forwarded by presence, including an explicitly empty value. Interactive label content remains a separate focus stop outside the checkbox role; activating that content does not also toggle the checkbox. |\n| `error` | Custom error content on the owned error surface. A host `aria-describedby` attribute is resolved onto the internal `role=\"checkbox\"` through `ariaDescribedByElements` so externally-owned descriptions remain valid across the shadow boundary. |\n| `help-text` | Shoelace-compatible supporting text; the same surface as `hint`. |\n| `hint` | Web Awesome-compatible supporting text. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | Compatibility name for the interactive control; use `checkbox`. |\n| `box` | The small square that shows the checkmark/indeterminate dash. |\n| `checkbox` | The interactive `role=\"checkbox\"` owner around the box. It is the same node as `base`, retains the shared `--lr-icon-button-size` minimum target at every size tier, and keeps the rich default label as a sibling so nested actions remain valid focus stops. |\n| `checked-icon` | WA/Shoelace name for the checked glyph. |\n| `checkmark` | Lyra name for the visible glyph inside the box. |\n| `control` | WA/Shoelace name for `box`. |\n| `control--checked` | Shoelace state alias on the control while checked. |\n| `control--indeterminate` | Shoelace state alias on the control while indeterminate. |\n| `error` | The error message. |\n| `form-control` | The outer wrapper around the checkbox, error, and hint. |\n| `form-control-help-text` | Shoelace name for the same supporting-text wrapper. |\n| `hint` | Web Awesome name for the supporting-text wrapper. |\n| `indeterminate-icon` | WA/Shoelace name for the indeterminate glyph. |\n| `label` | The wrapper around the default slot. |\n| `row` | The row wrapping the checkbox owner and the label as siblings. This is the node to size or align when laying out a column of checkboxes; `base`/`checkbox` is only the control box inside it, so its inline size tracks the box, not the row. |\n\n---\n\n**CSS Custom Properties**\n\n- `--checked-icon-color` (default: `currentColor`) — WA-compatible color of the checked or indeterminate glyph.\n- `--checked-icon-scale` (default: `1`) — WA-compatible scale of the checked or indeterminate glyph.\n- `--lr-checkbox-active-border` (default: `var(--lr-color-brand)`) — Box border while pressed.\n- `--lr-checkbox-active-ring` (default: `var(--lr-color-brand-quiet)`) — Outer box ring while pressed.\n- `--lr-checkbox-box-size` (default: `min(var(--lr-icon-button-size), calc(var(--lr-form-control-height) * 0.7))`) — Edge length of `[part='box']`. Derived from the `size` tier's shared control height, so the box lines up with an `<lr-input>`/`<lr-select>`/`<lr-button>` of the same `size`; set it to pin the box independently of the tier.\n- `--lr-checkbox-checked-bg` (default: `var(--lr-color-brand)`) — Background of `[part='box']` while `checked` or `indeterminate`. Retint just this control's checked fill without touching the shared `--lr-color-brand` token every other component also reads.\n- `--lr-checkbox-checked-border` (default: `var(--lr-color-brand)`) — Border color of `[part='box']` while `checked` or `indeterminate`.\n- `--lr-checkbox-hover-border` (default: `var(--lr-color-brand)`) — Box border while the enabled interactive control is hovered.\n- `--lr-checkbox-invalid-border` (default: `var(--lr-color-danger)`) — Box border while invalid chrome is visible.\n- `--lr-checkbox-label-indent` (default: `calc(var(--lr-checkbox-box-size) + var(--lr-space-s))`) — The inline distance from the control's start edge to the start of the label text, i.e. the box's own floor plus the gap next to it — so it tracks `size` along with the box. Published so a consumer composing per-option hint text under the label can align it without re-deriving that formula from the shadow styles, and used as the source of the real gap so the two cannot drift. Setting it on the element (or on `lr-checkbox` in your own stylesheet) moves the label; because custom properties inherit down and not sideways, it is *not* readable from a sibling node in your tree — align a sibling by computing the same formula from `--lr-theme-icon-button-size`, `--lr-theme-form-control-height-*` and `--lr-theme-space-s`, which you control."
4262
4382
  },
4263
4383
  "attributes": [
4264
4384
  {
@@ -5649,7 +5769,7 @@
5649
5769
  "name": "lr-combobox",
5650
5770
  "description": {
5651
5771
  "kind": "markdown",
5652
- "value": "`<lr-combobox>` — a filterable single/multi select that combines a text\ninput with a listbox. Mirrors the core `<wa-combobox>` API under `lr-`.\n\nOptions are `<lr-option value>` children. Emits native-style `change`/`input`\n(like Web Awesome) plus `lr-show`/`lr-hide`/`lr-clear`.\nEnter commits the highlighted option while the listbox has one; with nothing highlighted it\nperforms the implicit form submission a native text field would (see\n`internal/submit-on-enter.ts` — the internal input is in a shadow root and has no form owner, so\nthe platform can never do it here).\nStandard size tiers share their outer control height with sibling Lyra controls; the decorative\nexpand icon scales inside that allocation without creating an independent action target.\nIf local options or async rows change while a row is keyboard-active, the active descendant\nclamps to the nearest enabled survivor and clears when none remain.\nAn async `source` failure renders as a disabled listbox row, not a shadow-root live region; each\ncurrent post-mount rejection appends the localized `comboboxLoadError` message to the shared\nlight-DOM assertive announcement sink. Raw caught error text is never exposed to users.\nThe floating listbox is a nonmodal shared-overlay-manager entry. Visual stack order, Escape,\noutside-pointer dismissal, and focus handoff are therefore owned by only the newest Lyra\noverlay, including when another popup such as `lr-color-picker` remains open underneath it.\nThe editable combobox input exposes explicit stateful `aria-invalid`: visible error chrome wins\nimmediately, while intrinsic/custom invalidity is exposed only after interaction.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | `<lr-option>` elements. |\n| `clear-icon` | Replaces the clear button's built-in icon. |\n| `end` | Adornment after the filter input and the built-in clear action, and before the expand icon — so consumer content never sits outboard of the dropdown chevron. |\n| `error` | Custom error content. |\n| `expand-icon` | Replaces the dropdown indicator's built-in icon. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n| `start` | Adornment at the inline-start of the trigger row, before the selected-value tags and the filter input. Slotted content is decorative chrome, not an option: `collectOptions()` only ever collects `<lr-option>` elements from the default slot. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `clear-button` | The clear button. |\n| `combobox` | The input container (positioning anchor). |\n| `combobox-input` | The text input. |\n| `end` | Wrapper around the `end` adornment slot; `hidden` while nothing is slotted. |\n| `error` | Ordinary form-validation text referenced by the internal input; it is not a live region, avoiding a second announcement alongside native validation/focus feedback. |\n| `expand-icon` | The dropdown indicator. |\n| `form-control` | The outer wrapper around label, combobox, listbox, error and hint. |\n| `form-control-input` | Compatibility wrapper around the editable control. |\n| `form-control-label` | The `<label>` element. |\n| `group-label` | The heading of an option group (rows sharing a `group`), named as on `lr-select` and `lr-emoji-picker` so one rule can style every grouped list. |\n| `hint` | The hint message. |\n| `label` | Compatibility wrapper around the visible label content. |\n| `listbox` | The managed nonmodal options popover; its stack depth comes from `--lr-overlay-stack-index` with `--lr-layer-dropdown` as the standalone fallback. |\n| `option` | An option row. |\n| `option-badge` | An async option row's optional trailing metadata badge. |\n| `option-dot` | An option row's leading status dot (when `dot-color` is set). |\n| `option-icon` | An async option row's optional decorative leading visual. Its rendered subtree remains visible but is inert and hidden from assistive technology. |\n| `option-label` | An option row's label/sub wrapper. |\n| `option-overflow` | The \"+N more\" indicator shown when rows are capped by `maxRender`. |\n| `option-sub` | An option row's secondary line (when `sub` is set). |\n| `start` | Wrapper around the `start` adornment slot; `hidden` while nothing is slotted. |\n| `tag` | An individual selected tag. |\n| `tag__content` | Compatibility wrapper around a selected tag's visible content. |\n| `tag__remove-button` | A tag's remove button. |\n| `tag__remove-button__base` | Compatibility name on a tag's remove button. |\n| `tag-label` | The wrapping/ellipsis-safe selected-tag label. |\n| `tags` | The multi-select tag container. |\n\n---\n\n**CSS Custom Properties**\n\n- `--hide-duration` (default: `var(--lr-transition-fast)`) — Listbox exit-transition duration.\n- `--lr-combobox-expand-size` — Decorative expand-icon box size, scaled by `size`.\n- `--lr-combobox-font-size` (default: `var(--lr-form-control-font-size)`) — Input text size, from the shared form-control size ladder.\n- `--lr-combobox-gap` (default: `var(--lr-space-xs)`) — Gap between the start/end adornments, tags, and filter input inside the trigger row. Unlike the size knobs above it does not vary by `size` tier. Override it to retune without a `::part(combobox)` rule.\n- `--lr-combobox-option-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a hovered or keyboard-active option row.\n- `--lr-combobox-option-selected-bg` (default: `transparent`) — Background of the currently-selected option row. Not declared on `:host`; retheme without hijacking `--lr-color-brand`.\n- `--lr-combobox-option-selected-border` (default: `var(--lr-color-brand)`) — Border color of the selected option row.\n- `--lr-combobox-option-selected-color` (default: `var(--lr-color-brand)`) — Text color of the selected option row.\n- `--lr-combobox-option-selected-font-weight` (default: `var(--lr-font-weight-semibold)`) — Font weight of the selected option row.\n- `--lr-combobox-radius` (default: `var(--lr-radius)`) — Corner radius of the trigger row (`[part='combobox']`). Does not vary by `size` tier; the `pill` attribute swaps it for `--lr-radius-pill`.\n- `--lr-combobox-tag-font-size` — Selected-tag text size.\n- `--lr-combobox-tag-padding` — Selected-tag padding.\n- `--lr-combobox-trigger-height` — Exact input-container height. Unset by default, which leaves `--lr-combobox-trigger-min-height` as a floor only; set it to a length to both floor and cap the row (e.g. to pixel-match `<lr-input>`/`<lr-select>` in the same toolbar). Because it is never declared by the component itself, it can be set from an ancestor or an outer-tree rule as well as inline on the element. Intended for a single-row combobox: in `multiple` mode a tag row long enough to wrap overflows the pinned box visibly (nothing is clipped or made unreachable), so leave it unset there.\n- `--lr-combobox-trigger-min-height` (default: `var(--lr-form-control-height)`) — Minimum input-container block size. Reads the shared form-control height ladder, so retuning `--lr-theme-form-control-height-*` moves this control and every sibling field together.\n- `--lr-combobox-trigger-padding` — Padding inside the input container.\n- `--lr-form-control-required-color` (default: `var(--lr-color-danger)`) — Required-marker color, themeable independently of error text and invalid borders.\n- `--lr-form-control-required-content` (default: `' *'`) — The required marker appended to `form-control-label` while `required` is set. Set it to `''` to suppress the marker, or to any other quoted string (`' (required)'`, a localized word) to replace it.\n- `--lr-form-control-required-offset` (default: `0`) — Inline space between the label text and the required marker.\n- `--show-duration` (default: `var(--lr-transition-fast)`) — Listbox enter-transition duration.\n- `--tag-max-size` (default: `var(--lr-size-5rem)`) — Maximum inline size of a built-in selected tag."
5772
+ "value": "`<lr-combobox>` — a filterable single/multi select that combines a text\ninput with a listbox. Mirrors the core `<wa-combobox>` API under `lr-`.\n\nOptions are `<lr-option value>` children. Emits native-style `change`/`input`\n(like Web Awesome) plus `lr-show`/`lr-hide`/`lr-clear`.\nEnter commits the highlighted option while the listbox has one; with nothing highlighted it\nperforms the implicit form submission a native text field would (see\n`internal/submit-on-enter.ts` — the internal input is in a shadow root and has no form owner, so\nthe platform can never do it here).\nStandard size tiers share their outer control height with sibling Lyra controls; the decorative\nexpand icon scales inside that allocation without creating an independent action target.\nIf local options or async rows change while a row is keyboard-active, the active descendant\nclamps to the nearest enabled survivor and clears when none remain.\nAn async `source` failure renders as a disabled listbox row, not a shadow-root live region; each\ncurrent post-mount rejection appends the localized `comboboxLoadError` message to the shared\nlight-DOM assertive announcement sink. Raw caught error text is never exposed to users.\nThe floating listbox is a nonmodal shared-overlay-manager entry. Visual stack order, Escape,\noutside-pointer dismissal, and focus handoff are therefore owned by only the newest Lyra\noverlay, including when another popup such as `lr-color-picker` remains open underneath it.\nThe editable combobox input exposes explicit stateful `aria-invalid`: visible error chrome wins\nimmediately, while intrinsic/custom invalidity is exposed only after interaction.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | `<lr-option>` elements. |\n| `clear-icon` | Replaces the clear button's built-in icon. |\n| `end` | Adornment after the filter input and the built-in clear action, and before the expand icon — so consumer content never sits outboard of the dropdown chevron. |\n| `error` | Custom error content. |\n| `expand-icon` | Replaces the dropdown indicator's built-in icon. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n| `start` | Adornment at the inline-start of the trigger row, before the selected-value tags and the filter input. Slotted content is decorative chrome, not an option: `collectOptions()` only ever collects `<lr-option>` elements from the default slot. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `clear-button` | The clear button. |\n| `combobox` | The input container (positioning anchor). |\n| `combobox-input` | The text input. |\n| `end` | Wrapper around the `end` adornment slot; `hidden` while nothing is slotted. |\n| `error` | Ordinary form-validation text referenced by the internal input; it is not a live region, avoiding a second announcement alongside native validation/focus feedback. |\n| `expand-icon` | The dropdown indicator. |\n| `form-control` | The outer wrapper around label, combobox, listbox, error and hint. |\n| `form-control-input` | Compatibility wrapper around the editable control. |\n| `form-control-label` | The `<label>` element. |\n| `group-label` | The heading of an option group (rows sharing a `group`), named as on `lr-select` and `lr-emoji-picker` so one rule can style every grouped list. |\n| `hint` | The hint message. |\n| `label` | Compatibility wrapper around the visible label content. |\n| `listbox` | The managed nonmodal options popover; its stack depth comes from `--lr-overlay-stack-index` with `--lr-layer-dropdown` as the standalone fallback. |\n| `option` | An option row. |\n| `option-badge` | An async option row's optional trailing metadata badge. |\n| `option-dot` | An option row's leading status dot (when `dot-color` is set). |\n| `option-end` | An option row's trailing adornment, cloned from the source `<lr-option>`'s `end`/`suffix` slot (or an async row's `end`). Inert and aria-hidden. |\n| `option-icon` | An async option row's optional decorative leading visual. Its rendered subtree remains visible but is inert and hidden from assistive technology. |\n| `option-label` | An option row's label/sub wrapper. |\n| `option-overflow` | The \"+N more\" indicator shown when rows are capped by `maxRender`. |\n| `option-start` | An option row's leading adornment, cloned from the source `<lr-option>`'s `start`/`prefix` slot (or an async row's `start`). Inert and aria-hidden. |\n| `option-sub` | An option row's secondary line (when `sub` is set). |\n| `start` | Wrapper around the `start` adornment slot; `hidden` while nothing is slotted. |\n| `tag` | An individual selected tag. |\n| `tag-label` | The wrapping/ellipsis-safe selected-tag label. |\n| `tag__content` | Compatibility wrapper around a selected tag's visible content. |\n| `tag__remove-button` | A tag's remove button. |\n| `tag__remove-button__base` | Compatibility name on a tag's remove button. |\n| `tags` | The multi-select tag container. |\n\n---\n\n**CSS Custom Properties**\n\n- `--hide-duration` (default: `var(--lr-transition-fast)`) — Listbox exit-transition duration.\n- `--lr-combobox-expand-size` — Decorative expand-icon box size, scaled by `size`.\n- `--lr-combobox-font-size` (default: `var(--lr-form-control-font-size)`) — Input text size, from the shared form-control size ladder.\n- `--lr-combobox-gap` (default: `var(--lr-space-xs)`) — Gap between the start/end adornments, tags, and filter input inside the trigger row. Unlike the size knobs above it does not vary by `size` tier. Override it to retune without a `::part(combobox)` rule.\n- `--lr-combobox-option-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a hovered or keyboard-active option row.\n- `--lr-combobox-option-selected-bg` (default: `transparent`) — Background of the currently-selected option row. Not declared on `:host`; retheme without hijacking `--lr-color-brand`.\n- `--lr-combobox-option-selected-border` (default: `var(--lr-color-brand)`) — Border color of the selected option row.\n- `--lr-combobox-option-selected-color` (default: `var(--lr-color-brand)`) — Text color of the selected option row.\n- `--lr-combobox-option-selected-font-weight` (default: `var(--lr-font-weight-semibold)`) — Font weight of the selected option row.\n- `--lr-combobox-radius` (default: `var(--lr-radius)`) — Corner radius of the trigger row (`[part='combobox']`). Does not vary by `size` tier; the `pill` attribute swaps it for `--lr-radius-pill`.\n- `--lr-combobox-tag-font-size` — Selected-tag text size.\n- `--lr-combobox-tag-padding` — Selected-tag padding.\n- `--lr-combobox-trigger-height` — Exact input-container height. Unset by default, which leaves `--lr-combobox-trigger-min-height` as a floor only; set it to a length to both floor and cap the row (e.g. to pixel-match `<lr-input>`/`<lr-select>` in the same toolbar). Because it is never declared by the component itself, it can be set from an ancestor or an outer-tree rule as well as inline on the element. Intended for a single-row combobox: in `multiple` mode a tag row long enough to wrap overflows the pinned box visibly (nothing is clipped or made unreachable), so leave it unset there.\n- `--lr-combobox-trigger-min-height` (default: `var(--lr-form-control-height)`) — Minimum input-container block size. Reads the shared form-control height ladder, so retuning `--lr-theme-form-control-height-*` moves this control and every sibling field together.\n- `--lr-combobox-trigger-padding` — Padding inside the input container.\n- `--lr-form-control-required-color` (default: `var(--lr-color-danger)`) — Required-marker color, themeable independently of error text and invalid borders.\n- `--lr-form-control-required-content` (default: `' *'`) — The required marker appended to `form-control-label` while `required` is set. Set it to `''` to suppress the marker, or to any other quoted string (`' (required)'`, a localized word) to replace it.\n- `--lr-form-control-required-offset` (default: `0`) — Inline space between the label text and the required marker.\n- `--show-duration` (default: `var(--lr-transition-fast)`) — Listbox enter-transition duration.\n- `--tag-max-size` (default: `var(--lr-size-5rem)`) — Maximum inline size of a built-in selected tag."
5653
5773
  },
5654
5774
  "attributes": [
5655
5775
  {
@@ -5793,14 +5913,14 @@
5793
5913
  "name": "max-options-visible",
5794
5914
  "description": {
5795
5915
  "kind": "markdown",
5796
- "value": "Maximum number of selected-value tags shown before the rest collapse behind a \"+N\" tag\n(multi-select only). Sanitized to a finite, non-negative integer.\n\nType: `number` \nDefault: `3`"
5916
+ "value": "Maximum number of selected-value **tags** shown before the rest collapse behind a \"+N\" tag\n(multi-select only). Sanitized to a finite, non-negative integer.\n\nNot to be confused with the two caps on the suggestion list: `visibleOptions` bounds how many\nsuggestion rows are visible at once, and `maxRender` bounds how many are rendered at all.\nThis one only ever concerns the tags for values already chosen.\n\nType: `number` \nDefault: `3`"
5797
5917
  }
5798
5918
  },
5799
5919
  {
5800
5920
  "name": "max-render",
5801
5921
  "description": {
5802
5922
  "kind": "markdown",
5803
- "value": "Maximum number of rows rendered before the rest collapse behind the overflow indicator\n(the current selection is always kept visible regardless). Sanitized to a finite,\nnon-negative integer capped at 1,000.\n\nRows render in full rather than as a recycled scroll window, because the filter input's\n`aria-activedescendant` is an IDREF and can only resolve within its own tree scope — rows\nhosted inside a nested windowing element would sit one shadow root deeper than the input\nthat must point at them. Raising this to cover a few-hundred-entry list (countries,\ncurrencies, time zones) is the intended use; past roughly a thousand rows, `source` narrows\nthe set before it becomes DOM and is the better tool.\n\nType: `number`"
5923
+ "value": "Maximum number of suggestion rows **rendered into the DOM at all** before the rest collapse\nbehind the overflow indicator (the current selection is always kept visible regardless). This\nis a performance ceiling, not a visible-height affordance: rows past it do not exist and\ncannot be scrolled to. Use `visibleOptions` to bound the popup's height while keeping every\nrow reachable, and `maxOptionsVisible` for the selected-tag cap. Sanitized to a finite,\nnon-negative integer capped at 1,000.\n\nRows render in full rather than as a recycled scroll window, because the filter input's\n`aria-activedescendant` is an IDREF and can only resolve within its own tree scope — rows\nhosted inside a nested windowing element would sit one shadow root deeper than the input\nthat must point at them. Raising this to cover a few-hundred-entry list (countries,\ncurrencies, time zones) is the intended use; past roughly a thousand rows, `source` narrows\nthe set before it becomes DOM and is the better tool.\n\nType: `number`"
5804
5924
  }
5805
5925
  },
5806
5926
  {
@@ -5924,6 +6044,13 @@
5924
6044
  "value": "The selected value(s): a string in single mode, a string[] in `multiple` mode.\n\nType: `string | string[]`"
5925
6045
  }
5926
6046
  },
6047
+ {
6048
+ "name": "visible-options",
6049
+ "description": {
6050
+ "kind": "markdown",
6051
+ "value": "Bounds the popup to roughly this many option rows, leaving the rest reachable by scrolling.\n\nThis is the third and last of three similarly-named caps, which is exactly the confusion this\nproperty exists to end -- each does something different:\n- `visibleOptions` (this one) caps how many suggestion rows are **visible** at once. Purely\n presentational: every row is still rendered and still reachable by scrolling.\n- `maxOptionsVisible` caps how many **selected tags** are shown in multi-select before the\n \"+N\" summary. Nothing to do with the suggestion list.\n- `maxRender` caps how many suggestion rows are **rendered into the DOM at all**, as a\n performance ceiling; rows past it do not exist and are summarized by `option-overflow`.\n\nUnset imposes no bound of its own, leaving the listbox's existing max-height behavior exactly\nas it was. Zero, negative, and non-finite values normalize to unset rather than collapsing the\npopup.\n\nType: `number | undefined`"
6052
+ }
6053
+ },
5927
6054
  {
5928
6055
  "name": "with-clear",
5929
6056
  "description": {
@@ -6178,7 +6305,7 @@
6178
6305
  "name": "lr-condition-builder",
6179
6306
  "description": {
6180
6307
  "kind": "markdown",
6181
- "value": "`<lr-condition-builder>` — a composable structured-condition builder for tabular/dashboard data: a\nflat list of field/operator/value condition rows combined with one AND/OR combinator.\n\nDistinct from this package's `<lr-graph-query-builder>`: that component builds typed\nrelationship/path queries over a knowledge graph, a genuinely different data model from this\none's flat tabular field/operator/value conditions — they never share a file or a value type.\n\nFully controlled: a host supplies `fields` (the available columns, each with a\n`ConditionBuilderFieldType` that determines its offered operators and value control) and `value`\n(a plain, serializable `{ combinator, conditions }` object — safe to persist or send to a\nbackend as-is, the same shape convention as this package's `<lr-rubric-form>`/`<lr-filter-bar>`).\nThis component never mutates `fields`/`value` in place or calls out to storage/network itself;\nevery change is surfaced through `value`/`lr-input` for the host to own. A non-finite value on a\nfield declared as `number` normalizes to `undefined`, whether it arrives through the controlled\nmodel, later field metadata, or an overflowing user-input string, so JSON never turns it into\nan unrelated `null` condition.\nInputs are clone-owned, bounded readonly snapshots; blank field names, option values, and\ncondition ids are omitted, duplicates use their first valid record, closed vocabulary values normalize to a safe fallback, and all event\ndetails are frozen.\n\n**9.0 migration:** this original component was renamed from `<lr-query-builder>` /\n`LyraQueryBuilder` / `QueryBuilder*` to the condition-specific names above. No legacy tag, class,\ntype, or granular-path alias remains.\n\nEach row composes `<lr-select>` for the field and operator pickers, and a value control chosen\nfrom the selected field's `type`: `<lr-input type=\"text\">` (`string`), `<lr-input\ntype=\"number\">` (`number`), `<lr-select>` with `True`/`False` options (`boolean`),\n`<lr-date-input>` (`date`), `<lr-select>` (`enum`, `eq`/`neq`) or a multi-select\n`<lr-combobox>` (`enum`, `in`/`notIn`). A unary operator (`isEmpty`/`isNotEmpty`) renders no\nvalue control. `<lr-icon-button icon=\"trash\">` removes a row; `<lr-button>` appends one.\n\nThis is a composite query-definition control, not a single submittable form field — it\ndeliberately ships no `label`/`hint`/`errorText` chrome or native form association (the\n`label`/`hint`/`error` triad those controls share doesn't fit a multi-row, multi-field\ncomposite the way it fits one value). A host names the whole control via a plain `aria-label`\nattribute, applied to the element that owns `role=\"group\"`.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `9.0.0`\n- Rationale: This tag entered Lyra as a stable public API with documented behavior, accessibility, and cross-browser support.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `add-button` | The \"Add condition\" `lr-button`. |\n| `base` | The outer wrapper. |\n| `combinator` | The AND/OR combinator `lr-select`, rendered only when there are 2+ conditions. |\n| `condition` | One field/operator/value row. |\n| `conditions` | The wrapper around the condition rows. |\n| `empty` | The message shown when there are no fields, or no conditions yet. |\n| `field-select` | A row's field `lr-select`. |\n| `operator-select` | A row's operator `lr-select`. |\n| `remove-button` | A row's remove `lr-icon-button`. |\n| `value` | A row's value control (whichever of `lr-input`/`lr-select`/`lr-date-input`/ `lr-combobox` applies, or an empty placeholder for a unary operator or an incomplete row). |"
6308
+ "value": "`<lr-condition-builder>` — a composable structured-condition builder for tabular/dashboard data: a\nflat list of field/operator/value condition rows combined with one AND/OR combinator.\n\nDistinct from this package's `<lr-graph-query-builder>`: that component builds typed\nrelationship/path queries over a knowledge graph, a genuinely different data model from this\none's flat tabular field/operator/value conditions — they never share a file or a value type.\n\nA host supplies `fields` (the available columns, each with a `ConditionBuilderFieldType` that\ndetermines its offered operators and value control) and `value` (a plain, serializable\n`{ combinator, conditions }` object — safe to persist or send to a backend as-is, the same shape\nconvention as this package's `<lr-rubric-form>`/`<lr-filter-bar>`).\nThis component never mutates `fields`/`value` in place inputs are clone-owned — and never calls\nout to storage/network itself. It does advance its own copy of `value` on each edit and *then*\nemits `lr-input` with the complete next state: the same \"update, then emit; reassign to control\"\nround-trip `<lr-source-picker>`'s `selectedSourceIds` and `<lr-retrieval-search>`'s `filters`\nestablish. `lr-input` is not cancelable, so a host validating an edit reassigns `value` in its\nhandler rather than vetoing the change before it renders. A non-finite value on a\nfield declared as `number` normalizes to `undefined`, whether it arrives through the controlled\nmodel, later field metadata, or an overflowing user-input string, so JSON never turns it into\nan unrelated `null` condition.\nInputs are clone-owned, bounded readonly snapshots; blank field names, option values, and\ncondition ids are omitted, duplicates use their first valid record, closed vocabulary values normalize to a safe fallback, and all event\ndetails are frozen.\n\n**9.0 migration:** this original component was renamed from `<lr-query-builder>` /\n`LyraQueryBuilder` / `QueryBuilder*` to the condition-specific names above. No legacy tag, class,\ntype, or granular-path alias remains.\n\nEach row composes `<lr-select>` for the field and operator pickers, and a value control chosen\nfrom the selected field's `type`: `<lr-input type=\"text\">` (`string`), `<lr-input\ntype=\"number\">` (`number`), `<lr-select>` with `True`/`False` options (`boolean`),\n`<lr-date-input>` (`date`), `<lr-select>` (`enum`, `eq`/`neq`) or a multi-select\n`<lr-combobox>` (`enum`, `in`/`notIn`). A unary operator (`isEmpty`/`isNotEmpty`) renders no\nvalue control. `<lr-icon-button icon=\"trash\">` removes a row; `<lr-button>` appends one.\n\nThis is a composite query-definition control, not a single submittable form field — it\ndeliberately ships no `label`/`hint`/`errorText` chrome or native form association (the\n`label`/`hint`/`error` triad those controls share doesn't fit a multi-row, multi-field\ncomposite the way it fits one value). A host names the whole control via a plain `aria-label`\nattribute, applied to the element that owns `role=\"group\"`.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `9.0.0`\n- Rationale: This tag entered Lyra as a stable public API with documented behavior, accessibility, and cross-browser support.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `add-button` | The \"Add condition\" `lr-button`. |\n| `base` | The outer wrapper. |\n| `combinator` | The AND/OR combinator `lr-select`, rendered only when there are 2+ conditions. |\n| `condition` | One field/operator/value row. |\n| `conditions` | The wrapper around the condition rows. |\n| `empty` | The message shown when there are no fields, or no conditions yet. |\n| `field-select` | A row's field `lr-select`. |\n| `operator-select` | A row's operator `lr-select`. |\n| `remove-button` | A row's remove `lr-icon-button`. |\n| `value` | A row's value control (whichever of `lr-input`/`lr-select`/`lr-date-input`/ `lr-combobox` applies, or an empty placeholder for a unary operator or an incomplete row). |"
6182
6309
  },
6183
6310
  "attributes": [
6184
6311
  {
@@ -7582,7 +7709,7 @@
7582
7709
  "name": "lr-date-picker",
7583
7710
  "description": {
7584
7711
  "kind": "markdown",
7585
- "value": "`<lr-date-picker>` — an inline month-grid calendar for picking a single date\nor a date range. Mirrors the core `<wa-date-picker>` API under `lr-`.\n\nValue is ISO 8601: `YYYY-MM-DD` (single) or `YYYY-MM-DD/YYYY-MM-DD` (range).\nCalendar arithmetic and formatting are explicitly proleptic Gregorian, including ISO years\n0000–0099; visible day/week digits still follow the effective locale's numbering system.\n\nDeliberately does **not** perform implicit form submission on Enter (unlike its `<lr-date-input>`\nwrapper, which routes through `internal/submit-on-enter.ts`): Enter selects the focused day in\nthe calendar grid — the grid's own commit key, the same carve-out `<lr-textarea>` has for a\nnewline. This element is also not form-associated; the wrapping `<lr-date-input>` is what\nparticipates in a `<form>`.\n\nMonth, year, and decade selection views retain one enabled roving Tab stop. Arrow keys follow\ntheir visual four-column grid (mirroring horizontally under RTL), Home and End move to the\nfirst and last enabled periods, and Enter or Space drills into the focused period.\nA period is enabled only when it contains a date selectable under the current bounds,\npast/future, date-list, weekday, predicate, and pending-range constraints.\n\n---\n\n**Component metadata**\n\n- Status: `experimental`\n- Since: `4.0.0`\n- Rationale: This exact tag already appears in published Lyra versions and remains experimental under full semver protection while its public API and usage patterns mature.\n- Graduation: Eligible for stable status once its documented API, populated accessibility states, cross-browser behavior, and compatibility contract demonstrate sustained reliability.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `day-YYYY-MM-DD` | Lyra extension for replacing an individual ISO calendar day's content. |\n| `footer` | Content below the calendar grids. |\n| `header` | Replaces the built-in navigation header. |\n| `next-icon` | Replaces the next-page icon. |\n| `previous-icon` | Replaces the previous-page icon. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | Permanent compatibility name on the same visible shell as `date-picker`. |\n| `date-picker` | The visible date-picker shell. |\n| `day` | A calendar day button. |\n| `day-disabled` | A disabled day. |\n| `day-label` | The visible day label. |\n| `day-outside` | A day outside the active month. |\n| `day-placeholder` | A non-day grid placeholder. |\n| `day-range-end` | The end of a selected range. |\n| `day-range-inner` | An interior day in a selected range. |\n| `day-range-preview` | A day in the pending range preview. |\n| `day-range-start` | The start of a selected range. |\n| `day-selected` | A selected day. |\n| `day-today` | A day representing today. |\n| `day-weekend` | A Saturday or Sunday. |\n| `footer` | The footer region. |\n| `grid` | A month date grid. |\n| `header` | The month header. |\n| `month` | A visible month wrapper. |\n| `month-label` | The interactive month label. |\n| `months` | The visible-month collection. |\n| `nav` | The navigation controls. |\n| `next` | The next-month button. |\n| `previous` | The previous-month button. |\n| `title` | The month title. |\n| `view-cell` | A cell in a selection grid. |\n| `view-grid` | A month/year/decade selection grid. |\n| `view-item` | A month/year/decade selection button. |\n| `view-item-disabled` | A disabled selection item. |\n| `view-item-selected` | The item containing the selected date. |\n| `view-item-today` | The item containing today. |\n| `view-row` | A row in a selection grid. |\n| `week` | A calendar week row. |\n| `weekday` | A weekday label. |\n| `weekdays` | The weekday header row. |\n| `weeknumber` | One week number. |\n| `weeknumbers` | The week-number column. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-cell-size` (default: `var(--lr-size-2-25rem)`) — Inline and block size of each day cell and the matching calendar grid track.\n- `--lr-date-picker-day-active-bg` (default: `color-mix(in oklab, var(--lr-date-picker-day-hover-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))`) — Day pressed background.\n- `--lr-date-picker-day-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Day hover background.\n- `--lr-date-picker-day-outside-color` (default: `var(--lr-color-text-quiet)`) — Adjacent-month day color.\n- `--lr-date-picker-disabled-color` (default: `var(--lr-color-text-quiet)`) — Disabled day text color.\n- `--lr-date-picker-disabled-opacity` (default: `var(--lr-opacity-disabled)`) — Disabled day opacity.\n- `--lr-date-picker-header-gap` (default: `var(--lr-space-s)`) — Month-header child gap.\n- `--lr-date-picker-month-gap` (default: `var(--lr-space-l)`) — Gap between visible months.\n- `--lr-date-picker-nav-active-bg` (default: `color-mix(in oklab, var(--lr-date-picker-nav-hover-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))`) — Pressed month-navigation background.\n- `--lr-date-picker-nav-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the `[part=\"previous\"]`/`[part=\"next\"]` month-navigation buttons.\n- `--lr-date-picker-radius` (default: `var(--lr-radius)`) — Calendar and control corner radius.\n- `--lr-date-picker-range-bg` (default: `var(--lr-color-brand-quiet)`) — Selected-range interior background.\n- `--lr-date-picker-range-color` (default: `var(--lr-color-text)`) — Adjacent-month range text color.\n- `--lr-date-picker-range-preview-bg` (default: `var(--lr-date-picker-range-bg, var(--lr-color-brand-quiet))`) — Pending-range preview background.\n- `--lr-date-picker-selected-bg` (default: `var(--lr-color-brand)`) — Selected day/range-endpoint background.\n- `--lr-date-picker-selected-color` (default: `var(--lr-color-on-brand)`) — Selected day/range-endpoint text color.\n- `--lr-date-picker-title-active-bg` (default: `var(--lr-color-brand-quiet)`) — Pressed title background.\n- `--lr-date-picker-title-active-color` (default: `var(--lr-color-brand)`) — Pressed title color.\n- `--lr-date-picker-title-active-radius` (default: `var(--lr-date-picker-radius)`) — Pressed title corner radius.\n- `--lr-date-picker-title-hover-color` (default: `var(--lr-color-brand)`) — Hovered title color.\n- `--lr-date-picker-today-outline` (default: `var(--lr-color-brand)`) — Today outline color.\n- `--lr-date-picker-view-active-bg` (default: `color-mix(in oklab, var(--lr-date-picker-view-hover-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))`) — Selection-view item pressed background.\n- `--lr-date-picker-view-disabled-opacity` (default: `var(--lr-opacity-disabled)`) — Disabled selection-view item opacity.\n- `--lr-date-picker-view-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Selection-view item hover background.\n- `--lr-date-picker-view-selected-bg` (default: `var(--lr-color-brand)`) — Selected selection-view item background.\n- `--lr-date-picker-view-selected-color` (default: `var(--lr-color-on-brand)`) — Selected selection-view item text color.\n- `--lr-date-picker-view-today-outline` (default: `var(--lr-color-brand)`) — Current-period selection-view outline."
7712
+ "value": "`<lr-date-picker>` — an inline month-grid calendar for picking a single date\nor a date range. Mirrors the core `<wa-date-picker>` API under `lr-`.\n\nValue is ISO 8601: `YYYY-MM-DD` (single) or `YYYY-MM-DD/YYYY-MM-DD` (range).\nCalendar arithmetic and formatting are explicitly proleptic Gregorian, including ISO years\n0000–0099; visible day/week digits still follow the effective locale's numbering system.\n\nDeliberately does **not** perform implicit form submission on Enter (unlike its `<lr-date-input>`\nwrapper, which routes through `internal/submit-on-enter.ts`): Enter selects the focused day in\nthe calendar grid — the grid's own commit key, the same carve-out `<lr-textarea>` has for a\nnewline. This element is also not form-associated; the wrapping `<lr-date-input>` is what\nparticipates in a `<form>`.\n\nMonth, year, and decade selection views retain one enabled roving Tab stop. Arrow keys follow\ntheir visual four-column grid (mirroring horizontally under RTL), Home and End move to the\nfirst and last enabled periods, and Enter or Space drills into the focused period.\nA period is enabled only when it contains a date selectable under the current bounds,\npast/future, date-list, weekday, predicate, and pending-range constraints.\n\n---\n\n**Component metadata**\n\n- Status: `experimental`\n- Since: `4.0.0`\n- Rationale: This exact tag already appears in published Lyra versions and remains experimental under full semver protection while its public API and usage patterns mature.\n- Graduation: Eligible for stable status once its documented API, populated accessibility states, cross-browser behavior, and compatibility contract demonstrate sustained reliability.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `day-YYYY-MM-DD` | Lyra extension for replacing an individual ISO calendar day's content. |\n| `footer` | Content below the calendar grids. |\n| `header` | Replaces the built-in navigation header. |\n| `next-icon` | Replaces the next-page icon. |\n| `previous-icon` | Replaces the previous-page icon. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | Permanent compatibility name on the same visible shell as `date-picker`. |\n| `date-picker` | The visible date-picker shell. |\n| `day` | A calendar day button. |\n| `day-disabled` | A disabled day. |\n| `day-label` | The visible day label. |\n| `day-outside` | A day outside the active month. |\n| `day-placeholder` | A non-day grid placeholder. |\n| `day-range-end` | The end of a selected range. |\n| `day-range-inner` | An interior day in a selected range. |\n| `day-range-preview` | A day in the pending range preview. |\n| `day-range-start` | The start of a selected range. |\n| `day-selected` | A selected day. |\n| `day-today` | A day representing today. |\n| `day-weekend` | A Saturday or Sunday. |\n| `footer` | The footer region. |\n| `grid` | A month date grid. |\n| `header` | The month header. |\n| `month` | A visible month wrapper. |\n| `month-label` | The interactive month label. |\n| `months` | The visible-month collection. |\n| `nav` | The navigation controls. |\n| `next` | The next-month button. |\n| `preset-button` | One quick-range button; carries `data-active` while its range is the current value. |\n| `presets` | The quick-range button row, rendered only in range mode with `presets` set. |\n| `previous` | The previous-month button. |\n| `title` | The month title. |\n| `view-cell` | A cell in a selection grid. |\n| `view-grid` | A month/year/decade selection grid. |\n| `view-item` | A month/year/decade selection button. |\n| `view-item-disabled` | A disabled selection item. |\n| `view-item-selected` | The item containing the selected date. |\n| `view-item-today` | The item containing today. |\n| `view-row` | A row in a selection grid. |\n| `week` | A calendar week row. |\n| `weekday` | A weekday label. |\n| `weekdays` | The weekday header row. |\n| `weeknumber` | One week number. |\n| `weeknumbers` | The week-number column. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-cell-size` (default: `var(--lr-size-2-25rem)`) — Inline and block size of each day cell and the matching calendar grid track.\n- `--lr-date-picker-day-active-bg` (default: `color-mix(in oklab, var(--lr-date-picker-day-hover-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))`) — Day pressed background.\n- `--lr-date-picker-day-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Day hover background.\n- `--lr-date-picker-day-outside-color` (default: `var(--lr-color-text-quiet)`) — Adjacent-month day color.\n- `--lr-date-picker-disabled-color` (default: `var(--lr-color-text-quiet)`) — Disabled day text color.\n- `--lr-date-picker-disabled-opacity` (default: `var(--lr-opacity-disabled)`) — Disabled day opacity.\n- `--lr-date-picker-header-gap` (default: `var(--lr-space-s)`) — Month-header child gap.\n- `--lr-date-picker-month-gap` (default: `var(--lr-space-l)`) — Gap between visible months.\n- `--lr-date-picker-nav-active-bg` (default: `color-mix(in oklab, var(--lr-date-picker-nav-hover-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))`) — Pressed month-navigation background.\n- `--lr-date-picker-nav-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the `[part=\"previous\"]`/`[part=\"next\"]` month-navigation buttons.\n- `--lr-date-picker-preset-active-bg` — Pressed background of a quick-range button; defaults to a mix of the hover background with the shared active mix partner.\n- `--lr-date-picker-preset-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a quick-range button.\n- `--lr-date-picker-preset-selected-bg` (default: `var(--lr-color-brand)`) — Background and border of the quick-range button whose range is currently selected.\n- `--lr-date-picker-radius` (default: `var(--lr-radius)`) — Calendar and control corner radius.\n- `--lr-date-picker-range-bg` (default: `var(--lr-color-brand-quiet)`) — Selected-range interior background.\n- `--lr-date-picker-range-color` (default: `var(--lr-color-text)`) — Adjacent-month range text color.\n- `--lr-date-picker-range-preview-bg` (default: `var(--lr-date-picker-range-bg, var(--lr-color-brand-quiet))`) — Pending-range preview background.\n- `--lr-date-picker-selected-bg` (default: `var(--lr-color-brand)`) — Selected day/range-endpoint background.\n- `--lr-date-picker-selected-color` (default: `var(--lr-color-on-brand)`) — Selected day/range-endpoint text color.\n- `--lr-date-picker-title-active-bg` (default: `var(--lr-color-brand-quiet)`) — Pressed title background.\n- `--lr-date-picker-title-active-color` (default: `var(--lr-color-brand)`) — Pressed title color.\n- `--lr-date-picker-title-active-radius` (default: `var(--lr-date-picker-radius)`) — Pressed title corner radius.\n- `--lr-date-picker-title-hover-color` (default: `var(--lr-color-brand)`) — Hovered title color.\n- `--lr-date-picker-today-outline` (default: `var(--lr-color-brand)`) — Today outline color.\n- `--lr-date-picker-view-active-bg` (default: `color-mix(in oklab, var(--lr-date-picker-view-hover-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))`) — Selection-view item pressed background.\n- `--lr-date-picker-view-disabled-opacity` (default: `var(--lr-opacity-disabled)`) — Disabled selection-view item opacity.\n- `--lr-date-picker-view-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Selection-view item hover background.\n- `--lr-date-picker-view-selected-bg` (default: `var(--lr-color-brand)`) — Selected selection-view item background.\n- `--lr-date-picker-view-selected-color` (default: `var(--lr-color-on-brand)`) — Selected selection-view item text color.\n- `--lr-date-picker-view-today-outline` (default: `var(--lr-color-brand)`) — Current-period selection-view outline."
7586
7713
  },
7587
7714
  "attributes": [
7588
7715
  {
@@ -7986,7 +8113,7 @@
7986
8113
  "name": "lr-dialog",
7987
8114
  "description": {
7988
8115
  "kind": "markdown",
7989
- "value": "`<lr-dialog>` — a general-purpose modal/overlay. `role=\"dialog\"`,\nfocus-trapped while open, dismissible via Escape or (opt-in) a backdrop click, and\nscroll-locks the document for as long as it's open. While open it is promoted into the\nbrowser top layer, so no consumer stacking context can render on top of it. The mapped\n`label` property renders as a visible title and the close affordance is present by default;\n`closable=\"false\"` plus either header-suppression spelling support custom chrome. `no-header` is\nShoelace's name for it and `without-header` is Web Awesome's; both are current upstream\nspellings, neither is deprecated, and both are read.\n\nLifecycle: `show()` emits `lr-show` (cancelable) and then, once the enter animation has\nfinished, `lr-after-show`. `hide()`/`close()` emit `lr-hide` (cancelable), then\n`lr-dialog-close` (cancelable, carrying the dismissal reason), then — once the exit animation\nhas finished — `lr-after-hide`. Assigning `open` runs the same lifecycle, so the property, the\nreflected attribute, and the two method calls can never disagree. Markup that renders open\nfrom the start emits nothing, matching `<lr-menu>`.\nThe panel resolves `dialog.show`/`dialog.hide` through the public animation registry; the\nbackdrop resolves `dialog.overlay.show`/`dialog.overlay.hide`. A per-element registration wins\nover a page default, while keyframes-only overrides retain the dialog's token-derived timing.\n\nAccessible naming and visible-title precedence are independent. A host `aria-label` wins by\nattribute presence, including an explicitly empty value, followed by `accessible-label`, then\nthe text of a direct light-DOM heading. Otherwise the visible title wrapper names the panel.\nWithin that wrapper the rich `label` slot wins over the `label` property, which wins over the\nlegacy `heading` property. Explicit accessible-only naming never suppresses that visible title.\n\nThe slotted-heading case deliberately uses `aria-label` (a copied string)\nrather than `aria-labelledby` pointing at the heading's `id`: the heading is\n*light-DOM* content while `[part=\"panel\"]` lives in this element's\n*shadow* tree, and an ID-reference attribute can't resolve across that\nboundary (verified against axe's `aria-dialog-name` rule) — unlike the\nmapped-title cases above, where the target element is rendered\ninside the same shadow root it labels, so `aria-labelledby` there is safe.\nThe `label` *slot* is safe for the same reason: `aria-labelledby` targets the shadow-owned\n`part=\"heading\"` wrapper, and the accessible-name computation flattens the slot inside it.\nThat generated visible title is a level-three heading by default; set `heading-level` from\n`1`–`6` to fit the surrounding outline, or `none` for visual-only title text. A direct\nlight-DOM heading retains its own level instead.\n\n`closable` defaults to true and renders a close (X) button in the header row (creating one, with\nno heading text, if neither `heading` nor the `label` slot is set) that closes the dialog via\nthe same `close()` path as Escape/backdrop-dismiss, with reason `'close-button'`.\n\nThe `body` part is the element that scrolls, so it carries `tabindex=\"-1\"`: a dialog holding\nonly prose, a table, or a rendered document would otherwise have no keyboard stop at all and\nits content would be readable by mouse alone. It joins the Tab order only while it actually\noverflows, sorts behind any control inside it for initial focus, and shows the standard focus\nring on `::part(body)` when it takes focus.\n\nStacking: opening one `<lr-dialog>` while another is already open (e.g. a\n`confirm()` launched from within an already-open dialog) is supported --\nEscape and the Tab focus trap only ever act on the topmost open dialog, so\ndialogs beneath it stay open and untouched until the one on top closes.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The dialog body. |\n| `footer` | Action buttons, rendered in a bottom row. |\n| `header-actions` | Extra controls rendered in the header row, before the built-in close button. |\n| `label` | Rich header content, rendered in the header row and used as the panel's accessible name. Wins over the plain-string `label` and legacy `heading` properties. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `backdrop` | The full-viewport scrim behind the panel; also carries `overlay`. |\n| `base` | Shoelace wrapper alias. |\n| `body` | The wrapper around the default slot. |\n| `close-button` | The built-in close button, rendered inside `header` only when `closable` is `true`. |\n| `close-button__base` | Exported mapped alias on the close button. |\n| `dialog` | Web Awesome alias on the panel. |\n| `footer` | The wrapper around the `footer` slot. |\n| `header` | The header row, rendered when the `label` slot is filled, `label`/`heading` is set (and no heading is slotted into the default slot), `header-actions` is filled, and/or `closable` is `true` — and never when `noHeader` or `withoutHeader` is set. |\n| `header-actions` | The wrapper around the `header-actions` slot. |\n| `heading` | The visible title inside `header`; also carries `title` and `label`, and owns the configured heading semantics unless opted out. |\n| `label` | Mapped alias on the visible title. |\n| `overlay` | Shoelace alias on the backdrop. |\n| `panel` | The dialog panel itself (`role=\"dialog\"` while open); also carries `dialog`. Shrink-wraps to its content by default, capped at `--lr-dialog-max-width` (default `32rem`); set `--lr-dialog-width` for an assertive width instead of only a cap. |\n| `title` | Mapped alias on the visible title. |\n\n---\n\n**CSS Custom Properties**\n\n- `--backdrop-filter` (default: `var(--lr-dialog-backdrop-filter,none)`) — Mapped backdrop-filter alias.\n- `--body-spacing` — Shoelace body padding override.\n- `--footer-spacing` — Shoelace footer padding override.\n- `--header-spacing` — Mapped header padding override.\n- `--hide-duration` — Mapped closing animation duration.\n- `--lr-dialog-backdrop-duration` (default: `var(--lr-duration-fast)`) — Duration of the backdrop's fade.\n- `--lr-dialog-backdrop-filter` (default: `none`) — `backdrop-filter` applied to the scrim, for a frosted-glass treatment over the page behind it.\n- `--lr-dialog-max-width` (default: `var(--lr-dialog-width, var(--lr-size-32rem))`) — Cap on the panel's inline size. Falls back to `--lr-dialog-width` when that is set, so an assertive width is not clipped by the 32rem default; the viewport (`100%`) is always a hard limit on top.\n- `--lr-dialog-overlay-color` (default: `var(--lr-color-overlay)`) — Backdrop scrim color.\n- `--lr-dialog-panel-duration` (default: `var(--lr-duration-base)`) — Duration of the panel's enter/exit animation.\n- `--lr-dialog-spacing` (default: `var(--lr-space-l)`) — Padding inside the body, and the inline padding of the header and footer rows.\n- `--lr-dialog-spacing-block` (default: `var(--lr-space-m)`) — Block padding of the header and footer rows, which are tighter than the body by default.\n- `--lr-dialog-width` (default: `auto`) — Assertive inline size for the panel. Left at `auto` the panel shrink-wraps to its content.\n- `--show-duration` — Mapped opening animation duration.\n- `--spacing` (default: `var(--lr-dialog-spacing,var(--lr-space-l))`) — Mapped shared region spacing.\n- `--width` (default: `var(--lr-dialog-width,auto)`) — Mapped panel width alias."
8116
+ "value": "`<lr-dialog>` — a general-purpose modal/overlay. `role=\"dialog\"`,\nfocus-trapped while open, dismissible via Escape or (opt-in) a backdrop click, and\nscroll-locks the document for as long as it's open. While open it is promoted into the\nbrowser top layer, so no consumer stacking context can render on top of it. The mapped\n`label` property renders as a visible title and the close affordance is present by default;\n`closable=\"false\"` plus either header-suppression spelling support custom chrome. `no-header` is\nShoelace's name for it and `without-header` is Web Awesome's; both are current upstream\nspellings, neither is deprecated, and both are read.\n\nLifecycle: `show()` emits `lr-show` (cancelable) and then, once the enter animation has\nfinished, `lr-after-show`. `hide()`/`close()` emit `lr-hide` (cancelable), then\n`lr-close` (cancelable, carrying the dismissal reason), then — once the exit animation\nhas finished — `lr-after-hide`. Assigning `open` runs the same lifecycle, so the property, the\nreflected attribute, and the two method calls can never disagree. Markup that renders open\nfrom the start emits nothing, matching `<lr-menu>`.\nThe panel resolves `dialog.show`/`dialog.hide` through the public animation registry; the\nbackdrop resolves `dialog.overlay.show`/`dialog.overlay.hide`. A per-element registration wins\nover a page default, while keyframes-only overrides retain the dialog's token-derived timing.\n\nAccessible naming and visible-title precedence are independent. A host `aria-label` wins by\nattribute presence, including an explicitly empty value, followed by `accessible-label`, then\nthe text of a direct light-DOM heading. Otherwise the visible title wrapper names the panel.\nWithin that wrapper the rich `label` slot wins over the `label` property, which wins over the\nlegacy `heading` property. Explicit accessible-only naming never suppresses that visible title.\n\nThe slotted-heading case deliberately uses `aria-label` (a copied string)\nrather than `aria-labelledby` pointing at the heading's `id`: the heading is\n*light-DOM* content while `[part=\"panel\"]` lives in this element's\n*shadow* tree, and an ID-reference attribute can't resolve across that\nboundary (verified against axe's `aria-dialog-name` rule) — unlike the\nmapped-title cases above, where the target element is rendered\ninside the same shadow root it labels, so `aria-labelledby` there is safe.\nThe `label` *slot* is safe for the same reason: `aria-labelledby` targets the shadow-owned\n`part=\"heading\"` wrapper, and the accessible-name computation flattens the slot inside it.\nThat generated visible title is a level-three heading by default; set `heading-level` from\n`1`–`6` to fit the surrounding outline, or `none` for visual-only title text. A direct\nlight-DOM heading retains its own level instead.\n\n`closable` defaults to true and renders a close (X) button in the header row (creating one, with\nno heading text, if neither `heading` nor the `label` slot is set) that closes the dialog via\nthe same `close()` path as Escape/backdrop-dismiss, with reason `'close-button'`.\n\nThe `body` part is the element that scrolls, so it carries `tabindex=\"-1\"`: a dialog holding\nonly prose, a table, or a rendered document would otherwise have no keyboard stop at all and\nits content would be readable by mouse alone. It joins the Tab order only while it actually\noverflows, sorts behind any control inside it for initial focus, and shows the standard focus\nring on `::part(body)` when it takes focus.\n\nStacking: opening one `<lr-dialog>` while another is already open (e.g. a\n`confirm()` launched from within an already-open dialog) is supported --\nEscape and the Tab focus trap only ever act on the topmost open dialog, so\ndialogs beneath it stay open and untouched until the one on top closes.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The dialog body. |\n| `footer` | Action buttons, rendered in a bottom row. |\n| `header-actions` | Extra controls rendered in the header row, before the built-in close button. |\n| `label` | Rich header content, rendered in the header row and used as the panel's accessible name. Wins over the plain-string `label` and legacy `heading` properties. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `backdrop` | The full-viewport scrim behind the panel; also carries `overlay`. |\n| `base` | Shoelace wrapper alias. |\n| `body` | The wrapper around the default slot. |\n| `close-button` | The built-in close button, rendered inside `header` only when `closable` is `true`. |\n| `close-button__base` | Exported mapped alias on the close button. |\n| `dialog` | Web Awesome alias on the panel. |\n| `footer` | The wrapper around the `footer` slot. |\n| `header` | The header row, rendered when the `label` slot is filled, `label`/`heading` is set (and no heading is slotted into the default slot), `header-actions` is filled, and/or `closable` is `true` — and never when `noHeader` or `withoutHeader` is set. |\n| `header-actions` | The wrapper around the `header-actions` slot. |\n| `heading` | The visible title inside `header`; also carries `title` and `label`, and owns the configured heading semantics unless opted out. |\n| `label` | Mapped alias on the visible title. |\n| `overlay` | Shoelace alias on the backdrop. |\n| `panel` | The dialog panel itself (`role=\"dialog\"` while open); also carries `dialog`. Shrink-wraps to its content by default, capped at `--lr-dialog-max-width` (default `32rem`); set `--lr-dialog-width` for an assertive width instead of only a cap. |\n| `title` | Mapped alias on the visible title. |\n\n---\n\n**CSS Custom Properties**\n\n- `--backdrop-filter` (default: `var(--lr-dialog-backdrop-filter,none)`) — Mapped backdrop-filter alias.\n- `--body-spacing` — Shoelace body padding override.\n- `--footer-spacing` — Shoelace footer padding override.\n- `--header-spacing` — Mapped header padding override.\n- `--hide-duration` — Mapped closing animation duration.\n- `--lr-dialog-backdrop-duration` (default: `var(--lr-duration-fast)`) — Duration of the backdrop's fade.\n- `--lr-dialog-backdrop-filter` (default: `none`) — `backdrop-filter` applied to the scrim, for a frosted-glass treatment over the page behind it.\n- `--lr-dialog-max-width` (default: `var(--lr-dialog-width, var(--lr-size-32rem))`) — Cap on the panel's inline size. Falls back to `--lr-dialog-width` when that is set, so an assertive width is not clipped by the 32rem default; the viewport (`100%`) is always a hard limit on top.\n- `--lr-dialog-overlay-color` (default: `var(--lr-color-overlay)`) — Backdrop scrim color.\n- `--lr-dialog-panel-duration` (default: `var(--lr-duration-base)`) — Duration of the panel's enter/exit animation.\n- `--lr-dialog-spacing` (default: `var(--lr-space-l)`) — Padding inside the body, and the inline padding of the header and footer rows.\n- `--lr-dialog-spacing-block` (default: `var(--lr-space-m)`) — Block padding of the header and footer rows, which are tighter than the body by default.\n- `--lr-dialog-width` (default: `auto`) — Assertive inline size for the panel. Left at `auto` the panel shrink-wraps to its content.\n- `--show-duration` — Mapped opening animation duration.\n- `--spacing` (default: `var(--lr-dialog-spacing,var(--lr-space-l))`) — Mapped shared region spacing.\n- `--width` (default: `var(--lr-dialog-width,auto)`) — Mapped panel width alias."
7990
8117
  },
7991
8118
  "attributes": [
7992
8119
  {
@@ -8616,9 +8743,16 @@
8616
8743
  "name": "lr-doughnut-chart",
8617
8744
  "description": {
8618
8745
  "kind": "markdown",
8619
- "value": "`<lr-doughnut-chart>` — `<lr-chart>` with a `\"doughnut\"` default and the mirrored writable type.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
8746
+ "value": "`<lr-doughnut-chart>` — `<lr-chart>` with a `\"doughnut\"` default and the mirrored writable type.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-table-toggle` | The disclosure button rendered by `dataTableToggle`. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-data-table-toggle-active-bg` — Pressed background of the `dataTableToggle` disclosure button; defaults to a mix of the hover background with the shared active mix partner.\n- `--lr-chart-data-table-toggle-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the `dataTableToggle` disclosure button.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
8620
8747
  },
8621
8748
  "attributes": [
8749
+ {
8750
+ "name": "annotations",
8751
+ "description": {
8752
+ "kind": "markdown",
8753
+ "value": "Declarative reference lines and shaded bands — a threshold, an event year, a regime change, a\nhighlighted period. Each entry marks either a single `value` or a `from`/`to` range on `axis`\n(default `'y'`), with an optional `label` and semantic `tone`.\n\nNeeds the optional `chartjs-plugin-annotation` peer, loaded on first actual demand so a page\nwith no annotated charts never downloads it. The plugin is registered globally, like\n`chartjs-plugin-zoom` and unlike `chartjs-plugin-datalabels`: it draws nothing unless a chart\nsupplies annotation options, so the registration is unobservable to charts that set none, and\nregistration is also what installs the plugin's own element defaults. Without the peer\ninstalled the chart still renders and a single console warning explains the no-op — the same\nfail-closed contract `data-labels` uses.\n\nEntries are included in the generated accessible description, mirroring `lr-heatmap`.\n\nType: `readonly LyraChartAnnotation[]` \nDefault: `[]`"
8754
+ }
8755
+ },
8622
8756
  {
8623
8757
  "name": "area",
8624
8758
  "description": {
@@ -8640,6 +8774,13 @@
8640
8774
  "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
8641
8775
  }
8642
8776
  },
8777
+ {
8778
+ "name": "data-table-toggle",
8779
+ "description": {
8780
+ "kind": "markdown",
8781
+ "value": "Render a disclosure button above the accessible data table so a sighted reader can reveal the\nnumbers behind the chart on demand. `showDataTable` alone is all-or-nothing -- the table is\neither permanently screen-reader-only or permanently visible -- which left a consumer wrapping\na duplicated table in their own `<details>`.\n\nWith this set, `showDataTable` becomes the disclosure's *initial* state rather than its whole\nbehavior. The table stays in the DOM in both states, so assistive technology never loses it.\n\nType: `boolean` \nDefault: `false`"
8782
+ }
8783
+ },
8643
8784
  {
8644
8785
  "name": "description",
8645
8786
  "description": {
@@ -8761,6 +8902,21 @@
8761
8902
  "value": "Chart.js plugins attached to this chart instance.\n\nType: `LyraChartPlugin[]` \nDefault: `[]`"
8762
8903
  }
8763
8904
  },
8905
+ {
8906
+ "name": "scale-type",
8907
+ "description": {
8908
+ "kind": "markdown",
8909
+ "value": "Scale type for the **value** axis (the categorical axis is unaffected). `'logarithmic'` plots\na dataset spanning several orders of magnitude honestly, where a linear axis collapses\neverything below the maximum into the baseline. Inherited by `lr-line-chart`,\n`lr-scatter-chart` and `lr-bar-chart`.\n\nA logarithmic axis cannot represent zero or negative values (`log(0)` is `-Infinity`), so\n`beginAtZero` is not forwarded in that mode -- Chart.js would otherwise be handed a bound it\ncannot place. Non-positive data points are dropped by Chart.js's own log scale.\n\nType: `LyraChartScaleType` \nDefault: `'linear'`"
8910
+ },
8911
+ "values": [
8912
+ {
8913
+ "name": "linear"
8914
+ },
8915
+ {
8916
+ "name": "logarithmic"
8917
+ }
8918
+ ]
8919
+ },
8764
8920
  {
8765
8921
  "name": "show-data-table",
8766
8922
  "description": {
@@ -8849,7 +9005,7 @@
8849
9005
  "name": "lr-drawer",
8850
9006
  "description": {
8851
9007
  "kind": "markdown",
8852
- "value": "`<lr-drawer>` — a modal panel anchored to one logical edge of the\nviewport. It shares Lyra's dialog focus trap, Escape/backdrop dismissal,\nscroll lock, top-layer promotion, stacking, accessible naming,\n`show()`/`hide()`/`close()` surface, and the whole\n`lr-show`/`lr-after-show`/`lr-hide`/`lr-after-hide`/`lr-dialog-close` lifecycle — see\n`<lr-dialog>` for all of it. `contained` instead positions within the nearest containing block\nas a nonmodal panel: no backdrop, inerting, focus trap, scroll lock, top layer, or global Escape.\nOnly that mode, the slide animation, `placement`, and the `--size` alias are drawer-specific.\nThe panel registry names are `drawer.showTop`/`hideTop`, `showEnd`/`hideEnd`,\n`showBottom`/`hideBottom`, and `showStart`/`hideStart`; the scrim uses\n`drawer.overlay.show`/`drawer.overlay.hide`.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The drawer body. |\n| `footer` | Action buttons rendered in the footer row. |\n| `header-actions` | Extra header controls, inherited from `<lr-dialog>`. |\n| `label` | Rich header content, inherited from `<lr-dialog>`. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `backdrop` | The full-viewport scrim behind the panel; also carries `overlay`. |\n| `base` | Shoelace wrapper alias. |\n| `body` | The wrapper around the default slot. |\n| `close-button` | The built-in close button, rendered inside `header` only when `closable` is `true`. |\n| `close-button__base` | Exported mapped alias on the close button. |\n| `dialog` | Web Awesome alias on the panel. |\n| `footer` | The wrapper around the `footer` slot. |\n| `header` | The header row, rendered when the `label` slot is filled, `label`/`heading` is set (and no heading is slotted into the default slot), `header-actions` is filled, and/or `closable` is `true` — and never when `noHeader` or `withoutHeader` is set. |\n| `header-actions` | The wrapper around the `header-actions` slot. |\n| `heading` | The visible title inside `header`; also carries `title` and `label`, and owns the configured heading semantics unless opted out. |\n| `label` | Mapped alias on the visible title. |\n| `overlay` | Shoelace alias on the backdrop. |\n| `panel` | The dialog panel itself (`role=\"dialog\"` while open); also carries `dialog`. Shrink-wraps to its content by default, capped at `--lr-dialog-max-width` (default `32rem`); set `--lr-dialog-width` for an assertive width instead of only a cap. |\n| `title` | Mapped alias on the visible title. |\n\n---\n\n**CSS Custom Properties**\n\n- `--backdrop-filter` (default: `var(--lr-dialog-backdrop-filter,none)`) — Mapped backdrop-filter alias.\n- `--body-spacing` — Shoelace body padding.\n- `--footer-spacing` — Shoelace footer padding.\n- `--header-spacing` — Shoelace header padding.\n- `--hide-duration` — Closing slide duration.\n- `--lr-dialog-backdrop-duration` (default: `var(--lr-duration-fast)`) — Duration of the backdrop's fade.\n- `--lr-dialog-backdrop-filter` (default: `none`) — `backdrop-filter` applied to the scrim, for a frosted-glass treatment over the page behind it.\n- `--lr-dialog-max-width` (default: `var(--lr-dialog-width, var(--lr-size-32rem))`) — Cap on the panel's inline size. Falls back to `--lr-dialog-width` when that is set, so an assertive width is not clipped by the 32rem default; the viewport (`100%`) is always a hard limit on top.\n- `--lr-dialog-overlay-color` (default: `var(--lr-color-overlay)`) — Backdrop scrim color.\n- `--lr-dialog-panel-duration` (default: `var(--lr-duration-base)`) — Duration of the panel's enter/exit animation.\n- `--lr-dialog-spacing` (default: `var(--lr-space-l)`) — Padding inside the body, and the inline padding of the header and footer rows.\n- `--lr-dialog-spacing-block` (default: `var(--lr-space-m)`) — Block padding of the header and footer rows, which are tighter than the body by default.\n- `--lr-dialog-width` (default: `auto`) — Assertive inline size for the panel. Left at `auto` the panel shrink-wraps to its content.\n- `--lr-drawer-enter-x` (default: `calc(-1 * var(--lr-size-1rem))`) — Horizontal offset the panel slides in from, and back out to, for start/end drawers. Its private default changes per placement (and flips under RTL); an inherited or direct public value remains authoritative.\n- `--lr-drawer-enter-y` (default: `calc(-1 * var(--lr-size-1rem))`) — Vertical offset the panel slides in from, and back out to, for top/bottom drawers. Its private default becomes `var(--lr-size-1rem)` for `bottom`; an inherited or direct public value remains authoritative.\n- `--lr-drawer-height` — Block size for top/bottom drawers.\n- `--lr-drawer-width` — Inline size for start/end drawers.\n- `--show-duration` — Opening slide duration.\n- `--size` — Mapped drawer size for the active axis.\n- `--spacing` (default: `var(--lr-dialog-spacing,var(--lr-space-l))`) — Web Awesome shared region spacing.\n- `--width` (default: `var(--lr-dialog-width,auto)`) — Mapped panel width alias."
9008
+ "value": "`<lr-drawer>` — a modal panel anchored to one logical edge of the\nviewport. It shares Lyra's dialog focus trap, Escape/backdrop dismissal,\nscroll lock, top-layer promotion, stacking, accessible naming,\n`show()`/`hide()`/`close()` surface, and the whole\n`lr-show`/`lr-after-show`/`lr-hide`/`lr-after-hide`/`lr-close` lifecycle — see\n`<lr-dialog>` for all of it. `contained` instead positions within the nearest containing block\nas a nonmodal panel: no backdrop, inerting, focus trap, scroll lock, top layer, or global Escape.\nOnly that mode, the slide animation, `placement`, and the `--size` alias are drawer-specific.\nThe panel registry names are `drawer.showTop`/`hideTop`, `showEnd`/`hideEnd`,\n`showBottom`/`hideBottom`, and `showStart`/`hideStart`; the scrim uses\n`drawer.overlay.show`/`drawer.overlay.hide`.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The drawer body. |\n| `footer` | Action buttons rendered in the footer row. |\n| `header-actions` | Extra header controls, inherited from `<lr-dialog>`. |\n| `label` | Rich header content, inherited from `<lr-dialog>`. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `backdrop` | The full-viewport scrim behind the panel; also carries `overlay`. |\n| `base` | Shoelace wrapper alias. |\n| `body` | The wrapper around the default slot. |\n| `close-button` | The built-in close button, rendered inside `header` only when `closable` is `true`. |\n| `close-button__base` | Exported mapped alias on the close button. |\n| `dialog` | Web Awesome alias on the panel. |\n| `footer` | The wrapper around the `footer` slot. |\n| `header` | The header row, rendered when the `label` slot is filled, `label`/`heading` is set (and no heading is slotted into the default slot), `header-actions` is filled, and/or `closable` is `true` — and never when `noHeader` or `withoutHeader` is set. |\n| `header-actions` | The wrapper around the `header-actions` slot. |\n| `heading` | The visible title inside `header`; also carries `title` and `label`, and owns the configured heading semantics unless opted out. |\n| `label` | Mapped alias on the visible title. |\n| `overlay` | Shoelace alias on the backdrop. |\n| `panel` | The dialog panel itself (`role=\"dialog\"` while open); also carries `dialog`. Shrink-wraps to its content by default, capped at `--lr-dialog-max-width` (default `32rem`); set `--lr-dialog-width` for an assertive width instead of only a cap. |\n| `title` | Mapped alias on the visible title. |\n\n---\n\n**CSS Custom Properties**\n\n- `--backdrop-filter` (default: `var(--lr-dialog-backdrop-filter,none)`) — Mapped backdrop-filter alias.\n- `--body-spacing` — Shoelace body padding.\n- `--footer-spacing` — Shoelace footer padding.\n- `--header-spacing` — Shoelace header padding.\n- `--hide-duration` — Closing slide duration.\n- `--lr-dialog-backdrop-duration` (default: `var(--lr-duration-fast)`) — Duration of the backdrop's fade.\n- `--lr-dialog-backdrop-filter` (default: `none`) — `backdrop-filter` applied to the scrim, for a frosted-glass treatment over the page behind it.\n- `--lr-dialog-max-width` (default: `var(--lr-dialog-width, var(--lr-size-32rem))`) — Cap on the panel's inline size. Falls back to `--lr-dialog-width` when that is set, so an assertive width is not clipped by the 32rem default; the viewport (`100%`) is always a hard limit on top.\n- `--lr-dialog-overlay-color` (default: `var(--lr-color-overlay)`) — Backdrop scrim color.\n- `--lr-dialog-panel-duration` (default: `var(--lr-duration-base)`) — Duration of the panel's enter/exit animation.\n- `--lr-dialog-spacing` (default: `var(--lr-space-l)`) — Padding inside the body, and the inline padding of the header and footer rows.\n- `--lr-dialog-spacing-block` (default: `var(--lr-space-m)`) — Block padding of the header and footer rows, which are tighter than the body by default.\n- `--lr-dialog-width` (default: `auto`) — Assertive inline size for the panel. Left at `auto` the panel shrink-wraps to its content.\n- `--lr-drawer-enter-x` (default: `calc(-1 * var(--lr-size-1rem))`) — Horizontal offset the panel slides in from, and back out to, for start/end drawers. Its private default changes per placement (and flips under RTL); an inherited or direct public value remains authoritative.\n- `--lr-drawer-enter-y` (default: `calc(-1 * var(--lr-size-1rem))`) — Vertical offset the panel slides in from, and back out to, for top/bottom drawers. Its private default becomes `var(--lr-size-1rem)` for `bottom`; an inherited or direct public value remains authoritative.\n- `--lr-drawer-height` — Block size for top/bottom drawers.\n- `--lr-drawer-width` — Inline size for start/end drawers.\n- `--show-duration` — Opening slide duration.\n- `--size` — Mapped drawer size for the active axis.\n- `--spacing` (default: `var(--lr-dialog-spacing,var(--lr-space-l))`) — Web Awesome shared region spacing.\n- `--width` (default: `var(--lr-dialog-width,auto)`) — Mapped panel width alias."
8853
9009
  },
8854
9010
  "attributes": [
8855
9011
  {
@@ -9103,7 +9259,7 @@
9103
9259
  "name": "disabled",
9104
9260
  "description": {
9105
9261
  "kind": "markdown",
9106
- "value": "Type: `boolean` \nDefault: `false`"
9262
+ "value": "Prevents opening the popover -- pointer, keyboard, and programmatic `show()`/`open = true`\nare all refused while set. Becoming disabled also closes an already-open popover; initial\n`disabled` plus `open` markup/property state normalizes closed in either order. Mirrors\n`<lr-tooltip>`'s and `<lr-dropdown>`'s own `disabled`.\n\nType: `boolean` \nDefault: `false`"
9107
9263
  }
9108
9264
  },
9109
9265
  {
@@ -9198,6 +9354,9 @@
9198
9354
  },
9199
9355
  {
9200
9356
  "name": "menu"
9357
+ },
9358
+ {
9359
+ "name": "none"
9201
9360
  }
9202
9361
  ]
9203
9362
  },
@@ -9741,7 +9900,7 @@
9741
9900
  "name": "lr-entity-card",
9742
9901
  "description": {
9743
9902
  "kind": "markdown",
9744
- "value": "`<lr-entity-card>` — a dossier card for one `LyraEntity`: type badge, description, key/value\nproperty rows, degree, community chip, plus a built-in \"focus in graph\" action. Never fetches or\nfocuses a graph itself — `lr-entity-activate` is a request a host routes into `lr-graph`'s\n`focusNode(id, { zoom? })`.\n\nPublic collection properties take bounded, clone-owned readonly snapshots. Create a new\ncollection and reassign it after changes; mutating the assigned array does not update the view.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Extra body content below the property rows (e.g. a `lr-neighbor-list`). |\n| `actions` | Extra header actions alongside the built-in focus button. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | The wrapper around the `actions` slot and the built-in focus button. |\n| `base` | The outer bordered container. |\n| `community` | The community-chip row. |\n| `degree` | The relationship-count row. |\n| `description` | The entity's description text. |\n| `empty` | The empty state shown when `entity` is `null`. |\n| `focus-button` | The built-in \"Focus in graph\" button. |\n| `header` | The header row wrapping the type badge, title, and actions. |\n| `properties` | The wrapper around every property/degree/community row. |\n| `property` | One key/value dossier row. |\n| `title` | The entity's label, `role=\"heading\" aria-level=\"3\"` by default. |\n| `type-badge` | The resolved entity-type badge. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-entity-card-compact-gap` (default: `var(--lr-space-xs)`) — Gap between `[part=\"base\"]`'s rows while `compact`.\n- `--lr-entity-card-compact-padding` (default: `var(--lr-space-s)`) — `[part=\"base\"]` padding while `compact`."
9903
+ "value": "`<lr-entity-card>` — a dossier card for one `LyraEntity`: type badge, description, key/value\nproperty rows, degree, community chip, plus a built-in \"focus in graph\" action. Never fetches or\nfocuses a graph itself — `lr-entity-select` is a request a host routes into `lr-graph`'s\n`focusNode(id, { zoom? })`.\n\nPublic collection properties take bounded, clone-owned readonly snapshots. Create a new\ncollection and reassign it after changes; mutating the assigned array does not update the view.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Extra body content below the property rows (e.g. a `lr-neighbor-list`). |\n| `actions` | Extra header actions alongside the built-in focus button. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | The wrapper around the `actions` slot and the built-in focus button. |\n| `base` | The outer bordered container. |\n| `community` | The community-chip row. |\n| `degree` | The relationship-count row. |\n| `description` | The entity's description text. |\n| `empty` | The empty state shown when `entity` is `null`. |\n| `focus-button` | The built-in \"Focus in graph\" button. |\n| `header` | The header row wrapping the type badge, title, and actions. |\n| `properties` | The wrapper around every property/degree/community row. |\n| `property` | One key/value dossier row. |\n| `title` | The entity's label, `role=\"heading\" aria-level=\"3\"` by default. |\n| `type-badge` | The resolved entity-type badge. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-entity-card-compact-gap` (default: `var(--lr-space-xs)`) — Gap between `[part=\"base\"]`'s rows while `compact`.\n- `--lr-entity-card-compact-padding` (default: `var(--lr-space-s)`) — `[part=\"base\"]` padding while `compact`."
9745
9904
  },
9746
9905
  "attributes": [
9747
9906
  {
@@ -9837,7 +9996,7 @@
9837
9996
  "name": "lr-entity-dossier",
9838
9997
  "description": {
9839
9998
  "kind": "markdown",
9840
- "value": "`<lr-entity-dossier>` — a full entity detail surface: a persistent header (`lr-entity-card` plus\nan optional confidence `lr-stat`) above a `lr-tab-group` strip for Relationships (`lr-neighbor-list`),\nSupporting chunks (`lr-chunk-inspector`), and Provenance (`lr-provenance-panel`). Pure layout —\nit never fetches, ranks, or mutates graph/document state, and never re-renders what any of those\nfive composed components already render themselves; every one of their own events (`\nlr-entity-activate`, `lr-node-expand`, `lr-chunk-open`, `lr-expand`, `lr-toggle`, `lr-tab-show`,\nplus the provenance panel's own conduit set — `lr-entity-open`, `lr-drill`,\n`lr-relation-activate`) bubbles through unmodified (`composed: true` crosses this component's own\nshadow boundary with no re-dispatch needed).\n\n`chunks`/`thresholds` (the \"supporting chunks\" tab) and `provenance` (the \"Provenance\" tab) are\ndeliberately separate inputs even though `lr-provenance-panel` can itself also show a chunks\nsection: the \"Supporting chunks\" tab is the evidence for *this entity's own* summary/properties,\nwhile `provenance` is the broader grounding chain (which may span other entities, relationships,\nand communities, and may or may not reuse the same chunk set) — a host is free to pass the same\narray to both when the two concepts genuinely coincide.\n\nTab labels reuse the exact `localize()` keys the composed child already uses for its own\naccessible name (`neighborListLabel`, `chunkInspectorLabel`, `provenancePanelLabel`) rather than\nnew dossier-specific keys, so a translated locale only has to cover each string once and the tab\nstrip and the panel underneath it always agree.\n\nThis component emits no events of its own. Its EventMap and `@event` documentation name the\ncomposed events that bubble through so host listeners remain typed and discoverable;\n`lr-tab-show` carries `detail: { tabId: LyraEntityDossierTab }`. This is the same \"pure\nprojection + event conduit\" convention `lr-provenance-panel` and `lr-spreadsheet-viewer`'s\ninternal `lr-tab-group` already establish.\n\nPublic collection properties take bounded, clone-owned readonly snapshots. Create a new\ncollection and reassign it after changes; mutating the assigned array does not update the view.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.1.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper, or the empty state's wrapper when `entity` is `null`. |\n| `chunk-inspector` | The nested `lr-chunk-inspector`, inside the Supporting chunks tab. |\n| `confidence` | The nested confidence `lr-stat`, only rendered when `confidence` is set. |\n| `empty` | The empty state shown when `entity` is `null`. |\n| `entity-card` | The nested `lr-entity-card`. |\n| `header` | The wrapper around the entity summary and the confidence stat. |\n| `neighbor-list` | The nested `lr-neighbor-list`, inside the Relationships tab. |\n| `provenance-panel` | The nested `lr-provenance-panel`, inside the Provenance tab. |\n| `tabs` | The nested `lr-tab-group` strip. |"
9999
+ "value": "`<lr-entity-dossier>` — a full entity detail surface: a persistent header (`lr-entity-card` plus\nan optional confidence `lr-stat`) above a `lr-tab-group` strip for Relationships (`lr-neighbor-list`),\nSupporting chunks (`lr-chunk-inspector`), and Provenance (`lr-provenance-panel`). Pure layout —\nit never fetches, ranks, or mutates graph/document state, and never re-renders what any of those\nfive composed components already render themselves; every one of their own events (`\nlr-entity-select`, `lr-entity-activate`, `lr-node-expand`, `lr-chunk-open`, `lr-expand`,\n`lr-toggle`, `lr-tab-show`, plus the provenance panel's own conduit set — `lr-entity-open`, `lr-drill`,\n`lr-relation-activate`) bubbles through unmodified (`composed: true` crosses this component's own\nshadow boundary with no re-dispatch needed).\n\n`chunks`/`thresholds` (the \"supporting chunks\" tab) and `provenance` (the \"Provenance\" tab) are\ndeliberately separate inputs even though `lr-provenance-panel` can itself also show a chunks\nsection: the \"Supporting chunks\" tab is the evidence for *this entity's own* summary/properties,\nwhile `provenance` is the broader grounding chain (which may span other entities, relationships,\nand communities, and may or may not reuse the same chunk set) — a host is free to pass the same\narray to both when the two concepts genuinely coincide.\n\nTab labels reuse the exact `localize()` keys the composed child already uses for its own\naccessible name (`neighborListLabel`, `chunkInspectorLabel`, `provenancePanelLabel`) rather than\nnew dossier-specific keys, so a translated locale only has to cover each string once and the tab\nstrip and the panel underneath it always agree.\n\nThis component emits no events of its own. Its EventMap and `@event` documentation name the\ncomposed events that bubble through so host listeners remain typed and discoverable;\n`lr-tab-show` carries `detail: { tabId: LyraEntityDossierTab }`. This is the same \"pure\nprojection + event conduit\" convention `lr-provenance-panel` and `lr-spreadsheet-viewer`'s\ninternal `lr-tab-group` already establish.\n\nPublic collection properties take bounded, clone-owned readonly snapshots. Create a new\ncollection and reassign it after changes; mutating the assigned array does not update the view.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.1.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper, or the empty state's wrapper when `entity` is `null`. |\n| `chunk-inspector` | The nested `lr-chunk-inspector`, inside the Supporting chunks tab. |\n| `confidence` | The nested confidence `lr-stat`, only rendered when `confidence` is set. |\n| `empty` | The empty state shown when `entity` is `null`. |\n| `entity-card` | The nested `lr-entity-card`. |\n| `header` | The wrapper around the entity summary and the confidence stat. |\n| `neighbor-list` | The nested `lr-neighbor-list`, inside the Relationships tab. |\n| `provenance-panel` | The nested `lr-provenance-panel`, inside the Provenance tab. |\n| `tabs` | The nested `lr-tab-group` strip. |"
9841
10000
  },
9842
10001
  "attributes": [
9843
10002
  {
@@ -10209,7 +10368,7 @@
10209
10368
  "name": "lr-file-input",
10210
10369
  "description": {
10211
10370
  "kind": "markdown",
10212
- "value": "`<lr-file-input>` — a drag-drop + click-to-browse file dropzone. Emits\nraw `File[]`; parsing (CSV/XLSX/etc.) is left to the host, since that's\nwhere files ultimately get uploaded and processed anyway.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n- Deprecated part `base`: Deprecated since `8.2.3`. Use part `::part(file-input)`. Removal is not permitted before `10.0.0`. The file-input part names the interactive picker surface; base remains on that same node during the compatibility window.\n- Deprecated part `label`: Deprecated since `8.2.3`. Use part `::part(form-control-label)`. Removal is not permitted before `10.0.0`. The form-control-label part follows the shared form-control vocabulary; label remains on that same node during the compatibility window.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Custom drop-zone content, overrides the visible `label` text. The accessible name comes from a host `aria-label` when present, then falls back to `label`, so icon-only slot content remains announced correctly. |\n| `dropzone` | Named equivalent of the default dropzone-content slot. |\n| `error` | Custom validation error content. Use `with-error` when this slot is populated in server-rendered declarative shadow DOM before light-DOM slot assignment is observable. |\n| `hint` | Custom form-control hint content. |\n| `label` | Custom form-control label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | Deprecated in 8.2.3; compatibility name for `file-input`; both names are on the native dropzone button, visually backing the slotted content while remaining its sibling in the accessibility tree so arbitrary slotted controls are never nested in it. |\n| `dropzone` | The drag/drop and paste target around the semantic button. |\n| `dropzone-icon` | The default decorative file icon. |\n| `dropzone-text` | Wrapper around dropzone slot/text content. |\n| `error` | The visible validation message or authored error content. |\n| `file` | One selected-file row. |\n| `file-details` | Filename and formatted-size wrapper. |\n| `file-icon` | Generic icon for a non-image file. |\n| `file-image` | Image preview for an image file. |\n| `file-input` | The interactive picker surface. |\n| `file-list` | The current selected-file list. |\n| `file-name` | Selected filename. |\n| `file-size` | Localized selected-file size. |\n| `file-thumbnail` | One selected file's thumbnail/icon wrapper. |\n| `form-control` | The complete label, dropzone, selected-file, error, and hint frame. |\n| `form-control-label` | The form-control label. |\n| `hint` | The form-control hint. |\n| `input` | The visually-hidden native `<input type=\"file\">`. |\n| `label` | Deprecated in 8.2.3; compatibility name for `form-control-label`; both names are on the same node. |\n| `rejection` | The visible region listing each currently-rejected file alongside its reason, rendered in addition to (never in place of) the sr-only `status` summary. Its text stays in the accessibility tree as ordinary visible content; the interrupting announcement it used to make as a shadow `role=\"alert\"` now goes through the shared light-DOM assertive region instead. |\n| `remove-button` | Removes one selected file. |\n| `status` | The visually-hidden, `aria-hidden` mirror of the drag accept/reject state and accepted/rejected selection counts. The announcement itself lands in the shared light-DOM polite region (`acquireAnnouncementSink()` in `internal/announcer.ts`) — a live region inside a shadow root is not reliably announced — so this part is a styling/inspection surface only. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-file-input-accept-bg` (default: `color-mix(in srgb, var(--lr-color-success) 8%, transparent)`) — Background of `[part~=\"base\"][data-drag-state=\"accept\"]`.\n- `--lr-file-input-accept-border-color` (default: `var(--lr-color-success)`) — Border color of `[part~=\"base\"][data-drag-state=\"accept\"]`.\n- `--lr-file-input-compact-font-size` (default: `var(--lr-font-size-sm)`) — Label font size while `compact`.\n- `--lr-file-input-compact-gap` (default: `var(--lr-space-2xs)`) — Gap between the dropzone's slotted children while `compact`.\n- `--lr-file-input-compact-padding` (default: `var(--lr-space-s)`) — `[part~=\"base\"]` padding while `compact`.\n- `--lr-file-input-detail-font-size` (default: `var(--lr-font-size-sm)`) — Size of the secondary text: the hint, the validation error, and each selected file's formatted size. Retuned per `size` tier.\n- `--lr-file-input-dropzone-font-size` (default: `var(--lr-font-size-md-sm)`) — Instructional text size inside the dropzone. Retuned per `size` tier; the documented default is the `m`/`medium` tier.\n- `--lr-file-input-dropzone-icon-size` (default: `var(--lr-font-size-xl)`) — `[part=\"dropzone-icon\"]` glyph size. Retuned per `size` tier.\n- `--lr-file-input-dropzone-padding` (default: `var(--lr-space-l)`) — Padding inside `[part~=\"base\"]` and the stacked dropzone content. Retuned per `size` tier; `compact` overrides it.\n- `--lr-file-input-font-size` (default: `var(--lr-form-control-font-size)`) — Label and selected-filename text size; tracks the shared `size` ladder.\n- `--lr-file-input-gap` (default: `var(--lr-space-xs)`) — Gap between the dropzone's slotted children. While `compact`, this is the fallback when `--lr-file-input-compact-gap` is unset.\n- `--lr-file-input-radius` (default: `var(--lr-radius)`) — Corner radius of `[part~=\"base\"]`.\n- `--lr-file-input-reject-bg` (default: `color-mix(in srgb, var(--lr-color-danger) 8%, transparent)`) — Background of `[part~=\"base\"][data-drag-state=\"reject\"]`.\n- `--lr-file-input-reject-border-color` (default: `var(--lr-color-danger)`) — Border color of `[part~=\"base\"][data-drag-state=\"reject\"]`.\n- `--lr-form-control-required-color` (default: `var(--lr-color-danger)`) — Required-marker color, themeable independently of error text and invalid borders.\n- `--lr-form-control-required-content` (default: `' *'`) — The required marker appended to `form-control-label` while `required` is set. Set it to `''` to suppress the marker, or to any other quoted string (`' (required)'`, a localized word) to replace it.\n- `--lr-form-control-required-offset` (default: `0`) — Inline space between the label text and the required marker."
10371
+ "value": "`<lr-file-input>` — a drag-drop + click-to-browse file dropzone. Emits\nraw `File[]`; parsing (CSV/XLSX/etc.) is left to the host, since that's\nwhere files ultimately get uploaded and processed anyway.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n- Deprecated part `base`: Deprecated since `8.2.3`. Use part `::part(file-input)`. Removal is not permitted before `10.0.0`. The file-input part names the interactive picker surface; base remains on that same node during the compatibility window. That version is a policy floor, not a plan: `wa-file-input` still publishes its own deprecated `base` part, so this alias is removed only when upstream's is.\n- Deprecated part `label`: Deprecated since `8.2.3`. Use part `::part(form-control-label)`. Removal is not permitted before `10.0.0`. The form-control-label part follows the shared form-control vocabulary; label remains on that same node during the compatibility window. That version is a policy floor, not a plan: `wa-file-input` still publishes its own deprecated `label` part, so this alias is removed only when upstream's is.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Custom drop-zone content, overrides the visible `label` text. The accessible name comes from a host `aria-label` when present, then falls back to `label`, so icon-only slot content remains announced correctly. |\n| `dropzone` | Named equivalent of the default dropzone-content slot. |\n| `error` | Custom validation error content. Use `with-error` when this slot is populated in server-rendered declarative shadow DOM before light-DOM slot assignment is observable. |\n| `hint` | Custom form-control hint content. |\n| `label` | Custom form-control label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | Deprecated in 8.2.3; compatibility name for `file-input`; both names are on the native dropzone button, visually backing the slotted content while remaining its sibling in the accessibility tree so arbitrary slotted controls are never nested in it. |\n| `dropzone` | The drag/drop and paste target around the semantic button. |\n| `dropzone-icon` | The default decorative file icon. |\n| `dropzone-text` | Wrapper around dropzone slot/text content. |\n| `error` | The visible validation message or authored error content. |\n| `file` | One selected-file row. |\n| `file-details` | Filename and formatted-size wrapper. |\n| `file-icon` | Generic icon for a non-image file. |\n| `file-image` | Image preview for an image file. |\n| `file-input` | The interactive picker surface. |\n| `file-list` | The current selected-file list. |\n| `file-name` | Selected filename. |\n| `file-size` | Localized selected-file size. |\n| `file-thumbnail` | One selected file's thumbnail/icon wrapper. |\n| `form-control` | The complete label, dropzone, selected-file, error, and hint frame. |\n| `form-control-label` | The form-control label. |\n| `hint` | The form-control hint. |\n| `input` | The visually-hidden native `<input type=\"file\">`. |\n| `label` | Deprecated in 8.2.3; compatibility name for `form-control-label`; both names are on the same node. |\n| `rejection` | The visible region listing each currently-rejected file alongside its reason, rendered in addition to (never in place of) the sr-only `status` summary. Its text stays in the accessibility tree as ordinary visible content; the interrupting announcement it used to make as a shadow `role=\"alert\"` now goes through the shared light-DOM assertive region instead. |\n| `remove-button` | Removes one selected file. |\n| `status` | The visually-hidden, `aria-hidden` mirror of the drag accept/reject state and accepted/rejected selection counts. The announcement itself lands in the shared light-DOM polite region (`acquireAnnouncementSink()` in `internal/announcer.ts`) — a live region inside a shadow root is not reliably announced — so this part is a styling/inspection surface only. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-file-input-accept-bg` (default: `color-mix(in srgb, var(--lr-color-success) 8%, transparent)`) — Background of `[part~=\"base\"][data-drag-state=\"accept\"]`.\n- `--lr-file-input-accept-border-color` (default: `var(--lr-color-success)`) — Border color of `[part~=\"base\"][data-drag-state=\"accept\"]`.\n- `--lr-file-input-compact-font-size` (default: `var(--lr-font-size-sm)`) — Label font size while `compact`.\n- `--lr-file-input-compact-gap` (default: `var(--lr-space-2xs)`) — Gap between the dropzone's slotted children while `compact`.\n- `--lr-file-input-compact-padding` (default: `var(--lr-space-s)`) — `[part~=\"base\"]` padding while `compact`.\n- `--lr-file-input-detail-font-size` (default: `var(--lr-font-size-sm)`) — Size of the secondary text: the hint, the validation error, and each selected file's formatted size. Retuned per `size` tier.\n- `--lr-file-input-dropzone-font-size` (default: `var(--lr-font-size-md-sm)`) — Instructional text size inside the dropzone. Retuned per `size` tier; the documented default is the `m`/`medium` tier.\n- `--lr-file-input-dropzone-icon-size` (default: `var(--lr-font-size-xl)`) — `[part=\"dropzone-icon\"]` glyph size. Retuned per `size` tier.\n- `--lr-file-input-dropzone-padding` (default: `var(--lr-space-l)`) — Padding inside `[part~=\"base\"]` and the stacked dropzone content. Retuned per `size` tier; `compact` overrides it.\n- `--lr-file-input-font-size` (default: `var(--lr-form-control-font-size)`) — Label and selected-filename text size; tracks the shared `size` ladder.\n- `--lr-file-input-gap` (default: `var(--lr-space-xs)`) — Gap between the dropzone's slotted children. While `compact`, this is the fallback when `--lr-file-input-compact-gap` is unset.\n- `--lr-file-input-radius` (default: `var(--lr-radius)`) — Corner radius of `[part~=\"base\"]`.\n- `--lr-file-input-reject-bg` (default: `color-mix(in srgb, var(--lr-color-danger) 8%, transparent)`) — Background of `[part~=\"base\"][data-drag-state=\"reject\"]`.\n- `--lr-file-input-reject-border-color` (default: `var(--lr-color-danger)`) — Border color of `[part~=\"base\"][data-drag-state=\"reject\"]`.\n- `--lr-form-control-required-color` (default: `var(--lr-color-danger)`) — Required-marker color, themeable independently of error text and invalid borders.\n- `--lr-form-control-required-content` (default: `' *'`) — The required marker appended to `form-control-label` while `required` is set. Set it to `''` to suppress the marker, or to any other quoted string (`' (required)'`, a localized word) to replace it.\n- `--lr-form-control-required-offset` (default: `0`) — Inline space between the label text and the required marker."
10213
10372
  },
10214
10373
  "attributes": [
10215
10374
  {
@@ -10419,7 +10578,7 @@
10419
10578
  "name": "lr-file-tree",
10420
10579
  "description": {
10421
10580
  "kind": "markdown",
10422
- "value": "`<lr-file-tree>` — a file-explorer preset over `<lr-tree>` + `<lr-file-icon>`: path-keyed\nnodes with git-status/diff-count badges, lazy directory loading, and select/open events.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |"
10581
+ "value": "`<lr-file-tree>` — a file-explorer preset over `<lr-tree>` + `<lr-file-icon>`: path-keyed\nnodes with git-status/diff-count badges, lazy directory loading, and select/open events.\n\n**The composed `<lr-tree>`'s `reorderable`/`lr-reorder` capability is deliberately not\nforwarded.** The tree it renders is not a model this component owns: `treeItems` is derived\nfrom `nodes` on every render and keyed by filesystem path, so sibling order is whatever the\nhost's own listing produced (name, type, git status), not an authored sequence a user can\nrearrange. `<lr-tree>`'s reorder is also strictly sibling-scoped — it never crosses a subtree\nboundary, precisely so a reorder can never become a reparent — which is the one file operation\n(\"move this file into that directory\") that would change a path and therefore mean something\nhere. Forwarding it would have to invent a second, path-shaped event alongside\n`lr-file-select`/`lr-file-open`/`lr-load-children`, permanently, for a gesture whose result the\nhost would have to discard. A consumer that genuinely needs orderable rows composes `<lr-tree>`\ndirectly, where the capability already lives.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |"
10423
10582
  },
10424
10583
  "attributes": [
10425
10584
  {
@@ -10486,7 +10645,7 @@
10486
10645
  "name": "lr-flag",
10487
10646
  "description": {
10488
10647
  "kind": "markdown",
10489
- "value": "`<lr-flag>` — a country/language flag.\n\nFlag images are shipped by the optional peer package `@aceshooting/lyra-flags`,\nnot bundled into lyra-ui itself, so importing the core library pulls zero flag\nweight. Give it a `country` (ISO 3166-1 alpha-2) or a `language` tag (mapped to\na representative country). While that peer package's `flagUrl()` resolves,\nthe host carries `aria-busy=\"true\"`; a decorative skeleton and ordinary, non-live localized\nloading text render in its place. A missing or failed peer resolver fails closed with a localized visible error and a\nshared light-DOM assertive announcement;\nan installed resolver returning no URL for an unknown code remains a valid\nempty result.\n\n**Bundle-size note:** `country`/`language` resolve through the peer package's\n`flagUrl(code)`, which lazily fetches one requested flag at runtime. A\nbundler may still emit the complete reachable lazy-chunk graph; use a\nliteral asset subpath import when the deployment artifact must be pruned.\nIf you already\nhave a flag's URL at build time (e.g. from your own literal\n`import frUrl from '@aceshooting/lyra-flags/flags/fr.svg?url'`), pass it as\n`src` instead to skip the peer-package round trip (and its loading-skeleton\nflash) entirely.\n\nThe ~65 flags whose design includes a detailed coat of arms/seal/emblem (e.g. `es`, `pt`) ship\nthree fidelity tiers; choose one with `fidelity`: `\"compact\"` (a tiny WebP raster for icon-scale\nuse — menu items, language selectors, dense lists), the default `\"standard\"` (icon-optimized\nvector for card/row sizes), or `\"detailed\"` (the pristine full-detail vector for hero-scale\ndisplay). A no-op for every other code — all tiers resolve to the same file. See `fidelity`'s own\ndoc.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `error` | Ordinary localized visible error rendered when the optional peer resolver is unavailable or fails; each fresh resolution failure appends the same localized message to the shared light-DOM assertive announcement sink. |\n| `image` | The underlying <img>. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-flag-aspect-ratio` (default: `4 / 3`) — Rectangular flag aspect ratio.\n- `--lr-flag-object-fit` (default: `cover`) — How the image fits its flag frame.\n- `--lr-flag-radius` — Rectangular flag corner radius."
10648
+ "value": "`<lr-flag>` — a country/language flag.\n\nFlag images are shipped by the optional peer package `@aceshooting/lyra-flags`,\nnot bundled into lyra-ui itself, so importing the core library pulls zero flag\nweight. Give it a `country` (ISO 3166-1 alpha-2) or a `language` tag (mapped to\na representative country). While that peer package's `flagUrl()` resolves,\nthe host carries `aria-busy=\"true\"`; a decorative skeleton and ordinary, non-live localized\nloading text render in its place. A missing or failed peer resolver fails closed with a localized visible error and a\nshared light-DOM assertive announcement, plus a one-time `console.warn` naming the code and the\n`flag-peer.js` import that registers a resolver -- the visible error alone cannot tell a\ndeveloper that the fix is a missing import rather than missing flag data;\nan installed resolver returning no URL for an unknown code remains a valid\nempty result.\n\n**Bundle-size note:** `country`/`language` resolve through the peer package's\n`flagUrl(code)`, which lazily fetches one requested flag at runtime. A\nbundler may still emit the complete reachable lazy-chunk graph; use a\nliteral asset subpath import when the deployment artifact must be pruned.\nIf you already\nhave a flag's URL at build time (e.g. from your own literal\n`import frUrl from '@aceshooting/lyra-flags/flags/fr.svg?url'`), pass it as\n`src` instead to skip the peer-package round trip (and its loading-skeleton\nflash) entirely.\n\nThe ~65 flags whose design includes a detailed coat of arms/seal/emblem (e.g. `es`, `pt`) ship\nthree fidelity tiers; choose one with `fidelity`: `\"compact\"` (a tiny WebP raster for icon-scale\nuse — menu items, language selectors, dense lists), the default `\"standard\"` (icon-optimized\nvector for card/row sizes), or `\"detailed\"` (the pristine full-detail vector for hero-scale\ndisplay). A no-op for every other code — all tiers resolve to the same file. See `fidelity`'s own\ndoc.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `fallback` | Rendered in place of the flag when `country`/`language` cannot resolve to a current flag (an unassigned, historical, or malformed code). Wins over the `fallback` property. Distinct from the peer-resolver failure that produces `[part=\"error\"]`: an unresolvable code is data, not a defect. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `error` | Ordinary localized visible error rendered when the optional peer resolver is unavailable or fails; each fresh resolution failure appends the same localized message to the shared light-DOM assertive announcement sink. |\n| `fallback-image` | The `fallback` property's placeholder image, when no `fallback` slot content is supplied. |\n| `image` | The underlying <img>. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-flag-aspect-ratio` (default: `4 / 3`) — Rectangular flag aspect ratio.\n- `--lr-flag-object-fit` (default: `cover`) — How the image fits its flag frame.\n- `--lr-flag-radius` — Rectangular flag corner radius."
10490
10649
  },
10491
10650
  "attributes": [
10492
10651
  {
@@ -10496,6 +10655,13 @@
10496
10655
  "value": "ISO 3166-1 alpha-2 country code (e.g. `fr`, `us`). Takes precedence over `language`.\n\nType: `string | undefined`"
10497
10656
  }
10498
10657
  },
10658
+ {
10659
+ "name": "fallback",
10660
+ "description": {
10661
+ "kind": "markdown",
10662
+ "value": "Placeholder image URL rendered in place of a flag when the code cannot resolve — a historical\nor defunct state in a longitudinal dataset, say. Unset renders the `fallback` slot's content\ninstead, or nothing at all, so the element still occupies its normal footprint in a table or\ncard grid rather than showing error wording.\n\nType: `string | undefined`"
10663
+ }
10664
+ },
10499
10665
  {
10500
10666
  "name": "fidelity",
10501
10667
  "description": {
@@ -11935,11 +12101,25 @@
11935
12101
  "value": "Effective per-cell size (CSS px). Originally matrix-mode only; now also\ngoverns calendar mode's cell size (replacing the previously hardcoded\n11px constant there) once explicitly set. Left unset, each mode keeps\nits own original default — `DEFAULT_MATRIX_CELL_SIZE` (22) in matrix\nmode, `CAL_CELL` (11) in calendar mode — so an existing consumer who\nnever touches `cellSize` sees no change in either mode. Set explicitly\n(attribute or property), the same value governs both modes alike.\n\nType: `number`"
11936
12102
  }
11937
12103
  },
12104
+ {
12105
+ "name": "col-label-height",
12106
+ "description": {
12107
+ "kind": "markdown",
12108
+ "value": "Height, in CSS px, of the matrix column-label band, or `\"auto\"` to measure the labels and size\nthe band to fit them (never below the built-in 20px, and bounded above by a sanity ceiling so a\npathological label cannot produce an absurd canvas). Under a non-zero\n`colLabelRotation` the measurement projects each label's width through the rotation, which is\nwhat makes a rotated axis usable without hand-tuning a magic number.\n\nUnset keeps the built-in 20px, for the same reason `rowLabelWidth` does: auto-sizing every\nexisting heatmap would silently reflow charts whose labels already fit.\n\nType: `number | 'auto' | undefined`"
12109
+ }
12110
+ },
12111
+ {
12112
+ "name": "col-label-rotation",
12113
+ "description": {
12114
+ "kind": "markdown",
12115
+ "value": "Rotation, in degrees, applied to matrix column labels. Unset (or `0`) paints them horizontally\nexactly as before. In a dense matrix the per-column width is far narrower than a typical label,\nso horizontal labels collide with their neighbours; `45` or `90` is the standard remedy.\n\nEach label is rotated about an anchor at its own column's centre, with the label's *end* at the\nanchor, so it leans up and back over the columns to its left and the last column's label cannot\noverflow the canvas. Values outside `[0, 90]` clamp into it and non-finite values normalize to\n`0`; a rotation is not a coordinate a caller can usefully be surprised by.\n\nPair with `colLabelHeight=\"auto\"` to have the band size itself to the rotated extent.\n\nNot mirrored under `dir=\"rtl\"`: both grid modes deliberately retain physical LTR geometry (see\nthe class doc), and leaning one axis' labels the other way while the grid itself stays physical\nwould be incoherent.\n\nType: `number | undefined`"
12116
+ }
12117
+ },
11938
12118
  {
11939
12119
  "name": "fit-to-width",
11940
12120
  "description": {
11941
12121
  "kind": "markdown",
11942
- "value": "When set, `cellSize` is derived from the host's measured `clientWidth`\non every draw (including ResizeObserver-triggered redraws) instead of\nthe fixed `cell-size` attribute, so the grid actually fills the\navailable width. Without this, canvas dimensions are computed purely\nfrom `PAD_LEFT + cols * cellSize` (matrix mode) or\n`CAL_PAD_LEFT + weekCount * cellSize` (calendar mode), so a\nresize-triggered redraw is a geometric no-op. Originally matrix-mode\nonly; now applies to calendar mode too.\n\nType: `boolean` \nDefault: `false`"
12122
+ "value": "When set, `cellSize` is derived from the host's measured `clientWidth`\non every draw (including ResizeObserver-triggered redraws) instead of\nthe fixed `cell-size` attribute, so the grid actually fills the\navailable width. Without this, canvas dimensions are computed purely\nfrom `matrixPadLeft + cols * cellSize` (matrix mode) or\n`CAL_PAD_LEFT + weekCount * cellSize` (calendar mode), so a\nresize-triggered redraw is a geometric no-op. Originally matrix-mode\nonly; now applies to calendar mode too.\n\nType: `boolean` \nDefault: `false`"
11943
12123
  }
11944
12124
  },
11945
12125
  {
@@ -11956,6 +12136,13 @@
11956
12136
  "value": "Ceiling (CSS px) on the cell size `fitToWidth` derives from the host width, in **both** modes.\nIgnored entirely while `fitToWidth` is unset — an explicit `cellSize` is never clamped, since\nit is already an exact request.\n\nExists because `fitToWidth` divides the whole host width across the grid: a 5-week calendar or\na 3-column matrix in a wide pane produces enormous cells. Capping them keeps the cell a cell.\nThe canvas is sized *from the clamped cell size*, so a capped grid deliberately leaves the\nremaining host width unfilled (the canvas simply ends early) rather than stretching to fill it\n— position it with normal CSS on the host if you want it centered or end-aligned.\n\nUnset (the default) reproduces today's exact fit-to-width behavior. Clamped to at least the\nbuilt-in `4`px floor; a non-finite value (or an empty attribute) means unset rather than `0`.\nWhen both clamps are set and `maxCellSize < minCellSize`, the ceiling wins — the same\nprecedence `finiteRange()` itself applies.\n\nType: `number | undefined`"
11957
12137
  }
11958
12138
  },
12139
+ {
12140
+ "name": "midpoint",
12141
+ "description": {
12142
+ "kind": "markdown",
12143
+ "value": "Anchors a diverging ramp's neutral color on this value rather than at the middle of the\ndomain, scaling the two halves independently (`lo`->0, `midpoint`->0.5, `hi`->1). Unset (the\ndefault) leaves the plain min-max normalization untouched. Like `domain`, setting it opts into\nsigned data. A midpoint outside the resolved domain degrades to plain normalization rather\nthan distorting the ramp.\n\nType: `number | undefined`"
12144
+ }
12145
+ },
11959
12146
  {
11960
12147
  "name": "min-cell-size",
11961
12148
  "description": {
@@ -11963,6 +12150,13 @@
11963
12150
  "value": "Floor (CSS px) under the cell size `fitToWidth` derives from the host width, in **both** modes\n— the mirror of `maxCellSize`, and likewise ignored while `fitToWidth` is unset. Raises the\nbuilt-in `FIT_MIN_CELL` (4px) floor so a year-long calendar in a narrow pane keeps legible,\nhit-testable cells and overflows its host instead of collapsing to hairlines.\n\nCan only raise that floor, never lower it: a value below `4` normalizes to `4`. Unset (the\ndefault) reproduces today's exact fit-to-width behavior, and a non-finite value (or an empty\nattribute) means unset.\n\nType: `number | undefined`"
11964
12151
  }
11965
12152
  },
12153
+ {
12154
+ "name": "row-label-width",
12155
+ "description": {
12156
+ "kind": "markdown",
12157
+ "value": "Width, in CSS px, of the matrix row-label gutter, or `'auto'` to measure the widest label and\nsize the gutter to fit (never below the built-in 60px, never above 40% of the host's width, so\none long label cannot squeeze out the cells it exists to describe).\n\nUnset keeps the built-in 60px. That default is deliberate: auto-sizing every existing heatmap\nwould silently reflow charts whose labels already fit, which is a bigger change than the\nclipping it fixes. Opt in per chart, or pin an exact figure.\n\nIndependently of this, a row label too wide for the resolved gutter is now truncated with an\nellipsis instead of being clipped mid-glyph by whatever is painted beside it -- clipping read\nas a rendering fault, truncation reads as \"there is more here\". `cellText` still carries the\nfull label to the tooltip and the keyboard announcement either way.\n\nCalendar mode is unaffected; it has its own fixed weekday gutter.\n\nType: `number | 'auto' | undefined`"
12158
+ }
12159
+ },
11966
12160
  {
11967
12161
  "name": "scale",
11968
12162
  "description": {
@@ -12021,9 +12215,16 @@
12021
12215
  "name": "lr-histogram",
12022
12216
  "description": {
12023
12217
  "kind": "markdown",
12024
- "value": "`<lr-histogram>` — bins `values` into `bins` equal-width buckets and\nrenders them as a bar chart. Chart.js has no built-in histogram\ncontroller; this composes `binValues()` with the plain `bar` type.\n\nPublic collection properties take bounded, clone-owned readonly snapshots. Create a new\ncollection and reassign it after changes; mutating the assigned array does not update the view.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
12218
+ "value": "`<lr-histogram>` — bins `values` into `bins` equal-width buckets and\nrenders them as a bar chart. Chart.js has no built-in histogram\ncontroller; this composes `binValues()` with the plain `bar` type.\n\nPublic collection properties take bounded, clone-owned readonly snapshots. Create a new\ncollection and reassign it after changes; mutating the assigned array does not update the view.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-table-toggle` | The disclosure button rendered by `dataTableToggle`. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-data-table-toggle-active-bg` — Pressed background of the `dataTableToggle` disclosure button; defaults to a mix of the hover background with the shared active mix partner.\n- `--lr-chart-data-table-toggle-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the `dataTableToggle` disclosure button.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
12025
12219
  },
12026
12220
  "attributes": [
12221
+ {
12222
+ "name": "annotations",
12223
+ "description": {
12224
+ "kind": "markdown",
12225
+ "value": "Declarative reference lines and shaded bands — a threshold, an event year, a regime change, a\nhighlighted period. Each entry marks either a single `value` or a `from`/`to` range on `axis`\n(default `'y'`), with an optional `label` and semantic `tone`.\n\nNeeds the optional `chartjs-plugin-annotation` peer, loaded on first actual demand so a page\nwith no annotated charts never downloads it. The plugin is registered globally, like\n`chartjs-plugin-zoom` and unlike `chartjs-plugin-datalabels`: it draws nothing unless a chart\nsupplies annotation options, so the registration is unobservable to charts that set none, and\nregistration is also what installs the plugin's own element defaults. Without the peer\ninstalled the chart still renders and a single console warning explains the no-op — the same\nfail-closed contract `data-labels` uses.\n\nEntries are included in the generated accessible description, mirroring `lr-heatmap`.\n\nType: `readonly LyraChartAnnotation[]` \nDefault: `[]`"
12226
+ }
12227
+ },
12027
12228
  {
12028
12229
  "name": "area",
12029
12230
  "description": {
@@ -12052,6 +12253,13 @@
12052
12253
  "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
12053
12254
  }
12054
12255
  },
12256
+ {
12257
+ "name": "data-table-toggle",
12258
+ "description": {
12259
+ "kind": "markdown",
12260
+ "value": "Render a disclosure button above the accessible data table so a sighted reader can reveal the\nnumbers behind the chart on demand. `showDataTable` alone is all-or-nothing -- the table is\neither permanently screen-reader-only or permanently visible -- which left a consumer wrapping\na duplicated table in their own `<details>`.\n\nWith this set, `showDataTable` becomes the disclosure's *initial* state rather than its whole\nbehavior. The table stays in the DOM in both states, so assistive technology never loses it.\n\nType: `boolean` \nDefault: `false`"
12261
+ }
12262
+ },
12055
12263
  {
12056
12264
  "name": "description",
12057
12265
  "description": {
@@ -12173,6 +12381,21 @@
12173
12381
  "value": "Chart.js plugins attached to this chart instance.\n\nType: `LyraChartPlugin[]` \nDefault: `[]`"
12174
12382
  }
12175
12383
  },
12384
+ {
12385
+ "name": "scale-type",
12386
+ "description": {
12387
+ "kind": "markdown",
12388
+ "value": "Scale type for the **value** axis (the categorical axis is unaffected). `'logarithmic'` plots\na dataset spanning several orders of magnitude honestly, where a linear axis collapses\neverything below the maximum into the baseline. Inherited by `lr-line-chart`,\n`lr-scatter-chart` and `lr-bar-chart`.\n\nA logarithmic axis cannot represent zero or negative values (`log(0)` is `-Infinity`), so\n`beginAtZero` is not forwarded in that mode -- Chart.js would otherwise be handed a bound it\ncannot place. Non-positive data points are dropped by Chart.js's own log scale.\n\nType: `LyraChartScaleType` \nDefault: `'linear'`"
12389
+ },
12390
+ "values": [
12391
+ {
12392
+ "name": "linear"
12393
+ },
12394
+ {
12395
+ "name": "logarithmic"
12396
+ }
12397
+ ]
12398
+ },
12176
12399
  {
12177
12400
  "name": "series-label",
12178
12401
  "description": {
@@ -12333,7 +12556,7 @@
12333
12556
  "name": "lr-icon",
12334
12557
  "description": {
12335
12558
  "kind": "markdown",
12336
- "value": "`<lr-icon>` — an SVG icon primitive. Renders a built-in named path with no network access at\nall, or resolves a name through a registered icon library, or fetches one SVG document from\n`src`. Remote markup is byte-capped, sanitized with DOMPurify, and rendered only if the whole\npipeline succeeds; anything else fails closed with a localized alert and no partial markup.\nMatching loads share a bounded cache of canonical sanitized SVGs. Each instance deep-clones the\ncanonical node before its trusted library mutator runs, so cached state is never mutated.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n- Deprecated property `autoWidth` / `auto-width`: Deprecated since `8.0.0`. Use property `canvas=\"auto\"`. Removal is not permitted before `10.0.0`. autoWidth is a boolean compatibility spelling that cannot express fixed canvas sizes; canvas covers both automatic and explicit sizing.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Optional custom SVG/path content when no `name`, `path`, `library`, or `src` resolves. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `empty` | Marker rendered when a remote icon resolved to an empty but valid document. |\n| `error` | The visually hidden, `aria-hidden` mirror shown when a remote icon fails. The spoken error is appended to Lyra's shared assertive light-DOM announcement sink while the icon and its composed ancestors are exposed to the accessibility tree. |\n| `svg` | The rendered SVG, whether built-in or fetched. |\n| `use` | Every `<use>` element in the rendered SVG. |\n\n---\n\n**CSS Custom Properties**\n\n- `--animation-delay` (default: `0s`) — Delay before an icon animation starts.\n- `--animation-direction` (default: `normal`) — Playback direction for icon animations.\n- `--animation-duration` (default: `var(--lr-duration-icon)`) — Duration of one animation cycle.\n- `--animation-iteration-count` (default: `infinite`) — Number of animation cycles.\n- `--animation-timing` (default: `var(--lr-easing-emphasized)`) — Animation timing function.\n- `--beat-fade-opacity` (default: `0.4`) — Lowest opacity during `beat-fade`.\n- `--beat-fade-scale` (default: `1.25`) — Peak scale during `beat-fade`.\n- `--beat-scale` (default: `1.25`) — Scale multiplier for `beat` and `spin-pulse`.\n- `--bounce-anticipation` (default: `0`) — Downward offset before a bounce.\n- `--bounce-height` (default: `calc(var(--lr-size-0-5em)*-1)`) — Peak bounce height.\n- `--bounce-jump-scale-x` (default: `0.95`) — Horizontal scale at the top of a bounce.\n- `--bounce-jump-scale-y` (default: `1.05`) — Vertical scale at the top of a bounce.\n- `--bounce-land-scale-x` (default: `1.08`) — Horizontal scale while landing.\n- `--bounce-land-scale-y` (default: `0.92`) — Vertical scale while landing.\n- `--bounce-rebound` (default: `calc(var(--lr-size-1em)*-0.1)`) — Landing rebound distance.\n- `--bounce-start-scale-x` (default: `1`) — Initial horizontal bounce scale.\n- `--bounce-start-scale-y` (default: `1`) — Initial vertical bounce scale.\n- `--buzz-distance` (default: `calc(var(--lr-size-1em)*0.12)`) — Horizontal buzz travel.\n- `--fade-opacity` (default: `0.4`) — Lowest opacity during `fade` and `spin-pulse`.\n- `--flip-angle` (default: `180deg`) — Rotation angle for flip treatments.\n- `--flip-anticipation-scale` (default: `0.9`) — Wind-up scale before a flip.\n- `--flip-overshoot` (default: `0deg`) — Extra angle before a flip settles.\n- `--flip-x` (default: `0`) — X coordinate of the flip rotation axis.\n- `--flip-y` (default: `1`) — Y coordinate of the flip rotation axis.\n- `--flip-z` (default: `0`) — Z coordinate of the flip rotation axis.\n- `--float-drift` (default: `0`) — Horizontal float drift.\n- `--float-height` (default: `calc(var(--lr-size-0-5em)*-1)`) — Float rise height.\n- `--float-squash-x` (default: `1.04`) — Resting horizontal float scale.\n- `--float-squash-y` (default: `0.96`) — Resting vertical float scale.\n- `--float-stretch-x` (default: `0.96`) — Peak horizontal float scale.\n- `--float-stretch-y` (default: `1.04`) — Peak vertical float scale.\n- `--float-tilt` (default: `4deg`) — Rotation at the float peak.\n- `--jello-scale-x` (default: `1.18`) — Horizontal jello stretch.\n- `--jello-scale-y` (default: `0.82`) — Vertical jello stretch.\n- `--lr-icon-fixed-width` (default: `var(--lr-size-1-5em)`) — Inline size of the box while `fixed-width` is set; the glyph keeps `--lr-icon-size` and centers inside it.\n- `--lr-icon-flip-x` (default: `1`) — Horizontal scale factor, set to `-1` by `flip`.\n- `--lr-icon-flip-y` (default: `1`) — Vertical scale factor, set to `-1` by `flip`.\n- `--lr-icon-rotate` (default: `0deg`) — Rotation applied to the box. Written inline from the `rotate` property, so set that rather than this property.\n- `--lr-icon-size` — Optional inline and block size override for every canvas.\n- `--primary-color` (default: `currentColor`) — Primary duotone layer color.\n- `--primary-opacity` (default: `1`) — Primary duotone layer opacity.\n- `--secondary-color` (default: `currentColor`) — Secondary duotone layer color.\n- `--secondary-opacity` (default: `0.4`) — Secondary duotone layer opacity.\n- `--swing-angle` (default: `15deg`) — Peak swing angle.\n- `--wag-angle` (default: `12deg`) — Peak wag angle."
12559
+ "value": "`<lr-icon>` — an SVG icon primitive. Renders a built-in named path with no network access at\nall, or resolves a name through a registered icon library, or fetches one SVG document from\n`src`. Remote markup is byte-capped, sanitized with DOMPurify, and rendered only if the whole\npipeline succeeds; anything else fails closed with a localized alert and no partial markup.\nMatching loads share a bounded cache of canonical sanitized SVGs. Each instance deep-clones the\ncanonical node before its trusted library mutator runs, so cached state is never mutated.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n- Deprecated property `autoWidth` / `auto-width`: Deprecated since `8.0.0`. Use property `canvas=\"auto\"`. Removal is not permitted before `10.0.0`. autoWidth is a boolean compatibility spelling that cannot express fixed canvas sizes; canvas covers both automatic and explicit sizing. That version is a policy floor, not a plan: `wa-icon` still publishes its own deprecated `auto-width` attribute, so this alias is removed only when upstream's is.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Optional custom SVG/path content when no `name`, `path`, `library`, or `src` resolves. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `empty` | Marker rendered when a remote icon resolved to an empty but valid document. |\n| `error` | The visually hidden, `aria-hidden` mirror shown when a remote icon fails. The spoken error is appended to Lyra's shared assertive light-DOM announcement sink while the icon and its composed ancestors are exposed to the accessibility tree. |\n| `svg` | The rendered SVG, whether built-in or fetched. |\n| `use` | Every `<use>` element in the rendered SVG. |\n\n---\n\n**CSS Custom Properties**\n\n- `--animation-delay` (default: `0s`) — Delay before an icon animation starts.\n- `--animation-direction` (default: `normal`) — Playback direction for icon animations.\n- `--animation-duration` (default: `var(--lr-duration-icon)`) — Duration of one animation cycle.\n- `--animation-iteration-count` (default: `infinite`) — Number of animation cycles.\n- `--animation-timing` (default: `var(--lr-easing-emphasized)`) — Animation timing function.\n- `--beat-fade-opacity` (default: `0.4`) — Lowest opacity during `beat-fade`.\n- `--beat-fade-scale` (default: `1.25`) — Peak scale during `beat-fade`.\n- `--beat-scale` (default: `1.25`) — Scale multiplier for `beat` and `spin-pulse`.\n- `--bounce-anticipation` (default: `0`) — Downward offset before a bounce.\n- `--bounce-height` (default: `calc(var(--lr-size-0-5em)*-1)`) — Peak bounce height.\n- `--bounce-jump-scale-x` (default: `0.95`) — Horizontal scale at the top of a bounce.\n- `--bounce-jump-scale-y` (default: `1.05`) — Vertical scale at the top of a bounce.\n- `--bounce-land-scale-x` (default: `1.08`) — Horizontal scale while landing.\n- `--bounce-land-scale-y` (default: `0.92`) — Vertical scale while landing.\n- `--bounce-rebound` (default: `calc(var(--lr-size-1em)*-0.1)`) — Landing rebound distance.\n- `--bounce-start-scale-x` (default: `1`) — Initial horizontal bounce scale.\n- `--bounce-start-scale-y` (default: `1`) — Initial vertical bounce scale.\n- `--buzz-distance` (default: `calc(var(--lr-size-1em)*0.12)`) — Horizontal buzz travel.\n- `--fade-opacity` (default: `0.4`) — Lowest opacity during `fade` and `spin-pulse`.\n- `--flip-angle` (default: `180deg`) — Rotation angle for flip treatments.\n- `--flip-anticipation-scale` (default: `0.9`) — Wind-up scale before a flip.\n- `--flip-overshoot` (default: `0deg`) — Extra angle before a flip settles.\n- `--flip-x` (default: `0`) — X coordinate of the flip rotation axis.\n- `--flip-y` (default: `1`) — Y coordinate of the flip rotation axis.\n- `--flip-z` (default: `0`) — Z coordinate of the flip rotation axis.\n- `--float-drift` (default: `0`) — Horizontal float drift.\n- `--float-height` (default: `calc(var(--lr-size-0-5em)*-1)`) — Float rise height.\n- `--float-squash-x` (default: `1.04`) — Resting horizontal float scale.\n- `--float-squash-y` (default: `0.96`) — Resting vertical float scale.\n- `--float-stretch-x` (default: `0.96`) — Peak horizontal float scale.\n- `--float-stretch-y` (default: `1.04`) — Peak vertical float scale.\n- `--float-tilt` (default: `4deg`) — Rotation at the float peak.\n- `--jello-scale-x` (default: `1.18`) — Horizontal jello stretch.\n- `--jello-scale-y` (default: `0.82`) — Vertical jello stretch.\n- `--lr-icon-fixed-width` (default: `var(--lr-size-1-5em)`) — Inline size of the box while `fixed-width` is set; the glyph keeps `--lr-icon-size` and centers inside it.\n- `--lr-icon-flip-x` (default: `1`) — Horizontal scale factor, set to `-1` by `flip`.\n- `--lr-icon-flip-y` (default: `1`) — Vertical scale factor, set to `-1` by `flip`.\n- `--lr-icon-rotate` (default: `0deg`) — Rotation applied to the box. Written inline from the `rotate` property, so set that rather than this property.\n- `--lr-icon-size` — Optional inline and block size override for every canvas.\n- `--primary-color` (default: `currentColor`) — Primary duotone layer color.\n- `--primary-opacity` (default: `1`) — Primary duotone layer opacity.\n- `--secondary-color` (default: `currentColor`) — Secondary duotone layer color.\n- `--secondary-opacity` (default: `0.4`) — Secondary duotone layer opacity.\n- `--swing-angle` (default: `15deg`) — Peak swing angle.\n- `--wag-angle` (default: `12deg`) — Peak wag angle."
12337
12560
  },
12338
12561
  "attributes": [
12339
12562
  {
@@ -12403,7 +12626,7 @@
12403
12626
  "name": "auto-width",
12404
12627
  "description": {
12405
12628
  "kind": "markdown",
12406
- "value": "Compatibility alias for `canvas=\"auto\"`. Purely a CSS-level alias — it never reads or\nwrites `canvas` — so an explicit `canvas` attribute/property always wins and this becomes a\nno-op while one is set.\n\nDeprecated since `8.0.0`. Use property `canvas=\"auto\"`. Removal is not permitted before `10.0.0`. autoWidth is a boolean compatibility spelling that cannot express fixed canvas sizes; canvas covers both automatic and explicit sizing.\n\nType: `boolean` \nDefault: `false`"
12629
+ "value": "Compatibility alias for `canvas=\"auto\"`. Purely a CSS-level alias — it never reads or\nwrites `canvas` — so an explicit `canvas` attribute/property always wins and this becomes a\nno-op while one is set.\n\nDeprecated since `8.0.0`. Use property `canvas=\"auto\"`. Removal is not permitted before `10.0.0`. autoWidth is a boolean compatibility spelling that cannot express fixed canvas sizes; canvas covers both automatic and explicit sizing. That version is a policy floor, not a plan: `wa-icon` still publishes its own deprecated `auto-width` attribute, so this alias is removed only when upstream's is.\n\nType: `boolean` \nDefault: `false`"
12407
12630
  }
12408
12631
  },
12409
12632
  {
@@ -13640,7 +13863,7 @@
13640
13863
  "name": "lr-known-date",
13641
13864
  "description": {
13642
13865
  "kind": "markdown",
13643
- "value": "`<lr-known-date>` — a date a user already knows (a birthdate, a passport\nissue/expiry date) collected as three plain, labeled day/month/year number\nfields in the locale's natural field order, rather than a calendar popup.\nForm-associated; the submitted form value is always canonical ISO 8601\n(`YYYY-MM-DD`), or `''` while any field is blank or the combination isn't a\nreal calendar date. Mirrors Web Awesome's `wa-known-date` API surface under\n`lr-`. `appearance` and `pill` mirror its field treatments, while `size` uses this library's\nshared `2xs`–`xl` ladder and also accepts the upstream `small`/`medium`/`large` spellings — the\nsame ladder every other Lyra form control sits on. The shared `FormAssociated` surface supplies\nthe upstream `form` owner contract.\n\nA field's own `<input>` shows exactly what was typed (never reformatted or\nreverted) -- only the composite `value` is zero-padded. Auto-advance\n(typing a field's last digit moves focus to the next field) and\nbackspace-to-previous-field-when-empty are this library's own additions on\ntop of Web Awesome's bare typing model, which documents no auto-advance;\ndon't remove them to \"restore\" WA parity. Arrow-key field-to-field\nnavigation at a field's text boundary is RTL-aware: the *physical* key that\nmeans \"toward the next field\" flips under an inherited `dir=\"rtl\"`, while\nthe field order itself (locale-derived) does not. Locale digits such as\nArabic-Indic and Persian numerals are accepted and normalized to the\ncanonical ASCII digits used by the ISO form value.\n\nPressing Enter in any of the three fields performs the implicit form submission a native\n`<input>` would (see `internal/submit-on-enter.ts` — the fields live in a shadow root and have no\nform owner, so the platform can never do it here), flushing any pending `change` first.\n\nNo resizable text-editing surface exists (three fixed-width digit fields),\nso resize forwarding doesn't apply, and `spellcheck`/`autocapitalize`/\n`autocorrect`/`wrap` don't meaningfully apply to 2–4-digit numeric fields\neither -- the same carve-out `lr-input[type=\"number\"]` already documents.\nVisible validation-message changes are appended to a pre-mounted light-DOM assertive live\nregion. Hidden, inert, CSS-hidden, and `aria-hidden` slotted error content is excluded from the\nannouncement text, and no error is announced while the control or a composed ancestor is\nhidden. Initial and reconnected validation state remains silent.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n- Deprecated part `label`: Deprecated since `8.0.0`. Use part `::part(form-control-label)`. Removal is not permitted before `10.0.0`. The form-control-label part matches the shared form-control vocabulary; label remains on that same node during the compatibility window.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Custom error content, alongside the `errorText` attribute. |\n| `hint` | Custom hint content, alongside the `hint` attribute. |\n| `label` | Custom label/legend content, alongside the `label` attribute. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | Compatibility name for the outer wrapper; use `known-date`. |\n| `error` | The validation message. |\n| `field` | Each field block (label + input), repeated three times; distinguished by `data-field=\"day\"\\|\"month\"\\|\"year\"`. |\n| `field-day` | Added to the day field block. |\n| `field-input` | The native per-field `<input type=\"text\" inputmode=\"numeric\">`, repeated three times; distinguished by `data-field=\"day\"\\|\"month\"\\|\"year\"`. |\n| `field-label` | The small visible per-field text label (\"Day\"/\"Month\"/\"Year\"). |\n| `field-month` | Added to the month field block. |\n| `field-year` | Added to the year field block. |\n| `fields` | The row wrapping the three field blocks. |\n| `fieldset` | The `<fieldset>` grouping the three fields. |\n| `form-control` | The outer wrapper. It is the same node as `base` and `known-date`. |\n| `form-control-input` | Alias on the fields row matching other form controls. |\n| `form-control-label` | The visible label wrapper inside the legend. |\n| `hint` | The hint message. |\n| `known-date` | The outer wrapper around legend, fieldset, hint, and error. It is the same node as `base` and `form-control`. |\n| `label` | Deprecated in 8.0.0; compatibility alias for `form-control-label`, retained until at least 10.0.0. |\n| `legend` | The `<legend>` element. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-known-date-field-padding-block` (default: `var(--lr-form-control-padding-block)`) — Block padding of each `field-input`; its private default follows `size` through the shared ladder.\n- `--lr-known-date-field-padding-inline` (default: `var(--lr-form-control-padding-inline)`) — Inline padding of each `field-input`; its private default follows `size` through the shared ladder.\n- `--lr-known-date-field-font-size` (default: `var(--lr-form-control-font-size)`) — Font size of each `field-input`; its private default follows `size` through the shared ladder.\n- `--lr-known-date-field-min-height` (default: `max(var(--lr-form-control-height),var(--lr-size-24px))`) — Minimum block size of each `field-input`; its private default follows `size` (`2xs`/`xs`→`24px`, `s`→`1.875rem`, `m`→`2.5rem`, `l`→`3rem`, `xl`→`3.5rem`) -- the same shared control-height ladder `lr-input`/`lr-date-input` sit on, so a birthdate field in a form row beside those controls renders at the same height. The `max()` floors the two smallest tiers at WCAG 2.2 SC 2.5.8's 24px pointer-target minimum. At the small tiers the floor exceeds the field's own content height and actively pins the rendered box; at `l`/`xl` the content height stays under it, so those two tiers are unaffected. An inherited or direct public value wins in every tier.\n- `--lr-known-date-field-height` — Exact block size of each `field-input`. Undeclared by default, so the field grows to fit its content, floored by `--lr-known-date-field-min-height`. Set it to pin a fixed height.\n- `--lr-known-date-field-gap` (default: `var(--lr-space-s)`) — Gap between the three field blocks.\n- `--lr-known-date-day-field-width` (default: `var(--lr-size-3-5em)`) — Inline size of the day field.\n- `--lr-known-date-month-field-width` (default: `var(--lr-size-3-5em)`) — Inline size of the month field.\n- `--lr-known-date-year-field-width` (default: `var(--lr-size-5em)`) — Inline size of the year field.\n- `--lr-known-date-invalid-border-color` (default: `var(--lr-color-danger)`) — Border color of each `field-input` while `:host([data-invalid])` is set.\n- `--lr-form-control-required-content` (default: `' *'`) — The required-field marker, rendered after the shared `form-control-label` marker contract. Set it to `''` to suppress the marker, or to any other quoted string (`' (required)'`, a localized word) to replace it. Caller-supplied content, so it is never localized here.\n- `--lr-form-control-required-color` (default: `var(--lr-color-danger)`) — Color of that marker, retunable without touching any other danger-coloured surface.\n- `--lr-form-control-required-offset` (default: `0`) — Inline space between the label text and the marker."
13866
+ "value": "`<lr-known-date>` — a date a user already knows (a birthdate, a passport\nissue/expiry date) collected as three plain, labeled day/month/year number\nfields in the locale's natural field order, rather than a calendar popup.\nForm-associated; the submitted form value is always canonical ISO 8601\n(`YYYY-MM-DD`), or `''` while any field is blank or the combination isn't a\nreal calendar date. Mirrors Web Awesome's `wa-known-date` API surface under\n`lr-`. `appearance` and `pill` mirror its field treatments, while `size` uses this library's\nshared `2xs`–`xl` ladder and also accepts the upstream `small`/`medium`/`large` spellings — the\nsame ladder every other Lyra form control sits on. The shared `FormAssociated` surface supplies\nthe upstream `form` owner contract.\n\nA field's own `<input>` shows exactly what was typed (never reformatted or\nreverted) -- only the composite `value` is zero-padded. Auto-advance\n(typing a field's last digit moves focus to the next field) and\nbackspace-to-previous-field-when-empty are this library's own additions on\ntop of Web Awesome's bare typing model, which documents no auto-advance;\ndon't remove them to \"restore\" WA parity. Arrow-key field-to-field\nnavigation at a field's text boundary is RTL-aware: the *physical* key that\nmeans \"toward the next field\" flips under an inherited `dir=\"rtl\"`, while\nthe field order itself (locale-derived) does not. Locale digits such as\nArabic-Indic and Persian numerals are accepted and normalized to the\ncanonical ASCII digits used by the ISO form value.\n\nPressing Enter in any of the three fields performs the implicit form submission a native\n`<input>` would (see `internal/submit-on-enter.ts` — the fields live in a shadow root and have no\nform owner, so the platform can never do it here), flushing any pending `change` first.\n\nNo resizable text-editing surface exists (three fixed-width digit fields),\nso resize forwarding doesn't apply, and `spellcheck`/`autocapitalize`/\n`autocorrect`/`wrap` don't meaningfully apply to 2–4-digit numeric fields\neither -- the same carve-out `lr-input[type=\"number\"]` already documents.\nVisible validation-message changes are appended to a pre-mounted light-DOM assertive live\nregion. Hidden, inert, CSS-hidden, and `aria-hidden` slotted error content is excluded from the\nannouncement text, and no error is announced while the control or a composed ancestor is\nhidden. Initial and reconnected validation state remains silent.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n- Deprecated part `label`: Deprecated since `8.0.0`. Use part `::part(form-control-label)`. Removal is not permitted before `10.0.0`. The form-control-label part matches the shared form-control vocabulary; label remains on that same node during the compatibility window. That version is a policy floor, not a plan: `wa-known-date` still publishes its own deprecated `label` part, so this alias is removed only when upstream's is.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Custom error content, alongside the `errorText` attribute. |\n| `hint` | Custom hint content, alongside the `hint` attribute. |\n| `label` | Custom label/legend content, alongside the `label` attribute. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | Compatibility name for the outer wrapper; use `known-date`. |\n| `error` | The validation message. |\n| `field` | Each field block (label + input), repeated three times; distinguished by `data-field=\"day\"\\|\"month\"\\|\"year\"`. |\n| `field-day` | Added to the day field block. |\n| `field-input` | The native per-field `<input type=\"text\" inputmode=\"numeric\">`, repeated three times; distinguished by `data-field=\"day\"\\|\"month\"\\|\"year\"`. |\n| `field-label` | The small visible per-field text label (\"Day\"/\"Month\"/\"Year\"). |\n| `field-month` | Added to the month field block. |\n| `field-year` | Added to the year field block. |\n| `fields` | The row wrapping the three field blocks. |\n| `fieldset` | The `<fieldset>` grouping the three fields. |\n| `form-control` | The outer wrapper. It is the same node as `base` and `known-date`. |\n| `form-control-input` | Alias on the fields row matching other form controls. |\n| `form-control-label` | The visible label wrapper inside the legend. |\n| `hint` | The hint message. |\n| `known-date` | The outer wrapper around legend, fieldset, hint, and error. It is the same node as `base` and `form-control`. |\n| `label` | Deprecated in 8.0.0; compatibility alias for `form-control-label`. Web Awesome still publishes its own deprecated `label` part on `<wa-known-date>`, so this alias stays on the same node until upstream drops it. |\n| `legend` | The `<legend>` element. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-known-date-field-padding-block` (default: `var(--lr-form-control-padding-block)`) — Block padding of each `field-input`; its private default follows `size` through the shared ladder.\n- `--lr-known-date-field-padding-inline` (default: `var(--lr-form-control-padding-inline)`) — Inline padding of each `field-input`; its private default follows `size` through the shared ladder.\n- `--lr-known-date-field-font-size` (default: `var(--lr-form-control-font-size)`) — Font size of each `field-input`; its private default follows `size` through the shared ladder.\n- `--lr-known-date-field-min-height` (default: `max(var(--lr-form-control-height),var(--lr-size-24px))`) — Minimum block size of each `field-input`; its private default follows `size` (`2xs`/`xs`→`24px`, `s`→`1.875rem`, `m`→`2.5rem`, `l`→`3rem`, `xl`→`3.5rem`) -- the same shared control-height ladder `lr-input`/`lr-date-input` sit on, so a birthdate field in a form row beside those controls renders at the same height. The `max()` floors the two smallest tiers at WCAG 2.2 SC 2.5.8's 24px pointer-target minimum. At the small tiers the floor exceeds the field's own content height and actively pins the rendered box; at `l`/`xl` the content height stays under it, so those two tiers are unaffected. An inherited or direct public value wins in every tier.\n- `--lr-known-date-field-height` — Exact block size of each `field-input`. Undeclared by default, so the field grows to fit its content, floored by `--lr-known-date-field-min-height`. Set it to pin a fixed height.\n- `--lr-known-date-field-gap` (default: `var(--lr-space-s)`) — Gap between the three field blocks.\n- `--lr-known-date-day-field-width` (default: `var(--lr-size-3-5em)`) — Inline size of the day field.\n- `--lr-known-date-month-field-width` (default: `var(--lr-size-3-5em)`) — Inline size of the month field.\n- `--lr-known-date-year-field-width` (default: `var(--lr-size-5em)`) — Inline size of the year field.\n- `--lr-known-date-invalid-border-color` (default: `var(--lr-color-danger)`) — Border color of each `field-input` while `:host([data-invalid])` is set.\n- `--lr-form-control-required-content` (default: `' *'`) — The required-field marker, rendered after the shared `form-control-label` marker contract. Set it to `''` to suppress the marker, or to any other quoted string (`' (required)'`, a localized word) to replace it. Caller-supplied content, so it is never localized here.\n- `--lr-form-control-required-color` (default: `var(--lr-color-danger)`) — Color of that marker, retunable without touching any other danger-coloured surface.\n- `--lr-form-control-required-offset` (default: `0`) — Inline space between the label text and the marker."
13644
13867
  },
13645
13868
  "attributes": [
13646
13869
  {
@@ -13929,9 +14152,16 @@
13929
14152
  "name": "lr-line-chart",
13930
14153
  "description": {
13931
14154
  "kind": "markdown",
13932
- "value": "`<lr-line-chart>` — `<lr-chart>` with a `\"line\"` default and the mirrored writable type.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
14155
+ "value": "`<lr-line-chart>` — `<lr-chart>` with a `\"line\"` default and the mirrored writable type.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-table-toggle` | The disclosure button rendered by `dataTableToggle`. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-data-table-toggle-active-bg` — Pressed background of the `dataTableToggle` disclosure button; defaults to a mix of the hover background with the shared active mix partner.\n- `--lr-chart-data-table-toggle-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the `dataTableToggle` disclosure button.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
13933
14156
  },
13934
14157
  "attributes": [
14158
+ {
14159
+ "name": "annotations",
14160
+ "description": {
14161
+ "kind": "markdown",
14162
+ "value": "Declarative reference lines and shaded bands — a threshold, an event year, a regime change, a\nhighlighted period. Each entry marks either a single `value` or a `from`/`to` range on `axis`\n(default `'y'`), with an optional `label` and semantic `tone`.\n\nNeeds the optional `chartjs-plugin-annotation` peer, loaded on first actual demand so a page\nwith no annotated charts never downloads it. The plugin is registered globally, like\n`chartjs-plugin-zoom` and unlike `chartjs-plugin-datalabels`: it draws nothing unless a chart\nsupplies annotation options, so the registration is unobservable to charts that set none, and\nregistration is also what installs the plugin's own element defaults. Without the peer\ninstalled the chart still renders and a single console warning explains the no-op — the same\nfail-closed contract `data-labels` uses.\n\nEntries are included in the generated accessible description, mirroring `lr-heatmap`.\n\nType: `readonly LyraChartAnnotation[]` \nDefault: `[]`"
14163
+ }
14164
+ },
13935
14165
  {
13936
14166
  "name": "area",
13937
14167
  "description": {
@@ -13953,6 +14183,13 @@
13953
14183
  "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
13954
14184
  }
13955
14185
  },
14186
+ {
14187
+ "name": "data-table-toggle",
14188
+ "description": {
14189
+ "kind": "markdown",
14190
+ "value": "Render a disclosure button above the accessible data table so a sighted reader can reveal the\nnumbers behind the chart on demand. `showDataTable` alone is all-or-nothing -- the table is\neither permanently screen-reader-only or permanently visible -- which left a consumer wrapping\na duplicated table in their own `<details>`.\n\nWith this set, `showDataTable` becomes the disclosure's *initial* state rather than its whole\nbehavior. The table stays in the DOM in both states, so assistive technology never loses it.\n\nType: `boolean` \nDefault: `false`"
14191
+ }
14192
+ },
13956
14193
  {
13957
14194
  "name": "description",
13958
14195
  "description": {
@@ -14074,6 +14311,21 @@
14074
14311
  "value": "Chart.js plugins attached to this chart instance.\n\nType: `LyraChartPlugin[]` \nDefault: `[]`"
14075
14312
  }
14076
14313
  },
14314
+ {
14315
+ "name": "scale-type",
14316
+ "description": {
14317
+ "kind": "markdown",
14318
+ "value": "Scale type for the **value** axis (the categorical axis is unaffected). `'logarithmic'` plots\na dataset spanning several orders of magnitude honestly, where a linear axis collapses\neverything below the maximum into the baseline. Inherited by `lr-line-chart`,\n`lr-scatter-chart` and `lr-bar-chart`.\n\nA logarithmic axis cannot represent zero or negative values (`log(0)` is `-Infinity`), so\n`beginAtZero` is not forwarded in that mode -- Chart.js would otherwise be handed a bound it\ncannot place. Non-positive data points are dropped by Chart.js's own log scale.\n\nType: `LyraChartScaleType` \nDefault: `'linear'`"
14319
+ },
14320
+ "values": [
14321
+ {
14322
+ "name": "linear"
14323
+ },
14324
+ {
14325
+ "name": "logarithmic"
14326
+ }
14327
+ ]
14328
+ },
14077
14329
  {
14078
14330
  "name": "show-data-table",
14079
14331
  "description": {
@@ -14297,6 +14549,9 @@
14297
14549
  },
14298
14550
  {
14299
14551
  "name": "sqrt"
14552
+ },
14553
+ {
14554
+ "name": "logarithmic"
14300
14555
  }
14301
14556
  ]
14302
14557
  },
@@ -14537,7 +14792,7 @@
14537
14792
  "name": "lr-map",
14538
14793
  "description": {
14539
14794
  "kind": "markdown",
14540
- "value": "`<lr-map>` — a maplibre-gl wrapper with a declarative legend, choropleth\nGeoJSON layer, markers, and additive `dataLayers` GeoJSON overlays\n(arbitrary shapes rendered as a source plus fill/line/circle layers,\nindependent of `choropleth`'s field/stops color-interpolation), plus a peer-neutral\n`map` getter for common imperative operations. Its runtime value is the underlying MapLibre\nmap, while its declaration stays independent of the optional peer. Requires `maplibre-gl`\nv5 or v6; the component styles MapLibre's generated canvas, marker, popup, and control DOM\ninside its shadow root. MapLibre v6 is ESM-only, requires WebGL2, and needs its module-worker\nURL configured once; v5's standard build includes its worker.\n\nThe underlying `maplibregl.Map` — and the WebGL context it opens — isn't\nconstructed until this element is first visible in the viewport (tracked\nvia `IntersectionObserver`), even once the `maplibre-gl` peer dependency\nhas finished loading. Browsers hard-cap concurrent WebGL contexts per\npage, so a grid/dashboard of many `<lr-map>` instances only constructs\nthe ones actually on-screen instead of racing to exhaust that budget the\ninstant each one mounts. `map` stays `undefined` (and `lr-map-load`\ndoesn't fire) until construction actually happens.\n\nCall `LyraMap.preload()` before connecting an element to start the optional\npeer import early. `dataLayers[].sourceId` is a trimmed nonempty business identity; the first\noccurrence is retained and blanks or later duplicates are ignored. It is declarative component input;\nits backing MapLibre source and layers use collision-free component-owned\nids and must not be accessed through `map`.\n\nCollection-bearing inputs take bounded, recursively frozen snapshots synchronously. Mutate a\ncopy and reassign it to update the map; later changes to the assigned source are not observed.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `attribution` | MapLibre-generated map attribution. |\n| `attribution-toggle` | MapLibre's compact-attribution disclosure control. |\n| `base` | The non-semantic map wrapper. It exposes `aria-busy=\"true\"` while the optional map library loads and contains ordinary, non-live localized loading text. |\n| `container` | The MapLibre container. Its generated canvas is the actual focusable map region and receives the host-first accessible name and effective locale. |\n| `error` | Visible localized message shown instead of `container` when `mapStyle` is missing, the optional peer is unavailable, WebGL2 cannot be created, or map initialization fails; the transition is announced through the shared light-DOM assertive region. |\n| `legend` | The map legend. |\n| `legend-limit` | Visible localized summary when legend input is bounded or shortened. |\n| `legend-swatch` | A legend color swatch. |\n| `marker` | A MapLibre-generated marker, with a 24px minimum target in both axes even when a peer/custom marker has no intrinsic content size. |\n| `popup` | A MapLibre-generated marker popup. |\n| `popup-close-button` | The MapLibre-generated button that closes an open marker popup. |\n| `popup-content` | The content container inside a MapLibre-generated marker popup. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-map-choropleth-fill-opacity` (default: `0.75`) — Fill opacity for choropleth and polygon `dataLayers` fills. Read from the resolved cascade whenever those layers are applied or painted after a theme change.\n- `--lr-map-popup-close-button-active-bg` (default: `color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))`) — Pressed background of `popup-close-button`.\n- `--lr-map-popup-close-button-active-color` (default: `var(--lr-color-brand)`) — Pressed foreground of `popup-close-button`. No style or tile provider is selected implicitly. Set `mapStyle` explicitly before connection; this prevents a bare component from making an undeclared third-party request.\n- `--lr-map-popup-close-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of `popup-close-button`.\n- `--lr-map-popup-close-button-hover-color` (default: `var(--lr-color-brand)`) — Hover foreground of `popup-close-button`."
14795
+ "value": "`<lr-map>` — a maplibre-gl wrapper with a declarative legend, choropleth\nGeoJSON layer, markers, and additive `dataLayers` GeoJSON overlays\n(arbitrary shapes rendered as a source plus fill/line/circle layers,\nindependent of `choropleth`'s field/stops color-interpolation), plus a peer-neutral\n`map` getter for common imperative operations. Its runtime value is the underlying MapLibre\nmap, while its declaration stays independent of the optional peer. Requires `maplibre-gl`\nv5 or v6; the component styles MapLibre's generated canvas, marker, popup, and control DOM\ninside its shadow root. MapLibre v6 is ESM-only, requires WebGL2, and needs its module-worker\nURL configured once; v5's standard build includes its worker.\n\nThe underlying `maplibregl.Map` — and the WebGL context it opens — isn't\nconstructed until this element is first visible in the viewport (tracked\nvia `IntersectionObserver`), even once the `maplibre-gl` peer dependency\nhas finished loading. Browsers hard-cap concurrent WebGL contexts per\npage, so a grid/dashboard of many `<lr-map>` instances only constructs\nthe ones actually on-screen instead of racing to exhaust that budget the\ninstant each one mounts. `map` stays `undefined` (and `lr-map-load`\ndoesn't fire) until construction actually happens.\n\nCall `LyraMap.preload()` before connecting an element to start the optional\npeer import early. `dataLayers[].sourceId` is a trimmed nonempty business identity; the first\noccurrence is retained and blanks or later duplicates are ignored. It is declarative component input;\nits backing MapLibre source and layers use collision-free component-owned\nids and must not be accessed through `map`.\n\nCollection-bearing inputs take bounded, recursively frozen snapshots synchronously. Mutate a\ncopy and reassign it to update the map; later changes to the assigned source are not observed.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `legend` | Custom legend content, rendered inside the legend panel's own layout so it stays positioned with the map instead of floating beside it. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `attribution` | MapLibre-generated map attribution. |\n| `attribution-toggle` | MapLibre's compact-attribution disclosure control. |\n| `base` | The non-semantic map wrapper. It exposes `aria-busy=\"true\"` while the optional map library loads and contains ordinary, non-live localized loading text. |\n| `container` | The MapLibre container. Its generated canvas is the actual focusable map region and receives the host-first accessible name and effective locale. |\n| `error` | Visible localized message shown instead of `container` when `mapStyle` is missing, the optional peer is unavailable, WebGL2 cannot be created, or map initialization fails; the transition is announced through the shared light-DOM assertive region. |\n| `legend` | The map legend. |\n| `legend-gradient` | The continuous ramp bar rendered from `legendGradient`. |\n| `legend-hi` | The high endpoint caption of the `legendGradient` bar (mirrors `lr-heatmap`). |\n| `legend-limit` | Visible localized summary when legend input is bounded or shortened. |\n| `legend-lo` | The low endpoint caption of the `legendGradient` bar (mirrors `lr-heatmap`). |\n| `legend-swatch` | A legend color swatch. |\n| `marker` | A MapLibre-generated marker, with a 24px minimum target in both axes even when a peer/custom marker has no intrinsic content size. |\n| `popup` | A MapLibre-generated marker popup. |\n| `popup-close-button` | The MapLibre-generated button that closes an open marker popup. |\n| `popup-content` | The content container inside a MapLibre-generated marker popup. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-map-choropleth-fill-opacity` (default: `0.75`) — Fill opacity for choropleth and polygon `dataLayers` fills. Read from the resolved cascade whenever those layers are applied or painted after a theme change.\n- `--lr-map-popup-close-button-active-bg` (default: `color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))`) — Pressed background of `popup-close-button`.\n- `--lr-map-popup-close-button-active-color` (default: `var(--lr-color-brand)`) — Pressed foreground of `popup-close-button`. No style or tile provider is selected implicitly. Set `mapStyle` explicitly before connection; this prevents a bare component from making an undeclared third-party request.\n- `--lr-map-popup-close-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of `popup-close-button`.\n- `--lr-map-popup-close-button-hover-color` (default: `var(--lr-color-brand)`) — Hover foreground of `popup-close-button`."
14541
14796
  },
14542
14797
  "attributes": [
14543
14798
  {
@@ -14554,6 +14809,20 @@
14554
14809
  "value": "Accessible name for MapLibre's focusable canvas. A nonempty host `aria-label` remains the\noverall component name and is not cloned onto the nested focus owner; the canvas uses this\npurpose-specific label or the localized `map` message. An explicit empty host name is\npreserved on the canvas for deliberately decorative embeddings.\n\nType: `string` \nDefault: `''`"
14555
14810
  }
14556
14811
  },
14812
+ {
14813
+ "name": "legend-gradient-hi-label",
14814
+ "description": {
14815
+ "kind": "markdown",
14816
+ "value": "Overrides the high endpoint's caption; defaults to the highest stop value, locale-formatted.\n\nType: `string | null` \nDefault: `null`"
14817
+ }
14818
+ },
14819
+ {
14820
+ "name": "legend-gradient-lo-label",
14821
+ "description": {
14822
+ "kind": "markdown",
14823
+ "value": "Overrides the low endpoint's caption; defaults to the lowest stop value, locale-formatted.\n\nType: `string | null` \nDefault: `null`"
14824
+ }
14825
+ },
14557
14826
  {
14558
14827
  "name": "locale",
14559
14828
  "description": {
@@ -14840,14 +15109,14 @@
14840
15109
  "name": "lr-media-card",
14841
15110
  "description": {
14842
15111
  "kind": "markdown",
14843
- "value": "`<lr-media-card>` — a lightweight inline preview for one already-sent,\nalready-available attachment inside a rendered chat message body (e.g.\nplugged into `<lr-chat-message>`'s `attachments` slot, or embedded\ndirectly by a markdown/message renderer). Distinct from two other,\nsimilarly-named components in this family: `<lr-document-preview>` is a\nfuller viewer with header chrome and an async server-side-conversion\nstate machine (`status=\"converting\"`), and `<lr-attachment-chip>` is a\npre-send queued-file chip with upload progress. This component has\nneither concern — it only ever shows a `src` that's already final.\n\n**Format dispatch.** `kind` selects `'image'` (a plain `<img>`), `'video'`\n(a plain `<video controls>`), or `'file'` (an icon + filename chip with a\ndownload/open affordance). Leave `kind` unset to auto-detect from\n`mime-type` (`image/*` / `video/*` / anything else -> `'file'`);\nexplicitly setting `kind` always wins over detection.\n\n**Safe-URL checking.** `src` is validated before it's ever assigned to an\n`<img>`/`<video>` `src` or an `<a href>` — only `http:`/`https:`/`blob:`\n(plus `data:` for a *media* `src` only) or a scheme-relative/relative URL\nwith no scheme at all pass; anything else (`javascript:`, `vbscript:`,\nand similarly suspicious schemes) is rejected. Internal sink-specific\nvalidators explain why `data:` gets two different answers depending on\nwhere it is used. An `image`/`video` `kind` whose `src` fails the\nmedia-src check falls back to the generic file-chip rendering — this is\nthe \"plain preview unavailable state\" a dangerous URL degrades to, rather\nthan ever reaching a real media/anchor sink. That fallback also re-checks\n`src` against the stricter href allowlist for its own download affordance,\nbut since the href allowlist is a strict subset of the media-src allowlist,\nthat re-check can only ever change the outcome for a direct/auto-detected\n`kind=\"file\"` `src` — an `image`/`video` `src` that already failed the\nwider media-src check necessarily fails the narrower href check too, so\nthe fallback for those two kinds is always the plain, unclickable `span`.\n\n**The `video` case renders its open affordance separately from `base`.**\n`image`/`file` wrap their *entire* card in one native `<button>`/`<a>` —\nsafe because an `<img>` and a plain icon+text chip have no interactive\ncontent of their own to conflict with. A `<video controls>` element is\nitself interactive content (its own play/seek/volume controls), and HTML\nforbids nesting interactive content inside a `<button>`/`<a>` — doing so\nanyway would also make every click on the video's own controls bubble up\nand spuriously fire `lr-media-open`. So for `kind=\"video\"`, `base` is a plain,\nnon-interactive wrapper around `[part=\"media\"]`, and a small separate\n`[part=\"open-button\"]` (not one of this component's originally-scoped\nparts, added as the \"explicit view/open affordance\" the class is free to\nprovide) is the thing that actually fires `lr-media-open`.\n\n**Navigation.** This component never navigates on its own for `image`/\n`video` — activating the card only fires noncancelable `lr-media-open`; a host decides what\n\"open\" means (a lightbox, a new tab, whatever). The `file`-chip case is\nthe one exception: when `src` passes the (stricter) href safety check, the\nchip is a real `<a href download>` so a bare drop-in still does something\nuseful — but `lr-before-media-download` fires first and is `cancelable`; a host that\ncalls `preventDefault()` on it suppresses that default download/open so it\ncan substitute its own handling instead.\n\n**Pressed-state theme controls.** `--lr-media-card-active-border-color`\nand `--lr-media-card-active-bg` retint only an image/file card while it is\npressed. They are resolved in the state rule, rather than declared on the\nhost, so a conversation or attachment-list ancestor can theme every card\nwithout muting its own values.\n\n**Accessible action name.** A declarative host `aria-label` remains on the\nhost as the component's overall name; it is not cloned onto a second\nsemantic owner. The actionable button or link keeps a localized,\npurpose-specific name derived from filename/alt/kind. A property-only\n`accessibleLabel` assignment can name that internal action when no host\nlabel is present. Neither path replaces image alt text or the video\ncontrol's own purpose label, and an explicitly empty host name does not\nleave the still-interactive nested action unnamed.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root interactive/container element. A `<button>` for `kind=\"image\"`, a plain wrapper `<div>` for `kind=\"video\"`, and either an `<a>` (when `src` passes the href safety check) or a plain `<span>` (otherwise) for the `file`-chip fallback. |\n| `file-icon` | The generic file glyph, shown only in the file-chip fallback. |\n| `filename` | The filename text, shown only in the file-chip fallback. |\n| `media` | The `<img>` or `<video>` element. |\n| `open-button` | The explicit \"open\" affordance rendered next to `[part=\"media\"]` for `kind=\"video\"` only — see the class doc. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-media-card-active-bg` (default: `color-mix(in oklab, var(--lr-color-surface), var(--lr-color-mix-partner) var(--lr-color-mix-active))`) — Pressed background color for image/file card actions. **Chrome escape hatch.** `frame=\"plain\"` drops `[part=\"base\"]`'s border, background, padding, and corner radius — for a dense list/feed of cards (this component's own documented primary use case) where the surrounding container already provides its own separation, so cards don't double up on chrome. `frame` is the library-wide name for this container treatment.\n- `--lr-media-card-active-border-color` (default: `color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-active))`) — Pressed border color for image/file card actions.\n- `--lr-media-card-max-height` (default: `var(--lr-size-20rem)`) — Cap on the block size of the `<img>`/`<video>` in `[part=\"media\"]`."
15112
+ "value": "`<lr-media-card>` — a lightweight inline preview for one already-sent,\nalready-available attachment inside a rendered chat message body (e.g.\nplugged into `<lr-chat-message>`'s `attachments` slot, or embedded\ndirectly by a markdown/message renderer). Distinct from two other,\nsimilarly-named components in this family: `<lr-document-preview>` is a\nfuller viewer with header chrome and an async server-side-conversion\nstate machine (`status=\"converting\"`), and `<lr-attachment-chip>` is a\npre-send queued-file chip with upload progress. This component has\nneither concern — it only ever shows a `src` that's already final.\n\n**Format dispatch.** `kind` selects `'image'` (a plain `<img>`), `'video'`\n(a plain `<video controls>`), or `'file'` (an icon + filename chip with a\ndownload/open affordance). Leave `kind` unset to auto-detect from\n`mime-type` (`image/*` / `video/*` / anything else -> `'file'`);\nexplicitly setting `kind` always wins over detection.\n\n**Safe-URL checking.** `src` is validated before it's ever assigned to an\n`<img>`/`<video>` `src` or an `<a href>` — only `http:`/`https:`/`blob:`\n(plus `data:` for a *media* `src` only) or a scheme-relative/relative URL\nwith no scheme at all pass; anything else (`javascript:`, `vbscript:`,\nand similarly suspicious schemes) is rejected. Internal sink-specific\nvalidators explain why `data:` gets two different answers depending on\nwhere it is used. An `image`/`video` `kind` whose `src` fails the\nmedia-src check falls back to the generic file-chip rendering — this is\nthe \"plain preview unavailable state\" a dangerous URL degrades to, rather\nthan ever reaching a real media/anchor sink. That fallback also re-checks\n`src` against the stricter href allowlist for its own download affordance,\nbut since the href allowlist is a strict subset of the media-src allowlist,\nthat re-check can only ever change the outcome for a direct/auto-detected\n`kind=\"file\"` `src` — an `image`/`video` `src` that already failed the\nwider media-src check necessarily fails the narrower href check too, so\nthe fallback for those two kinds is always the plain, unclickable `span`.\n\n**The `video` case renders its open affordance separately from `base`.**\n`image`/`file` wrap their *entire* card in one native `<button>`/`<a>` —\nsafe because an `<img>` and a plain icon+text chip have no interactive\ncontent of their own to conflict with. A `<video controls>` element is\nitself interactive content (its own play/seek/volume controls), and HTML\nforbids nesting interactive content inside a `<button>`/`<a>` — doing so\nanyway would also make every click on the video's own controls bubble up\nand spuriously fire `lr-media-open`. So for `kind=\"video\"`, `base` is a plain,\nnon-interactive wrapper around `[part=\"media\"]`, and a small separate\n`[part=\"open-button\"]` (not one of this component's originally-scoped\nparts, added as the \"explicit view/open affordance\" the class is free to\nprovide) is the thing that actually fires `lr-media-open`.\n\n**Navigation.** This component never navigates on its own for `image`/\n`video` — activating the card only fires noncancelable `lr-media-open`; a host decides what\n\"open\" means (a lightbox, a new tab, whatever). The `file`-chip case is\nthe one exception: when `src` passes the (stricter) href safety check, the\nchip is a real `<a href download>` so a bare drop-in still does something\nuseful — but `lr-before-media-download` fires first and is `cancelable`; a host that\ncalls `preventDefault()` on it suppresses that default download/open so it\ncan substitute its own handling instead.\n\n**Pressed-state theme controls.** `--lr-media-card-active-border-color`\nand `--lr-media-card-active-bg` retint only an image/file card while it is\npressed. They are resolved in the state rule, rather than declared on the\nhost, so a conversation or attachment-list ancestor can theme every card\nwithout muting its own values.\n\n**Accessible action name.** A declarative host `aria-label` remains on the\nhost as the component's overall name; it is not cloned onto a second\nsemantic owner. The actionable button or link keeps a localized,\npurpose-specific name derived from filename/alt/kind. A property-only\n`accessibleLabel` assignment can name that internal action when no host\nlabel is present. Neither path replaces image alt text or the video\ncontrol's own purpose label, and an explicitly empty host name does not\nleave the still-interactive nested action unnamed.\n\n**Decorative images.** `alt` is optional rather than empty-by-default, so\n`alt=\"\"` -- the HTML idiom for a purely decorative image -- reaches the\nrendered `<img>` verbatim instead of collapsing into the unset case and\npicking up a generated description. Leaving `alt` off keeps the\n`filename`-then-generic fallback. The `<video>` label is deliberately\noutside that carve-out: an empty accessible name would leave an\ninteractive player unnamed rather than mark it decorative.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root interactive/container element. A `<button>` for `kind=\"image\"`, a plain wrapper `<div>` for `kind=\"video\"`, and either an `<a>` (when `src` passes the href safety check) or a plain `<span>` (otherwise) for the `file`-chip fallback. |\n| `file-icon` | The generic file glyph, shown only in the file-chip fallback. |\n| `filename` | The filename text, shown only in the file-chip fallback. |\n| `media` | The `<img>` or `<video>` element. |\n| `open-button` | The explicit \"open\" affordance rendered next to `[part=\"media\"]` for `kind=\"video\"` only — see the class doc. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-media-card-active-bg` (default: `color-mix(in oklab, var(--lr-color-surface), var(--lr-color-mix-partner) var(--lr-color-mix-active))`) — Pressed background color for image/file card actions. **Chrome escape hatch.** `frame=\"plain\"` drops `[part=\"base\"]`'s border, background, padding, and corner radius — for a dense list/feed of cards (this component's own documented primary use case) where the surrounding container already provides its own separation, so cards don't double up on chrome. `frame` is the library-wide name for this container treatment.\n- `--lr-media-card-active-border-color` (default: `color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-active))`) — Pressed border color for image/file card actions.\n- `--lr-media-card-max-height` (default: `var(--lr-size-20rem)`) — Cap on the block size of the `<img>`/`<video>` in `[part=\"media\"]`."
14844
15113
  },
14845
15114
  "attributes": [
14846
15115
  {
14847
15116
  "name": "alt",
14848
15117
  "description": {
14849
15118
  "kind": "markdown",
14850
- "value": "Alt text for the image case (and reused as a video label fallback).\nFalls back to `filename`, then a generic per-kind description.\n\nType: `string` \nDefault: `''`"
15119
+ "value": "Alt text for the image case (and reused as a video label fallback). Unset falls back to\n`filename`, then a generic per-kind description; explicitly `\"\"` marks the image decorative,\nmatching `<lr-image-viewer>`/`<lr-document-preview>`. The `<video>` label is deliberately\noutside that carve-out: an empty accessible name would leave an interactive player unnamed\nrather than mark it decorative, so an empty `alt` still falls through there.\n\nType: `string | undefined`"
14851
15120
  }
14852
15121
  },
14853
15122
  {
@@ -17584,6 +17853,13 @@
17584
17853
  "value": "URL to fetch and render as a PDF document.\n\nType: `string` \nDefault: `''`"
17585
17854
  }
17586
17855
  },
17856
+ {
17857
+ "name": "worker-src",
17858
+ "description": {
17859
+ "kind": "markdown",
17860
+ "value": "URL of the `pdfjs-dist` web worker chunk (`pdfjs-dist/build/pdf.worker.min.mjs`) as emitted by\nthe consuming application's own bundler. PDF.js rejects every `getDocument()` call with\n`No \"GlobalWorkerOptions.workerSrc\" specified.` until a worker is configured, and a bare package\nspecifier cannot be resolved from inside this library at runtime (there is no import map for it\nin a bundled app, and joining it to Lyra's own module URL points into Lyra's dist tree, where no\nworker exists), so a bundled application supplies the URL here. Document-relative values resolve\nagainst the document base; only `http:`, `https:`, `blob:` and `file:` URLs are accepted and\nanything else is ignored.\n\n`GlobalWorkerOptions` is PDF.js's process-wide singleton, so this is applied only while that\nsingleton is still unset: a worker the application configured itself is never overwritten, and\nwhen two viewers carry different values only the first one to load PDF.js takes effect for the\nwhole page. Assigning it after PDF.js has already loaded is not silently dropped -- it is\nre-applied on the next load -- but it still cannot displace a worker that is already configured.\nThe equivalent escape hatch, and the right choice for an application that wants one explicit\nworker for every viewer, is to import `pdfjs-dist` and set `GlobalWorkerOptions.workerSrc`\ndirectly during startup.\n\nType: `string` \nDefault: `''`"
17861
+ }
17862
+ },
17587
17863
  {
17588
17864
  "name": "zoom",
17589
17865
  "description": {
@@ -17849,9 +18125,16 @@
17849
18125
  "name": "lr-pie-chart",
17850
18126
  "description": {
17851
18127
  "kind": "markdown",
17852
- "value": "`<lr-pie-chart>` — `<lr-chart>` with a `\"pie\"` default and the mirrored writable type. Single-series:\none `LyraChartSeries` with `data: number[]` and `color: string[]` as the slice palette.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
18128
+ "value": "`<lr-pie-chart>` — `<lr-chart>` with a `\"pie\"` default and the mirrored writable type. Single-series:\none `LyraChartSeries` with `data: number[]` and `color: string[]` as the slice palette.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-table-toggle` | The disclosure button rendered by `dataTableToggle`. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-data-table-toggle-active-bg` — Pressed background of the `dataTableToggle` disclosure button; defaults to a mix of the hover background with the shared active mix partner.\n- `--lr-chart-data-table-toggle-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the `dataTableToggle` disclosure button.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
17853
18129
  },
17854
18130
  "attributes": [
18131
+ {
18132
+ "name": "annotations",
18133
+ "description": {
18134
+ "kind": "markdown",
18135
+ "value": "Declarative reference lines and shaded bands — a threshold, an event year, a regime change, a\nhighlighted period. Each entry marks either a single `value` or a `from`/`to` range on `axis`\n(default `'y'`), with an optional `label` and semantic `tone`.\n\nNeeds the optional `chartjs-plugin-annotation` peer, loaded on first actual demand so a page\nwith no annotated charts never downloads it. The plugin is registered globally, like\n`chartjs-plugin-zoom` and unlike `chartjs-plugin-datalabels`: it draws nothing unless a chart\nsupplies annotation options, so the registration is unobservable to charts that set none, and\nregistration is also what installs the plugin's own element defaults. Without the peer\ninstalled the chart still renders and a single console warning explains the no-op — the same\nfail-closed contract `data-labels` uses.\n\nEntries are included in the generated accessible description, mirroring `lr-heatmap`.\n\nType: `readonly LyraChartAnnotation[]` \nDefault: `[]`"
18136
+ }
18137
+ },
17855
18138
  {
17856
18139
  "name": "area",
17857
18140
  "description": {
@@ -17873,6 +18156,13 @@
17873
18156
  "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
17874
18157
  }
17875
18158
  },
18159
+ {
18160
+ "name": "data-table-toggle",
18161
+ "description": {
18162
+ "kind": "markdown",
18163
+ "value": "Render a disclosure button above the accessible data table so a sighted reader can reveal the\nnumbers behind the chart on demand. `showDataTable` alone is all-or-nothing -- the table is\neither permanently screen-reader-only or permanently visible -- which left a consumer wrapping\na duplicated table in their own `<details>`.\n\nWith this set, `showDataTable` becomes the disclosure's *initial* state rather than its whole\nbehavior. The table stays in the DOM in both states, so assistive technology never loses it.\n\nType: `boolean` \nDefault: `false`"
18164
+ }
18165
+ },
17876
18166
  {
17877
18167
  "name": "description",
17878
18168
  "description": {
@@ -17994,6 +18284,21 @@
17994
18284
  "value": "Chart.js plugins attached to this chart instance.\n\nType: `LyraChartPlugin[]` \nDefault: `[]`"
17995
18285
  }
17996
18286
  },
18287
+ {
18288
+ "name": "scale-type",
18289
+ "description": {
18290
+ "kind": "markdown",
18291
+ "value": "Scale type for the **value** axis (the categorical axis is unaffected). `'logarithmic'` plots\na dataset spanning several orders of magnitude honestly, where a linear axis collapses\neverything below the maximum into the baseline. Inherited by `lr-line-chart`,\n`lr-scatter-chart` and `lr-bar-chart`.\n\nA logarithmic axis cannot represent zero or negative values (`log(0)` is `-Infinity`), so\n`beginAtZero` is not forwarded in that mode -- Chart.js would otherwise be handed a bound it\ncannot place. Non-positive data points are dropped by Chart.js's own log scale.\n\nType: `LyraChartScaleType` \nDefault: `'linear'`"
18292
+ },
18293
+ "values": [
18294
+ {
18295
+ "name": "linear"
18296
+ },
18297
+ {
18298
+ "name": "logarithmic"
18299
+ }
18300
+ ]
18301
+ },
17997
18302
  {
17998
18303
  "name": "show-data-table",
17999
18304
  "description": {
@@ -18082,9 +18387,16 @@
18082
18387
  "name": "lr-polar-area-chart",
18083
18388
  "description": {
18084
18389
  "kind": "markdown",
18085
- "value": "`<lr-polar-area-chart>` — `<lr-chart>` with a `\"polarArea\"` default and the mirrored writable type.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
18390
+ "value": "`<lr-polar-area-chart>` — `<lr-chart>` with a `\"polarArea\"` default and the mirrored writable type.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-table-toggle` | The disclosure button rendered by `dataTableToggle`. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-data-table-toggle-active-bg` — Pressed background of the `dataTableToggle` disclosure button; defaults to a mix of the hover background with the shared active mix partner.\n- `--lr-chart-data-table-toggle-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the `dataTableToggle` disclosure button.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
18086
18391
  },
18087
18392
  "attributes": [
18393
+ {
18394
+ "name": "annotations",
18395
+ "description": {
18396
+ "kind": "markdown",
18397
+ "value": "Declarative reference lines and shaded bands — a threshold, an event year, a regime change, a\nhighlighted period. Each entry marks either a single `value` or a `from`/`to` range on `axis`\n(default `'y'`), with an optional `label` and semantic `tone`.\n\nNeeds the optional `chartjs-plugin-annotation` peer, loaded on first actual demand so a page\nwith no annotated charts never downloads it. The plugin is registered globally, like\n`chartjs-plugin-zoom` and unlike `chartjs-plugin-datalabels`: it draws nothing unless a chart\nsupplies annotation options, so the registration is unobservable to charts that set none, and\nregistration is also what installs the plugin's own element defaults. Without the peer\ninstalled the chart still renders and a single console warning explains the no-op — the same\nfail-closed contract `data-labels` uses.\n\nEntries are included in the generated accessible description, mirroring `lr-heatmap`.\n\nType: `readonly LyraChartAnnotation[]` \nDefault: `[]`"
18398
+ }
18399
+ },
18088
18400
  {
18089
18401
  "name": "area",
18090
18402
  "description": {
@@ -18106,6 +18418,13 @@
18106
18418
  "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
18107
18419
  }
18108
18420
  },
18421
+ {
18422
+ "name": "data-table-toggle",
18423
+ "description": {
18424
+ "kind": "markdown",
18425
+ "value": "Render a disclosure button above the accessible data table so a sighted reader can reveal the\nnumbers behind the chart on demand. `showDataTable` alone is all-or-nothing -- the table is\neither permanently screen-reader-only or permanently visible -- which left a consumer wrapping\na duplicated table in their own `<details>`.\n\nWith this set, `showDataTable` becomes the disclosure's *initial* state rather than its whole\nbehavior. The table stays in the DOM in both states, so assistive technology never loses it.\n\nType: `boolean` \nDefault: `false`"
18426
+ }
18427
+ },
18109
18428
  {
18110
18429
  "name": "description",
18111
18430
  "description": {
@@ -18227,6 +18546,21 @@
18227
18546
  "value": "Chart.js plugins attached to this chart instance.\n\nType: `LyraChartPlugin[]` \nDefault: `[]`"
18228
18547
  }
18229
18548
  },
18549
+ {
18550
+ "name": "scale-type",
18551
+ "description": {
18552
+ "kind": "markdown",
18553
+ "value": "Scale type for the **value** axis (the categorical axis is unaffected). `'logarithmic'` plots\na dataset spanning several orders of magnitude honestly, where a linear axis collapses\neverything below the maximum into the baseline. Inherited by `lr-line-chart`,\n`lr-scatter-chart` and `lr-bar-chart`.\n\nA logarithmic axis cannot represent zero or negative values (`log(0)` is `-Infinity`), so\n`beginAtZero` is not forwarded in that mode -- Chart.js would otherwise be handed a bound it\ncannot place. Non-positive data points are dropped by Chart.js's own log scale.\n\nType: `LyraChartScaleType` \nDefault: `'linear'`"
18554
+ },
18555
+ "values": [
18556
+ {
18557
+ "name": "linear"
18558
+ },
18559
+ {
18560
+ "name": "logarithmic"
18561
+ }
18562
+ ]
18563
+ },
18230
18564
  {
18231
18565
  "name": "show-data-table",
18232
18566
  "description": {
@@ -18413,6 +18747,13 @@
18413
18747
  }
18414
18748
  ]
18415
18749
  },
18750
+ {
18751
+ "name": "disabled",
18752
+ "description": {
18753
+ "kind": "markdown",
18754
+ "value": "Prevents opening the popover -- pointer, keyboard, and programmatic `show()`/`open = true`\nare all refused while set. Becoming disabled also closes an already-open popover; initial\n`disabled` plus `open` markup/property state normalizes closed in either order. Mirrors\n`<lr-tooltip>`'s and `<lr-dropdown>`'s own `disabled`.\n\nType: `boolean` \nDefault: `false`"
18755
+ }
18756
+ },
18416
18757
  {
18417
18758
  "name": "distance",
18418
18759
  "description": {
@@ -18490,7 +18831,7 @@
18490
18831
  "name": "popup-role",
18491
18832
  "description": {
18492
18833
  "kind": "markdown",
18493
- "value": "Semantic role used by the popup.\n\nType: `LyraPopupRole`"
18834
+ "value": "Semantic role used by the popup. `dialog` (default) for a contextual surface, `menu` for an\naction menu, or `none` to render no role and no generated name so the slotted content owns\nits own semantics -- see `LyraPopupRole` for why a navigation disclosure needs that.\n\nType: `LyraPopupRole` \nDefault: `'dialog'`"
18494
18835
  },
18495
18836
  "values": [
18496
18837
  {
@@ -18498,6 +18839,9 @@
18498
18839
  },
18499
18840
  {
18500
18841
  "name": "menu"
18842
+ },
18843
+ {
18844
+ "name": "none"
18501
18845
  }
18502
18846
  ]
18503
18847
  },
@@ -18932,7 +19276,7 @@
18932
19276
  "name": "lr-progress-ring",
18933
19277
  "description": {
18934
19278
  "kind": "markdown",
18935
- "value": "`<lr-progress-ring>` — a circular determinate or indeterminate progress indicator. `variant`\nselects the indicator's semantic palette from the library's shared semantic grid (`neutral`\nthrough `danger`), defaulting to `brand`, matching sibling `<lr-progress-bar>`.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Optional center label whose visible accessible text names the progressbar unless an explicit accessible label overrides it; live mutations stay synchronized through forwarding slots. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | Compatibility name for the progress wrapper; use `progress-ring`. |\n| `indicator` | The SVG indicator. |\n| `label` | The center label. |\n| `progress-ring` | The progress wrapper. It is the same node as `base`. |\n| `track` | The SVG track. |\n\n---\n\n**CSS Custom Properties**\n\n- `--indicator-color` (default: `var(--lr-progress-ring-indicator-color)`) — Upstream-compatible indicator color.\n- `--indicator-transition-duration` (default: `var(--lr-progress-ring-indicator-transition-duration)`) — Upstream-compatible transition duration.\n- `--indicator-width` (default: `var(--lr-progress-ring-indicator-width)`) — Upstream-compatible indicator width.\n- `--lr-progress-duration` (default: `var(--lr-transition-ambient)`) — Indeterminate rotation timing.\n- `--lr-progress-ring-indicator-color` (default: `var(--lr-progress-ring-indicator-variant-color)`) — Indicator stroke color, overriding the variant palette below.\n- `--lr-progress-ring-indicator-transition-duration` (default: `var(--lr-transition-base)`) — Determinate indicator transition.\n- `--lr-progress-ring-indicator-variant-color` (default: `var(--lr-color-fill-loud,var(--lr-color-brand))`) — Palette slot: the active `variant`'s loud fill from the shared semantic grid. Feeds `--lr-progress-ring-indicator-color` above unless that (or the upstream `--indicator-color` alias) is itself set.\n- `--lr-progress-ring-indicator-width` (default: `var(--lr-progress-ring-track-width)`) — Indicator stroke width.\n- `--lr-progress-ring-size` (default: `var(--lr-size-2-5rem)`) — Outer diameter of the ring.\n- `--lr-progress-ring-track-color` (default: `var(--lr-color-brand-quiet)`) — Track stroke color.\n- `--lr-progress-ring-track-width` (default: `var(--lr-size-4px)`) — Track stroke width.\n- `--size` (default: `var(--lr-progress-ring-size)`) — Upstream-compatible outer diameter.\n- `--track-color` (default: `var(--lr-progress-ring-track-color)`) — Upstream-compatible track color.\n- `--track-width` (default: `var(--lr-progress-ring-track-width)`) — Upstream-compatible track width."
19279
+ "value": "`<lr-progress-ring>` — a circular determinate or indeterminate progress indicator. `variant`\nselects the indicator's semantic palette from the library's shared semantic grid (`neutral`\nthrough `danger`), defaulting to `brand`, matching sibling `<lr-progress-bar>`.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Optional center label whose visible accessible text names the progressbar unless an explicit accessible label overrides it; live mutations stay synchronized through forwarding slots. When nothing is slotted, the fallback content is the formatted percentage while determinate and `show-value` is set (`''` otherwise, and always `''` while `indeterminate`) -- the same value contract as `<lr-progress-bar>`'s `showValue`. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | Compatibility name for the progress wrapper; use `progress-ring`. |\n| `indicator` | The SVG indicator. |\n| `label` | The center label. |\n| `progress-ring` | The progress wrapper. It is the same node as `base`. |\n| `track` | The SVG track. |\n\n---\n\n**CSS Custom Properties**\n\n- `--indicator-color` (default: `var(--lr-progress-ring-indicator-color)`) — Upstream-compatible indicator color.\n- `--indicator-transition-duration` (default: `var(--lr-progress-ring-indicator-transition-duration)`) — Upstream-compatible transition duration.\n- `--indicator-width` (default: `var(--lr-progress-ring-indicator-width)`) — Upstream-compatible indicator width.\n- `--lr-progress-duration` (default: `var(--lr-transition-ambient)`) — Indeterminate rotation timing.\n- `--lr-progress-ring-indicator-color` (default: `var(--lr-progress-ring-indicator-variant-color)`) — Indicator stroke color, overriding the variant palette below.\n- `--lr-progress-ring-indicator-transition-duration` (default: `var(--lr-transition-base)`) — Determinate indicator transition.\n- `--lr-progress-ring-indicator-variant-color` (default: `var(--lr-color-fill-loud,var(--lr-color-brand))`) — Palette slot: the active `variant`'s loud fill from the shared semantic grid. Feeds `--lr-progress-ring-indicator-color` above unless that (or the upstream `--indicator-color` alias) is itself set.\n- `--lr-progress-ring-indicator-width` (default: `var(--lr-progress-ring-track-width)`) — Indicator stroke width.\n- `--lr-progress-ring-size` (default: `var(--lr-size-2-5rem)`) — Outer diameter of the ring.\n- `--lr-progress-ring-track-color` (default: `var(--lr-color-brand-quiet)`) — Track stroke color.\n- `--lr-progress-ring-track-width` (default: `var(--lr-size-4px)`) — Track stroke width.\n- `--size` (default: `var(--lr-progress-ring-size)`) — Upstream-compatible outer diameter.\n- `--track-color` (default: `var(--lr-progress-ring-track-color)`) — Upstream-compatible track color.\n- `--track-width` (default: `var(--lr-progress-ring-track-width)`) — Upstream-compatible track width."
18936
19280
  },
18937
19281
  "attributes": [
18938
19282
  {
@@ -18970,6 +19314,13 @@
18970
19314
  "value": "Type: `number` \nDefault: `100`"
18971
19315
  }
18972
19316
  },
19317
+ {
19318
+ "name": "show-value",
19319
+ "description": {
19320
+ "kind": "markdown",
19321
+ "value": "Shows the formatted percentage as the default slot's fallback content while determinate.\n`false` by default, matching sibling `<lr-progress-bar>`'s `showValue`/`show-value` exactly --\na determinate ring with no `show-value` renders no percentage text. Only the fallback is\ngated: a consumer who slots their own content always sees that content instead, with or\nwithout `show-value` (native `<slot>` projection semantics, unaffected by this property).\n\nType: `boolean` \nDefault: `false`"
19322
+ }
19323
+ },
18973
19324
  {
18974
19325
  "name": "value",
18975
19326
  "description": {
@@ -19422,7 +19773,7 @@
19422
19773
  "name": "lr-qr-code",
19423
19774
  "description": {
19424
19775
  "kind": "markdown",
19425
- "value": "`<lr-qr-code>` -- encodes `value` as a QR symbol with the optional\n`qrcode` peer dependency (Reed-Solomon error correction and every other\nalgorithmic step of the QR spec is delegated to that library, never\nhand-rolled) and draws the resulting module matrix across the full canvas,\none square (optionally rounded) cell per module. Like the mirrored WA/SL\ncomponents, it does not inject a quiet zone; add host CSS `padding` when a\nscanner or physical output needs one.\n\nThe stable host is the single semantic owner while a value is loading or\nrendered. Its accessible name resolves, in order, from a host `aria-label`\nattribute, `label`, then `value`; the canvas is presentational. The same\nhost publishes `aria-busy=\"true\"` and `\"false\"`. An empty `value` renders\n`[part=\"empty\"]` without image semantics.\n\nStandard host `color` and `background-color` control foreground and\nbackground paint. `--lr-qr-code-fill` and `--lr-qr-code-background` are\noptional aliases for those host styles; otherwise inherited color and the\nhost's transparent background are preserved. The permanent upstream parity\nproperties `fill` and `background` take precedence over those CSS inputs.\nShoelace migration inserts its historical black/white defaults.\n\nThe mirrored renderers use a fixed two backing pixels per CSS pixel rather\nthan the live device pixel ratio. Lyra preserves that geometry for ordinary\nsizes and uniformly reduces only extreme allocations to a bounded pixel\nbudget; CSS size and aspect ratio do not change.\n\nDeliberately out of scope for this component, not oversights: a finder-pattern-corner accent\ncolor; auto-shrinking to fit a\nnarrow container (this component's `size` is a direct request for a\nspecific rendered pixel density, like `<img width height>` -- the consumer\npicks a size that fits their layout, this component never second-guesses\nit, though it still renders correctly at its default size inside a narrow\nallocation); form association (`value` is caller-supplied display data the\nuser doesn't edit through this component -- no `FormAssociated` mixin, no\nlabel/hint/error chrome, no form internals); and playback behavior. Keyboard\nfocus is intentionally absent -- the canvas is a static image\nstanding in for `value`, structurally like `<img>`, not an interactive\ngrid.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n- Deprecated part `base`: Deprecated since `8.2.3`. Use part `::part(qr-code)`. Removal is not permitted before `10.0.0`. The qr-code part names the rendered code wrapper explicitly; base remains on that same node during the compatibility window.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | Deprecated in 8.2.3; compatibility name for the outer wrapper; use `qr-code`. |\n| `canvas` | The stable QR canvas. It remains hidden but reachable through `.canvas` while the component is empty, loading, or in an error state. |\n| `empty` | Shown when `value` is empty. |\n| `error` | Visible error shown when the peer is missing, or `value` failed to encode; the transition is announced through the shared light-DOM assertive region. |\n| `loading` | Shown while the optional `qrcode` peer is loading, the first time it's needed. |\n| `qr-code` | The outer wrapper, sized to `size`×`size` CSS px in every state. It is the same node as `base`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-qr-code-background` — Optional alias for host `background-color`, used by the canvas background.\n- `--lr-qr-code-fill` — Optional alias for host `color`, used by foreground modules."
19776
+ "value": "`<lr-qr-code>` -- encodes `value` as a QR symbol with the optional\n`qrcode` peer dependency (Reed-Solomon error correction and every other\nalgorithmic step of the QR spec is delegated to that library, never\nhand-rolled) and draws the resulting module matrix across the full canvas,\none square (optionally rounded) cell per module. Like the mirrored WA/SL\ncomponents, it does not inject a quiet zone; add host CSS `padding` when a\nscanner or physical output needs one.\n\nThe stable host is the single semantic owner while a value is loading or\nrendered. Its accessible name resolves, in order, from a host `aria-label`\nattribute, `label`, then `value`; the canvas is presentational. The same\nhost publishes `aria-busy=\"true\"` and `\"false\"`. An empty `value` renders\n`[part=\"empty\"]` without image semantics.\n\nStandard host `color` and `background-color` control foreground and\nbackground paint. `--lr-qr-code-fill` and `--lr-qr-code-background` are\noptional aliases for those host styles; otherwise inherited color and the\nhost's transparent background are preserved. The permanent upstream parity\nproperties `fill` and `background` take precedence over those CSS inputs.\nShoelace migration inserts its historical black/white defaults.\n\nThe mirrored renderers use a fixed two backing pixels per CSS pixel rather\nthan the live device pixel ratio. Lyra preserves that geometry for ordinary\nsizes and uniformly reduces only extreme allocations to a bounded pixel\nbudget; CSS size and aspect ratio do not change.\n\nDeliberately out of scope for this component, not oversights: a finder-pattern-corner accent\ncolor; auto-shrinking to fit a\nnarrow container (this component's `size` is a direct request for a\nspecific rendered pixel density, like `<img width height>` -- the consumer\npicks a size that fits their layout, this component never second-guesses\nit, though it still renders correctly at its default size inside a narrow\nallocation); form association (`value` is caller-supplied display data the\nuser doesn't edit through this component -- no `FormAssociated` mixin, no\nlabel/hint/error chrome, no form internals); and playback behavior. Keyboard\nfocus is intentionally absent -- the canvas is a static image\nstanding in for `value`, structurally like `<img>`, not an interactive\ngrid.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n- Deprecated part `base`: Deprecated since `8.2.3`. Use part `::part(qr-code)`. Removal is not permitted before `10.0.0`. The qr-code part names the rendered code wrapper explicitly; base remains on that same node during the compatibility window. That version is a policy floor, not a plan: `wa-qr-code` still publishes `base` as a deprecated part and `sl-qr-code` still publishes it as its only, undeprecated part, so this alias stays for as long as either upstream ships it.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | Deprecated in 8.2.3; compatibility name for the outer wrapper; use `qr-code`. |\n| `canvas` | The stable QR canvas. It remains hidden but reachable through `.canvas` while the component is empty, loading, or in an error state. |\n| `empty` | Shown when `value` is empty. |\n| `error` | Visible error shown when the peer is missing, or `value` failed to encode; the transition is announced through the shared light-DOM assertive region. |\n| `loading` | Shown while the optional `qrcode` peer is loading, the first time it's needed. |\n| `qr-code` | The outer wrapper, sized to `size`×`size` CSS px in every state. It is the same node as `base`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-qr-code-background` — Optional alias for host `background-color`, used by the canvas background.\n- `--lr-qr-code-fill` — Optional alias for host `color`, used by foreground modules."
19426
19777
  },
19427
19778
  "attributes": [
19428
19779
  {
@@ -19529,9 +19880,16 @@
19529
19880
  "name": "lr-radar-chart",
19530
19881
  "description": {
19531
19882
  "kind": "markdown",
19532
- "value": "`<lr-radar-chart>` — `<lr-chart>` with a `\"radar\"` default and the mirrored writable type.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
19883
+ "value": "`<lr-radar-chart>` — `<lr-chart>` with a `\"radar\"` default and the mirrored writable type.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-table-toggle` | The disclosure button rendered by `dataTableToggle`. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-data-table-toggle-active-bg` — Pressed background of the `dataTableToggle` disclosure button; defaults to a mix of the hover background with the shared active mix partner.\n- `--lr-chart-data-table-toggle-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the `dataTableToggle` disclosure button.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
19533
19884
  },
19534
19885
  "attributes": [
19886
+ {
19887
+ "name": "annotations",
19888
+ "description": {
19889
+ "kind": "markdown",
19890
+ "value": "Declarative reference lines and shaded bands — a threshold, an event year, a regime change, a\nhighlighted period. Each entry marks either a single `value` or a `from`/`to` range on `axis`\n(default `'y'`), with an optional `label` and semantic `tone`.\n\nNeeds the optional `chartjs-plugin-annotation` peer, loaded on first actual demand so a page\nwith no annotated charts never downloads it. The plugin is registered globally, like\n`chartjs-plugin-zoom` and unlike `chartjs-plugin-datalabels`: it draws nothing unless a chart\nsupplies annotation options, so the registration is unobservable to charts that set none, and\nregistration is also what installs the plugin's own element defaults. Without the peer\ninstalled the chart still renders and a single console warning explains the no-op — the same\nfail-closed contract `data-labels` uses.\n\nEntries are included in the generated accessible description, mirroring `lr-heatmap`.\n\nType: `readonly LyraChartAnnotation[]` \nDefault: `[]`"
19891
+ }
19892
+ },
19535
19893
  {
19536
19894
  "name": "area",
19537
19895
  "description": {
@@ -19553,6 +19911,13 @@
19553
19911
  "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
19554
19912
  }
19555
19913
  },
19914
+ {
19915
+ "name": "data-table-toggle",
19916
+ "description": {
19917
+ "kind": "markdown",
19918
+ "value": "Render a disclosure button above the accessible data table so a sighted reader can reveal the\nnumbers behind the chart on demand. `showDataTable` alone is all-or-nothing -- the table is\neither permanently screen-reader-only or permanently visible -- which left a consumer wrapping\na duplicated table in their own `<details>`.\n\nWith this set, `showDataTable` becomes the disclosure's *initial* state rather than its whole\nbehavior. The table stays in the DOM in both states, so assistive technology never loses it.\n\nType: `boolean` \nDefault: `false`"
19919
+ }
19920
+ },
19556
19921
  {
19557
19922
  "name": "description",
19558
19923
  "description": {
@@ -19674,6 +20039,21 @@
19674
20039
  "value": "Chart.js plugins attached to this chart instance.\n\nType: `LyraChartPlugin[]` \nDefault: `[]`"
19675
20040
  }
19676
20041
  },
20042
+ {
20043
+ "name": "scale-type",
20044
+ "description": {
20045
+ "kind": "markdown",
20046
+ "value": "Scale type for the **value** axis (the categorical axis is unaffected). `'logarithmic'` plots\na dataset spanning several orders of magnitude honestly, where a linear axis collapses\neverything below the maximum into the baseline. Inherited by `lr-line-chart`,\n`lr-scatter-chart` and `lr-bar-chart`.\n\nA logarithmic axis cannot represent zero or negative values (`log(0)` is `-Infinity`), so\n`beginAtZero` is not forwarded in that mode -- Chart.js would otherwise be handed a bound it\ncannot place. Non-positive data points are dropped by Chart.js's own log scale.\n\nType: `LyraChartScaleType` \nDefault: `'linear'`"
20047
+ },
20048
+ "values": [
20049
+ {
20050
+ "name": "linear"
20051
+ },
20052
+ {
20053
+ "name": "logarithmic"
20054
+ }
20055
+ ]
20056
+ },
19677
20057
  {
19678
20058
  "name": "show-data-table",
19679
20059
  "description": {
@@ -20289,7 +20669,7 @@
20289
20669
  "name": "lr-random-content",
20290
20670
  "description": {
20291
20671
  "kind": "markdown",
20292
- "value": "`<lr-random-content>` — displays a randomly (or sequentially) chosen\nsubset of its slotted children and hides the rest, for A/B copy testing,\ntestimonial/quote rotation, or varying marketing copy on each render or\ninterval without any custom JS beyond slotting the candidates.\n\nNot a form-associated control: it is a content-rotation primitive over\ncaller-supplied children, so the label/hint/error frame doesn't apply.\nIts only built-in action is the autoplay pause/resume control.\n\nThe host renders `display: block` by default, like the rest of this\nfamily. A consumer needing an inline text-fragment swap inside a sentence\ncan override `lr-random-content { display: inline; }` from outside —\nthat isn't baked in here, since `display: contents` on the host risks\naccessibility-tree inconsistencies across engines.\n\nSelection is driven by `autoplay`/`autoplayInterval` and the public\n`randomize()` method. When autoplay is enabled, a built-in localized\npause/resume action exposes the reflected `paused` state. Rotation also\nsuspends while focus is anywhere inside the component and never hides a\nsubtree that currently owns focus.\nSelection changes after mount are announced through a pre-mounted light-DOM live region,\nexcept for timer-driven autoplay ticks. In particular, an explicit `randomize()` call is\nannounced even while autoplay is enabled. Announcement text omits subtree-pruned content; a\nvisibility-hidden wrapper omits its own text but can contain a visible override descendant.\nA nested forwarding slot contributes flattened assigned text rather than fallback content;\nlater assigned-content and assignment changes are announced when they change the exposed\nselection, while initial distribution stays silent.\nChanges while the host or a composed ancestor is accessibility-hidden, as well as initial\nconnection and reconnection, stay silent.\nReactive selection changes written while detached and rendered during reconnection are part of\nthat silent baseline; a later explicit `randomize()` is still announced.\n\n`fade-left`/`fade-right` are physical-direction transforms (matching the\nupstream naming this component mirrors), not \"previous/next\" navigational\nsemantics like a carousel chevron, so they are deliberately **not**\nmirrored under `:host(:dir(rtl))`.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The pool of candidate children. Direct element children are eligible; a direct forwarding slot is flattened to its projected element candidates. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The wrapping element around the default slot. |\n| `pause-button` | The autoplay pause/resume action. |\n\n---\n\n**CSS Custom Properties**\n\n- `--animation-duration` (default: `300ms`) — Web Awesome duration alias.\n- `--animation-easing` (default: `ease`) — Web Awesome easing alias.\n- `--animation-translate` (default: `var(--lr-size-0-5em)`) — Web Awesome travel-distance alias.\n- `--lr-animation-duration` (default: `300ms`) — Mapped duration of the entrance animation.\n- `--lr-animation-easing` (default: `ease`) — Mapped easing function for the entrance animation.\n- `--lr-animation-translate` (default: `var(--lr-size-0-5em)`) — Mapped travel distance for directional animations.\n- `--lr-random-content-animation-duration` (default: `300ms`) — Duration of the entrance animation.\n- `--lr-random-content-animation-easing` (default: `ease`) — Easing function for the entrance animation.\n- `--lr-random-content-animation-translate` (default: `var(--lr-size-0-5em)`) — Translation distance for directional animations.\n- `--lr-random-content-item-alignment` (default: `flex-start`) — Cross-axis alignment of selected items.\n- `--lr-random-content-item-gap` (default: `var(--lr-space-s)`) — Gap between simultaneously selected items."
20672
+ "value": "`<lr-random-content>` — displays a randomly (or sequentially) chosen\nsubset of its slotted children and hides the rest, for A/B copy testing,\ntestimonial/quote rotation, or varying marketing copy on each render or\ninterval without any custom JS beyond slotting the candidates.\n\nNot a form-associated control: it is a content-rotation primitive over\ncaller-supplied children, so the label/hint/error frame doesn't apply.\nIts only built-in action is the autoplay pause/resume control.\n\nThe host renders `display: block` by default, like the rest of this\nfamily. A consumer needing an inline text-fragment swap inside a sentence\ncan override `lr-random-content { display: inline; }` from outside —\nthat isn't baked in here, since `display: contents` on the host risks\naccessibility-tree inconsistencies across engines.\n\nSelection is driven by `autoplay`/`autoplayInterval` and the public\n`randomize()` method. When autoplay is enabled, a built-in localized\npause/resume action exposes the reflected `paused` state. Rotation also\nsuspends while focus is anywhere inside the component and never hides a\nsubtree that currently owns focus.\nSelection changes after mount are announced through a pre-mounted light-DOM live region,\nexcept for timer-driven autoplay ticks. In particular, an explicit `randomize()` call is\nannounced even while autoplay is enabled. Announcement text omits subtree-pruned content; a\nvisibility-hidden wrapper omits its own text but can contain a visible override descendant.\nA nested forwarding slot contributes flattened assigned text rather than fallback content;\nlater assigned-content and assignment changes are announced when they change the exposed\nselection, while initial distribution stays silent.\nChanges while the host or a composed ancestor is accessibility-hidden, as well as initial\nconnection and reconnection, stay silent.\nReactive selection changes written while detached and rendered during reconnection are part of\nthat silent baseline; a later explicit `randomize()` is still announced.\n\n**Before script runs, the first candidate is the one that shows.** Selection happens in\n`firstUpdated()`, which a server renderer never executes, and it works by setting\n`hidden`/`aria-hidden` on light-DOM siblings — something Lit's hydration diffing never inspects,\nso no amount of first-render seeding can make the server agree. The shadow stylesheet therefore\nhides every candidate after the first until a selection has actually been applied: a\nserver-rendered page (and a page whose script never runs at all) paints one candidate rather\nthan the entire pool, and hydration swaps that one for the chosen one instead of collapsing N\ndown to one. Randomness itself is genuinely unavailable server-side — there is no seed to share\n— so authors who need a *specific* pre-hydration candidate order the pool accordingly.\n\n`fade-left`/`fade-right` are physical-direction transforms (matching the\nupstream naming this component mirrors), not \"previous/next\" navigational\nsemantics like a carousel chevron, so they are deliberately **not**\nmirrored under `:host(:dir(rtl))`.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The pool of candidate children. Direct element children are eligible; a direct forwarding slot is flattened to its projected element candidates. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The wrapping element around the default slot. |\n| `pause-button` | The autoplay pause/resume action. |\n\n---\n\n**CSS Custom Properties**\n\n- `--animation-duration` (default: `300ms`) — Web Awesome duration alias.\n- `--animation-easing` (default: `ease`) — Web Awesome easing alias.\n- `--animation-translate` (default: `var(--lr-size-0-5em)`) — Web Awesome travel-distance alias.\n- `--lr-animation-duration` (default: `300ms`) — Mapped duration of the entrance animation.\n- `--lr-animation-easing` (default: `ease`) — Mapped easing function for the entrance animation.\n- `--lr-animation-translate` (default: `var(--lr-size-0-5em)`) — Mapped travel distance for directional animations.\n- `--lr-random-content-animation-duration` (default: `300ms`) — Duration of the entrance animation.\n- `--lr-random-content-animation-easing` (default: `ease`) — Easing function for the entrance animation.\n- `--lr-random-content-animation-translate` (default: `var(--lr-size-0-5em)`) — Translation distance for directional animations.\n- `--lr-random-content-item-alignment` (default: `flex-start`) — Cross-axis alignment of selected items.\n- `--lr-random-content-item-gap` (default: `var(--lr-space-s)`) — Gap between simultaneously selected items."
20293
20673
  },
20294
20674
  "attributes": [
20295
20675
  {
@@ -21339,9 +21719,16 @@
21339
21719
  "name": "lr-scatter-chart",
21340
21720
  "description": {
21341
21721
  "kind": "markdown",
21342
- "value": "`<lr-scatter-chart>` — `<lr-chart>` with a `\"scatter\"` default and the mirrored writable type. Feed\npoints via `LyraChartSeries.points`.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
21722
+ "value": "`<lr-scatter-chart>` — `<lr-chart>` with a `\"scatter\"` default and the mirrored writable type. Feed\npoints via `LyraChartSeries.points`.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | An optional `<script type=\"application/json\">` containing a Chart.js configuration. |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. Use this escape hatch for a complete paginated or virtualized alternative when the generated 1,000-record sample is insufficient. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `data-table-toggle` | The disclosure button rendered by `dataTableToggle`. |\n| `data-truncation` | Explanation shown when the generated accessible alternative samples a data set larger than its 1,000-record ceiling. |\n| `description` | The accessible chart summary. |\n| `error` | Static visible error shown instead of `canvas` when the optional `chart.js` peer dependency is not installed; its transition is announced through a shared light-DOM alert. |\n| `feature-warning` | Static nonfatal warning when a requested optional feature peer is unavailable while the core chart remains usable. |\n| `legend` | The wrapping DOM legend, rendered unless `withoutLegend` is set. |\n| `legend-item` | A keyboard-operable series visibility toggle. |\n| `legend-item-hidden` | Added to a `legend-item` while its dataset is hidden. |\n| `legend-swatch` | The resolved series-color swatch in a legend item. |\n| `notices` | Wrapper for nonfatal feature warnings and generated-data truncation notices. |\n| `plot` | The fixed-height canvas/overlay region. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--border-color-1` (default: `var(--lr-color-chart-1)`) — First dataset border color.\n- `--border-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset border color.\n- `--border-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset border color.\n- `--border-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset border color.\n- `--border-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset border color.\n- `--border-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset border color.\n- `--border-radius` (default: `var(--lr-radius)`) — Dataset element corner radius.\n- `--border-width` (default: `var(--lr-border-width-thin)`) — Dataset element border width.\n- `--fill-color-1` (default: `var(--lr-color-chart-1)`) — First dataset fill color.\n- `--fill-color-2` (default: `var(--lr-color-chart-2)`) — Second dataset fill color.\n- `--fill-color-3` (default: `var(--lr-color-chart-3)`) — Third dataset fill color.\n- `--fill-color-4` (default: `var(--lr-color-chart-4)`) — Fourth dataset fill color.\n- `--fill-color-5` (default: `var(--lr-color-chart-5)`) — Fifth dataset fill color.\n- `--fill-color-6` (default: `var(--lr-color-chart-6)`) — Sixth dataset fill color.\n- `--grid-border-width` (default: `var(--lr-border-width-thin)`) — Axis and grid line width.\n- `--grid-color` (default: `var(--lr-chart-grid-color)`) — Grid line color.\n- `--line-border-width` (default: `var(--lr-border-width-medium)`) — Line dataset stroke width.\n- `--lr-chart-canvas-hover-outline-width` (default: `var(--lr-border-width-thin)`) — Width of the `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`, above).\n- `--lr-chart-data-table-button-active-bg` — Pressed background of an actionable generated- table value; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-data-table-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of an actionable generated-table value.\n- `--lr-chart-data-table-toggle-active-bg` — Pressed background of the `dataTableToggle` disclosure button; defaults to a mix of the hover background with the shared active mix partner.\n- `--lr-chart-data-table-toggle-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the `dataTableToggle` disclosure button.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The plot region's `block-size` and the host's minimum block size. A visible data table or wrapping DOM legend grows the host in normal flow instead of overlapping following content. `height` supplies a private fallback; this public token always wins when a consumer sets it.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-item-active-bg` — Pressed background of a legend visibility button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-legend-item-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of a legend visibility button.\n- `--lr-chart-legend-side-max` (default: `var(--lr-size-15rem)`) — Maximum inline size reserved for a side-positioned DOM legend; the track is also capped at one third of the chart allocation.\n- `--lr-chart-pattern-step` (default: `var(--lr-space-2xs)`) — Tile size of the texture painted on `[part='legend-swatch']` while `forced-colors: active` matches, where every series collapses to one system color and the stripe/crosshatch pattern becomes the only channel keeping series apart. Declared on the swatch part rather than the host; the stripe width within a tile stays `--lr-border-width-thin`, so a larger step spaces the stripes further apart.\n- `--lr-chart-reset-zoom-button-active-bg` — Pressed background of the reset-zoom button; defaults to the standard active mix of `--lr-color-brand-quiet`.\n- `--lr-chart-reset-zoom-button-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Hover background of the reset-zoom button.\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw.\n- `--point-radius` (default: `var(--lr-space-2xs)`) — Line/scatter point radius."
21343
21723
  },
21344
21724
  "attributes": [
21725
+ {
21726
+ "name": "annotations",
21727
+ "description": {
21728
+ "kind": "markdown",
21729
+ "value": "Declarative reference lines and shaded bands — a threshold, an event year, a regime change, a\nhighlighted period. Each entry marks either a single `value` or a `from`/`to` range on `axis`\n(default `'y'`), with an optional `label` and semantic `tone`.\n\nNeeds the optional `chartjs-plugin-annotation` peer, loaded on first actual demand so a page\nwith no annotated charts never downloads it. The plugin is registered globally, like\n`chartjs-plugin-zoom` and unlike `chartjs-plugin-datalabels`: it draws nothing unless a chart\nsupplies annotation options, so the registration is unobservable to charts that set none, and\nregistration is also what installs the plugin's own element defaults. Without the peer\ninstalled the chart still renders and a single console warning explains the no-op — the same\nfail-closed contract `data-labels` uses.\n\nEntries are included in the generated accessible description, mirroring `lr-heatmap`.\n\nType: `readonly LyraChartAnnotation[]` \nDefault: `[]`"
21730
+ }
21731
+ },
21345
21732
  {
21346
21733
  "name": "area",
21347
21734
  "description": {
@@ -21363,6 +21750,13 @@
21363
21750
  "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
21364
21751
  }
21365
21752
  },
21753
+ {
21754
+ "name": "data-table-toggle",
21755
+ "description": {
21756
+ "kind": "markdown",
21757
+ "value": "Render a disclosure button above the accessible data table so a sighted reader can reveal the\nnumbers behind the chart on demand. `showDataTable` alone is all-or-nothing -- the table is\neither permanently screen-reader-only or permanently visible -- which left a consumer wrapping\na duplicated table in their own `<details>`.\n\nWith this set, `showDataTable` becomes the disclosure's *initial* state rather than its whole\nbehavior. The table stays in the DOM in both states, so assistive technology never loses it.\n\nType: `boolean` \nDefault: `false`"
21758
+ }
21759
+ },
21366
21760
  {
21367
21761
  "name": "description",
21368
21762
  "description": {
@@ -21484,6 +21878,21 @@
21484
21878
  "value": "Chart.js plugins attached to this chart instance.\n\nType: `LyraChartPlugin[]` \nDefault: `[]`"
21485
21879
  }
21486
21880
  },
21881
+ {
21882
+ "name": "scale-type",
21883
+ "description": {
21884
+ "kind": "markdown",
21885
+ "value": "Scale type for the **value** axis (the categorical axis is unaffected). `'logarithmic'` plots\na dataset spanning several orders of magnitude honestly, where a linear axis collapses\neverything below the maximum into the baseline. Inherited by `lr-line-chart`,\n`lr-scatter-chart` and `lr-bar-chart`.\n\nA logarithmic axis cannot represent zero or negative values (`log(0)` is `-Infinity`), so\n`beginAtZero` is not forwarded in that mode -- Chart.js would otherwise be handed a bound it\ncannot place. Non-positive data points are dropped by Chart.js's own log scale.\n\nType: `LyraChartScaleType` \nDefault: `'linear'`"
21886
+ },
21887
+ "values": [
21888
+ {
21889
+ "name": "linear"
21890
+ },
21891
+ {
21892
+ "name": "logarithmic"
21893
+ }
21894
+ ]
21895
+ },
21487
21896
  {
21488
21897
  "name": "show-data-table",
21489
21898
  "description": {
@@ -21704,7 +22113,7 @@
21704
22113
  "name": "lr-select",
21705
22114
  "description": {
21706
22115
  "kind": "markdown",
21707
- "value": "`<lr-select>` — a plain closed-list dropdown: a direct `<lr-*>`\ncounterpart to `<wa-select>`/`<wa-option>`. Trigger is a button (not a text\ninput) -- click/Enter/Space/ArrowDown opens it, there's no typing-to-filter.\nA printable keypress instead jumps (or, while closed, directly selects) the\nnext option whose label starts with what's been typed, like a native\n`<select>`'s type-ahead. Closed multiple mode skips selected option occurrences and keeps\nsearching for a later unselected match, including another occurrence of the same value.\n\nOptions are `<lr-option value>` children, the same element `<lr-combobox>`\nuses. Unlike `lr-combobox` there is no filter/source/empty-text/max-render\nsurface -- see `<lr-combobox>` for the filterable case.\n\n`multiple` turns the committed `value` into a `string[]` and renders one removable chip per\nselection. The chip row is a sibling overlaid on the real trigger button, never nested inside it,\nso every remove control is valid independently-focusable interactive content. The trigger keeps\none complete visually-hidden joined-value node for assistive technology while the painted\nbuilt-in chip labels are hidden from it, preventing both truncation and duplicate announcement.\nPicking a selected row again still toggles it off, Backspace/Delete on the trigger removes the\nlast selection, and `with-clear` removes all of them. `getTag` replaces a built-in chip entirely;\n`max-options-visible` caps how many render before the rest collapse behind a localized \"+N\" chip.\n\n`with-clear`'s button renders inside the trigger's inline-end padding,\noutboard of the expand icon, as a sibling of the trigger rather than a child\nof it -- for the same nesting reason.\nThe trigger and overlaid multi-select tag row accept constrained allocation: long selected\nlabels ellipsize and long chips wrap within a 320px LTR or RTL container instead of widening it.\n\nReuses `lr-combobox`'s popup positioning (`internal/positioner.js`) and\nclick-outside/Escape/Home/End/Arrow-key listbox navigation patterns,\nadapted to a trigger button that keeps DOM focus throughout (the listbox's\n\"active\" row is conveyed via `aria-activedescendant`, never actual focus),\nmatching the WAI-ARIA \"select-only combobox\" pattern.\n\nWhen `autoCommitSingleOption` is set and exactly one option is available\n(neither disabled nor inert, including through an inert ancestor), the popup never\nopens at all: a click, Enter, Space, ArrowDown, or ArrowUp on the trigger\ncommits that sole option directly, and the trigger renders as a plain\n`role=\"button\"` with no chevron/`aria-haspopup`/`aria-expanded` rather than\na combobox with a permanently inert popup state — opening a one-row list to\npick the only available choice is pure friction with no real decision\nbehind it. This never changes `value`/validity defaults on its own — an\nunselected single-option select stays unselected (and a `required` one\nstays invalid) exactly like the multi-option case, until the trigger is\nactually activated. `autoCommitSingleOption` defaults to `false`: by\ndefault a select always renders the normal combobox/listbox/chevron\ntrigger no matter how many options are enabled, matching pre-1.3.0\nbehavior — opt in explicitly if a narrowing-to-one option list should\nauto-commit.\n\nDeliberately does **not** perform implicit form submission on Enter (unlike `<lr-input>`/\n`<lr-combobox>`/`<lr-date-input>`, which route through `internal/submit-on-enter.ts`): the\ntrigger is a `role=\"combobox\"` button where Enter opens the listbox and, once open, commits the\nactive option — the ARIA combobox behavior its upstream counterpart follows. Submitting there\nwould shadow the only keyboard way to open the list.\n\nWhile the listbox is open, live option collection changes preserve the keyboard-active option\nby element identity across reorders. If that option is removed or becomes unavailable, the\nnearest available survivor takes over (preferring the following row on a tie); an empty\navailable collection clears `aria-activedescendant` instead of retaining an invalid index.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | `<lr-option>` elements. |\n| `clear-icon` | Replaces the built-in clear glyph. |\n| `end` | Decorative adornment after the selected-value label and before the expand icon. Its wrapper has the same enforced inert/`aria-hidden` contract as `start`. |\n| `error` | Custom error content. |\n| `expand-icon` | Replaces the built-in expand glyph. |\n| `help-text` | Shoelace alias for `hint`. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n| `prefix` | Shoelace alias for `start`. |\n| `start` | Decorative adornment at the inline-start of the trigger row, before the selected-value label. Its wrapper is always `aria-hidden` and inert because it lives inside the native trigger button; interactive content supplied here remains deliberately unavailable. |\n| `suffix` | Shoelace alias for `end`. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `clear-button` | The `with-clear` button. |\n| `combobox` | Compatibility name for the control wrapper. |\n| `display-input` | The selected-value/placeholder display inside the trigger. In populated multiple mode it is visually hidden but exposes every selected label to assistive technology. |\n| `end` | Inert, decorative wrapper around the `end` adornment slot; `hidden` while nothing is slotted. |\n| `error` | The error message. |\n| `expand-icon` | The dropdown indicator. |\n| `form-control` | The outer wrapper around label, trigger, listbox, error and hint. |\n| `form-control-help-text` | Shoelace compatibility name for the hint message. |\n| `form-control-input` | Compatibility name for the control wrapper. |\n| `form-control-label` | The `<label>` element. |\n| `group-label` | An option group's heading row, referenced by the enclosing `role=\"group\"`. |\n| `hint` | The hint message. |\n| `label` | Wrapper around the visible label content. |\n| `listbox` | The managed nonmodal options popover; its stack depth comes from `--lr-overlay-stack-index` with `--lr-layer-dropdown` as the standalone fallback. |\n| `option` | An option row. |\n| `option-dot` | An option row's leading status dot (when `dot-color` is set). |\n| `option-label` | An option row's label/sub wrapper. |\n| `option-sub` | An option row's secondary line (when `sub` is set). |\n| `prefix` | Shoelace compatibility part on the `prefix` slot. |\n| `start` | Inert, decorative wrapper around the `start` adornment slot; `hidden` while nothing is slotted. |\n| `suffix` | Shoelace compatibility part on the `suffix` slot. |\n| `tag` | One selected-value chip. The \"+N\" overflow chip carries both `tag` and `tag-overflow`, so `::part(tag)` styles every chip and `::part(tag-overflow)` only that one -- state after `::part()` never matches, so it is encoded in the part name instead. |\n| `tag__base` | Compatibility name on a built-in selected-value chip. |\n| `tag__content` | Compatibility name around a built-in chip's visible label. |\n| `tag__remove-button` | A built-in chip's remove button. |\n| `tag__remove-button__base` | Compatibility name on the same remove button. |\n| `tag-label` | A chip's ellipsis-safe label. |\n| `tag-overflow` | The \"+N\" chip standing in for the selections past `max-options-visible`. |\n| `tags` | The `multiple`-mode chip row, rendered as a sibling overlaid on the trigger. |\n| `trigger` | The trigger button (positioning anchor). |\n\n---\n\n**CSS Custom Properties**\n\n- `--hide-duration` (default: `var(--lr-transition-fast)`) — Listbox exit-transition timing.\n- `--lr-form-control-required-color` (default: `var(--lr-color-danger)`) — Required-marker color, themeable independently of error text and invalid borders.\n- `--lr-form-control-required-content` (default: `' *'`) — The required marker appended to `form-control-label` while `required` is set. Set it to `''` to suppress the marker, or to any other quoted string (`' (required)'`, a localized word) to replace it.\n- `--lr-form-control-required-offset` (default: `0`) — Inline space between the label text and the required marker.\n- `--lr-select-expand-size` — Decorative expand-icon box size, scaled by `size`. The one piece of this component's geometry the shared ladder does not own: it sizes a glyph, not the control row.\n- `--lr-select-font-size` (default: `var(--lr-form-control-font-size)`) — Trigger font size, from the active `size` tier.\n- `--lr-select-gap` — Gap between the trigger's start adornment, label, end adornment, and expand icon. Doesn't vary by `size`.\n- `--lr-select-open-border-color` (default: `var(--lr-color-brand)`) — Trigger border while the listbox is open.\n- `--lr-select-option-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the hovered/keyboard-active option row. Not declared on `:host`, so a value set on any ancestor is never shadowed -- retheme just this row state without hijacking the shared `--lr-color-brand-quiet` token used by every other component's own hover/active state.\n- `--lr-select-option-selected-bg` (default: `transparent`) — Background of the currently-selected option row. Not declared on `:host`; retheme just the selected row without hijacking `--lr-color-brand`.\n- `--lr-select-option-selected-border` (default: `var(--lr-color-brand)`) — Border color of the selected option row.\n- `--lr-select-option-selected-color` (default: `var(--lr-color-brand)`) — Text color of the selected option row.\n- `--lr-select-option-selected-font-weight` (default: `var(--lr-font-weight-semibold)`) — Font weight of the selected option row.\n- `--lr-select-radius` (default: `var(--lr-form-control-radius)`) — Trigger corner radius, from the active `size` tier of the shared form-control ladder (the two tightest tiers take a smaller radius).\n- `--lr-select-tag-font-size` — Chip text size. Doesn't vary by `size`.\n- `--lr-select-tag-padding` — Padding inside a `multiple`-mode chip. Doesn't vary by `size`.\n- `--lr-select-trigger-active-bg` (default: `color-mix(...)`) — Trigger background while pressed.\n- `--lr-select-trigger-height` — Exact trigger height. Unset by default, which leaves `--lr-select-trigger-min-height` as a floor only; set it to a length to both floor and cap the trigger (e.g. to pixel-match a sibling field in the same toolbar row). Because it is never declared by the component itself, it can be set from an ancestor or an outer-tree rule as well as inline on the element.\n- `--lr-select-trigger-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Trigger background while hovered. Accent appearance keeps its louder mixed fallback when this hook is unset.\n- `--lr-select-trigger-min-height` (default: `var(--lr-form-control-height)`) — Trigger block-size floor, from the active `size` tier of the shared ladder, and live at every tier including the default `m` -- so a select is exactly as tall as an `<lr-button>`/`<lr-input>` of that tier.\n- `--lr-select-trigger-padding` — Trigger padding shorthand. Defaults to the active `size` tier's `var(--lr-form-control-padding-block) var(--lr-form-control-padding-inline)` from the shared ladder.\n- `--show-duration` (default: `var(--lr-transition-fast)`) — Listbox enter-transition timing.\n- `--tag-max-size` (default: `var(--lr-size-12rem)`) — Maximum inline size of one selected-value tag."
22116
+ "value": "`<lr-select>` — a plain closed-list dropdown: a direct `<lr-*>`\ncounterpart to `<wa-select>`/`<wa-option>`. Trigger is a button (not a text\ninput) -- click/Enter/Space/ArrowDown opens it, there's no typing-to-filter.\nA printable keypress instead jumps (or, while closed, directly selects) the\nnext option whose label starts with what's been typed, like a native\n`<select>`'s type-ahead. Closed multiple mode skips selected option occurrences and keeps\nsearching for a later unselected match, including another occurrence of the same value.\n\nOptions are `<lr-option value>` children, the same element `<lr-combobox>`\nuses. Unlike `lr-combobox` there is no filter/source/empty-text/max-render\nsurface -- see `<lr-combobox>` for the filterable case.\n\n`multiple` turns the committed `value` into a `string[]` and renders one removable chip per\nselection. The chip row is a sibling overlaid on the real trigger button, never nested inside it,\nso every remove control is valid independently-focusable interactive content. The trigger keeps\none complete visually-hidden joined-value node for assistive technology while the painted\nbuilt-in chip labels are hidden from it, preventing both truncation and duplicate announcement.\nPicking a selected row again still toggles it off, Backspace/Delete on the trigger removes the\nlast selection, and `with-clear` removes all of them. `getTag` replaces a built-in chip entirely;\n`max-options-visible` caps how many render before the rest collapse behind a localized \"+N\" chip.\n\n`with-clear`'s button renders inside the trigger's inline-end padding,\noutboard of the expand icon, as a sibling of the trigger rather than a child\nof it -- for the same nesting reason.\nThe trigger and overlaid multi-select tag row accept constrained allocation: long selected\nlabels ellipsize and long chips wrap within a 320px LTR or RTL container instead of widening it.\n\nReuses `lr-combobox`'s popup positioning (`internal/positioner.js`) and\nclick-outside/Escape/Home/End/Arrow-key listbox navigation patterns,\nadapted to a trigger button that keeps DOM focus throughout (the listbox's\n\"active\" row is conveyed via `aria-activedescendant`, never actual focus),\nmatching the WAI-ARIA \"select-only combobox\" pattern.\n\nWhen `autoCommitSingleOption` is set and exactly one option is available\n(neither disabled nor inert, including through an inert ancestor), the popup never\nopens at all: a click, Enter, Space, ArrowDown, or ArrowUp on the trigger\ncommits that sole option directly, and the trigger renders as a plain\n`role=\"button\"` with no chevron/`aria-haspopup`/`aria-expanded` rather than\na combobox with a permanently inert popup state — opening a one-row list to\npick the only available choice is pure friction with no real decision\nbehind it. This never changes `value`/validity defaults on its own — an\nunselected single-option select stays unselected (and a `required` one\nstays invalid) exactly like the multi-option case, until the trigger is\nactually activated. `autoCommitSingleOption` defaults to `false`: by\ndefault a select always renders the normal combobox/listbox/chevron\ntrigger no matter how many options are enabled, matching pre-1.3.0\nbehavior — opt in explicitly if a narrowing-to-one option list should\nauto-commit.\n\nDeliberately does **not** perform implicit form submission on Enter (unlike `<lr-input>`/\n`<lr-combobox>`/`<lr-date-input>`, which route through `internal/submit-on-enter.ts`): the\ntrigger is a `role=\"combobox\"` button where Enter opens the listbox and, once open, commits the\nactive option — the ARIA combobox behavior its upstream counterpart follows. Submitting there\nwould shadow the only keyboard way to open the list.\n\nWhile the listbox is open, live option collection changes preserve the keyboard-active option\nby element identity across reorders. If that option is removed or becomes unavailable, the\nnearest available survivor takes over (preferring the following row on a tie); an empty\navailable collection clears `aria-activedescendant` instead of retaining an invalid index.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | `<lr-option>` elements. |\n| `clear-icon` | Replaces the built-in clear glyph. |\n| `end` | Decorative adornment after the selected-value label and before the expand icon. Its wrapper has the same enforced inert/`aria-hidden` contract as `start`. |\n| `error` | Custom error content. |\n| `expand-icon` | Replaces the built-in expand glyph. |\n| `help-text` | Shoelace alias for `hint`. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n| `prefix` | Shoelace alias for `start`. |\n| `start` | Decorative adornment at the inline-start of the trigger row, before the selected-value label. Its wrapper is always `aria-hidden` and inert because it lives inside the native trigger button; interactive content supplied here remains deliberately unavailable. |\n| `suffix` | Shoelace alias for `end`. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `clear-button` | The `with-clear` button. |\n| `combobox` | Compatibility name for the control wrapper. |\n| `display-input` | The selected-value/placeholder display inside the trigger. In populated multiple mode it is visually hidden but exposes every selected label to assistive technology. |\n| `end` | Inert, decorative wrapper around the `end` adornment slot; `hidden` while nothing is slotted. |\n| `error` | The error message. |\n| `expand-icon` | The dropdown indicator. |\n| `form-control` | The outer wrapper around label, trigger, listbox, error and hint. |\n| `form-control-help-text` | Shoelace compatibility name for the hint message. |\n| `form-control-input` | Compatibility name for the control wrapper. |\n| `form-control-label` | The `<label>` element. |\n| `group-label` | An option group's heading row, referenced by the enclosing `role=\"group\"`. |\n| `hint` | The hint message. |\n| `label` | Wrapper around the visible label content. |\n| `listbox` | The managed nonmodal options popover; its stack depth comes from `--lr-overlay-stack-index` with `--lr-layer-dropdown` as the standalone fallback. |\n| `option` | An option row. |\n| `option-dot` | An option row's leading status dot (when `dot-color` is set). |\n| `option-label` | An option row's label/sub wrapper. |\n| `option-sub` | An option row's secondary line (when `sub` is set). |\n| `prefix` | Shoelace compatibility part on the `prefix` slot. |\n| `start` | Inert, decorative wrapper around the `start` adornment slot; `hidden` while nothing is slotted. |\n| `suffix` | Shoelace compatibility part on the `suffix` slot. |\n| `tag` | One selected-value chip. The \"+N\" overflow chip carries both `tag` and `tag-overflow`, so `::part(tag)` styles every chip and `::part(tag-overflow)` only that one -- state after `::part()` never matches, so it is encoded in the part name instead. |\n| `tag-label` | A chip's ellipsis-safe label. |\n| `tag-overflow` | The \"+N\" chip standing in for the selections past `max-options-visible`. |\n| `tag__base` | Compatibility name on a built-in selected-value chip. |\n| `tag__content` | Compatibility name around a built-in chip's visible label. |\n| `tag__remove-button` | A built-in chip's remove button. |\n| `tag__remove-button__base` | Compatibility name on the same remove button. |\n| `tags` | The `multiple`-mode chip row, rendered as a sibling overlaid on the trigger. |\n| `trigger` | The trigger button (positioning anchor). |\n\n---\n\n**CSS Custom Properties**\n\n- `--hide-duration` (default: `var(--lr-transition-fast)`) — Listbox exit-transition timing.\n- `--lr-form-control-required-color` (default: `var(--lr-color-danger)`) — Required-marker color, themeable independently of error text and invalid borders.\n- `--lr-form-control-required-content` (default: `' *'`) — The required marker appended to `form-control-label` while `required` is set. Set it to `''` to suppress the marker, or to any other quoted string (`' (required)'`, a localized word) to replace it.\n- `--lr-form-control-required-offset` (default: `0`) — Inline space between the label text and the required marker.\n- `--lr-select-expand-size` — Decorative expand-icon box size, scaled by `size`. The one piece of this component's geometry the shared ladder does not own: it sizes a glyph, not the control row.\n- `--lr-select-font-size` (default: `var(--lr-form-control-font-size)`) — Trigger font size, from the active `size` tier.\n- `--lr-select-gap` — Gap between the trigger's start adornment, label, end adornment, and expand icon. Doesn't vary by `size`.\n- `--lr-select-open-border-color` (default: `var(--lr-color-brand)`) — Trigger border while the listbox is open.\n- `--lr-select-option-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the hovered/keyboard-active option row. Not declared on `:host`, so a value set on any ancestor is never shadowed -- retheme just this row state without hijacking the shared `--lr-color-brand-quiet` token used by every other component's own hover/active state.\n- `--lr-select-option-selected-bg` (default: `transparent`) — Background of the currently-selected option row. Not declared on `:host`; retheme just the selected row without hijacking `--lr-color-brand`.\n- `--lr-select-option-selected-border` (default: `var(--lr-color-brand)`) — Border color of the selected option row.\n- `--lr-select-option-selected-color` (default: `var(--lr-color-brand)`) — Text color of the selected option row.\n- `--lr-select-option-selected-font-weight` (default: `var(--lr-font-weight-semibold)`) — Font weight of the selected option row.\n- `--lr-select-radius` (default: `var(--lr-form-control-radius)`) — Trigger corner radius, from the active `size` tier of the shared form-control ladder (the two tightest tiers take a smaller radius).\n- `--lr-select-tag-font-size` — Chip text size. Doesn't vary by `size`.\n- `--lr-select-tag-padding` — Padding inside a `multiple`-mode chip. Doesn't vary by `size`.\n- `--lr-select-trigger-active-bg` (default: `color-mix(...)`) — Trigger background while pressed.\n- `--lr-select-trigger-height` — Exact trigger height. Unset by default, which leaves `--lr-select-trigger-min-height` as a floor only; set it to a length to both floor and cap the trigger (e.g. to pixel-match a sibling field in the same toolbar row). Because it is never declared by the component itself, it can be set from an ancestor or an outer-tree rule as well as inline on the element.\n- `--lr-select-trigger-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Trigger background while hovered. Accent appearance keeps its louder mixed fallback when this hook is unset.\n- `--lr-select-trigger-min-height` (default: `var(--lr-form-control-height)`) — Trigger block-size floor, from the active `size` tier of the shared ladder, and live at every tier including the default `m` -- so a select is exactly as tall as an `<lr-button>`/`<lr-input>` of that tier.\n- `--lr-select-trigger-padding` — Trigger padding shorthand. Defaults to the active `size` tier's `var(--lr-form-control-padding-block) var(--lr-form-control-padding-inline)` from the shared ladder.\n- `--show-duration` (default: `var(--lr-transition-fast)`) — Listbox enter-transition timing.\n- `--tag-max-size` (default: `var(--lr-size-12rem)`) — Maximum inline size of one selected-value tag."
21708
22117
  },
21709
22118
  "attributes": [
21710
22119
  {
@@ -22126,6 +22535,13 @@
22126
22535
  "value": "Names what a cell's `marker` means (e.g. `\"Subagent\"`). Set it to key the marker in the legend\n— with `showLegend` on it adds one trailing `[part=\"legend-item\"]` whose swatch reproduces the\ncell's own marker treatment — and to have the marker counted in the auto-generated summary,\nwhich is otherwise per-category only. Unset (the default) nothing changes: no extra legend row\nand no extra summary clause.\n\nType: `string | undefined`"
22127
22536
  }
22128
22537
  },
22538
+ {
22539
+ "name": "selected-index",
22540
+ "description": {
22541
+ "kind": "markdown",
22542
+ "value": "Index of the currently selected item, or `-1` (the default) for none — the controlled selection\nthis strip's natural companion, `lr-sequence-playback`, scrubs through. Mirrors the shape\n`lr-lite-chart`'s `selectedIndices` and `lr-heatmap`'s `selectedCell` already establish.\n\nControlled, not self-managing: activating a cell emits `lr-item-activate` and does **not**\nmove the selection on its own, so the consumer stays the single source of truth and the\ncomponent cannot drift from a playback index it does not own. An out-of-range or non-integer\nvalue selects nothing rather than throwing.\n\nType: `number` \nDefault: `-1`"
22543
+ }
22544
+ },
22129
22545
  {
22130
22546
  "name": "show-legend",
22131
22547
  "description": {
@@ -22698,7 +23114,7 @@
22698
23114
  "name": "lr-sparkline",
22699
23115
  "description": {
22700
23116
  "kind": "markdown",
22701
- "value": "`<lr-sparkline>` — a zero-dependency inline SVG trend chart.\nMirrors the Web Awesome `<wa-sparkline>` API under the `lr-` prefix and retains the earlier\n`values`/`mark`/`min`/`max` Lyra surface as an additive programmatic extension.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n- Deprecated part `base`: Deprecated since `8.0.0`. Use part `::part(sparkline)`. Removal is not permitted before `10.0.0`. The sparkline part names the rendered SVG wrapper unambiguously; base remains on that same node during the compatibility window.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `area` | Compatibility alias for `fill` on the same path. |\n| `bar` | Each rectangle rendered by the additive `mark=\"bar\"` mode. |\n| `base` | Deprecated alias for `sparkline` on the same SVG wrapper. |\n| `fill` | The filled area rendered by `appearance=\"solid\"` and `appearance=\"gradient\"`. |\n| `line` | The stroked trend path. |\n| `sparkline` | The outer SVG wrapper. |\n\n---\n\n**CSS Custom Properties**\n\n- `--fill-color` (default: `var(--lr-color-brand-quiet)`) — Area fill color. A `trend` supplies a semantic token default, while an authored value always wins.\n- `--line-color` (default: `var(--lr-color-brand)`) — Trend line color. A `trend` supplies a semantic token default, while an authored value always wins.\n- `--line-width` (default: `var(--lr-border-width-medium)`) — Trend line width.\n- `--lr-sparkline-stroke-width` (default: `var(--lr-border-width-medium)`) — Compatibility alias used as the fallback for `--line-width`."
23117
+ "value": "`<lr-sparkline>` — a zero-dependency inline SVG trend chart.\nMirrors the Web Awesome `<wa-sparkline>` API under the `lr-` prefix and retains the earlier\n`values`/`mark`/`min`/`max` Lyra surface as an additive programmatic extension.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n- Deprecated part `base`: Deprecated since `8.0.0`. Use part `::part(sparkline)`. Removal is not permitted before `10.0.0`. The sparkline part names the rendered SVG wrapper unambiguously; base remains on that same node during the compatibility window. That version is a policy floor, not a plan: `wa-sparkline` still publishes its own deprecated `base` part, so this alias is removed only when upstream's is.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `area` | Compatibility alias for `fill` on the same path. |\n| `bar` | Each rectangle rendered by the additive `mark=\"bar\"` mode. |\n| `base` | Deprecated alias for `sparkline` on the same SVG wrapper. |\n| `fill` | The filled area rendered by `appearance=\"solid\"` and `appearance=\"gradient\"`. |\n| `line` | The stroked trend path. |\n| `sparkline` | The outer SVG wrapper. |\n\n---\n\n**CSS Custom Properties**\n\n- `--fill-color` (default: `var(--lr-color-brand-quiet)`) — Area fill color. A `trend` supplies a semantic token default, while an authored value always wins.\n- `--line-color` (default: `var(--lr-color-brand)`) — Trend line color. A `trend` supplies a semantic token default, while an authored value always wins.\n- `--line-width` (default: `var(--lr-border-width-medium)`) — Trend line width.\n- `--lr-sparkline-stroke-width` (default: `var(--lr-border-width-medium)`) — Compatibility alias used as the fallback for `--line-width`."
22702
23118
  },
22703
23119
  "attributes": [
22704
23120
  {
@@ -23519,7 +23935,7 @@
23519
23935
  "name": "lr-swatch-picker",
23520
23936
  "description": {
23521
23937
  "kind": "markdown",
23522
- "value": "`<lr-swatch-picker>` -- a single-select picker over a small, fixed set of color swatches with\nthe WAI-ARIA APG `radiogroup` contract built in: `role=\"radiogroup\"`/`role=\"radio\"`, roving\ntabindex, automatic activation (click or arrow-key move both select immediately, like a native\nradio group), cyclic Arrow/Home/End navigation. Distinct from `<lr-color-picker>`'s freeform\nnative color input -- this picks exactly one of N designer-chosen named colors, the shape apps\notherwise hand-roll as a row of round accent-color buttons.\n\n`mode=\"gemstone\"` uses the shared faceted gemstone glyph for items carrying a `gemstone`\nkey and opts into the gemstone glow/shine defaults. The `items` array controls display\norder and `value` still controls the initial selection. Live option reorders preserve focus by\noption identity; removing the focused option moves focus to the nearest surviving swatch without\nchanging the controlled `value` or emitting `lr-change`.\n\n`disabled` locks the whole picker: every swatch renders as a real `disabled` `<button>` (out of\nthe tab sequence, inert to activation), keyboard navigation and `click()` become no-ops, and the\nswatches dim with a `not-allowed` cursor. It is the picker's own attribute only — this control is\ndeliberately not form-associated (it submits nothing, carries no `name`, validity or reset\nsemantics), so an ancestor `<fieldset disabled>` does not cascade into it.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n- Deprecated property `label` / `label`: Deprecated since `8.2.3`. Use property `aria-label=\"…\"`. Removal is not permitted before `10.0.0`. accessibleLabel names the accessibility-only value explicitly while label remains a compatibility alias.\n- Deprecated property `options`: Deprecated since `8.2.3`. Use property `.items = […]`. Removal is not permitted before `10.0.0`. items follows the shared collection vocabulary while options remains a compatibility alias over the same immutable snapshot.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The `role=\"radiogroup\"` root. |\n| `swatch` | A single `role=\"radio\"` color swatch's interactive hit target; sized via `--lr-swatch-picker-hit-size` (its private default follows `size` and is floored at 24px), independent of the smaller visible fill/icon rendered inside it. A public value wins. The selected one is `[part='swatch'][aria-checked='true']`. |\n| `swatch-fill` | The compact filled circle rendered when the option has no custom `icon`. |\n| `swatch-icon` | Optional decorative custom shape supplied by the option's `icon` field; its subtree is inert and hidden from assistive technology. When present it replaces `swatch-fill` and the swatch renders unfilled/unbordered behind it. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-swatch-picker-fill-size` (default: `var(--lr-theme-swatch-picker-fill-size, var(--lr-size-1-5rem))`) — Visible fill/icon diameter for the swatch. Its private default follows the active tier. Set `--lr-theme-swatch-picker-fill-size` on an ancestor to give every tier a shared default, or set this component hook on an ancestor/direct host to override every tier.\n- `--lr-swatch-picker-gap` (default: `var(--lr-space-xs)`) — Gap between swatches.\n- `--lr-swatch-picker-gemstone-selected-blur` (default: `var(--lr-size-0-5rem)`) — Selected glow blur used by `mode=\"gemstone\"` when `--lr-swatch-picker-selected-blur` is not overridden.\n- `--lr-swatch-picker-gemstone-shine-duration` (default: `var(--lr-transition-ambient)`) — Selected shine timing used by `mode=\"gemstone\"` when `--lr-swatch-picker-shine-duration` is not overridden.\n- `--lr-swatch-picker-hit-size` (default: `var(--lr-size-2-5rem)`) — Hit-area size (both min-inline-size and min-block-size) for the swatch button. Its private default follows the active tier and is floored at 24px; an inherited or direct public value wins.\n- `--lr-swatch-picker-selected-blur` (default: `0`) — Blur radius of that same ring. 0 by default (a crisp ring); set a real length (e.g. 0.4rem) for a soft glow instead.\n- `--lr-swatch-picker-selected-color` (default: `var(--lr-color-brand)`) — Ring color drawn around the selected swatch, themeable independently of the focus ring and every other ring color.\n- `--lr-swatch-picker-shine-duration` (default: `0s`) — Duration of a rhythmic brighten-and-settle \"shine\" on the selected swatch. `0s` (the default) is a no-op -- today's static look for every existing consumer. Set a real duration (e.g. 1.6s) for a pulsing shine; disabled outright under `prefers-reduced-motion: reduce`. Independent of `--lr-swatch-picker-selected-blur` (a separate `filter: brightness()` animation, not `box-shadow`), so the two compose freely, and works identically for a plain color circle and an icon swatch alike."
23938
+ "value": "`<lr-swatch-picker>` -- a single-select picker over a small, fixed set of color swatches with\nthe WAI-ARIA APG `radiogroup` contract built in: `role=\"radiogroup\"`/`role=\"radio\"`, roving\ntabindex, automatic activation (click or arrow-key move both select immediately, like a native\nradio group), cyclic Arrow/Home/End navigation. Distinct from `<lr-color-picker>`'s freeform\nnative color input -- this picks exactly one of N designer-chosen named colors, the shape apps\notherwise hand-roll as a row of round accent-color buttons.\n\n`mode=\"gemstone\"` uses the shared faceted gemstone glyph for items carrying a `gemstone`\nkey and opts into the gemstone glow/shine defaults. The `items` array controls display\norder and `value` still controls the initial selection. Live option reorders preserve focus by\noption identity; removing the focused option moves focus to the nearest surviving swatch without\nchanging the controlled `value` or emitting `lr-change`.\n\n`disabled` locks the whole picker: every swatch renders as a real `disabled` `<button>` (out of\nthe tab sequence, inert to activation), keyboard navigation and `click()` become no-ops, and the\nswatches dim with a `not-allowed` cursor. It is the picker's own attribute only — this control is\ndeliberately not form-associated (it submits nothing, carries no `name`, validity or reset\nsemantics), so an ancestor `<fieldset disabled>` does not cascade into it.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The `role=\"radiogroup\"` root. |\n| `swatch` | A single `role=\"radio\"` color swatch's interactive hit target; sized via `--lr-swatch-picker-hit-size` (its private default follows `size` and is floored at 24px), independent of the smaller visible fill/icon rendered inside it. A public value wins. The selected one is `[part='swatch'][aria-checked='true']`. |\n| `swatch-fill` | The compact filled circle rendered when the option has no custom `icon`. |\n| `swatch-icon` | Optional decorative custom shape supplied by the option's `icon` field; its subtree is inert and hidden from assistive technology. When present it replaces `swatch-fill` and the swatch renders unfilled/unbordered behind it. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-swatch-picker-fill-size` (default: `var(--lr-theme-swatch-picker-fill-size, var(--lr-size-1-5rem))`) — Visible fill/icon diameter for the swatch. Its private default follows the active tier. Set `--lr-theme-swatch-picker-fill-size` on an ancestor to give every tier a shared default, or set this component hook on an ancestor/direct host to override every tier.\n- `--lr-swatch-picker-gap` (default: `var(--lr-space-xs)`) — Gap between swatches.\n- `--lr-swatch-picker-gemstone-selected-blur` (default: `var(--lr-size-0-5rem)`) — Selected glow blur used by `mode=\"gemstone\"` when `--lr-swatch-picker-selected-blur` is not overridden.\n- `--lr-swatch-picker-gemstone-shine-duration` (default: `var(--lr-transition-ambient)`) — Selected shine timing used by `mode=\"gemstone\"` when `--lr-swatch-picker-shine-duration` is not overridden.\n- `--lr-swatch-picker-hit-size` (default: `var(--lr-size-2-5rem)`) — Hit-area size (both min-inline-size and min-block-size) for the swatch button. Its private default follows the active tier and is floored at 24px; an inherited or direct public value wins.\n- `--lr-swatch-picker-selected-blur` (default: `0`) — Blur radius of that same ring. 0 by default (a crisp ring); set a real length (e.g. 0.4rem) for a soft glow instead.\n- `--lr-swatch-picker-selected-color` (default: `var(--lr-color-brand)`) — Ring color drawn around the selected swatch, themeable independently of the focus ring and every other ring color.\n- `--lr-swatch-picker-shine-duration` (default: `0s`) — Duration of a rhythmic brighten-and-settle \"shine\" on the selected swatch. `0s` (the default) is a no-op -- today's static look for every existing consumer. Set a real duration (e.g. 1.6s) for a pulsing shine; disabled outright under `prefers-reduced-motion: reduce`. Independent of `--lr-swatch-picker-selected-blur` (a separate `filter: brightness()` animation, not `box-shadow`), so the two compose freely, and works identically for a plain color circle and an icon swatch alike."
23523
23939
  },
23524
23940
  "attributes": [
23525
23941
  {
@@ -23536,13 +23952,6 @@
23536
23952
  "value": "Locks the whole picker: every rendered swatch becomes a genuinely `disabled` `<button>` (so\nit leaves the tab sequence and stops emitting activation), arrow/Home/End navigation and\n`click()` become no-ops, and the swatches dim to `--lr-opacity-disabled` with a `not-allowed`\ncursor. Use it for the usual \"locked while saving\" case.\n\nThis is the picker's OWN attribute only. `<lr-swatch-picker>` is deliberately not a\nform-associated element — it emits `lr-change` and is driven by `value`, but it submits\nnothing and has no name, validity or reset semantics — so, exactly like a native `<div>`,\nit takes no disablement from an ancestor `<fieldset disabled>`. Disable the picker itself\nalongside the fieldset when a form needs both.\n\nType: `boolean` \nDefault: `false`"
23537
23953
  }
23538
23954
  },
23539
- {
23540
- "name": "label",
23541
- "description": {
23542
- "kind": "markdown",
23543
- "value": "Deprecated since `8.2.3`. Use property `aria-label=\"…\"`. Removal is not permitted before `10.0.0`. accessibleLabel names the accessibility-only value explicitly while label remains a compatibility alias.\n\nType: `string` \nDefault: `''`"
23544
- }
23545
- },
23546
23955
  {
23547
23956
  "name": "locale",
23548
23957
  "description": {
@@ -23614,7 +24023,7 @@
23614
24023
  "name": "lr-switch",
23615
24024
  "description": {
23616
24025
  "kind": "markdown",
23617
- "value": "`<lr-switch>` — a boolean toggle-switch form control. Structurally the\nsame idea as a checkbox (form-associated via `ElementInternals`, click and\nSpace toggle) but with switch semantics: `role=\"switch\"` +\n`aria-checked` read to assistive tech as an on/off state rather than a\nchecked/unchecked one, and there is no indeterminate state.\n\n`checked` is not a plain string, so this attaches `ElementInternals`\ndirectly and implements its own `updateValidity()` rather than using the\n`FormAssociated` mixin (that mixin's `value` accessor assumes a string —\nsee `<lr-combobox>` for the same direct-`ElementInternals` shape with a\nnon-string value).\n\nShips an opt-in `hint`/`errorText` form-control chrome (props + matching named slots +\n`hint`/`error` CSS parts), mirroring `<lr-select>`'s pattern for those two pieces -- left\nunset, neither renders. Deliberately no separate top-of-field `label` prop/slot/part mirroring\n`<lr-select>`'s `form-control-label`: the default slot already *is* this control's visible,\nclickable label (same as `<lr-checkbox>`), so a second label surface would be redundant.\nIts wrapper follows flattened rendered assignment and updates through forwarding slots. Visual\nelements, including decorative `aria-hidden` icons, retain the wrapper independently of their\naccessibility-tree contribution.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Label text, rendered next to the track. Clicking it toggles the switch, the same as clicking a checkbox's associated `<label>`. If left empty, set `aria-label` on the host so the control still has an accessible name. Host `aria-label` is forwarded by presence, including an explicitly empty value. |\n| `error` | Custom error content. |\n| `help-text` | Shoelace alias for `hint`. |\n| `hint` | Custom hint content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | Compatibility name for the semantic switch owner; use `switch`. |\n| `control` | WA/Shoelace name for the same pill-shaped background. |\n| `error` | The error message. |\n| `form-control` | The outer wrapper around the switch, error and hint. |\n| `form-control-help-text` | Shoelace name for the same hint message. |\n| `hint` | The hint message. |\n| `label` | The wrapper around the default slot. |\n| `switch` | The interactive `role=\"switch\"` owner around the track, with the rich default label as a sibling so nested actions remain valid focus stops. |\n| `thumb` | The circular knob that slides across the track. |\n| `track` | The pill-shaped background. |\n| `wrapper` | Compatibility name on the semantic switch owner. |\n\n---\n\n**CSS Custom Properties**\n\n- `--height` (default: `var(--lr-switch-track-block-size)`) — WA/Shoelace alias for the track's block size.\n- `--lr-switch-checked-track-fill` (default: `var(--lr-color-brand)`) — Track fill while checked.\n- `--lr-switch-gap` (default: `var(--lr-space-s)`) — Gap between the track and label.\n- `--lr-switch-thumb-fill` (default: `var(--lr-color-surface)`) — Thumb fill in either checked state.\n- `--lr-switch-thumb-offset` (default: `var(--lr-size-2px)`) — Inset of the thumb from the track's edges.\n- `--lr-switch-track-active-fill` (default: `color-mix(...)`) — Track fill while pressed.\n- `--lr-switch-track-block-size` (default: `calc(var(--lr-form-control-height) * 0.5)`) — Block size of the track, half the `size` tier's shared control height; the thumb's diameter is derived from it minus twice `--lr-switch-thumb-offset`.\n- `--lr-switch-track-fill` (default: `var(--lr-color-border)`) — Resting fill of `[part='track']`, used as the source for the hover and press fallbacks.\n- `--lr-switch-track-hover-fill` (default: `color-mix(...)`) — Track fill while hovered.\n- `--lr-switch-track-inline-size` (default: `calc(var(--lr-switch-track-block-size) * 1.8)`) — Inline size of the track, and (with the block size) the distance the thumb travels when checked. Derived from the block size, so re-sizing the track keeps its aspect ratio.\n- `--thumb-size` (default: `calc(var(--height, var(--lr-switch-track-block-size)) - (var(--lr-switch-thumb-offset) * 2))`) — WA/Shoelace thumb diameter alias.\n- `--width` (default: `var(--lr-switch-track-inline-size)`) — WA/Shoelace alias for the track's inline size."
24026
+ "value": "`<lr-switch>` — a boolean toggle-switch form control. Structurally the\nsame idea as a checkbox (form-associated via `ElementInternals`, click and\nSpace toggle) but with switch semantics: `role=\"switch\"` +\n`aria-checked` read to assistive tech as an on/off state rather than a\nchecked/unchecked one, and there is no indeterminate state.\n\n`checked` is not a plain string, so this attaches `ElementInternals`\ndirectly and implements its own `updateValidity()` rather than using the\n`FormAssociated` mixin (that mixin's `value` accessor assumes a string —\nsee `<lr-combobox>` for the same direct-`ElementInternals` shape with a\nnon-string value).\n\nShips an opt-in `hint`/`errorText` form-control chrome (props + matching named slots +\n`hint`/`error` CSS parts), mirroring `<lr-select>`'s pattern for those two pieces -- left\nunset, neither renders. Deliberately no separate top-of-field `label` prop/slot/part mirroring\n`<lr-select>`'s `form-control-label`: the default slot already *is* this control's visible,\nclickable label (same as `<lr-checkbox>`), so a second label surface would be redundant.\nIts wrapper follows flattened rendered assignment and updates through forwarding slots. Visual\nelements, including decorative `aria-hidden` icons, retain the wrapper independently of their\naccessibility-tree contribution.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Label text, rendered next to the track. Clicking it toggles the switch, the same as clicking a checkbox's associated `<label>`. If left empty, set `aria-label` on the host so the control still has an accessible name. Host `aria-label` is forwarded by presence, including an explicitly empty value. |\n| `error` | Custom error content. |\n| `help-text` | Shoelace alias for `hint`. |\n| `hint` | Custom hint content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | Compatibility name for the semantic switch owner; use `switch`. |\n| `control` | WA/Shoelace name for the same pill-shaped background. |\n| `error` | The error message. |\n| `form-control` | The outer wrapper around the switch, error and hint. |\n| `form-control-help-text` | Shoelace name for the same hint message. |\n| `hint` | The hint message. |\n| `label` | The wrapper around the default slot. |\n| `row` | The row wrapping the switch owner and the label as siblings. This is the node to size or align when laying out a column of switches; `base`/`switch` is only the track box inside it, so its inline size tracks the track, not the row. |\n| `switch` | The interactive `role=\"switch\"` owner around the track, with the rich default label as a sibling so nested actions remain valid focus stops. |\n| `thumb` | The circular knob that slides across the track. |\n| `track` | The pill-shaped background. |\n| `wrapper` | Compatibility name on the semantic switch owner. |\n\n---\n\n**CSS Custom Properties**\n\n- `--height` (default: `var(--lr-switch-track-block-size)`) — WA/Shoelace alias for the track's block size.\n- `--lr-switch-checked-track-fill` (default: `var(--lr-color-brand)`) — Track fill while checked.\n- `--lr-switch-gap` (default: `var(--lr-space-s)`) — Gap between the track and label.\n- `--lr-switch-thumb-fill` (default: `var(--lr-color-surface)`) — Thumb fill in either checked state.\n- `--lr-switch-thumb-offset` (default: `var(--lr-size-2px)`) — Inset of the thumb from the track's edges.\n- `--lr-switch-track-active-fill` (default: `color-mix(...)`) — Track fill while pressed.\n- `--lr-switch-track-block-size` (default: `calc(var(--lr-form-control-height) * 0.5)`) — Block size of the track, half the `size` tier's shared control height; the thumb's diameter is derived from it minus twice `--lr-switch-thumb-offset`.\n- `--lr-switch-track-fill` (default: `var(--lr-color-border)`) — Resting fill of `[part='track']`, used as the source for the hover and press fallbacks.\n- `--lr-switch-track-hover-fill` (default: `color-mix(...)`) — Track fill while hovered.\n- `--lr-switch-track-inline-size` (default: `calc(var(--lr-switch-track-block-size) * 1.8)`) — Inline size of the track, and (with the block size) the distance the thumb travels when checked. Derived from the block size, so re-sizing the track keeps its aspect ratio.\n- `--thumb-size` (default: `calc(var(--height, var(--lr-switch-track-block-size)) - (var(--lr-switch-thumb-offset) * 2))`) — WA/Shoelace thumb diameter alias.\n- `--width` (default: `var(--lr-switch-track-inline-size)`) — WA/Shoelace alias for the track's inline size."
23618
24027
  },
23619
24028
  "attributes": [
23620
24029
  {
@@ -23787,7 +24196,7 @@
23787
24196
  "name": "lr-tab-group",
23788
24197
  "description": {
23789
24198
  "kind": "markdown",
23790
- "value": "`<lr-tab-group>` — a tab strip composed from direct `<lr-tab panel=\"x\">` and\n`<lr-tab-panel name=\"x\">` children. This is the one canonical child model shared with both\nmapped upstreams; the group assigns private projection slots itself so consumer markup remains\na mechanical tag rename.\n\nImplements the WAI-ARIA APG tabs pattern. With the default `activation=\"auto\"`, Left/Right\n(swapped under RTL, or Up/Down when `placement` is `start`/`end`) move focus *and* selection\ntogether; with `activation=\"manual\"` they move focus only and Enter/Space commits, which the APG\nrequires whenever revealing a panel is expensive. Home/End jump to the first/last enabled tab,\nand a roving `tabindex` follows the focused tab. An enabled closable `<lr-tab>` adds\n`aria-keyshortcuts=\"Delete\"` to that same real tab button; Delete routes the close request through\nthe descriptor so `lr-close` still targets `<lr-tab>`. The visual close affordance stays\nnon-focusable and accessibility-hidden, avoiding a nested interactive control. Rich `<lr-tab>`\ncontent is likewise inert while projected; only its accessibility-exposed, default-slot text\nnames the real tab button rather than leaving an interactive descendant inside it. Author\n`aria-hidden`, hidden, inert, and CSS-hidden branches never leak into that name, and visibility\nor text changes refresh it.\n\n**`inert` on a source child excludes its tab exactly as `disabled` does** — it never takes\nselection, never holds the roving `tabindex`, and arrow keys step past it — and the rendered tab\nbutton is itself marked `inert`, so a pointer cannot reach it either. Only the child's *own*\n`inert` counts: a whole group inerted by an open modal keeps its selection and panels intact.\n\n`defaultSlot` exposes the real unnamed shadow slot expected by mapped integrations. Lyra keeps\nit hidden because every accepted child is assigned to a deterministic named projection slot.\n\n**Overflow.** A horizontal tab row that does not fit stays natively scrollable and gains two\nscroll controls flanking the tablist inside `[part=\"nav\"]`, mirroring both upstreams. They are\nrendered only for a horizontal `placement` (a vertical strip scrolls in the block direction,\nwhich these controls do not address — the same restriction both upstreams apply) and are laid out\nonly while the tablist genuinely overflows, gated on the measurement the edge fade already uses,\nso a row that fits is never flanked by two dead buttons. `without-scroll-controls` (or Shoelace's\n`no-scroll-controls`) opts out, leaving the pre-8.0.0 behavior: native scrolling plus the fade.\nThe fade is deliberately kept alongside the controls — it says \"the row continues past this\nedge\", which the controls themselves cannot show, and both appear on exactly the same condition.\nBy default an inactive edge control is hidden once that direction has nothing left to scroll to.\nShoelace's `fixed-scroll-controls` keeps both controls present throughout an overflowing range;\nin that mode an exhausted control stays visible but remains a no-op. Edge state is measured in\nlogical coordinates, so controls and the one-sided fade remain truthful under RTL too.\nA vertical `start`/`end` nav stays shrinkable and is capped at\n`--lr-tab-group-vertical-nav-max-inline-size` (default `var(--lr-size-12rem)`), so long labels\nellipsize rather than consuming the panel's allocation.\n\n**The scroll controls are `aria-hidden=\"true\"` and `tabindex=\"-1\"`** — a pointer affordance only,\nmatching upstream. The tablist is already fully keyboard-scrollable without them: the roving\n`tabindex` puts every tab one arrow key away, and focusing a tab scrolls it into view. Adding two\ntab stops in the middle of the strip would therefore buy no capability and cost every keyboard\nuser two extra stops between the tabs and the panel. They still carry a localized `aria-label`,\nso the name is there for automation and for a consumer that chooses to expose them.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `8.0.0`\n- Rationale: This tag entered Lyra as a stable public API with documented behavior, accessibility, and cross-browser support.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Canonical `<lr-tab>`/`<lr-tab-panel>` pairs. |\n| `nav` | Upstream-compatible slot used by `<lr-tab>` descriptors. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `active-tab-indicator` | Indicator inside the active tab. |\n| `base` | Compatibility name for the root wrapper; use `tab-group`. |\n| `body` | Wrapper around all tab panels. |\n| `nav` | The row wrapping the tablist together with the two overflow scroll controls; mirrors the upstream part of the same name. |\n| `panel` | A single `role=\"tabpanel\"` wrapper (one per tab, hidden unless active). |\n| `scroll-button` | Shared part on both overflow scroll controls. |\n| `scroll-button__base` | Export-compatible base name on both scroll controls. |\n| `scroll-button--end` | Upstream modifier alias on `scroll-button-end`. |\n| `scroll-button--start` | Upstream modifier alias on `scroll-button-start`. |\n| `scroll-button-end` | The control that scrolls the tabs toward their inline end (\"next\" — the left-hand control under RTL). |\n| `scroll-button-glyph` | The chevron wrapper inside a scroll control. This is the element that mirrors under RTL; the icon itself never rotates. |\n| `scroll-button-start` | The control that scrolls the tabs toward their inline start (\"previous\" — the right-hand control under RTL). |\n| `tab` | A single tab button. |\n| `tab-group` | The root wrapper around the tablist and panels. It is the same node as `base`. |\n| `tablist` | The `role=\"tablist\"` row of tab buttons. |\n| `tabs` | Upstream name on the same scroll container as `tablist`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--indicator-color` — Upstream alias for the active indicator color.\n- `--lr-scroll-fade-size` (default: `2rem`) — Width of the fade at each horizontal scroll edge. The fade is applied only while the tablist actually overflows, so a row that fits is never dimmed.\n- `--lr-tab-group-active-bg` (default: `color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active))`) — Background of a pressed, non-disabled tab.\n- `--lr-tab-group-active-color` (default: `var(--lr-tab-group-hover-color, var(--lr-color-text))`) — Text color of a pressed, non-disabled tab.\n- `--lr-tab-group-hover-color` (default: `var(--lr-color-text)`) — Text color of a hovered, non-disabled tab. Independent of the selected-state props above. Pressed-tab and scroll-control hooks use inline `var()` fallbacks rather than a `:host` declaration, so they inherit from the group or any ancestor without retheming the other states.\n- `--lr-tab-group-indicator-color` (default: `var(--lr-color-brand)`) — Color of the selected tab's underline, themeable independently of its text color.\n- `--lr-tab-group-scroll-button-active-bg` (default: `color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active))`) — Background of a pressed overflow scroll control.\n- `--lr-tab-group-scroll-button-active-color` (default: `var(--lr-color-text)`) — Text color of a pressed overflow scroll control.\n- `--lr-tab-group-scroll-button-hover-color` (default: `var(--lr-color-text)`) — Text color of a hovered overflow scroll control.\n- `--lr-tab-group-selected-color` (default: `var(--lr-color-brand)`) — Text color of the selected tab. Scoped to `[aria-selected='true']` only, so it never repaints a hovered unselected tab (which is what hijacking `--lr-color-brand` library-wide used to do).\n- `--lr-tab-group-vertical-nav-max-inline-size` (default: `var(--lr-size-12rem)`) — Maximum logical inline size of a vertical `start`/`end` nav. Long labels ellipsize inside that bound so the panel remains usable at narrow allocations.\n- `--track-color` — Upstream track color.\n- `--track-width` — Upstream track width."
24199
+ "value": "`<lr-tab-group>` — a tab strip composed from direct `<lr-tab panel=\"x\">` and\n`<lr-tab-panel name=\"x\">` children. This is the one canonical child model shared with both\nmapped upstreams; the group assigns private projection slots itself so consumer markup remains\na mechanical tag rename.\n\nImplements the WAI-ARIA APG tabs pattern. With the default `activation=\"auto\"`, Left/Right\n(swapped under RTL, or Up/Down when `placement` is `start`/`end`) move focus *and* selection\ntogether; with `activation=\"manual\"` they move focus only and Enter/Space commits, which the APG\nrequires whenever revealing a panel is expensive. Home/End jump to the first/last enabled tab,\nand a roving `tabindex` follows the focused tab. An enabled closable `<lr-tab>` adds\n`aria-keyshortcuts=\"Delete\"` to that same real tab button; Delete routes the close request through\nthe descriptor so `lr-close` still targets `<lr-tab>`. The visual close affordance stays\nnon-focusable and accessibility-hidden, avoiding a nested interactive control. Rich `<lr-tab>`\ncontent is likewise inert while projected; only its accessibility-exposed, default-slot text\nnames the real tab button rather than leaving an interactive descendant inside it. Author\n`aria-hidden`, hidden, inert, and CSS-hidden branches never leak into that name, and visibility\nor text changes refresh it.\n\n**`inert` on a source child excludes its tab exactly as `disabled` does** — it never takes\nselection, never holds the roving `tabindex`, and arrow keys step past it — and the rendered tab\nbutton is itself marked `inert`, so a pointer cannot reach it either. Only the child's *own*\n`inert` counts: a whole group inerted by an open modal keeps its selection and panels intact.\n\n`defaultSlot` exposes the real unnamed shadow slot expected by mapped integrations. Lyra keeps\nit hidden because every accepted child is assigned to a deterministic named projection slot.\n\n**Overflow.** A horizontal tab row that does not fit stays natively scrollable and gains two\nscroll controls flanking the tablist inside `[part=\"nav\"]`, mirroring both upstreams. They are\nrendered only for a horizontal `placement` (a vertical strip scrolls in the block direction,\nwhich these controls do not address — the same restriction both upstreams apply) and are laid out\nonly while the tablist genuinely overflows, gated on the measurement the edge fade already uses,\nso a row that fits is never flanked by two dead buttons. `without-scroll-controls` (or Shoelace's\n`no-scroll-controls`) opts out, leaving the pre-8.0.0 behavior: native scrolling plus the fade.\nThe fade is deliberately kept alongside the controls — it says \"the row continues past this\nedge\", which the controls themselves cannot show, and both appear on exactly the same condition.\nBy default an inactive edge control is hidden once that direction has nothing left to scroll to.\nShoelace's `fixed-scroll-controls` keeps both controls present throughout an overflowing range;\nin that mode an exhausted control stays visible but remains a no-op. Edge state is measured in\nlogical coordinates, so controls and the one-sided fade remain truthful under RTL too.\nA vertical `start`/`end` nav stays shrinkable and is capped at\n`--lr-tab-group-vertical-nav-max-inline-size` (default `var(--lr-size-12rem)`), so long labels\nellipsize rather than consuming the panel's allocation.\n\n**The scroll controls are `aria-hidden=\"true\"` and `tabindex=\"-1\"`** — a pointer affordance only,\nmatching upstream. The tablist is already fully keyboard-scrollable without them: the roving\n`tabindex` puts every tab one arrow key away, and focusing a tab scrolls it into view. Adding two\ntab stops in the middle of the strip would therefore buy no capability and cost every keyboard\nuser two extra stops between the tabs and the panel. They still carry a localized `aria-label`,\nso the name is there for automation and for a consumer that chooses to expose them.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `8.0.0`\n- Rationale: This tag entered Lyra as a stable public API with documented behavior, accessibility, and cross-browser support.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Canonical `<lr-tab>`/`<lr-tab-panel>` pairs. |\n| `nav` | Upstream-compatible slot used by `<lr-tab>` descriptors. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `active-tab-indicator` | Indicator inside the active tab. |\n| `base` | Compatibility name for the root wrapper; use `tab-group`. |\n| `body` | Wrapper around all tab panels. |\n| `nav` | The row wrapping the tablist together with the two overflow scroll controls; mirrors the upstream part of the same name. |\n| `panel` | A single `role=\"tabpanel\"` wrapper (one per tab, hidden unless active). |\n| `scroll-button` | Shared part on both overflow scroll controls. |\n| `scroll-button--end` | Upstream modifier alias on `scroll-button-end`. |\n| `scroll-button--start` | Upstream modifier alias on `scroll-button-start`. |\n| `scroll-button-end` | The control that scrolls the tabs toward their inline end (\"next\" — the left-hand control under RTL). |\n| `scroll-button-glyph` | The chevron wrapper inside a scroll control. This is the element that mirrors under RTL; the icon itself never rotates. |\n| `scroll-button-start` | The control that scrolls the tabs toward their inline start (\"previous\" — the right-hand control under RTL). |\n| `scroll-button__base` | Export-compatible base name on both scroll controls. |\n| `tab` | A single tab button. |\n| `tab-group` | The root wrapper around the tablist and panels. It is the same node as `base`. |\n| `tablist` | The `role=\"tablist\"` row of tab buttons. |\n| `tabs` | Upstream name on the same scroll container as `tablist`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--indicator-color` — Upstream alias for the active indicator color.\n- `--lr-scroll-fade-size` (default: `2rem`) — Width of the fade at each horizontal scroll edge. The fade is applied only while the tablist actually overflows, so a row that fits is never dimmed.\n- `--lr-tab-group-active-bg` (default: `color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active))`) — Background of a pressed, non-disabled tab.\n- `--lr-tab-group-active-color` (default: `var(--lr-tab-group-hover-color, var(--lr-color-text))`) — Text color of a pressed, non-disabled tab.\n- `--lr-tab-group-hover-color` (default: `var(--lr-color-text)`) — Text color of a hovered, non-disabled tab. Independent of the selected-state props above. Pressed-tab and scroll-control hooks use inline `var()` fallbacks rather than a `:host` declaration, so they inherit from the group or any ancestor without retheming the other states.\n- `--lr-tab-group-indicator-color` (default: `var(--lr-color-brand)`) — Color of the selected tab's underline, themeable independently of its text color.\n- `--lr-tab-group-scroll-button-active-bg` (default: `color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active))`) — Background of a pressed overflow scroll control.\n- `--lr-tab-group-scroll-button-active-color` (default: `var(--lr-color-text)`) — Text color of a pressed overflow scroll control.\n- `--lr-tab-group-scroll-button-hover-color` (default: `var(--lr-color-text)`) — Text color of a hovered overflow scroll control.\n- `--lr-tab-group-selected-color` (default: `var(--lr-color-brand)`) — Text color of the selected tab. Scoped to `[aria-selected='true']` only, so it never repaints a hovered unselected tab (which is what hijacking `--lr-color-brand` library-wide used to do).\n- `--lr-tab-group-vertical-nav-max-inline-size` (default: `var(--lr-size-12rem)`) — Maximum logical inline size of a vertical `start`/`end` nav. Long labels ellipsize inside that bound so the panel remains usable at narrow allocations.\n- `--track-color` — Upstream track color.\n- `--track-width` — Upstream track width."
23791
24200
  },
23792
24201
  "attributes": [
23793
24202
  {
@@ -23904,7 +24313,7 @@
23904
24313
  "name": "lr-table",
23905
24314
  "description": {
23906
24315
  "kind": "markdown",
23907
- "value": "`<lr-table>` — a sort/select-aware data table.\n\nA sortable-header activation first proposes a cancelable `lr-sort-request`. If accepted, client\nmode writes `sortKey`/`sortDir` and reorders the rendered rows before emitting `lr-sort`; server\nmode leaves those properties controlled and emits the same committed transaction so the caller\ncan fetch and supply the corresponding row order. Single/multiple selection is self-managed in\none `selectedRowKeys` store; expansion remains controlled through `expandedRowKeys`.\n\nHeader/row activation is delegated: one `click` and one `keydown`\nlistener on `<table>` resolve the target via `closest('[data-col-key]'\n| '[data-row-key]')` and a key→object lookup map, instead of allocating\nfresh per-column/per-row closures on every render. Both listeners inspect\nthe delegated event's composed path for actual native, role, or tabindex\nsemantics (see `INTERACTIVE_SELECTOR`) so a button/link/input inside a cell\nowns its own activation instead of triggering `lr-row-click`. A passive\ncustom element remains part of the row activation surface; an opaque\nclosed-shadow control marks its host with `data-table-interactive`.\n\nKeyboard focus follows a roving-tabindex pattern (one `tabindex=\"0\"` stop\namong the header cells, one among the body rows — see `focusedColKey()` /\n`focusedRowKey()`), matching this repo's other `role=\"grid\"`/composite\nwidgets. Left/Right/Home/End move within the header row; Up/Down/Home/End\nmove within the body; Down from the header enters the body's roving stop,\nand Up from the body's first row returns to the header's roving stop.\nEnter/Space still only sort/activate (see `activateColumn()` /\n`activateRow()`). When controlled rows or columns replace the focused\nmember, focus follows the same stable key when it survives and otherwise\nclamps to the nearest surviving index; an update never reclaims focus once\nthe user has moved it outside the table.\nBlank and later-duplicate column keys are omitted first-wins at assignment. Rows retain their\ncaller-owned records, then one canonical `rowKey` projection omits blank and later-duplicate\nidentities before filtering, counts, pagination, focus, actions, and events.\n\nSet `aria-label` on the host to give the `role=\"grid\"` element an\naccessible name; it's forwarded into the shadow DOM's `<table>`.\n\n`columns[].priority` ('medium' | 'low') hides that column under\n`[part='base']`'s `@container` breakpoints; `[part='reveal-columns-button']`\nforces them all back into view. The public `hasHiddenPriorityColumns`\nproperty reports only whether a priority column is actually hidden right\nnow, measured via `ResizeObserver` on `[part='base']` plus a post-render DOM\ncheck. The toggle separately measures whether priority columns would hide\nat the current allocation, so it stays available while force-visible mode\nis active without making `hasHiddenPriorityColumns` contradict the rendered\nstate. `priorityColumnsVisible` defaults to `false` and toggles itself on\n`[part='reveal-columns-button']` activation with no external wiring\nrequired, but is also settable up front (property or the reflected\n`priority-columns-visible` attribute) to restore a previously-persisted\npreference, and readable back — directly or via the `lr-priority-columns-visibility-change`\nevent — to persist the current one. `columns[].sticky` pins a column's\nheader/cells to the inline-start (`'start'`) or inline-end (`'end'`)\nedge while the table scrolls horizontally.\n\n`expandedContent` (a table-level `(row: T) => unknown`, not a per-column\nhook, since the resulting panel spans every column via `colspan`) makes\nevery row render a leading chevron-toggle cell before its data columns.\n`canExpand` optionally gates which rows actually get an interactive\ntoggle — a row that fails it still gets a blank leading cell for column\nalignment. Which rows are currently open is fully consumer-owned via\n`expandedRowKeys` (a `Set<string | number>` of row keys, per `rowKey`/\n`keyOf()`) — the table only reads it and emits `lr-row-expand-toggle`\non activation. (`selectedRowKeys` is self-managed for selection, and\n`sortKey`/`sortDir` are *not* a parallel case either: under\nthe default `sortMode: 'client'` the table writes them on header\nactivation.)\n\nSelection is opt-in through the `selectionMode` property. Use `single` or\n`multiple` to self-manage row selection; the default `none` remains\npresentational. `selectedRowKeys` contains the raw keys in every mode; single mode enforces one.\n\n`filterable` adds a compact search field above the grid. `filterText` is\ncontrolled and emits `lr-filter-change`; `filter` can provide a typed\npredicate, otherwise the row is matched against its JSON representation.\nThe internal filter and cell-editor native value events are contained at\ntheir translation boundaries; hosts receive `lr-filter-change` and\n`lr-cell-edit` instead.\n`pageSize` bounds pagination through the existing `<lr-pagination>` primitive (100 rows by\ndefault, normalized to 1..500). Client mode owns the accepted page and slices `rows`; server mode\nleaves `page` controlled, bounds the supplied page to `pageSize`, and uses `totalItems` for the\nnavigation summary. `loading` keeps the table shell busy; `loadingAppearance`\nchooses how — the default `'spinner'` replaces the grid with an indeterminate\nspinner, while `'skeleton'` keeps the real `<colgroup>`/`<thead>` (and the\nfilter/pagination chrome) and fills the body with `skeletonRows` placeholder\nrows, so column geometry survives the load instead of collapsing and\nreflowing. Loading takes precedence over both empty branches. Because a skeleton needs a\ncolumn schema, a skeleton request received before `columns` arrives temporarily falls back to\nthe spinner rather than showing the no-columns empty state. Initial declarative loading stays\nsilent; every post-mount transition into either\nloading appearance appends to the shared light-DOM polite sink — including repeated cycles —\nwhile every placeholder opts out of `<lr-skeleton>`'s own announcement.\nColumns with `editTrigger: 'double-click'` open a native text/number editor on\ndouble-click and emit `lr-cell-edit`; row mutation remains consumer-owned.\n`editTrigger: 'always'` instead renders that editor in every body cell of the\ncolumn from first paint — a settings/rate-style column meant to be typed\nstraight into. Persistent editors are plain tab stops (no `tabindex` of their\nown, exactly like the row-expand toggle) outside the header/row roving model,\nso arrow keys still navigate the grid from a row's own tab stop and act as\ncaret movement once focus is inside a field. Enter commits and keeps focus;\nEscape has nothing to cancel back to, so it is left uncancelled for an\nancestor dialog/popover. Their value binds as a content attribute, so once\nthe user has typed into one an out-of-band `rows` update to that same cell no\nlonger replaces the draft; an untouched editor still picks up a new value.\nFocus is restored across a re-sort that moves the editor's node, and dropped\n(never re-aimed at an unrelated row) when its row leaves the rendered page.\n`spellcheck`/`autocapitalize`/`autoCorrect` forward to the filter input and, for a `'text'`\n(the default) `editType`, the inline cell editor -- no effect on a `'number'` cell editor.\n`groupBy` inserts non-focusable group header rows before each group; use\n`groupLabel` when the raw group key needs custom content. A client-mode\nsort applies *within* each group, so grouping survives sorting on a column\nunrelated to the group key.\n\n`columns[].heatValue` opts a column into heat-tint mode: its numeric return value is normalized\nagainst a shared scale spanning every `heatValue`-defining column across every currently-rendered\nrow (auto-derived, or overridden via `heatTintScale`) and painted as a `color-mix()` background via\nthe retheme-able `--lr-table-heat-tint-lo`/`-hi` custom properties (matching `lr-heatmap`'s own\nramp-token convention). The heat-tint and resize properties can be set on the table or a theme\nancestor; a value set directly on the table wins through the normal cascade. `rowTotal`/`grandTotal`\nadd a trailing column mirroring `expandedContent`'s\nleading one: `rowTotal(row)` renders per-row, `grandTotal(rows)` renders at its intersection with\nthe footer row (only when a column also defines `footer`) — both share `footer`'s own\n\"consumer computes/renders\" contract rather than assuming addition.\n\nThe built-in empty state is addressable rather than fixed: every `<lr-empty>` the table renders\ncarries `part=\"empty\"` and re-exports its own inner parts as `empty-heading`/`empty-description`/\n`empty-icon`/`empty-actions`/`empty-base`, the two *data*-empty branches (no rows at all, and\nfiltered/paginated down to zero) render it as the fallback content of a named `empty` slot so a\nconsumer can replace it wholesale, and `emptyCompact` overrides each branch's built-in `compact`\ndefault. The no-columns branch is deliberately **not** slot-replaceable — it reports a\nconfiguration problem (`noColumnsHeading`), not \"this query returned nothing\", and a single slot\ncovering all three would collapse that distinction.\n\n`layout` sets a floor on the `<table>`'s `table-layout`: `'fixed'` forces it even with no column\nwidths, while the default `'auto'` still resolves to `fixed` whenever a column declares a `width`\nor a drag-resize is in flight (column resizing does not work under `table-layout: auto`).\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `empty` | Replaces the built-in empty state on the two *data*-empty branches (no rows at all, and filtered/paginated down to zero). Left unfilled, the built-in `[part='empty']` `<lr-empty>` renders as this slot's fallback content. The no-columns branch renders its own `noColumnsHeading` state and is not slot-replaceable. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper around the `<table>` and its footer controls. |\n| `caption` | The `<caption>` element, rendered only when `caption` is set. |\n| `cell` | Each body `<td>`. |\n| `cell-editor` | The native inline cell editor: shown after a double-click on an `editTrigger: 'double-click'` cell, and rendered persistently in every body cell of an `editTrigger: 'always'` column. |\n| `empty` | The built-in `<lr-empty>` host, in all three empty states (no columns configured, no rows at all, and filtered/paginated down to zero rows). The two data-empty states render it as the `empty` slot's fallback, so it disappears once that slot is filled. Note that the no-columns and no-rows states return the empty element as the shadow root's own root, with no `[part='base']` wrapper around it — `::part(base)` does not apply in those two states, only in the filtered-to-zero one. |\n| `empty-actions` | Exported from the built-in `<lr-empty>`'s `actions` part. |\n| `empty-base` | Exported from the built-in `<lr-empty>`'s own `base` part. |\n| `empty-description` | Exported from the built-in `<lr-empty>`'s `description` part. |\n| `empty-heading` | Exported from the built-in `<lr-empty>`'s `heading` part. |\n| `empty-icon` | Exported from the built-in `<lr-empty>`'s `icon` part. |\n| `expand-toggle-cell` | Each row's (and the header's) leading chevron-toggle cell, rendered only when `expandedContent` is set. |\n| `expanded-cell` | The single `colspan`-spanning `<td>` inside `expanded-row`, containing `expandedContent(row)`. |\n| `expanded-row` | The full-width panel `<tr>` rendered beneath a row whose key is in `expandedRowKeys`. |\n| `filter` | The optional row-filter input. |\n| `filter-label` | The `<label>` wrapping the filter input. |\n| `foot` | The `<tfoot>`, only rendered when at least one column defines `footer`. |\n| `footer-cell` | A single footer cell. |\n| `footer-row` | The single footer row. |\n| `group-cell` | The full-width group header cell. |\n| `group-row` | A non-focusable group header row. |\n| `head` | The `<thead>` element. |\n| `header-cell` | Each `<th>` header cell. |\n| `loading` | The loading-state wrapper. Under `loadingAppearance=\"spinner\"` (the default) it is the visible block holding the spinner; under `\"skeleton\"` it is the visually-hidden aria-hidden announcement mirror, since the placeholder rows are the visible affordance. It is never itself live; post-mount loading announcements use the shared light-DOM polite sink. |\n| `more-button` | The \"load more\" control, shown when `hasMore` is true. |\n| `pagination` | The optional pagination component. |\n| `resize-handle` | The focusable separator used to resize a `resizable` column. |\n| `reveal-columns-button` | The button that toggles `priority`-hidden columns back into view. |\n| `row` | Each body `<tr>`. |\n| `row-expand-icon` | The chevron icon inside `row-expand-toggle`. |\n| `row-expand-toggle` | The `<button>` inside `expand-toggle-cell`, absent for a row that fails `canExpand`. |\n| `row-total-cell` | Each body row's trailing `<td>` holding `rowTotal(row)`, rendered only when `rowTotal` is set. The corresponding footer-row cell (holding `grandTotal`) is a `footer-cell` instead, matching every other footer cell. |\n| `skeleton` | Each `<lr-skeleton>` placeholder inside a `loadingAppearance=\"skeleton\"` body cell. Its rows and cells reuse the ordinary `row`/`cell`/`row-total-cell` parts (that is what keeps them geometrically identical to real rows), so this is the part to target for the placeholder's own look — e.g. `::part(skeleton) { --lr-skeleton-h: 2em; }`. |\n| `sort-icon` | The chevron shown in the active sortable column's header cell. |\n| `table` | The `<table role=\"grid\">` element. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-table-header-sorted-bg` (default: `var(--lr-color-surface)`) — Background of the currently-sorted column's header cell (`[aria-sort]` other than `none`). Same rationale as `--lr-table-row-selected-bg`: `::part(header-cell)[aria-sort]` is invalid CSS, so this token is the supported way to recolor the sorted header without hijacking a library-wide token.\n- `--lr-table-header-sorted-color` (default: `inherit`) — Text color of the currently-sorted column's header cell.\n- `--lr-table-heat-t` — This cell's position on the heat-tint ramp, as a percentage string. Set inline by the component on each `[data-heat]` cell; not consumer-settable.\n- `--lr-table-heat-tint-hi` (default: `var(--lr-color-brand)`) — High endpoint of the heat-tint ramp used by `heatValue` columns. Inherits from theme ancestors.\n- `--lr-table-heat-tint-lo` (default: `var(--lr-color-brand-quiet)`) — Low endpoint of the heat-tint ramp used by `heatValue` columns. Inherits from theme ancestors.\n- `--lr-table-max-height` (default: `none`) — Cap on the scroll container's block size, past which the table body scrolls.\n- `--lr-table-resize-handle-active-bg` (default: `var(--lr-table-resize-handle-hover-bg,var(--lr-color-brand))`) — Resize-handle pressed background.\n- `--lr-table-resize-handle-active-opacity` (default: `calc(var(--lr-table-resize-handle-hover-opacity,var(--lr-table-resize-handle-opacity,0.12))*2)`) — Resize-handle pressed opacity.\n- `--lr-table-resize-handle-hover-bg` (default: `var(--lr-color-brand)`) — Resize-handle hover/focus background.\n- `--lr-table-resize-handle-hover-opacity` (default: `var(--lr-table-resize-handle-opacity,0.12)`) — Resize-handle hover/focus opacity.\n- `--lr-table-resize-handle-opacity` (default: `0.12`) — Hover/focus opacity of the resize handle. Legacy shared-state hook; inherits from theme ancestors.\n- `--lr-table-resize-min-width` (default: `var(--lr-size-3rem)`) — Default minimum width for a resizable column without an explicit pixel `minWidth`. Inherits from theme ancestors.\n- `--lr-table-row-selected-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a row whose `aria-selected` is `true`. Shadow Parts forbids an attribute selector after `::part()`, so `::part(row)[aria-selected]` is invalid CSS and the selected row could otherwise only be restyled by hijacking the library-wide `--lr-color-brand-quiet` token.\n- `--lr-table-row-stripe-bg` (default: `transparent`) — Background of alternating body rows. The token is read only on rows carrying the internal stripe marker, so it can be set on the table or an ancestor without affecting group, expanded, hover, or selected rows.\n- `--lr-table-sticky-offset` (default: `0`) — Distance a `sticky` column pins from the inline edge. Measured and set inline per column by the component so multiple sticky columns stack instead of overlapping; falls back to `0` for the first one, or before the first measurement pass."
24316
+ "value": "`<lr-table>` — a sort/select-aware data table.\n\nA sortable-header activation first proposes a cancelable `lr-sort-request`. If accepted, client\nmode writes `sortKey`/`sortDir` and reorders the rendered rows before emitting `lr-sort`; server\nmode leaves those properties controlled and emits the same committed transaction so the caller\ncan fetch and supply the corresponding row order. Single/multiple selection is self-managed in\none `selectedRowKeys` store; expansion remains controlled through `expandedRowKeys`.\n\nHeader/row activation is delegated: one `click` and one `keydown`\nlistener on `<table>` resolve the target via `closest('[data-col-key]'\n| '[data-row-key]')` and a key→object lookup map, instead of allocating\nfresh per-column/per-row closures on every render. Both listeners inspect\nthe delegated event's composed path for actual native, role, or tabindex\nsemantics (see `INTERACTIVE_SELECTOR`) so a button/link/input inside a cell\nowns its own activation instead of triggering `lr-row-click`. A passive\ncustom element remains part of the row activation surface; an opaque\nclosed-shadow control marks its host with `data-table-interactive`.\n\nKeyboard focus follows a roving-tabindex pattern (one `tabindex=\"0\"` stop\namong the header cells, one among the body rows — see `focusedColKey()` /\n`focusedRowKey()`), matching this repo's other `role=\"grid\"`/composite\nwidgets. Left/Right/Home/End move within the header row; Up/Down/Home/End\nmove within the body; Down from the header enters the body's roving stop,\nand Up from the body's first row returns to the header's roving stop.\nEnter/Space still only sort/activate (see `activateColumn()` /\n`activateRow()`). When controlled rows or columns replace the focused\nmember, focus follows the same stable key when it survives and otherwise\nclamps to the nearest surviving index; an update never reclaims focus once\nthe user has moved it outside the table.\nBlank and later-duplicate column keys are omitted first-wins at assignment. Rows retain their\ncaller-owned records, then one canonical `rowKey` projection omits blank and later-duplicate\nidentities before filtering, counts, pagination, focus, actions, and events.\n\nSet `aria-label` on the host to give the `role=\"grid\"` element an\naccessible name; it's forwarded into the shadow DOM's `<table>`.\n\n`columns[].priority` ('medium' | 'low') hides that column under\n`[part='base']`'s `@container` breakpoints; `[part='reveal-columns-button']`\nforces them all back into view. The public `hasHiddenPriorityColumns`\nproperty reports only whether a priority column is actually hidden right\nnow, measured via `ResizeObserver` on `[part='base']` plus a post-render DOM\ncheck. The toggle separately measures whether priority columns would hide\nat the current allocation, so it stays available while force-visible mode\nis active without making `hasHiddenPriorityColumns` contradict the rendered\nstate. `priorityColumnsVisible` defaults to `false` and toggles itself on\n`[part='reveal-columns-button']` activation with no external wiring\nrequired, but is also settable up front (property or the reflected\n`priority-columns-visible` attribute) to restore a previously-persisted\npreference, and readable back — directly or via the `lr-priority-columns-visibility-change`\nevent — to persist the current one. `columns[].sticky` pins a column's\nheader/cells to the inline-start (`'start'`) or inline-end (`'end'`)\nedge while the table scrolls horizontally.\n\n`expandedContent` (a table-level `(row: T) => unknown`, not a per-column\nhook, since the resulting panel spans every column via `colspan`) makes\nevery row render a leading chevron-toggle cell before its data columns.\n`canExpand` optionally gates which rows actually get an interactive\ntoggle — a row that fails it still gets a blank leading cell for column\nalignment. Which rows are currently open is fully consumer-owned via\n`expandedRowKeys` (a `Set<string | number>` of row keys, per `rowKey`/\n`keyOf()`) — the table only reads it and emits `lr-row-expand-toggle`\non activation. (`selectedRowKeys` is self-managed for selection, and\n`sortKey`/`sortDir` are *not* a parallel case either: under\nthe default `sortMode: 'client'` the table writes them on header\nactivation.)\n\nSelection is opt-in through the `selectionMode` property. Use `single` or\n`multiple` to self-manage row selection; the default `none` remains\npresentational. `selectedRowKeys` contains the raw keys in every mode; single mode enforces one.\n\n`filterable` adds a compact search field above the grid. `filterText` is\ncontrolled and emits `lr-filter-change`; `filter` can provide a typed\npredicate, otherwise the row is matched against its JSON representation.\nThe internal filter and cell-editor native value events are contained at\ntheir translation boundaries; hosts receive `lr-filter-change` and\n`lr-cell-edit` instead.\n`pageSize` bounds pagination through the existing `<lr-pagination>` primitive (100 rows by\ndefault, normalized to 1..500). Client mode owns the accepted page and slices `rows`; server mode\nleaves `page` controlled, bounds the supplied page to `pageSize`, and uses `totalItems` for the\nnavigation summary. `loading` keeps the table shell busy; `loadingAppearance`\nchooses how — the default `'spinner'` replaces the grid with an indeterminate\nspinner, while `'skeleton'` keeps the real `<colgroup>`/`<thead>` (and the\nfilter/pagination chrome) and fills the body with `skeletonRows` placeholder\nrows, so column geometry survives the load instead of collapsing and\nreflowing. Loading takes precedence over both empty branches. Because a skeleton needs a\ncolumn schema, a skeleton request received before `columns` arrives temporarily falls back to\nthe spinner rather than showing the no-columns empty state. Initial declarative loading stays\nsilent; every post-mount transition into either\nloading appearance appends to the shared light-DOM polite sink — including repeated cycles —\nwhile every placeholder opts out of `<lr-skeleton>`'s own announcement.\nColumns with `editTrigger: 'double-click'` open a native text/number editor on\ndouble-click and emit `lr-cell-edit`; row mutation remains consumer-owned.\n`editTrigger: 'always'` instead renders that editor in every body cell of the\ncolumn from first paint — a settings/rate-style column meant to be typed\nstraight into. Persistent editors are plain tab stops (no `tabindex` of their\nown, exactly like the row-expand toggle) outside the header/row roving model,\nso arrow keys still navigate the grid from a row's own tab stop and act as\ncaret movement once focus is inside a field. Enter commits and keeps focus;\nEscape has nothing to cancel back to, so it is left uncancelled for an\nancestor dialog/popover. Their value binds as a content attribute, so once\nthe user has typed into one an out-of-band `rows` update to that same cell no\nlonger replaces the draft; an untouched editor still picks up a new value.\nFocus is restored across a re-sort that moves the editor's node, and dropped\n(never re-aimed at an unrelated row) when its row leaves the rendered page.\n`spellcheck`/`autocapitalize`/`autoCorrect` forward to the filter input and, for a `'text'`\n(the default) `editType`, the inline cell editor -- no effect on a `'number'` cell editor.\n`groupBy` inserts non-focusable group header rows before each group; use\n`groupLabel` when the raw group key needs custom content. A client-mode\nsort applies *within* each group, so grouping survives sorting on a column\nunrelated to the group key.\n\n`columns[].heatValue` opts a column into heat-tint mode: its numeric return value is normalized\nagainst a shared scale spanning every `heatValue`-defining column across every currently-rendered\nrow (auto-derived, or overridden via `heatTintScale`) and painted as a `color-mix()` background via\nthe retheme-able `--lr-table-heat-tint-lo`/`-hi` custom properties (matching `lr-heatmap`'s own\nramp-token convention). The heat-tint and resize properties can be set on the table or a theme\nancestor; a value set directly on the table wins through the normal cascade. `rowTotal`/`grandTotal`\nadd a trailing column mirroring `expandedContent`'s\nleading one: `rowTotal(row)` renders per-row, `grandTotal(rows)` renders at its intersection with\nthe footer row (only when a column also defines `footer`) — both share `footer`'s own\n\"consumer computes/renders\" contract rather than assuming addition.\n\nThe built-in empty state is addressable rather than fixed: every `<lr-empty>` the table renders\ncarries `part=\"empty\"` and re-exports its own inner parts as `empty-heading`/`empty-description`/\n`empty-icon`/`empty-actions`/`empty-base`, the two *data*-empty branches (no rows at all, and\nfiltered/paginated down to zero) render it as the fallback content of a named `empty` slot so a\nconsumer can replace it wholesale, and `emptyCompact` overrides each branch's built-in `compact`\ndefault. The no-columns branch is deliberately **not** slot-replaceable — it reports a\nconfiguration problem (`noColumnsHeading`), not \"this query returned nothing\", and a single slot\ncovering all three would collapse that distinction.\n\n`layout` sets a floor on the `<table>`'s `table-layout`: `'fixed'` forces it even with no column\nwidths, while the default `'auto'` still resolves to `fixed` whenever a column declares a `width`\nor a drag-resize is in flight (column resizing does not work under `table-layout: auto`).\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `empty` | Replaces the built-in empty state on the two *data*-empty branches (no rows at all, and filtered/paginated down to zero). Left unfilled, the built-in `[part='empty']` `<lr-empty>` renders as this slot's fallback content. The no-columns branch renders its own `noColumnsHeading` state and is not slot-replaceable. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper around the `<table>` and its footer controls. |\n| `caption` | The `<caption>` element, rendered only when `caption` is set. |\n| `cell` | Each body `<td>`. |\n| `cell-editor` | The native inline cell editor: shown after a double-click on an `editTrigger: 'double-click'` cell, and rendered persistently in every body cell of an `editTrigger: 'always'` column. |\n| `empty` | The built-in `<lr-empty>` host, in all three empty states (no columns configured, no rows at all, and filtered/paginated down to zero rows). The two data-empty states render it as the `empty` slot's fallback, so it disappears once that slot is filled. Note that the no-columns and no-rows states return the empty element as the shadow root's own root, with no `[part='base']` wrapper around it — `::part(base)` does not apply in those two states, only in the filtered-to-zero one. |\n| `empty-actions` | Exported from the built-in `<lr-empty>`'s `actions` part. |\n| `empty-base` | Exported from the built-in `<lr-empty>`'s own `base` part. |\n| `empty-description` | Exported from the built-in `<lr-empty>`'s `description` part. |\n| `empty-heading` | Exported from the built-in `<lr-empty>`'s `heading` part. |\n| `empty-icon` | Exported from the built-in `<lr-empty>`'s `icon` part. |\n| `expand-toggle-cell` | Each row's (and the header's) leading chevron-toggle cell, rendered only when `expandedContent` is set. |\n| `expanded-cell` | The single `colspan`-spanning `<td>` inside `expanded-row`, containing `expandedContent(row)`. |\n| `expanded-row` | The full-width panel `<tr>` rendered beneath a row whose key is in `expandedRowKeys`. |\n| `filter` | The optional row-filter input. |\n| `filter-label` | The `<label>` wrapping the filter input. |\n| `foot` | The `<tfoot>`, only rendered when at least one column defines `footer`. |\n| `footer-cell` | A single footer cell. |\n| `footer-row` | The single footer row. |\n| `group-cell` | The full-width group header cell. |\n| `group-row` | A non-focusable group header row. |\n| `head` | The `<thead>` element. |\n| `header-cell` | Each `<th>` header cell. |\n| `loading` | The loading-state wrapper. Under `loadingAppearance=\"spinner\"` (the default) it is the visible block holding the spinner; under `\"skeleton\"` it is the visually-hidden aria-hidden announcement mirror, since the placeholder rows are the visible affordance. It is never itself live; post-mount loading announcements use the shared light-DOM polite sink. |\n| `more-button` | The \"load more\" control, shown when `hasMore` is true. |\n| `pagination` | The optional pagination component. |\n| `resize-handle` | The focusable separator used to resize a `resizable` column. |\n| `reveal-columns-button` | The button that toggles `priority`-hidden columns back into view. |\n| `row` | Each body `<tr>`. |\n| `row-expand-icon` | The chevron icon inside `row-expand-toggle`. |\n| `row-expand-toggle` | The `<button>` inside `expand-toggle-cell`, absent for a row that fails `canExpand`. |\n| `row-total-cell` | Each body row's trailing `<td>` holding `rowTotal(row)`, rendered only when `rowTotal` is set. The corresponding footer-row cell (holding `grandTotal`) is a `footer-cell` instead, matching every other footer cell. |\n| `skeleton` | Each `<lr-skeleton>` placeholder inside a `loadingAppearance=\"skeleton\"` body cell. Its rows and cells reuse the ordinary `row`/`cell`/`row-total-cell` parts (that is what keeps them geometrically identical to real rows), so this is the part to target for the placeholder's own look — e.g. `::part(skeleton) { --lr-skeleton-h: 2em; }`. |\n| `sort-icon` | The chevron shown in the active sortable column's header cell. |\n| `table` | The `<table role=\"grid\">` element. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-table-cell-color` (default: `inherit`) — Text colour of body cells; inherits the host's own colour by default.\n- `--lr-table-cell-link-color` (default: `var(--lr-color-brand)`) — Colour of an anchor returned from a column's `cell(row)`. Such an anchor renders inside this component's shadow root, so page CSS cannot reach it and `::part()` cannot select past the first compound selector to reach it either; without this hook it computes to the UA default link blue. Set `revert` for the UA default.\n- `--lr-table-cell-link-hover-color` (default: `var(--lr-table-cell-link-color,var(--lr-color-brand))`) — Colour of that anchor on hover and `:focus-visible`, which also thicken its underline.\n- `--lr-table-header-sorted-bg` (default: `var(--lr-color-surface)`) — Background of the currently-sorted column's header cell (`[aria-sort]` other than `none`). Same rationale as `--lr-table-row-selected-bg`: `::part(header-cell)[aria-sort]` is invalid CSS, so this token is the supported way to recolor the sorted header without hijacking a library-wide token.\n- `--lr-table-header-sorted-color` (default: `inherit`) — Text color of the currently-sorted column's header cell.\n- `--lr-table-heat-t` — This cell's position on the heat-tint ramp, as a percentage string. Set inline by the component on each `[data-heat]` cell; not consumer-settable.\n- `--lr-table-heat-tint-hi` (default: `var(--lr-color-brand)`) — High endpoint of the heat-tint ramp used by `heatValue` columns. Inherits from theme ancestors.\n- `--lr-table-heat-tint-lo` (default: `var(--lr-color-brand-quiet)`) — Low endpoint of the heat-tint ramp used by `heatValue` columns. Inherits from theme ancestors.\n- `--lr-table-max-height` (default: `none`) — Cap on the scroll container's block size, past which the table body scrolls.\n- `--lr-table-resize-handle-active-bg` (default: `var(--lr-table-resize-handle-hover-bg,var(--lr-color-brand))`) — Resize-handle pressed background.\n- `--lr-table-resize-handle-active-opacity` (default: `calc(var(--lr-table-resize-handle-hover-opacity,var(--lr-table-resize-handle-opacity,0.12))*2)`) — Resize-handle pressed opacity.\n- `--lr-table-resize-handle-hover-bg` (default: `var(--lr-color-brand)`) — Resize-handle hover/focus background.\n- `--lr-table-resize-handle-hover-opacity` (default: `var(--lr-table-resize-handle-opacity,0.12)`) — Resize-handle hover/focus opacity.\n- `--lr-table-resize-handle-opacity` (default: `0.12`) — Hover/focus opacity of the resize handle. Legacy shared-state hook; inherits from theme ancestors.\n- `--lr-table-resize-min-width` (default: `var(--lr-size-3rem)`) — Default minimum width for a resizable column without an explicit pixel `minWidth`. Inherits from theme ancestors.\n- `--lr-table-row-selected-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a row whose `aria-selected` is `true`. Shadow Parts forbids an attribute selector after `::part()`, so `::part(row)[aria-selected]` is invalid CSS and the selected row could otherwise only be restyled by hijacking the library-wide `--lr-color-brand-quiet` token.\n- `--lr-table-row-stripe-bg` (default: `transparent`) — Background of alternating body rows. The token is read only on rows carrying the internal stripe marker, so it can be set on the table or an ancestor without affecting group, expanded, hover, or selected rows.\n- `--lr-table-sticky-offset` (default: `0`) — Distance a `sticky` column pins from the inline edge. Measured and set inline per column by the component so multiple sticky columns stack instead of overlapping; falls back to `0` for the first one, or before the first measurement pass."
23908
24317
  },
23909
24318
  "attributes": [
23910
24319
  {
@@ -24135,6 +24544,21 @@
24135
24544
  "value": "Type: `string | undefined`"
24136
24545
  }
24137
24546
  },
24547
+ {
24548
+ "name": "scroll-mode",
24549
+ "description": {
24550
+ "kind": "markdown",
24551
+ "value": "Which element scrolls when the table overflows; see `TableScrollMode`. Defaults to `'self'`,\nwhich is the pre-10.0 behaviour.\n\nType: `TableScrollMode` \nDefault: `'self'`"
24552
+ },
24553
+ "values": [
24554
+ {
24555
+ "name": "self"
24556
+ },
24557
+ {
24558
+ "name": "page"
24559
+ }
24560
+ ]
24561
+ },
24138
24562
  {
24139
24563
  "name": "selection-mode",
24140
24564
  "description": {
@@ -25521,7 +25945,7 @@
25521
25945
  "name": "lr-timeline",
25522
25946
  "description": {
25523
25947
  "kind": "markdown",
25524
- "value": "`<lr-timeline>` — an ordered, connected sequence of past-event rows (an audit trail, an agent\naction history, a changelog) composed from `<lr-timeline-item>` light-DOM children, joined by a\ncontinuous connecting rail. First-party invention: no Web Awesome/Shoelace counterpart exists, so\nthis follows the library's own established conventions rather than mirroring an upstream API.\n\nA pure, read-only, declarative display component — same zero-event shape as `<lr-badge>`/\n`<lr-avatar>`/`<lr-skeleton>`. It never mutates its own children and fires no events; a\nconsumer who needs to react to item count changes already owns the mutation (they're the one\nadding/removing `<lr-timeline-item>` children) and can listen to the native `slotchange` event\ndirectly if truly needed.\n\nNo keyboard navigation, roving-tabindex, or selection model of any kind — a deliberate scope\ndecision, not an oversight. A timeline is a passive record display, not a navigable widget; see\n`<lr-timeline-item>`'s class doc for the full reasoning behind dropping an earlier\n\"interactive row\" design. Not a form-associated control — no value to submit, no label/hint/error\nchrome.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | `<lr-timeline-item>` children, in display order. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. `role=\"list\"` lives here directly (a timeline isn't a navigation landmark, so it doesn't need a two-layer `base`+`list` split). Flex container: `flex-direction: column` in `vertical` orientation (the default), `flex-direction: row` (with `overflow-x: auto`, `overflow-y: hidden`, and an edge-fade `mask-image` applied only while the strip actually overflows) in `horizontal` orientation. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-scroll-fade-size` (default: `2rem`) — Inline size of each edge fade while a horizontal timeline overflows. Forced-colors mode disables the masks while retaining native scrolling.\n- `--lr-timeline-gap` (default: `var(--lr-space-l)`) — Spacing between consecutive items along the timeline's main axis; also the length each item's own rail visually bridges to reach the next item's marker. Declared here but actually consumed inside each `<lr-timeline-item>`'s own stylesheet, via ordinary CSS custom-property inheritance across the slot boundary."
25948
+ "value": "`<lr-timeline>` — an ordered, connected sequence of past-event rows (an audit trail, an agent\naction history, a changelog) composed from `<lr-timeline-item>` light-DOM children, joined by a\ncontinuous connecting rail. First-party invention: no Web Awesome/Shoelace counterpart exists, so\nthis follows the library's own established conventions rather than mirroring an upstream API.\n\nA pure, read-only, declarative display component — same zero-event shape as `<lr-badge>`/\n`<lr-avatar>`/`<lr-skeleton>`. It never mutates its own children and fires no events; a\nconsumer who needs to react to item count changes already owns the mutation (they're the one\nadding/removing `<lr-timeline-item>` children) and can listen to the native `slotchange` event\ndirectly if truly needed.\n\nNo keyboard navigation, roving-tabindex, or selection model of any kind — a deliberate scope\ndecision, not an oversight. A timeline is a passive record display, not a navigable widget; see\n`<lr-timeline-item>`'s class doc for the full reasoning behind dropping an earlier\n\"interactive row\" design. Not a form-associated control — no value to submit, no label/hint/error\nchrome.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | `<lr-timeline-item>` children, in display order. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. `role=\"list\"` lives here directly (a timeline isn't a navigation landmark, so it doesn't need a two-layer `base`+`list` split). Flex container: `flex-direction: column` in `vertical` orientation (the default), `flex-direction: row` (with `overflow-x: auto`, `overflow-y: hidden`, and an edge-fade `mask-image` applied only while the strip actually overflows) in `horizontal` orientation. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-scroll-fade-size` (default: `2rem`) — Inline size of each edge fade while a horizontal timeline overflows. Forced-colors mode disables the masks while retaining native scrolling.\n- `--lr-timeline-collision-offset` (default: `var(--lr-space-l)`) — Cross-axis step between items stacked by `collision=\"stack\"`. Each collision lane is indented one step further, so a wider marker can claim more room without the lanes overlapping again. Ignored unless both `scale=\"time\"` and `collision=\"stack\"` are set.\n- `--lr-timeline-gap` (default: `var(--lr-space-l)`) — Spacing between consecutive items along the timeline's main axis; also the length each item's own rail visually bridges to reach the next item's marker. Declared here but actually consumed inside each `<lr-timeline-item>`'s own stylesheet, via ordinary CSS custom-property inheritance across the slot boundary.\n- `--lr-timeline-time-extent` (default: `var(--lr-size-20rem)`) — Distance the `scale=\"time\"` axis distributes items along: `block-size` when vertical, `inline-size` when horizontal. Time-scaled items are absolutely positioned, and a percentage offset against an auto-sized track resolves to zero, so the axis needs a definite extent. Ignored in the default `scale=\"flow\"`."
25525
25949
  },
25526
25950
  "attributes": [
25527
25951
  {
@@ -25531,6 +25955,21 @@
25531
25955
  "value": "Host-level `aria-label` override for the list's accessible name — wins over the localized\ndefault `\"Timeline\"`. Needed because the `role=\"list\"` element lives in the shadow root and\nnever inherits a host attribute automatically — same reasoning as `<lr-breadcrumb>`'s\nidentical property. Unset falls back to the localized default; an explicitly empty\n`aria-label` stays empty.\n\nType: `string | undefined`"
25532
25956
  }
25533
25957
  },
25958
+ {
25959
+ "name": "collision",
25960
+ "description": {
25961
+ "kind": "markdown",
25962
+ "value": "Type: `LyraTimelineCollision`"
25963
+ },
25964
+ "values": [
25965
+ {
25966
+ "name": "overlap"
25967
+ },
25968
+ {
25969
+ "name": "stack"
25970
+ }
25971
+ ]
25972
+ },
25534
25973
  {
25535
25974
  "name": "locale",
25536
25975
  "description": {
@@ -25552,6 +25991,21 @@
25552
25991
  "name": "vertical"
25553
25992
  }
25554
25993
  ]
25994
+ },
25995
+ {
25996
+ "name": "scale",
25997
+ "description": {
25998
+ "kind": "markdown",
25999
+ "value": "Type: `LyraTimelineScale`"
26000
+ },
26001
+ "values": [
26002
+ {
26003
+ "name": "flow"
26004
+ },
26005
+ {
26006
+ "name": "time"
26007
+ }
26008
+ ]
25555
26009
  }
25556
26010
  ]
25557
26011
  },
@@ -26637,7 +27091,7 @@
26637
27091
  "name": "aria-label",
26638
27092
  "description": {
26639
27093
  "kind": "markdown",
26640
- "value": "Host-level `aria-label` override for every step popover's accessible name -- wins over each\nstep's own `heading`, matching `lr-dialog`'s `accessibleLabel` pattern. Most consumers\nwon't need this since each step already has a meaningful name via `heading`; setting it\nmakes the *same* string name every step's panel. Set as a plain `aria-label` attribute on\n`<lr-tour>` itself, not a public JS property.\n\nType: `string | null` \nDefault: `null`"
27094
+ "value": "Host-level `aria-label` override for every step popover's accessible name -- wins over each\nstep's own `heading`, matching `lr-dialog`'s `accessibleLabel` pattern. Most consumers\nwon't need this since each step already has a meaningful name via `heading`; setting it\nmakes the *same* string name every step's panel. Set as a plain `aria-label` attribute on\n`<lr-tour>` itself, not a public JS property. An explicitly empty `aria-label=\"\"` suppresses\nthe panel's accessible name outright rather than falling back to the heading or step count --\nagain as `lr-dialog` does.\n\nType: `string | null` \nDefault: `null`"
26641
27095
  }
26642
27096
  },
26643
27097
  {
@@ -27229,7 +27683,7 @@
27229
27683
  "name": "lr-video-playlist",
27230
27684
  "description": {
27231
27685
  "kind": "markdown",
27232
- "value": "`<lr-video-playlist>` — a direct-child `<lr-video>` playlist with a navigable current-item\nlist. It mirrors the public `<wa-video-playlist>` surface under the `lr-` prefix.\n\nLyra additionally exposes `autoAdvance` and `repeat`. `autoAdvance` defaults to `true` to\npreserve the mirrored ended behavior; `repeat=\"one\"` restarts the current video and\n`repeat=\"all\"` wraps the final video to the first.\n`items` can seed deterministic playlist-row metadata for server rendering. Seeded rows are\nvisible but disabled until the browser can adopt the indexed direct video children; live child\nmetadata is authoritative after that corrective update.\n\nA child marked `inert` is unavailable: it never becomes the active video,\n`next()`/`previous()`/auto-advance step past it, and its playlist row renders `disabled` so the\nrow cannot enter the sequential or arrow-key path. Only the child's *own* `inert` counts — a\nplaylist inerted wholesale by an open modal keeps playing. `<lr-video>` has no `disabled`\ncontract; use the native `inert` property to make a child unavailable.\nEvery enabled row is an ordinary sequentially reachable button (`tabindex=\"0\"`); arrow keys are\noptional shortcuts, not a required composite-widget navigation contract. Visible durations are\nassociated with their row through `aria-describedby`. Child presentation overrides are owned\nreversibly while the child belongs to this playlist and restored on removal/reparenting.\n\n---\n\n**Component metadata**\n\n- Status: `experimental`\n- Since: `8.0.0`\n- Rationale: This newly introduced Lyra tag mirrors an experimental Web Awesome 3.11 public surface and remains experimental while production compatibility evidence is gathered.\n- Graduation: Eligible for stable status once the mapped public surface, populated accessibility states, cross-browser media behavior, and lifecycle edge cases demonstrate sustained reliability.\n- Deprecated part `base`: Deprecated since `8.0.0`. Use part `::part(video-playlist)`. Removal is not permitted before `10.0.0`. The video-playlist part identifies the root component explicitly; base remains on the same root node for migration compatibility.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Direct `<lr-video>` children. Other elements are not playlist items. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | Deprecated alias on the same root node as `video-playlist`. |\n| `playlist` | Playlist sidebar container. |\n| `playlist-duration` | Duration text within a playlist item. |\n| `playlist-item` | An individual playlist item button. |\n| `playlist-thumbnail` | Thumbnail within a playlist item. |\n| `playlist-title` | Title text within a playlist item. |\n| `video-playlist` | Root video-and-playlist layout. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-video-playlist-item-current-background` (default: `var(--lr-color-brand-fill-quiet)`) — Current playlist-item background.\n- `--lr-video-playlist-item-current-border-color` (default: `var(--lr-color-brand)`) — Current playlist-item border color."
27686
+ "value": "`<lr-video-playlist>` — a direct-child `<lr-video>` playlist with a navigable current-item\nlist. It mirrors the public `<wa-video-playlist>` surface under the `lr-` prefix.\n\nLyra additionally exposes `autoAdvance` and `repeat`. `autoAdvance` defaults to `true` to\npreserve the mirrored ended behavior; `repeat=\"one\"` restarts the current video and\n`repeat=\"all\"` wraps the final video to the first.\n`items` can seed deterministic playlist-row metadata for server rendering. Seeded rows are\nvisible but disabled until the browser can adopt the indexed direct video children; live child\nmetadata is authoritative after that corrective update.\n\nA child marked `inert` is unavailable: it never becomes the active video,\n`next()`/`previous()`/auto-advance step past it, and its playlist row renders `disabled` so the\nrow cannot enter the sequential or arrow-key path. Only the child's *own* `inert` counts — a\nplaylist inerted wholesale by an open modal keeps playing. `<lr-video>` has no `disabled`\ncontract; use the native `inert` property to make a child unavailable.\nEvery enabled row is an ordinary sequentially reachable button (`tabindex=\"0\"`); arrow keys are\noptional shortcuts, not a required composite-widget navigation contract. Visible durations are\nassociated with their row through `aria-describedby`. Child presentation overrides are owned\nreversibly while the child belongs to this playlist and restored on removal/reparenting.\n\n---\n\n**Component metadata**\n\n- Status: `experimental`\n- Since: `8.0.0`\n- Rationale: This newly introduced Lyra tag mirrors an experimental Web Awesome 3.11 public surface and remains experimental while production compatibility evidence is gathered.\n- Graduation: Eligible for stable status once the mapped public surface, populated accessibility states, cross-browser media behavior, and lifecycle edge cases demonstrate sustained reliability.\n- Deprecated part `base`: Deprecated since `8.0.0`. Use part `::part(video-playlist)`. Removal is not permitted before `10.0.0`. The video-playlist part identifies the root component explicitly; base remains on the same root node for migration compatibility. That version is a policy floor, not a plan: `wa-video-playlist` still publishes its own deprecated `base` part, so this alias is removed only when upstream's is.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Direct `<lr-video>` children. Other elements are not playlist items. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | Deprecated alias on the same root node as `video-playlist`. |\n| `playlist` | Playlist sidebar container. |\n| `playlist-duration` | Duration text within a playlist item. |\n| `playlist-item` | An individual playlist item button. |\n| `playlist-thumbnail` | Thumbnail within a playlist item. |\n| `playlist-title` | Title text within a playlist item. |\n| `video-playlist` | Root video-and-playlist layout. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-video-playlist-item-current-background` (default: `var(--lr-color-brand-fill-quiet)`) — Current playlist-item background.\n- `--lr-video-playlist-item-current-border-color` (default: `var(--lr-color-brand)`) — Current playlist-item border color."
27233
27687
  },
27234
27688
  "attributes": [
27235
27689
  {
@@ -27576,7 +28030,7 @@
27576
28030
  "name": "lr-widget",
27577
28031
  "description": {
27578
28032
  "kind": "markdown",
27579
- "value": "`<lr-widget>` — a titled panel shell with an optional collapse toggle and\nan optional fullscreen-expand toggle. Fullscreen promotes the same host\nelement in place (a CSS state, not a clone/portal), so slotted content\n(a chart, a running simulation, scroll position) survives the transition.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The panel body. |\n| `actions` | Header action controls, rendered before the collapse/expand buttons. |\n| `collapse-icon` | Overrides the built-in chevron glyph inside the collapse/expand toggle button entirely, via the platform's own slot-fallback-content mechanism (same convention as `<lr-tool-call-chip>`'s `icon` slot): whatever is assigned wins, otherwise the default chevron renders. Assigned content is decorative, inert, and aria-hidden so the outer toggle remains the sole action. Only meaningful while `collapsible`. |\n| `fullscreen-icon` | Overrides the built-in expand/close glyph inside the fullscreen toggle button entirely, using the same mechanism -- the override replaces *both* the \"expand\" and \"exit fullscreen\" default icons, so a consumer supplying one is responsible for its own expand/exit distinction (e.g. by reading the `fullscreen` attribute). Assigned content is decorative, inert, and aria-hidden so the outer toggle remains the sole action. Only meaningful while `expandable`. |\n| `icon` | Optional decorative leading icon in the title row. Its flattened subtree is inert and hidden from assistive technology. |\n| `label` | Rich label content (overrides the `label` attribute). |\n| `sublabel` | Rich sublabel content (overrides the `sublabel` attribute). |\n| `view-{viewId}` | Content for the view whose `LyraWidgetView.viewId` matches `{viewId}`, rendered when `views` is non-empty. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | The wrapper around the `actions` slot. |\n| `backdrop` | The fullscreen scrim behind the panel. |\n| `base` | The panel root (dialog role + backdrop when fullscreen). |\n| `body` | The wrapper around the default slot (the panel body). |\n| `collapse-button` | The collapse/expand toggle button. |\n| `fullscreen-button` | The fullscreen toggle button. |\n| `header` | The header row containing the title, actions, and toggle buttons. |\n| `icon` | Wrapper around the `icon` slot. Hidden entirely when empty. |\n| `label` | The panel title text. |\n| `label-group` | Wrapper around the label and sublabel. |\n| `sublabel` | The panel subtitle text. |\n| `title` | The wrapper around the label/sublabel. |\n| `view-icon` | Decorative icon content inside a view toggle; its subtree is inert and hidden from assistive technology. |\n| `view-label` | Visible label text inside a view toggle. |\n| `view-toggle` | A single view toggle button. |\n| `view-toggles` | The header toggle-button group, only rendered when `views` is non-empty. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-widget-backdrop-inset` (default: `0`) — The `inset` applied to `[part=\"backdrop\"]`, so the scrim can be pulled back independently of the panel. Also set inline from the `backdrop-inset` attribute. `fullscreen-inset` overrides the safe-area panel inset while the viewport-filling backdrop stays at zero by default. `compact` tightens header/body padding — same convention as `lr-empty`.\n- `--lr-widget-fullscreen-inset` (default: `max(var(--lr-space-l), var(--lr-safe-area-top)) max(var(--lr-space-l), var(--lr-safe-area-inline-end)) max(var(--lr-space-l), var(--lr-safe-area-bottom)) max(var(--lr-space-l), var(--lr-safe-area-inline-start))`) — The `inset` applied to `[part=\"base\"]` while `fullscreen`. Also set inline from the `fullscreen-inset` attribute.\n- `--lr-widget-overlay-color` (default: `var(--lr-color-overlay)`) — The fullscreen scrim's color, applied to `[part=\"backdrop\"]`.\n- `--lr-widget-view-toggle-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the pressed (`aria-pressed=\"true\"`) view toggle. Declared as an inline `var()` fallback (never on `:host`), so setting it on the element or an ancestor recolors only the active toggle without hijacking the library-wide `--lr-color-brand-quiet` token.\n- `--lr-widget-view-toggle-active-border-color` (default: `transparent`) — Border color of the pressed view toggle. Like the active background and text hooks, it is an inline inherited fallback.\n- `--lr-widget-view-toggle-active-color` (default: `var(--lr-color-brand)`) — Text color of the pressed view toggle.\n- `--lr-widget-view-toggle-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a hovered `[part=\"view-toggle\"]`.\n- `--lr-widget-view-toggle-hover-color` (default: `var(--lr-color-text)`) — Text color of a hovered `[part=\"view-toggle\"]`."
28033
+ "value": "`<lr-widget>` — a titled panel shell with an optional collapse toggle and\nan optional fullscreen-expand toggle. Fullscreen promotes the same host\nelement in place (a CSS state, not a clone/portal), so slotted content\n(a chart, a running simulation, scroll position) survives the transition.\n\n---\n\n**Component metadata**\n\n- Status: `stable`\n- Since: `4.0.0`\n- Rationale: This exact lr-* tag appears in a published Lyra release manifest and remains a supported public contract under semver.\n- Graduation: Already stable; it retains that status while its documented behavior, accessibility, compatibility, and cross-browser support remain part of the public contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The panel body. |\n| `actions` | Header action controls, rendered before the collapse/expand buttons. |\n| `collapse-icon` | Overrides the built-in chevron glyph inside the collapse/expand toggle button entirely, via the platform's own slot-fallback-content mechanism (same convention as `<lr-tool-call-chip>`'s `icon` slot): whatever is assigned wins, otherwise the default chevron renders. Assigned content is decorative, inert, and aria-hidden so the outer toggle remains the sole action. Only meaningful while `collapsible`. |\n| `fullscreen-icon` | Overrides the built-in expand/close glyph inside the fullscreen toggle button entirely, using the same mechanism -- the override replaces *both* the \"expand\" and \"exit fullscreen\" default icons, so a consumer supplying one is responsible for its own expand/exit distinction (e.g. by reading the `fullscreen` attribute). Assigned content is decorative, inert, and aria-hidden so the outer toggle remains the sole action. Only meaningful while `expandable`. |\n| `icon` | Optional decorative leading icon in the title row. Its flattened subtree is inert and hidden from assistive technology. |\n| `label` | Rich label content (overrides the `label` attribute). |\n| `sublabel` | Rich sublabel content (overrides the `sublabel` attribute). |\n| `view-{viewId}` | Content for the view whose `LyraWidgetView.viewId` matches `{viewId}`, rendered when `views` is non-empty. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | The wrapper around the `actions` slot. |\n| `backdrop` | The fullscreen scrim behind the panel. |\n| `base` | The panel root (dialog role + backdrop when fullscreen). |\n| `body` | The wrapper around the default slot (the panel body). |\n| `collapse-button` | The collapse/expand toggle button. |\n| `fullscreen-button` | The fullscreen toggle button. |\n| `header` | The header row containing the title, actions, and toggle buttons. |\n| `icon` | Wrapper around the `icon` slot. Hidden entirely when empty. |\n| `label` | The panel title text. |\n| `label-group` | Wrapper around the label and sublabel. |\n| `sublabel` | The panel subtitle text. |\n| `title` | The wrapper around the label/sublabel. |\n| `view-icon` | Decorative icon content inside a view toggle; its subtree is inert and hidden from assistive technology. |\n| `view-label` | Visible label text inside a view toggle. |\n| `view-toggle` | A single view toggle button. |\n| `view-toggles` | The header toggle-button group, only rendered when `views` is non-empty. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-scroll-fade-size` (default: `2rem`) — Width of the fade at each horizontal scroll edge of the `actions`/`view-toggles` header rows. The fade is applied only while a row actually overflows, so a row that fits is never dimmed. `fullscreen-inset` overrides the safe-area panel inset while the viewport-filling backdrop stays at zero by default. `compact` tightens header/body padding — same convention as `lr-empty`.\n- `--lr-widget-backdrop-inset` (default: `0`) — The `inset` applied to `[part=\"backdrop\"]`, so the scrim can be pulled back independently of the panel. Also set inline from the `backdrop-inset` attribute.\n- `--lr-widget-fullscreen-inset` (default: `max(var(--lr-space-l), var(--lr-safe-area-top)) max(var(--lr-space-l), var(--lr-safe-area-inline-end)) max(var(--lr-space-l), var(--lr-safe-area-bottom)) max(var(--lr-space-l), var(--lr-safe-area-inline-start))`) — The `inset` applied to `[part=\"base\"]` while `fullscreen`. Also set inline from the `fullscreen-inset` attribute.\n- `--lr-widget-overlay-color` (default: `var(--lr-color-overlay)`) — The fullscreen scrim's color, applied to `[part=\"backdrop\"]`.\n- `--lr-widget-view-toggle-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the pressed (`aria-pressed=\"true\"`) view toggle. Declared as an inline `var()` fallback (never on `:host`), so setting it on the element or an ancestor recolors only the active toggle without hijacking the library-wide `--lr-color-brand-quiet` token.\n- `--lr-widget-view-toggle-active-border-color` (default: `transparent`) — Border color of the pressed view toggle. Like the active background and text hooks, it is an inline inherited fallback.\n- `--lr-widget-view-toggle-active-color` (default: `var(--lr-color-brand)`) — Text color of the pressed view toggle.\n- `--lr-widget-view-toggle-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a hovered `[part=\"view-toggle\"]`.\n- `--lr-widget-view-toggle-hover-color` (default: `var(--lr-color-text)`) — Text color of a hovered `[part=\"view-toggle\"]`."
27580
28034
  },
27581
28035
  "attributes": [
27582
28036
  {