@aceshooting/lyra-ui 5.0.0 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (636) hide show
  1. package/README.md +30 -12
  2. package/custom-elements.json +2150 -220
  3. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts +2 -0
  4. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts.map +1 -1
  5. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +2 -0
  6. package/dist/components/agent-tools/activity-feed/activity-feed.class.js.map +1 -1
  7. package/dist/components/agent-tools/agent-run/agent-run.class.d.ts +1 -0
  8. package/dist/components/agent-tools/agent-run/agent-run.class.d.ts.map +1 -1
  9. package/dist/components/agent-tools/agent-run/agent-run.class.js +1 -0
  10. package/dist/components/agent-tools/agent-run/agent-run.class.js.map +1 -1
  11. package/dist/components/agent-tools/compare-panel/compare-panel.class.d.ts +2 -0
  12. package/dist/components/agent-tools/compare-panel/compare-panel.class.d.ts.map +1 -1
  13. package/dist/components/agent-tools/compare-panel/compare-panel.class.js +2 -0
  14. package/dist/components/agent-tools/compare-panel/compare-panel.class.js.map +1 -1
  15. package/dist/components/agent-tools/stack-trace/stack-trace.class.d.ts +5 -0
  16. package/dist/components/agent-tools/stack-trace/stack-trace.class.d.ts.map +1 -1
  17. package/dist/components/agent-tools/stack-trace/stack-trace.class.js +5 -0
  18. package/dist/components/agent-tools/stack-trace/stack-trace.class.js.map +1 -1
  19. package/dist/components/agent-tools/terminal/terminal.class.d.ts +3 -0
  20. package/dist/components/agent-tools/terminal/terminal.class.d.ts.map +1 -1
  21. package/dist/components/agent-tools/terminal/terminal.class.js +3 -0
  22. package/dist/components/agent-tools/terminal/terminal.class.js.map +1 -1
  23. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts +2 -0
  24. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts.map +1 -1
  25. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.js +2 -0
  26. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.js.map +1 -1
  27. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.d.ts +2 -0
  28. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.d.ts.map +1 -1
  29. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js +2 -0
  30. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js.map +1 -1
  31. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +3 -0
  32. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts.map +1 -1
  33. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +3 -0
  34. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js.map +1 -1
  35. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts +1 -0
  36. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts.map +1 -1
  37. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +1 -0
  38. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js.map +1 -1
  39. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.d.ts +1 -0
  40. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.d.ts.map +1 -1
  41. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +1 -0
  42. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js.map +1 -1
  43. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +2 -0
  44. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts.map +1 -1
  45. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +2 -0
  46. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js.map +1 -1
  47. package/dist/components/charts/chart/chart.class.d.ts +15 -0
  48. package/dist/components/charts/chart/chart.class.d.ts.map +1 -1
  49. package/dist/components/charts/chart/chart.class.js +15 -0
  50. package/dist/components/charts/chart/chart.class.js.map +1 -1
  51. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +2 -0
  52. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts.map +1 -1
  53. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +2 -0
  54. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js.map +1 -1
  55. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts +2 -0
  56. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts.map +1 -1
  57. package/dist/components/conversation/branch-picker/branch-picker.class.js +2 -0
  58. package/dist/components/conversation/branch-picker/branch-picker.class.js.map +1 -1
  59. package/dist/components/conversation/chat-message/chat-message.class.d.ts +5 -1
  60. package/dist/components/conversation/chat-message/chat-message.class.d.ts.map +1 -1
  61. package/dist/components/conversation/chat-message/chat-message.class.js +5 -1
  62. package/dist/components/conversation/chat-message/chat-message.class.js.map +1 -1
  63. package/dist/components/conversation/chat-message/chat-message.styles.d.ts.map +1 -1
  64. package/dist/components/conversation/chat-message/chat-message.styles.js +15 -2
  65. package/dist/components/conversation/chat-message/chat-message.styles.js.map +1 -1
  66. package/dist/components/conversation/code-block/code-block.class.d.ts +4 -0
  67. package/dist/components/conversation/code-block/code-block.class.d.ts.map +1 -1
  68. package/dist/components/conversation/code-block/code-block.class.js +4 -0
  69. package/dist/components/conversation/code-block/code-block.class.js.map +1 -1
  70. package/dist/components/conversation/conversation-item/conversation-item.class.d.ts +2 -0
  71. package/dist/components/conversation/conversation-item/conversation-item.class.d.ts.map +1 -1
  72. package/dist/components/conversation/conversation-item/conversation-item.class.js +2 -0
  73. package/dist/components/conversation/conversation-item/conversation-item.class.js.map +1 -1
  74. package/dist/components/conversation/markdown/markdown.class.d.ts +2 -0
  75. package/dist/components/conversation/markdown/markdown.class.d.ts.map +1 -1
  76. package/dist/components/conversation/markdown/markdown.class.js +2 -0
  77. package/dist/components/conversation/markdown/markdown.class.js.map +1 -1
  78. package/dist/components/conversation/push-to-talk/push-to-talk.class.d.ts +2 -0
  79. package/dist/components/conversation/push-to-talk/push-to-talk.class.d.ts.map +1 -1
  80. package/dist/components/conversation/push-to-talk/push-to-talk.class.js +2 -0
  81. package/dist/components/conversation/push-to-talk/push-to-talk.class.js.map +1 -1
  82. package/dist/components/conversation/stream-status/stream-status.class.d.ts +5 -0
  83. package/dist/components/conversation/stream-status/stream-status.class.d.ts.map +1 -1
  84. package/dist/components/conversation/stream-status/stream-status.class.js +5 -0
  85. package/dist/components/conversation/stream-status/stream-status.class.js.map +1 -1
  86. package/dist/components/conversation/streaming-text/streaming-text.class.d.ts +2 -0
  87. package/dist/components/conversation/streaming-text/streaming-text.class.d.ts.map +1 -1
  88. package/dist/components/conversation/streaming-text/streaming-text.class.js +2 -0
  89. package/dist/components/conversation/streaming-text/streaming-text.class.js.map +1 -1
  90. package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts +1 -0
  91. package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts.map +1 -1
  92. package/dist/components/conversation/transcript-feed/transcript-feed.class.js +1 -0
  93. package/dist/components/conversation/transcript-feed/transcript-feed.class.js.map +1 -1
  94. package/dist/components/data/calendar/calendar.class.d.ts +6 -0
  95. package/dist/components/data/calendar/calendar.class.d.ts.map +1 -1
  96. package/dist/components/data/calendar/calendar.class.js +6 -0
  97. package/dist/components/data/calendar/calendar.class.js.map +1 -1
  98. package/dist/components/data/context-meter/context-meter.class.d.ts +1 -0
  99. package/dist/components/data/context-meter/context-meter.class.d.ts.map +1 -1
  100. package/dist/components/data/context-meter/context-meter.class.js +1 -0
  101. package/dist/components/data/context-meter/context-meter.class.js.map +1 -1
  102. package/dist/components/data/data-grid/data-grid.class.d.ts +1 -0
  103. package/dist/components/data/data-grid/data-grid.class.d.ts.map +1 -1
  104. package/dist/components/data/data-grid/data-grid.class.js +1 -0
  105. package/dist/components/data/data-grid/data-grid.class.js.map +1 -1
  106. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +3 -1
  107. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts.map +1 -1
  108. package/dist/components/data/flow-canvas/flow-canvas.class.js +3 -1
  109. package/dist/components/data/flow-canvas/flow-canvas.class.js.map +1 -1
  110. package/dist/components/data/flow-minimap/flow-minimap.class.d.ts +2 -2
  111. package/dist/components/data/flow-minimap/flow-minimap.class.js +2 -2
  112. package/dist/components/data/flow-node/flow-node.class.d.ts +1 -1
  113. package/dist/components/data/flow-node/flow-node.class.js +1 -1
  114. package/dist/components/data/heatmap/heatmap.class.d.ts +51 -2
  115. package/dist/components/data/heatmap/heatmap.class.d.ts.map +1 -1
  116. package/dist/components/data/heatmap/heatmap.class.js +42 -6
  117. package/dist/components/data/heatmap/heatmap.class.js.map +1 -1
  118. package/dist/components/data/heatmap/heatmap.styles.d.ts.map +1 -1
  119. package/dist/components/data/heatmap/heatmap.styles.js +19 -0
  120. package/dist/components/data/heatmap/heatmap.styles.js.map +1 -1
  121. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +20 -0
  122. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts.map +1 -1
  123. package/dist/components/data/sequence-strip/sequence-strip.class.js +35 -0
  124. package/dist/components/data/sequence-strip/sequence-strip.class.js.map +1 -1
  125. package/dist/components/data/sequence-strip/sequence-strip.styles.d.ts.map +1 -1
  126. package/dist/components/data/sequence-strip/sequence-strip.styles.js +29 -0
  127. package/dist/components/data/sequence-strip/sequence-strip.styles.js.map +1 -1
  128. package/dist/components/data/table/table.class.d.ts +11 -0
  129. package/dist/components/data/table/table.class.d.ts.map +1 -1
  130. package/dist/components/data/table/table.class.js +11 -0
  131. package/dist/components/data/table/table.class.js.map +1 -1
  132. package/dist/components/data/timeline/timeline-item.class.d.ts +17 -0
  133. package/dist/components/data/timeline/timeline-item.class.d.ts.map +1 -1
  134. package/dist/components/data/timeline/timeline-item.class.js +17 -0
  135. package/dist/components/data/timeline/timeline-item.class.js.map +1 -1
  136. package/dist/components/data/timeline/timeline.styles.d.ts.map +1 -1
  137. package/dist/components/data/timeline/timeline.styles.js +6 -3
  138. package/dist/components/data/timeline/timeline.styles.js.map +1 -1
  139. package/dist/components/data/tree/tree-node.class.d.ts +3 -0
  140. package/dist/components/data/tree/tree-node.class.d.ts.map +1 -1
  141. package/dist/components/data/tree/tree-node.class.js +3 -0
  142. package/dist/components/data/tree/tree-node.class.js.map +1 -1
  143. package/dist/components/forms/button/button.class.d.ts +24 -0
  144. package/dist/components/forms/button/button.class.d.ts.map +1 -1
  145. package/dist/components/forms/button/button.class.js +24 -0
  146. package/dist/components/forms/button/button.class.js.map +1 -1
  147. package/dist/components/forms/code-editor/code-editor.class.d.ts +28 -12
  148. package/dist/components/forms/code-editor/code-editor.class.d.ts.map +1 -1
  149. package/dist/components/forms/code-editor/code-editor.class.js +44 -14
  150. package/dist/components/forms/code-editor/code-editor.class.js.map +1 -1
  151. package/dist/components/forms/code-editor/code-editor.styles.d.ts.map +1 -1
  152. package/dist/components/forms/code-editor/code-editor.styles.js +4 -0
  153. package/dist/components/forms/code-editor/code-editor.styles.js.map +1 -1
  154. package/dist/components/forms/combobox/combobox.class.d.ts +10 -0
  155. package/dist/components/forms/combobox/combobox.class.d.ts.map +1 -1
  156. package/dist/components/forms/combobox/combobox.class.js +16 -0
  157. package/dist/components/forms/combobox/combobox.class.js.map +1 -1
  158. package/dist/components/forms/combobox/option.class.d.ts +3 -3
  159. package/dist/components/forms/combobox/option.class.d.ts.map +1 -1
  160. package/dist/components/forms/combobox/option.class.js +9 -0
  161. package/dist/components/forms/combobox/option.class.js.map +1 -1
  162. package/dist/components/forms/date-picker/date-input.class.d.ts +3 -0
  163. package/dist/components/forms/date-picker/date-input.class.d.ts.map +1 -1
  164. package/dist/components/forms/date-picker/date-input.class.js +3 -0
  165. package/dist/components/forms/date-picker/date-input.class.js.map +1 -1
  166. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +37 -2
  167. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts.map +1 -1
  168. package/dist/components/forms/emoji-picker/emoji-picker.class.js +113 -10
  169. package/dist/components/forms/emoji-picker/emoji-picker.class.js.map +1 -1
  170. package/dist/components/forms/emoji-picker/emoji-picker.styles.d.ts.map +1 -1
  171. package/dist/components/forms/emoji-picker/emoji-picker.styles.js +30 -0
  172. package/dist/components/forms/emoji-picker/emoji-picker.styles.js.map +1 -1
  173. package/dist/components/forms/icon-button/icon-button.class.d.ts +4 -0
  174. package/dist/components/forms/icon-button/icon-button.class.d.ts.map +1 -1
  175. package/dist/components/forms/icon-button/icon-button.class.js +4 -0
  176. package/dist/components/forms/icon-button/icon-button.class.js.map +1 -1
  177. package/dist/components/forms/input/input.class.d.ts +11 -3
  178. package/dist/components/forms/input/input.class.d.ts.map +1 -1
  179. package/dist/components/forms/input/input.class.js +3 -0
  180. package/dist/components/forms/input/input.class.js.map +1 -1
  181. package/dist/components/forms/input/time-input.class.d.ts +12 -0
  182. package/dist/components/forms/input/time-input.class.d.ts.map +1 -1
  183. package/dist/components/forms/input/time-input.class.js +27 -0
  184. package/dist/components/forms/input/time-input.class.js.map +1 -1
  185. package/dist/components/forms/rubric-form/rubric-form.class.d.ts +7 -0
  186. package/dist/components/forms/rubric-form/rubric-form.class.d.ts.map +1 -1
  187. package/dist/components/forms/rubric-form/rubric-form.class.js +7 -0
  188. package/dist/components/forms/rubric-form/rubric-form.class.js.map +1 -1
  189. package/dist/components/forms/select/select.class.d.ts +8 -0
  190. package/dist/components/forms/select/select.class.d.ts.map +1 -1
  191. package/dist/components/forms/select/select.class.js +8 -0
  192. package/dist/components/forms/select/select.class.js.map +1 -1
  193. package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts +1 -1
  194. package/dist/components/forms/swatch-picker/swatch-picker.class.js +1 -1
  195. package/dist/components/forms/switch/switch.class.d.ts +6 -0
  196. package/dist/components/forms/switch/switch.class.d.ts.map +1 -1
  197. package/dist/components/forms/switch/switch.class.js +6 -0
  198. package/dist/components/forms/switch/switch.class.js.map +1 -1
  199. package/dist/components/forms/token-input/token-input.class.d.ts +2 -0
  200. package/dist/components/forms/token-input/token-input.class.d.ts.map +1 -1
  201. package/dist/components/forms/token-input/token-input.class.js +2 -0
  202. package/dist/components/forms/token-input/token-input.class.js.map +1 -1
  203. package/dist/components/layout/app-rail/app-rail.class.d.ts +8 -0
  204. package/dist/components/layout/app-rail/app-rail.class.d.ts.map +1 -1
  205. package/dist/components/layout/app-rail/app-rail.class.js +8 -0
  206. package/dist/components/layout/app-rail/app-rail.class.js.map +1 -1
  207. package/dist/components/layout/button-group/button-group.class.d.ts +1 -1
  208. package/dist/components/layout/button-group/button-group.class.js +1 -1
  209. package/dist/components/layout/command-palette/command-palette.class.d.ts +12 -0
  210. package/dist/components/layout/command-palette/command-palette.class.d.ts.map +1 -1
  211. package/dist/components/layout/command-palette/command-palette.class.js +12 -0
  212. package/dist/components/layout/command-palette/command-palette.class.js.map +1 -1
  213. package/dist/components/layout/control-group/control-group.class.d.ts +1 -1
  214. package/dist/components/layout/control-group/control-group.class.js +1 -1
  215. package/dist/components/layout/dashboard-grid/dashboard-grid.class.d.ts +7 -0
  216. package/dist/components/layout/dashboard-grid/dashboard-grid.class.d.ts.map +1 -1
  217. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +7 -0
  218. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js.map +1 -1
  219. package/dist/components/layout/dock-panel/dock-panel.class.d.ts +3 -0
  220. package/dist/components/layout/dock-panel/dock-panel.class.d.ts.map +1 -1
  221. package/dist/components/layout/dock-panel/dock-panel.class.js +3 -0
  222. package/dist/components/layout/dock-panel/dock-panel.class.js.map +1 -1
  223. package/dist/components/layout/responsive-panel/responsive-panel.class.d.ts +2 -0
  224. package/dist/components/layout/responsive-panel/responsive-panel.class.d.ts.map +1 -1
  225. package/dist/components/layout/responsive-panel/responsive-panel.class.js +2 -0
  226. package/dist/components/layout/responsive-panel/responsive-panel.class.js.map +1 -1
  227. package/dist/components/layout/scroller/scroller.class.d.ts +2 -2
  228. package/dist/components/layout/scroller/scroller.class.js +2 -2
  229. package/dist/components/layout/segmented/segmented.class.d.ts +6 -0
  230. package/dist/components/layout/segmented/segmented.class.d.ts.map +1 -1
  231. package/dist/components/layout/segmented/segmented.class.js +6 -0
  232. package/dist/components/layout/segmented/segmented.class.js.map +1 -1
  233. package/dist/components/layout/split/split.class.d.ts +68 -15
  234. package/dist/components/layout/split/split.class.d.ts.map +1 -1
  235. package/dist/components/layout/split/split.class.js +80 -21
  236. package/dist/components/layout/split/split.class.js.map +1 -1
  237. package/dist/components/layout/stepper/stepper.class.d.ts +52 -11
  238. package/dist/components/layout/stepper/stepper.class.d.ts.map +1 -1
  239. package/dist/components/layout/stepper/stepper.class.js +69 -17
  240. package/dist/components/layout/stepper/stepper.class.js.map +1 -1
  241. package/dist/components/layout/virtual-list/virtual-list.class.d.ts +3 -0
  242. package/dist/components/layout/virtual-list/virtual-list.class.d.ts.map +1 -1
  243. package/dist/components/layout/virtual-list/virtual-list.class.js +3 -0
  244. package/dist/components/layout/virtual-list/virtual-list.class.js.map +1 -1
  245. package/dist/components/layout/widget/widget.class.d.ts +6 -0
  246. package/dist/components/layout/widget/widget.class.d.ts.map +1 -1
  247. package/dist/components/layout/widget/widget.class.js +6 -0
  248. package/dist/components/layout/widget/widget.class.js.map +1 -1
  249. package/dist/components/media/attachment-chip/attachment-chip.class.d.ts +13 -0
  250. package/dist/components/media/attachment-chip/attachment-chip.class.d.ts.map +1 -1
  251. package/dist/components/media/attachment-chip/attachment-chip.class.js +13 -0
  252. package/dist/components/media/attachment-chip/attachment-chip.class.js.map +1 -1
  253. package/dist/components/media/avatar/avatar.class.d.ts +6 -0
  254. package/dist/components/media/avatar/avatar.class.d.ts.map +1 -1
  255. package/dist/components/media/avatar/avatar.class.js +6 -0
  256. package/dist/components/media/avatar/avatar.class.js.map +1 -1
  257. package/dist/components/media/media-card/media-card.class.d.ts +2 -0
  258. package/dist/components/media/media-card/media-card.class.d.ts.map +1 -1
  259. package/dist/components/media/media-card/media-card.class.js +2 -0
  260. package/dist/components/media/media-card/media-card.class.js.map +1 -1
  261. package/dist/components/media/playback/playback.class.d.ts +2 -0
  262. package/dist/components/media/playback/playback.class.d.ts.map +1 -1
  263. package/dist/components/media/playback/playback.class.js +2 -0
  264. package/dist/components/media/playback/playback.class.js.map +1 -1
  265. package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts +3 -0
  266. package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts.map +1 -1
  267. package/dist/components/media/zoomable-frame/zoomable-frame.class.js +3 -0
  268. package/dist/components/media/zoomable-frame/zoomable-frame.class.js.map +1 -1
  269. package/dist/components/overlays/badge/badge.class.d.ts +6 -0
  270. package/dist/components/overlays/badge/badge.class.d.ts.map +1 -1
  271. package/dist/components/overlays/badge/badge.class.js +6 -0
  272. package/dist/components/overlays/badge/badge.class.js.map +1 -1
  273. package/dist/components/overlays/callout/callout.class.d.ts +6 -0
  274. package/dist/components/overlays/callout/callout.class.d.ts.map +1 -1
  275. package/dist/components/overlays/callout/callout.class.js +6 -0
  276. package/dist/components/overlays/callout/callout.class.js.map +1 -1
  277. package/dist/components/overlays/chip/chip.class.d.ts +18 -0
  278. package/dist/components/overlays/chip/chip.class.d.ts.map +1 -1
  279. package/dist/components/overlays/chip/chip.class.js +18 -0
  280. package/dist/components/overlays/chip/chip.class.js.map +1 -1
  281. package/dist/components/overlays/dialog/dialog.class.d.ts +6 -0
  282. package/dist/components/overlays/dialog/dialog.class.d.ts.map +1 -1
  283. package/dist/components/overlays/dialog/dialog.class.js +6 -0
  284. package/dist/components/overlays/dialog/dialog.class.js.map +1 -1
  285. package/dist/components/overlays/drawer/drawer.class.d.ts +6 -0
  286. package/dist/components/overlays/drawer/drawer.class.d.ts.map +1 -1
  287. package/dist/components/overlays/drawer/drawer.class.js +6 -0
  288. package/dist/components/overlays/drawer/drawer.class.js.map +1 -1
  289. package/dist/components/overlays/progress/progress-ring.class.d.ts +1 -0
  290. package/dist/components/overlays/progress/progress-ring.class.d.ts.map +1 -1
  291. package/dist/components/overlays/progress/progress-ring.class.js +1 -0
  292. package/dist/components/overlays/progress/progress-ring.class.js.map +1 -1
  293. package/dist/components/overlays/skeleton/skeleton.class.d.ts +2 -0
  294. package/dist/components/overlays/skeleton/skeleton.class.d.ts.map +1 -1
  295. package/dist/components/overlays/skeleton/skeleton.class.js +2 -0
  296. package/dist/components/overlays/skeleton/skeleton.class.js.map +1 -1
  297. package/dist/components/overlays/spinner/spinner.class.d.ts +4 -0
  298. package/dist/components/overlays/spinner/spinner.class.d.ts.map +1 -1
  299. package/dist/components/overlays/spinner/spinner.class.js +4 -0
  300. package/dist/components/overlays/spinner/spinner.class.js.map +1 -1
  301. package/dist/components/overlays/toast/toast-item.class.d.ts +11 -0
  302. package/dist/components/overlays/toast/toast-item.class.d.ts.map +1 -1
  303. package/dist/components/overlays/toast/toast-item.class.js +11 -0
  304. package/dist/components/overlays/toast/toast-item.class.js.map +1 -1
  305. package/dist/components/overlays/toast/toast.class.d.ts +15 -0
  306. package/dist/components/overlays/toast/toast.class.d.ts.map +1 -1
  307. package/dist/components/overlays/toast/toast.class.js +15 -0
  308. package/dist/components/overlays/toast/toast.class.js.map +1 -1
  309. package/dist/components/retrieval/citation-badge/citation-badge.class.d.ts +8 -0
  310. package/dist/components/retrieval/citation-badge/citation-badge.class.d.ts.map +1 -1
  311. package/dist/components/retrieval/citation-badge/citation-badge.class.js +8 -0
  312. package/dist/components/retrieval/citation-badge/citation-badge.class.js.map +1 -1
  313. package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts +1 -0
  314. package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts.map +1 -1
  315. package/dist/components/retrieval/entity-chip/entity-chip.class.js +1 -0
  316. package/dist/components/retrieval/entity-chip/entity-chip.class.js.map +1 -1
  317. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.d.ts +2 -0
  318. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.d.ts.map +1 -1
  319. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js +2 -0
  320. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js.map +1 -1
  321. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.d.ts +1 -0
  322. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.d.ts.map +1 -1
  323. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +1 -0
  324. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js.map +1 -1
  325. package/dist/components/utility/diff-view/diff-view.class.d.ts +1 -0
  326. package/dist/components/utility/diff-view/diff-view.class.d.ts.map +1 -1
  327. package/dist/components/utility/diff-view/diff-view.class.js +1 -0
  328. package/dist/components/utility/diff-view/diff-view.class.js.map +1 -1
  329. package/dist/components/utility/icon/icon.class.d.ts +1 -0
  330. package/dist/components/utility/icon/icon.class.d.ts.map +1 -1
  331. package/dist/components/utility/icon/icon.class.js +1 -0
  332. package/dist/components/utility/icon/icon.class.js.map +1 -1
  333. package/dist/components/utility/json-viewer/json-viewer.class.d.ts +3 -0
  334. package/dist/components/utility/json-viewer/json-viewer.class.d.ts.map +1 -1
  335. package/dist/components/utility/json-viewer/json-viewer.class.js +3 -0
  336. package/dist/components/utility/json-viewer/json-viewer.class.js.map +1 -1
  337. package/dist/components/utility/known-date/known-date.class.d.ts +11 -0
  338. package/dist/components/utility/known-date/known-date.class.d.ts.map +1 -1
  339. package/dist/components/utility/known-date/known-date.class.js +11 -0
  340. package/dist/components/utility/known-date/known-date.class.js.map +1 -1
  341. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts +2 -0
  342. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts.map +1 -1
  343. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js +2 -0
  344. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js.map +1 -1
  345. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts +5 -0
  346. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts.map +1 -1
  347. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js +5 -0
  348. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js.map +1 -1
  349. package/dist/components/viewers/document-compare/document-compare.class.d.ts +1 -1
  350. package/dist/components/viewers/document-compare/document-compare.class.js +1 -1
  351. package/dist/components/viewers/document-preview/document-preview.class.d.ts +3 -0
  352. package/dist/components/viewers/document-preview/document-preview.class.d.ts.map +1 -1
  353. package/dist/components/viewers/document-preview/document-preview.class.js +3 -0
  354. package/dist/components/viewers/document-preview/document-preview.class.js.map +1 -1
  355. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +2 -0
  356. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts.map +1 -1
  357. package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -0
  358. package/dist/components/viewers/email-viewer/email-viewer.class.js.map +1 -1
  359. package/dist/components/viewers/html-viewer/html-viewer.class.d.ts +2 -0
  360. package/dist/components/viewers/html-viewer/html-viewer.class.d.ts.map +1 -1
  361. package/dist/components/viewers/html-viewer/html-viewer.class.js +2 -0
  362. package/dist/components/viewers/html-viewer/html-viewer.class.js.map +1 -1
  363. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts.map +1 -1
  364. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +41 -9
  365. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js.map +1 -1
  366. package/dist/internal/css-length.d.ts +40 -0
  367. package/dist/internal/css-length.d.ts.map +1 -0
  368. package/dist/internal/css-length.js +72 -0
  369. package/dist/internal/css-length.js.map +1 -0
  370. package/dist/internal/orientation-breakpoint.d.ts +12 -0
  371. package/dist/internal/orientation-breakpoint.d.ts.map +1 -0
  372. package/dist/internal/orientation-breakpoint.js +127 -0
  373. package/dist/internal/orientation-breakpoint.js.map +1 -0
  374. package/dist/lyra.d.ts +2 -2
  375. package/dist/lyra.d.ts.map +1 -1
  376. package/dist/lyra.js.map +1 -1
  377. package/llms/components/lr-accordion-item.md +23 -0
  378. package/llms/components/lr-accordion.md +23 -0
  379. package/llms/components/lr-activity-feed.md +45 -0
  380. package/llms/components/lr-agent-run.md +66 -0
  381. package/llms/components/lr-agent-trace.md +42 -0
  382. package/llms/components/lr-agent-workspace.md +109 -0
  383. package/llms/components/lr-animated-image.md +66 -0
  384. package/llms/components/lr-animation.md +73 -0
  385. package/llms/components/lr-app-rail-item.md +218 -0
  386. package/llms/components/lr-app-rail.md +218 -0
  387. package/llms/components/lr-archive-viewer.md +36 -0
  388. package/llms/components/lr-artifact-panel.md +60 -0
  389. package/llms/components/lr-attachment-chip.md +131 -0
  390. package/llms/components/lr-attachment-trigger.md +90 -0
  391. package/llms/components/lr-audio-visualizer.md +43 -0
  392. package/llms/components/lr-av-player.md +50 -0
  393. package/llms/components/lr-avatar-group.md +69 -0
  394. package/llms/components/lr-avatar.md +69 -0
  395. package/llms/components/lr-badge.md +25 -0
  396. package/llms/components/lr-bar-chart.md +70 -0
  397. package/llms/components/lr-box-plot.md +67 -0
  398. package/llms/components/lr-branch-picker.md +32 -0
  399. package/llms/components/lr-breadcrumb-item.md +30 -0
  400. package/llms/components/lr-breadcrumb.md +30 -0
  401. package/llms/components/lr-browser-frame.md +51 -0
  402. package/llms/components/lr-bubble-chart.md +70 -0
  403. package/llms/components/lr-button-group.md +30 -0
  404. package/llms/components/lr-button.md +89 -0
  405. package/llms/components/lr-calendar-viewer.md +32 -0
  406. package/llms/components/lr-calendar.md +52 -0
  407. package/llms/components/lr-callout.md +37 -0
  408. package/llms/components/lr-card.md +67 -0
  409. package/llms/components/lr-carousel-item.md +29 -0
  410. package/llms/components/lr-carousel.md +43 -0
  411. package/llms/components/lr-chart.md +148 -0
  412. package/llms/components/lr-chat-composer.md +139 -0
  413. package/llms/components/lr-chat-message.md +145 -0
  414. package/llms/components/lr-chat-viewport.md +70 -0
  415. package/llms/components/lr-checkbox-group.md +21 -0
  416. package/llms/components/lr-checkbox.md +79 -0
  417. package/llms/components/lr-checkpoint.md +48 -0
  418. package/llms/components/lr-chip-group.md +152 -0
  419. package/llms/components/lr-chip.md +152 -0
  420. package/llms/components/lr-chunk-inspector.md +66 -0
  421. package/llms/components/lr-citation-badge.md +102 -0
  422. package/llms/components/lr-code-block-core.md +113 -0
  423. package/llms/components/lr-code-block.md +146 -0
  424. package/llms/components/lr-code-editor.md +72 -0
  425. package/llms/components/lr-color-picker.md +21 -0
  426. package/llms/components/lr-combobox.md +196 -0
  427. package/llms/components/lr-command-palette.md +50 -0
  428. package/llms/components/lr-commit-card.md +33 -0
  429. package/llms/components/lr-community-card.md +54 -0
  430. package/llms/components/lr-compare-panel.md +38 -0
  431. package/llms/components/lr-confirm-bar.md +48 -0
  432. package/llms/components/lr-contact-viewer.md +34 -0
  433. package/llms/components/lr-context-inspector.md +50 -0
  434. package/llms/components/lr-context-meter.md +92 -0
  435. package/llms/components/lr-control-group.md +46 -0
  436. package/llms/components/lr-conversation-item.md +118 -0
  437. package/llms/components/lr-copy-button.md +52 -0
  438. package/llms/components/lr-csv-viewer.md +49 -0
  439. package/llms/components/lr-dashboard-grid.md +34 -0
  440. package/llms/components/lr-data-grid.md +47 -0
  441. package/llms/components/lr-dataset-viewer.md +60 -0
  442. package/llms/components/lr-date-input.md +201 -0
  443. package/llms/components/lr-date-picker.md +201 -0
  444. package/llms/components/lr-details.md +23 -0
  445. package/llms/components/lr-dialog.md +185 -0
  446. package/llms/components/lr-diff-view.md +86 -0
  447. package/llms/components/lr-divider.md +28 -0
  448. package/llms/components/lr-dock-panel.md +110 -0
  449. package/llms/components/lr-document-compare.md +22 -0
  450. package/llms/components/lr-document-library.md +21 -0
  451. package/llms/components/lr-document-preview.md +179 -0
  452. package/llms/components/lr-document-viewer.md +84 -0
  453. package/llms/components/lr-docx-viewer.md +63 -0
  454. package/llms/components/lr-doughnut-chart.md +70 -0
  455. package/llms/components/lr-drawer.md +48 -0
  456. package/llms/components/lr-drilldown-panel.md +25 -0
  457. package/llms/components/lr-dropdown-item.md +171 -0
  458. package/llms/components/lr-dropdown.md +24 -0
  459. package/llms/components/lr-ebook-viewer.md +60 -0
  460. package/llms/components/lr-email-viewer.md +51 -0
  461. package/llms/components/lr-emoji-picker.md +71 -0
  462. package/llms/components/lr-empty.md +56 -0
  463. package/llms/components/lr-entity-card.md +64 -0
  464. package/llms/components/lr-entity-chip.md +50 -0
  465. package/llms/components/lr-entity-dossier.md +71 -0
  466. package/llms/components/lr-env-list.md +27 -0
  467. package/llms/components/lr-eval-dataset.md +45 -0
  468. package/llms/components/lr-eval-result.md +45 -0
  469. package/llms/components/lr-evaluation-run.md +50 -0
  470. package/llms/components/lr-export-button.md +104 -0
  471. package/llms/components/lr-file-icon.md +34 -0
  472. package/llms/components/lr-file-input.md +104 -0
  473. package/llms/components/lr-file-tree.md +29 -0
  474. package/llms/components/lr-filter-bar.md +20 -0
  475. package/llms/components/lr-flag.md +122 -0
  476. package/llms/components/lr-flow-canvas.md +112 -0
  477. package/llms/components/lr-flow-controls.md +47 -0
  478. package/llms/components/lr-flow-minimap.md +52 -0
  479. package/llms/components/lr-flow-node.md +56 -0
  480. package/llms/components/lr-flow-run-overlay.md +56 -0
  481. package/llms/components/lr-format-bytes.md +31 -0
  482. package/llms/components/lr-format-date.md +33 -0
  483. package/llms/components/lr-format-number.md +41 -0
  484. package/llms/components/lr-gauge.md +65 -0
  485. package/llms/components/lr-generation-status.md +105 -0
  486. package/llms/components/lr-geojson-view.md +43 -0
  487. package/llms/components/lr-graph-legend.md +64 -0
  488. package/llms/components/lr-graph-query-builder.md +27 -0
  489. package/llms/components/lr-graph.md +224 -0
  490. package/llms/components/lr-grounding-summary.md +57 -0
  491. package/llms/components/lr-handoff-divider.md +27 -0
  492. package/llms/components/lr-heatmap.md +232 -0
  493. package/llms/components/lr-highlight-layer.md +31 -0
  494. package/llms/components/lr-histogram.md +69 -0
  495. package/llms/components/lr-html-viewer.md +30 -0
  496. package/llms/components/lr-icon-button.md +39 -0
  497. package/llms/components/lr-icon.md +36 -0
  498. package/llms/components/lr-image-comparer.md +38 -0
  499. package/llms/components/lr-image-viewer.md +35 -0
  500. package/llms/components/lr-include.md +53 -0
  501. package/llms/components/lr-ingestion-queue.md +60 -0
  502. package/llms/components/lr-input.md +82 -0
  503. package/llms/components/lr-intersection-observer.md +25 -0
  504. package/llms/components/lr-json-viewer.md +98 -0
  505. package/llms/components/lr-kbd.md +74 -0
  506. package/llms/components/lr-knowledge-base.md +64 -0
  507. package/llms/components/lr-knowledge-graph-explorer.md +92 -0
  508. package/llms/components/lr-known-date.md +84 -0
  509. package/llms/components/lr-lightbox.md +79 -0
  510. package/llms/components/lr-line-chart.md +70 -0
  511. package/llms/components/lr-lite-chart.md +143 -0
  512. package/llms/components/lr-live-region.md +105 -0
  513. package/llms/components/lr-map.md +127 -0
  514. package/llms/components/lr-markdown-core.md +70 -0
  515. package/llms/components/lr-markdown.md +171 -0
  516. package/llms/components/lr-media-card.md +106 -0
  517. package/llms/components/lr-memory-panel.md +67 -0
  518. package/llms/components/lr-mention-popover.md +139 -0
  519. package/llms/components/lr-menu-item.md +171 -0
  520. package/llms/components/lr-menu.md +171 -0
  521. package/llms/components/lr-message-actions.md +48 -0
  522. package/llms/components/lr-message-feedback.md +37 -0
  523. package/llms/components/lr-mind-map.md +64 -0
  524. package/llms/components/lr-model-select.md +144 -0
  525. package/llms/components/lr-model-settings-panel.md +99 -0
  526. package/llms/components/lr-mutation-observer.md +27 -0
  527. package/llms/components/lr-neighbor-list.md +56 -0
  528. package/llms/components/lr-node-palette.md +67 -0
  529. package/llms/components/lr-notebook-viewer.md +65 -0
  530. package/llms/components/lr-number-input.md +44 -0
  531. package/llms/components/lr-option.md +196 -0
  532. package/llms/components/lr-page-rail.md +37 -0
  533. package/llms/components/lr-pagination.md +88 -0
  534. package/llms/components/lr-path-strip.md +55 -0
  535. package/llms/components/lr-pdf-viewer.md +78 -0
  536. package/llms/components/lr-phone-input.md +162 -0
  537. package/llms/components/lr-pie-chart.md +70 -0
  538. package/llms/components/lr-playback.md +74 -0
  539. package/llms/components/lr-polar-area-chart.md +70 -0
  540. package/llms/components/lr-policy-summary.md +33 -0
  541. package/llms/components/lr-poll-status.md +71 -0
  542. package/llms/components/lr-popover.md +31 -0
  543. package/llms/components/lr-pptx-viewer.md +35 -0
  544. package/llms/components/lr-progress-bar.md +22 -0
  545. package/llms/components/lr-progress-ring.md +26 -0
  546. package/llms/components/lr-provenance-panel.md +58 -0
  547. package/llms/components/lr-push-to-talk.md +50 -0
  548. package/llms/components/lr-qr-code.md +20 -0
  549. package/llms/components/lr-query-builder.md +21 -0
  550. package/llms/components/lr-radar-chart.md +70 -0
  551. package/llms/components/lr-radio-group.md +25 -0
  552. package/llms/components/lr-radio.md +31 -0
  553. package/llms/components/lr-random-content.md +62 -0
  554. package/llms/components/lr-rating.md +21 -0
  555. package/llms/components/lr-relative-time.md +31 -0
  556. package/llms/components/lr-resize-observer.md +25 -0
  557. package/llms/components/lr-responsive-panel.md +112 -0
  558. package/llms/components/lr-result-card.md +88 -0
  559. package/llms/components/lr-result-field.md +88 -0
  560. package/llms/components/lr-retrieval-results.md +84 -0
  561. package/llms/components/lr-retrieval-search.md +70 -0
  562. package/llms/components/lr-retrieval-trace.md +59 -0
  563. package/llms/components/lr-rubric-form.md +37 -0
  564. package/llms/components/lr-scatter-chart.md +70 -0
  565. package/llms/components/lr-scroller.md +47 -0
  566. package/llms/components/lr-segmented.md +74 -0
  567. package/llms/components/lr-select.md +113 -0
  568. package/llms/components/lr-sequence-strip.md +95 -0
  569. package/llms/components/lr-skeleton.md +53 -0
  570. package/llms/components/lr-slider.md +92 -0
  571. package/llms/components/lr-source-card.md +131 -0
  572. package/llms/components/lr-source-list.md +131 -0
  573. package/llms/components/lr-source-picker.md +63 -0
  574. package/llms/components/lr-span-waterfall.md +42 -0
  575. package/llms/components/lr-sparkline.md +60 -0
  576. package/llms/components/lr-spinner.md +32 -0
  577. package/llms/components/lr-split.md +191 -0
  578. package/llms/components/lr-spreadsheet-viewer.md +47 -0
  579. package/llms/components/lr-stack-trace.md +77 -0
  580. package/llms/components/lr-stat.md +89 -0
  581. package/llms/components/lr-stepper.md +118 -0
  582. package/llms/components/lr-stream-status.md +128 -0
  583. package/llms/components/lr-streaming-text.md +101 -0
  584. package/llms/components/lr-suggestion-chips.md +40 -0
  585. package/llms/components/lr-svg-viewer.md +47 -0
  586. package/llms/components/lr-swatch-picker.md +91 -0
  587. package/llms/components/lr-switch.md +82 -0
  588. package/llms/components/lr-table.md +201 -0
  589. package/llms/components/lr-tabs.md +80 -0
  590. package/llms/components/lr-tag.md +25 -0
  591. package/llms/components/lr-task-list.md +42 -0
  592. package/llms/components/lr-terminal.md +44 -0
  593. package/llms/components/lr-test-results.md +38 -0
  594. package/llms/components/lr-textarea.md +111 -0
  595. package/llms/components/lr-thinking-panel.md +93 -0
  596. package/llms/components/lr-thread-list.md +97 -0
  597. package/llms/components/lr-time-input.md +53 -0
  598. package/llms/components/lr-time-range.md +91 -0
  599. package/llms/components/lr-timeline-item.md +65 -0
  600. package/llms/components/lr-timeline.md +65 -0
  601. package/llms/components/lr-toast-item.md +123 -0
  602. package/llms/components/lr-toast.md +123 -0
  603. package/llms/components/lr-token-input.md +31 -0
  604. package/llms/components/lr-tool-approval-dialog.md +131 -0
  605. package/llms/components/lr-tool-call-chip.md +101 -0
  606. package/llms/components/lr-tool-param-form.md +148 -0
  607. package/llms/components/lr-tool-result-dialog.md +106 -0
  608. package/llms/components/lr-tool-result-view.md +162 -0
  609. package/llms/components/lr-tool-select-dialog.md +124 -0
  610. package/llms/components/lr-tool-timeline.md +56 -0
  611. package/llms/components/lr-tooltip.md +47 -0
  612. package/llms/components/lr-tour.md +100 -0
  613. package/llms/components/lr-trace-tree.md +35 -0
  614. package/llms/components/lr-transcript-feed.md +45 -0
  615. package/llms/components/lr-tree-node.md +133 -0
  616. package/llms/components/lr-tree.md +133 -0
  617. package/llms/components/lr-typing-indicator.md +80 -0
  618. package/llms/components/lr-usage-badge.md +44 -0
  619. package/llms/components/lr-virtual-list.md +145 -0
  620. package/llms/components/lr-voice-picker.md +78 -0
  621. package/llms/components/lr-widget-renderer.md +78 -0
  622. package/llms/components/lr-widget.md +104 -0
  623. package/llms/components/lr-word-cloud.md +112 -0
  624. package/llms/components/lr-xml-viewer.md +58 -0
  625. package/llms/components/lr-zoomable-frame.md +57 -0
  626. package/llms/index.md +301 -0
  627. package/llms/migration.md +86 -0
  628. package/llms/peers.md +41 -0
  629. package/llms/shared.md +321 -0
  630. package/llms/tokens.md +533 -0
  631. package/llms-full.txt +10731 -8563
  632. package/llms.txt +64 -121
  633. package/package.json +14 -2
  634. package/vscode-css-data.json +1424 -185
  635. package/vscode-html-data.json +128 -107
  636. package/web-types.json +853 -118
@@ -46,6 +46,10 @@
46
46
  "description": "The clickable header (`<button>`).",
47
47
  "name": "header"
48
48
  },
49
+ {
50
+ "description": "The header's title text — `label`, or its localized default when `label` is left at `'Activity'`.",
51
+ "name": "label"
52
+ },
49
53
  {
50
54
  "description": "The decorative mode indicator dot; pulses while `mode=\"live\"`.",
51
55
  "name": "status-dot"
@@ -705,6 +709,13 @@
705
709
  "kind": "class",
706
710
  "description": "`<lr-agent-run>` — the top-level shell for one `AgentRun`: lifecycle-status badge, elapsed\ntime, current step, model/cost summary, and built-in Cancel/Retry controls in a header, plus\nfour named composition slots (`tasks`/`tools`/`reasoning`/`output`) for the run's actual\ncontent. This is deliberately a SHELL, not a new step-rendering surface — every piece of\nper-step or per-invocation rendering routes through an existing primitive:\n\n- **Elapsed time**: composes `<lr-generation-status>` (`active`/`started-at`, its own built-in\n Stop button hidden via `show-stop=\"false\"` since this component renders its own Cancel/Retry\n pair instead) for the *live, ticking* readout while the run is genuinely in progress\n (`running`/`collecting`/`waiting-input`/`waiting-approval`). `<lr-stream-status>` doesn't fit:\n its `phase` vocabulary\n (`idle`/`connecting`/`streaming`/`stalled`) models transport/connection health, not an agent\n run's nine built-in lifecycle statuses (plus application-defined extensions), and it exposes no elapsed-time readout at all — exactly the\n distinction `<lr-generation-status>`'s own class doc already draws between the two. Once the\n run reaches a terminal state (`done`/`error`/`cancelled`) with both a `startedAt` and an\n `endedAt`, this component instead renders a small locally-formatted static duration\n (`endedAt - startedAt`): `<lr-generation-status>`'s freeze-on-`active=false` semantics only\n ever freeze at whatever it last computed *live*, so mounting it directly against a completed\n run loaded from history (e.g. `startedAt` yesterday, `endedAt` five minutes later, loaded\n today) would either show a stale zero or the wrong multi-hour span — it has no way to render a\n fixed historical span on demand. That static fallback reuses the same small `formatDuration()`\n algorithm `<lr-usage-badge>` and `<lr-tool-call-chip>` already duplicate locally for the same\n reason (see this file's own copy).\n- **Model + cost summary**: composes `<lr-usage-badge>`, fed `run.costEstimate` (formatted via\n `formatCost`, or a plain `Intl.NumberFormat` by default — this library never assumes a\n currency, see `<lr-format-number>`'s own explicit `currency` prop) as its `cost-text`.\n `run.model` (a plain string with no analogous `<lr-usage-badge>` property) renders alongside\n as plain text.\n- **Current step**: a single-line summary of whichever `run.steps` entry currently has\n `status.kind === 'running'` (the last such entry, if more than one) — a plain text line, not a\n list, so it doesn't duplicate `<lr-task-list>`'s own per-item rendering.\n- **Tasks slot default content**: when the host doesn't slot anything into `tasks` and\n `run.steps` is non-empty, this component's own `<slot>` fallback renders a `<lr-task-list>`\n populated by mapping every `AgentStep` to a `TaskItem` (see `toTaskItem()`) — a plain data\n adapter between the two existing shapes, not new rendering.\n- **Status badge**: composes `<lr-badge>`. **Empty state**: composes `<lr-empty>` when `run` is\n `null`.\n\n`tools`/`reasoning`/`output` are plain named slots with no default content — entirely the\nhost's own composition (typically `<lr-tool-call-chip>`/`<lr-tool-result-view>` rows,\nreasoning/streaming text, and final output respectively). An `actions` slot adds extra header\ncontrols alongside the built-in Cancel/Retry pair. The `header` and `summary` slots replace the\nbuilt-in lifecycle header and model/usage/metrics summary respectively. `statusLabels` and\n`statusVariants` make application-defined lifecycle kinds first-class, while `metrics` renders\narbitrary labeled values such as prompt and completion token counts.\n\nThe built-in Cancel button renders while `showCancel` is true and the run's status is one of\n`TICKING_KINDS` (still genuinely in progress); Retry renders while `showRetry` is true and the\nstatus is `error` or `cancelled`. Clicking either fires `lr-cancel`/`lr-retry` with\n`CancelEventDetail`/`RetryEventDetail` from `src/ai/types.ts` — this component never cancels or\nretries anything itself, it only requests. `RetryEventDetail.attempt` is a 1-based counter\nlocal to this component, incremented on every `lr-retry` click and reset to `0` whenever\n`run.id` changes (a genuinely new run replacing the old one, as opposed to the same run's status\nmerely updating in place).\n\nLifecycle transitions into an attention-needing or terminal state (`waiting-input`,\n`waiting-approval`, `done`, `error`, `cancelled`) are announced through an internal\n`<lr-live-region>`, mirroring `<lr-stream-status>`'s own stall/recover announcements —\n`running`/`idle` transitions are frequent and not independently actionable, so they stay\nsilent, and whatever status a freshly-assigned `run` (a new `run.id`) happens to already carry\nis never itself treated as an eventful transition, only a later in-place change is.",
707
711
  "name": "LyraAgentRun",
712
+ "cssProperties": [
713
+ {
714
+ "description": "Current-step icon spin animation duration and timing.",
715
+ "name": "--lr-agent-run-spin",
716
+ "default": "1s linear"
717
+ }
718
+ ],
708
719
  "cssParts": [
709
720
  {
710
721
  "description": "Wrapper around the `actions` slot and the built-in Cancel/Retry buttons.",
@@ -4033,6 +4044,13 @@
4033
4044
  "kind": "class",
4034
4045
  "description": "`<lr-compare-panel>` — side-by-side A/B output comparison with a winner\nvote (LMSYS-arena / LangSmith-pairwise style): two slotted panes, a vote\nbar, synchronized reading.",
4035
4046
  "name": "LyraComparePanel",
4047
+ "cssProperties": [
4048
+ {
4049
+ "description": "Cap on how tall each pane's scroll region grows before it scrolls internally.",
4050
+ "name": "--lr-compare-panel-max-height",
4051
+ "default": "var(--lr-size-24rem)"
4052
+ }
4053
+ ],
4036
4054
  "cssParts": [
4037
4055
  {
4038
4056
  "description": "The outer wrapper.",
@@ -9997,6 +10015,18 @@
9997
10015
  "kind": "class",
9998
10016
  "description": "`<lr-stack-trace>` — parses common V8/JS-TS, Firefox/Safari, and Python stack traces into a\nleading message plus activatable frames, splitting chained/caused-by errors into separate\ngroups. Frames matching `internalPatterns` (`node_modules/`, `node:internal`,\n`site-packages/`, ... by default) fold behind a count-labeled toggle. Falls back to verbatim\nraw text when nothing parses. First-party invention (no Web Awesome equivalent).",
9999
10017
  "name": "LyraStackTrace",
10018
+ "cssProperties": [
10019
+ {
10020
+ "description": "Cap on how tall `[part=\"base\"]` grows before it scrolls internally. `none` lets the component grow with its content; the `max-height` attribute sets this token.",
10021
+ "name": "--lr-stack-trace-max-height",
10022
+ "default": "none"
10023
+ },
10024
+ {
10025
+ "description": "Font family for the parsed frames and the verbatim raw fallback.",
10026
+ "name": "--lr-stack-trace-font",
10027
+ "default": "var(--lr-font-mono)"
10028
+ }
10029
+ ],
10000
10030
  "cssParts": [
10001
10031
  {
10002
10032
  "description": "The root wrapper; respects `max-height`.",
@@ -11193,6 +11223,13 @@
11193
11223
  "kind": "class",
11194
11224
  "description": "`<lr-terminal>` — read-only ANSI console for streamed agent/tool output. Not a PTY: no\nstdin/keystroke handling, no cursor-addressed full-screen apps.",
11195
11225
  "name": "LyraTerminal",
11226
+ "cssProperties": [
11227
+ {
11228
+ "description": "Block size of `[part=\"viewport\"]`, the scrollable log region. Not declared on `:host`, so it is inherited — set it on the host or any ancestor.",
11229
+ "name": "--lr-terminal-height",
11230
+ "default": "var(--lr-size-20rem)"
11231
+ }
11232
+ ],
11196
11233
  "cssParts": [
11197
11234
  {
11198
11235
  "description": "The visually-hidden `role=\"status\"` region used when `announce-output` is set.",
@@ -12915,6 +12952,13 @@
12915
12952
  "kind": "class",
12916
12953
  "description": "`<lr-thinking-panel>` — a collapsible panel for an AI agent's\nintermediate reasoning/\"thinking\" transcript, kept visually and\nsemantically distinct from its final response. Same collapsible\nheader-button-plus-region shape as `<lr-source-list>`; the default slot\nis entirely free-form (a consumer-composed `<lr-streaming-text>`,\n`<lr-markdown>`, or plain text) — this component has no dependency on\neither and imposes no structure on what's slotted.\n\n`mode` (`'live'` while reasoning is actively streaming in, `'post-hoc'`\nonce it's complete and being reviewed after the fact) drives two concrete\nbehavior differences, not just a styling hook:\n- **Header hint.** While `duration-ms` is unset, `'live'` shows a pulsing\n \"Thinking…\" placeholder in `[part=\"duration\"]`; `'post-hoc'` shows\n nothing there instead (a finished review with no known duration has\n nothing useful to say in that slot). Once `duration-ms` is set, both\n modes show the same static `\"Thought for …\"` text — a `'post-hoc'`\n consumer that captured a duration is free to supply it too.\n- **Auto-scroll.** Only `'live'` mode auto-follows new content appended to\n the default slot while `expanded` (see below); `'post-hoc'` never\n scrolls on its own, since reviewing finished reasoning is expected to\n start from the top like reading any other completed document. This\n library otherwise defaults to *not* editorializing about a host's data\n (see `<lr-empty>`'s plain-`description` stance), but scroll position\n is presentation, not data, so this one behavior difference earns its\n keep rather than being left as a bare visual/semantic hint the host\n would have to reimplement identically itself.\n\nLive-mode auto-scroll (\"stick to bottom\") is the classic chat-transcript\nconvention: while `mode=\"live\"` and `expanded`, new content keeps the\npanel scrolled to its latest line — *unless* the user has manually\nscrolled up to (re-)read earlier content, in which case their position is\nnever yanked away from them. This is tracked continuously via a `scroll`\nlistener on `[part=\"body\"]` (not recomputed from the mutation itself,\nwhich necessarily observes the DOM only *after* it has already changed):\nevery user-driven scroll records whether the body was left within\n`NEAR_BOTTOM_PX` of its own max scroll position, and only a mutation that\narrives while that's still true triggers a follow-up scroll-to-bottom.\nOpening an already-`'live'` panel (or one that later becomes `'live'`)\nalways resets this to \"anchored\" and jumps to the latest content, the same\nway a chat app's own transcript does when you re-open it.\n\nNew content is detected via a `MutationObserver` on this element's own\nlight DOM (`childList`+`subtree`+`characterData`) rather than the default\nslot's `slotchange` event, because `slotchange` only fires when the set of\ntop-level assigned nodes changes — never for a text node mutating *inside*\nan already-slotted element, which is the more likely shape for streamed\nreasoning (a consumer appending chunks to an existing node's `textContent`\nrather than re-slotting a whole new element per token). The one thing this\ncan't see is a mutation entirely inside a slotted custom element's own\nshadow root (e.g. a `<lr-markdown>` re-rendering its shadow tree after a\n`content` property change) — Shadow DOM encapsulation blocks that by\ndesign, and there is no way for this component to reach across that\nboundary. A slotted element whose *own* internal updates should drive this\npanel's auto-scroll needs to append/mutate visible light-DOM text itself\n(as `<lr-streaming-text>` is expected to), or the host can call this\npanel's own `scrollToBottom()` directly.\n\n`aria-controls` linking the header to the body region uses `nextId()`\n(`../../internal/a11y.js`) for a collision-safe id, the same convention\n`<lr-source-list>` and `<lr-widget>` already establish for every\ntoggle-controls-region pairing in this library.",
12917
12954
  "name": "LyraThinkingPanel",
12955
+ "cssProperties": [
12956
+ {
12957
+ "description": "Cap on how tall the expanded reasoning transcript grows before `[part=\"body\"]` scrolls internally.",
12958
+ "name": "--lr-thinking-panel-max-block-size",
12959
+ "default": "var(--lr-size-16rem)"
12960
+ }
12961
+ ],
12918
12962
  "cssParts": [
12919
12963
  {
12920
12964
  "description": "The outer container.",
@@ -13456,6 +13500,18 @@
13456
13500
  "kind": "class",
13457
13501
  "description": "`<lr-tool-approval-dialog>` — a human-in-the-loop gate: presents one\nproposed tool/function call (`toolName` + `args`) and blocks an agent from\nexecuting it until a person explicitly approves or denies it, with an\noptional inline \"edit the arguments before approving\" step.\n\nThis renders its own dialog panel rather than nesting a `<lr-dialog>` in\nits shadow template. Shared overlay infrastructure coordinates stacking,\nfocus trapping, Escape/backdrop dismissal, and focus return with every\nother overlay in the same document.\n\nApprove/Deny/Edit are built-in chrome (not a `footer` slot a consumer must\nassemble) — this component's interaction shape is fixed enough (there is\nexactly one correct set of actions for \"approve this call\") that requiring\nevery consumer to re-build it would just be boilerplate. A `footer` slot is\nstill offered for *supplementary* content a consumer wants alongside those\nbuttons (e.g. a \"remember this choice for this tool\" checkbox) — its\ncontent renders to the start of the action row, before Deny/Edit/Approve.\n\nEditing: while `editable`, an Edit button swaps the read-only\n`<lr-json-viewer>` for a plain `<textarea>` pre-filled with\n`JSON.stringify(args, null, 2)`. Every keystroke is re-validated with\n`JSON.parse` — the Approve button is `disabled` for as long as the current\ntextarea content fails to parse, so a malformed edit can never be silently\napproved as either the broken text or a stale copy of the original args.\nThe editor defaults to `spellcheck=\"false\"`, `autocapitalize=\"off\"`,\n`autocorrect=\"off\"`, and `autocomplete=\"off\"` because its content is raw\nJSON, never prose. The corresponding native editing properties remain\nconfigurable for integrations that need different browser behavior.\nThe same button relabels to \"Cancel\" while editing; clicking it discards\nthe draft entirely and returns to the read-only view of the *original*\n`args` — there is no separate \"save\" step independent of Approve itself.\nBoth `editing` and any in-progress draft reset back to the read-only view\nevery time the dialog transitions from closed to open, so a reused\ninstance never leaks one proposal's half-finished edit into the next.\n`editable` flipping to `false` mid-edit does the same (see `willUpdate()`)\nand, if the textarea it unmounts still held focus, `updated()` refocuses\nDeny so the focus trap keeps engaging instead of silently letting focus\nfall through to the document.\n\nInitial focus deliberately does *not* land on Approve:\napproving a tool call is a consequential, potentially irreversible action,\nso a user who opens this dialog and reflexively presses Enter/Space before\nreading anything should deny, not approve. Deny gets the initial focus\ninstead — the same \"focus the safe action\" convention a native destructive-\nconfirmation dialog (delete, discard, etc.) typically follows for its own\nCancel button — rather than the inert dialog panel, which would need an\nextra Tab press before *any* action is reachable at all.",
13458
13502
  "name": "LyraToolApprovalDialog",
13503
+ "cssProperties": [
13504
+ {
13505
+ "description": "Backdrop scrim color.",
13506
+ "name": "--lr-tool-approval-dialog-overlay-color",
13507
+ "default": "var(--lr-color-overlay)"
13508
+ },
13509
+ {
13510
+ "description": "Font family for the tool name and the raw-JSON args editor.",
13511
+ "name": "--lr-tool-approval-dialog-mono-font",
13512
+ "default": "var(--lr-font-mono)"
13513
+ }
13514
+ ],
13459
13515
  "cssParts": [
13460
13516
  {
13461
13517
  "description": "The built-in Approve button — `disabled` while an in-progress edit is invalid JSON.",
@@ -14208,6 +14264,21 @@
14208
14264
  "description": "Pending-icon pulse duration and timing.",
14209
14265
  "name": "--lr-transition-ambient",
14210
14266
  "default": "1.8s ease-in-out"
14267
+ },
14268
+ {
14269
+ "description": "Per-status accent color for the status glyph and status text. Reassigned by this component's own `:host([status=\"…\"])` rules (`running` → brand, `success` → success, `error` → danger, `denied` → warning), so a page-level override only wins for the default/`pending` tone.",
14270
+ "name": "--lr-tool-call-chip-accent",
14271
+ "default": "var(--lr-color-text-quiet)"
14272
+ },
14273
+ {
14274
+ "description": "Per-status chip background. Reassigned by the same `:host([status=\"…\"])` rules (each status's `-quiet` tint).",
14275
+ "name": "--lr-tool-call-chip-bg",
14276
+ "default": "var(--lr-color-surface)"
14277
+ },
14278
+ {
14279
+ "description": "Per-status chip border color. Reassigned by the same `:host([status=\"…\"])` rules (`transparent` for every non-`pending` status).",
14280
+ "name": "--lr-tool-call-chip-border",
14281
+ "default": "var(--lr-color-border)"
14211
14282
  }
14212
14283
  ],
14213
14284
  "cssParts": [
@@ -16768,6 +16839,13 @@
16768
16839
  "kind": "class",
16769
16840
  "description": "`<lr-tool-result-view>` — renders a tool call's result via whichever\ncustom renderer a host app has registered for it (see `registerToolRenderer()`\nin `registry.ts`), falling back to `<lr-json-viewer>` whenever no\nrenderer matches, a candidate renderer's `matches()` predicate throws during\ndispatch, a renderer's optional `load()` rejects, or its `render()` throws.\nThis component owns none of the actual visual weight of a\npopulated tool result — that's entirely whatever the registered renderer\nreturns; this is just the dispatch + fallback + loading-state shell.\n\nDispatch runs against `registry` when set, otherwise against the\nmodule-level default registry `registerToolRenderer()` writes to — see\n`findToolRenderer()`'s two-step (exact name, then shape-based `matches()`)\nlookup order for the full rule.\n\n`fallback` implements two kinds: `\"json\"` (the default, an unconditional `<lr-json-viewer>`)\nand `\"text\"`, which renders a *string* `result` as preformatted text instead — falling back to\nthe `\"json\"` behavior when `result` isn't a string, so setting `fallback=\"text\"` defensively\nagainst an unpredictable result shape never renders broken output. `copyable` adds a\ncopy-to-clipboard affordance to either fallback kind (forwarded to `<lr-json-viewer>`'s own\n`copyable` for `\"json\"`; a `<lr-copy-button>` alongside the text for `\"text\"`).",
16770
16841
  "name": "LyraToolResultView",
16842
+ "cssProperties": [
16843
+ {
16844
+ "description": "Font family for the `fallback=\"text\"` preformatted output.",
16845
+ "name": "--lr-tool-result-view-font",
16846
+ "default": "var(--lr-font-mono)"
16847
+ }
16848
+ ],
16771
16849
  "cssParts": [
16772
16850
  {
16773
16851
  "description": "The root wrapper around the resolved renderer's output (or the loading/fallback view).",
@@ -17305,6 +17383,13 @@
17305
17383
  "kind": "class",
17306
17384
  "description": "`<lr-tool-select-dialog>` — a category-grouped, filterable, searchable\ntool-enablement dialog for picking which agent tools are available in a\nconversation.\n\nThis renders its own dialog panel rather than nesting a `<lr-dialog>` in\nits shadow template. Shared overlay infrastructure coordinates stacking,\nfocus trapping, Escape/backdrop dismissal, and focus return with every\nother overlay in the same document.\n\n`useDefaults` is a single top-level switch: while `true`, every per-tool\ncheckbox below renders disabled (still reflecting whatever `selected`\nholds — a consumer should populate that with its own default tool set\nwhenever `useDefaults` is true) and a hint explains that turning the\nswitch off is how to customize. Turning it off is the \"customize\"\naffordance — it's the only thing that both flips `useDefaults` to `false`\n*and* unlocks the per-tool checkboxes for editing, so there's exactly one\ncontrol for that transition rather than a separate button duplicating it.\n\nThere is no built-in footer/close button — like `<lr-dialog>`, dismissal\nhappens via Escape, a backdrop click, or a consumer's own `footer`-slotted\naction calling `close()`. This also means the search input is the very\nfirst focusable element in the panel with no special-casing needed, so\nit's what receives focus on open (see `updated()`).",
17307
17385
  "name": "LyraToolSelectDialog",
17386
+ "cssProperties": [
17387
+ {
17388
+ "description": "Backdrop scrim color.",
17389
+ "name": "--lr-tool-select-dialog-overlay-color",
17390
+ "default": "var(--lr-color-overlay)"
17391
+ }
17392
+ ],
17308
17393
  "cssParts": [
17309
17394
  {
17310
17395
  "description": "The full-viewport scrim behind the panel.",
@@ -18202,6 +18287,11 @@
18202
18287
  "description": "Vertical gap between entries.",
18203
18288
  "name": "--lr-tool-timeline-gap",
18204
18289
  "default": "var(--lr-space-l)"
18290
+ },
18291
+ {
18292
+ "description": "Diameter of an entry's rail dot; also the width of the marker gutter column.",
18293
+ "name": "--lr-tool-timeline-marker-size",
18294
+ "default": "var(--lr-size-0-625rem)"
18205
18295
  }
18206
18296
  ],
18207
18297
  "cssParts": [
@@ -20775,6 +20865,62 @@
20775
20865
  }
20776
20866
  }
20777
20867
  ],
20868
+ "cssProperties": [
20869
+ {
20870
+ "description": "The host's `block-size`. Set on the host element from the `height` property on every change (custom properties only cascade downward, so it cannot be set from inside the shadow root); a host-level override is overwritten the next time `height` changes.",
20871
+ "name": "--lr-chart-height",
20872
+ "default": "var(--lr-size-280px)",
20873
+ "inheritedFrom": {
20874
+ "name": "LyraChart",
20875
+ "module": "src/components/charts/chart/chart.class.ts"
20876
+ }
20877
+ },
20878
+ {
20879
+ "description": "Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).",
20880
+ "name": "--lr-chart-grid-color",
20881
+ "default": "var(--lr-color-border)",
20882
+ "inheritedFrom": {
20883
+ "name": "LyraChart",
20884
+ "module": "src/components/charts/chart/chart.class.ts"
20885
+ }
20886
+ },
20887
+ {
20888
+ "description": "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.",
20889
+ "name": "--lr-chart-tick-color",
20890
+ "default": "var(--lr-color-text-quiet)",
20891
+ "inheritedFrom": {
20892
+ "name": "LyraChart",
20893
+ "module": "src/components/charts/chart/chart.class.ts"
20894
+ }
20895
+ },
20896
+ {
20897
+ "description": "Legend label color. Resolved via `getComputedStyle` on every draw.",
20898
+ "name": "--lr-chart-legend-color",
20899
+ "default": "var(--lr-color-text)",
20900
+ "inheritedFrom": {
20901
+ "name": "LyraChart",
20902
+ "module": "src/components/charts/chart/chart.class.ts"
20903
+ }
20904
+ },
20905
+ {
20906
+ "description": "Tooltip background color. Resolved via `getComputedStyle` on every draw.",
20907
+ "name": "--lr-chart-tooltip-bg",
20908
+ "default": "var(--lr-color-surface)",
20909
+ "inheritedFrom": {
20910
+ "name": "LyraChart",
20911
+ "module": "src/components/charts/chart/chart.class.ts"
20912
+ }
20913
+ },
20914
+ {
20915
+ "description": "Tooltip text color. Resolved via `getComputedStyle` on every draw.",
20916
+ "name": "--lr-chart-tooltip-text",
20917
+ "default": "var(--lr-color-text)",
20918
+ "inheritedFrom": {
20919
+ "name": "LyraChart",
20920
+ "module": "src/components/charts/chart/chart.class.ts"
20921
+ }
20922
+ }
20923
+ ],
20778
20924
  "attributes": [
20779
20925
  {
20780
20926
  "name": "accessible-description",
@@ -22946,6 +23092,62 @@
22946
23092
  }
22947
23093
  }
22948
23094
  ],
23095
+ "cssProperties": [
23096
+ {
23097
+ "description": "The host's `block-size`. Set on the host element from the `height` property on every change (custom properties only cascade downward, so it cannot be set from inside the shadow root); a host-level override is overwritten the next time `height` changes.",
23098
+ "name": "--lr-chart-height",
23099
+ "default": "var(--lr-size-280px)",
23100
+ "inheritedFrom": {
23101
+ "name": "LyraChart",
23102
+ "module": "src/components/charts/chart/chart.class.ts"
23103
+ }
23104
+ },
23105
+ {
23106
+ "description": "Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).",
23107
+ "name": "--lr-chart-grid-color",
23108
+ "default": "var(--lr-color-border)",
23109
+ "inheritedFrom": {
23110
+ "name": "LyraChart",
23111
+ "module": "src/components/charts/chart/chart.class.ts"
23112
+ }
23113
+ },
23114
+ {
23115
+ "description": "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.",
23116
+ "name": "--lr-chart-tick-color",
23117
+ "default": "var(--lr-color-text-quiet)",
23118
+ "inheritedFrom": {
23119
+ "name": "LyraChart",
23120
+ "module": "src/components/charts/chart/chart.class.ts"
23121
+ }
23122
+ },
23123
+ {
23124
+ "description": "Legend label color. Resolved via `getComputedStyle` on every draw.",
23125
+ "name": "--lr-chart-legend-color",
23126
+ "default": "var(--lr-color-text)",
23127
+ "inheritedFrom": {
23128
+ "name": "LyraChart",
23129
+ "module": "src/components/charts/chart/chart.class.ts"
23130
+ }
23131
+ },
23132
+ {
23133
+ "description": "Tooltip background color. Resolved via `getComputedStyle` on every draw.",
23134
+ "name": "--lr-chart-tooltip-bg",
23135
+ "default": "var(--lr-color-surface)",
23136
+ "inheritedFrom": {
23137
+ "name": "LyraChart",
23138
+ "module": "src/components/charts/chart/chart.class.ts"
23139
+ }
23140
+ },
23141
+ {
23142
+ "description": "Tooltip text color. Resolved via `getComputedStyle` on every draw.",
23143
+ "name": "--lr-chart-tooltip-text",
23144
+ "default": "var(--lr-color-text)",
23145
+ "inheritedFrom": {
23146
+ "name": "LyraChart",
23147
+ "module": "src/components/charts/chart/chart.class.ts"
23148
+ }
23149
+ }
23150
+ ],
22949
23151
  "attributes": [
22950
23152
  {
22951
23153
  "name": "accessible-description",
@@ -23300,6 +23502,38 @@
23300
23502
  "kind": "class",
23301
23503
  "description": "`<lr-chart>` — the core Chart.js wrapper every other `lr-*-chart` tag\nsubclasses. Requires the optional peer deps `chart.js` + `chartjs-plugin-zoom`.\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 `Series`-based\n`datasets`/`labels`/`type`/`legend`/`xLabel`/`yLabel`/`zoom` attributes\nbelow are the simplified surface (compatible with WA's `type`, `xLabel`,\n`yLabel`, `withoutLegend`-equivalent `legend`, etc.), and the additional\n`config` property is the raw-passthrough escape hatch — a\n`Partial<ChartConfiguration>` deep-merged over the generated config in\n`buildConfig()`, mirroring WA's `config` property without discarding the\n`Series` shape the rest of this component family (subclasses, box-plot,\nhistogram) is built on.",
23302
23504
  "name": "LyraChart",
23505
+ "cssProperties": [
23506
+ {
23507
+ "description": "The host's `block-size`. Set on the host element from the `height` property on every change (custom properties only cascade downward, so it cannot be set from inside the shadow root); a host-level override is overwritten the next time `height` changes.",
23508
+ "name": "--lr-chart-height",
23509
+ "default": "var(--lr-size-280px)"
23510
+ },
23511
+ {
23512
+ "description": "Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).",
23513
+ "name": "--lr-chart-grid-color",
23514
+ "default": "var(--lr-color-border)"
23515
+ },
23516
+ {
23517
+ "description": "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.",
23518
+ "name": "--lr-chart-tick-color",
23519
+ "default": "var(--lr-color-text-quiet)"
23520
+ },
23521
+ {
23522
+ "description": "Legend label color. Resolved via `getComputedStyle` on every draw.",
23523
+ "name": "--lr-chart-legend-color",
23524
+ "default": "var(--lr-color-text)"
23525
+ },
23526
+ {
23527
+ "description": "Tooltip background color. Resolved via `getComputedStyle` on every draw.",
23528
+ "name": "--lr-chart-tooltip-bg",
23529
+ "default": "var(--lr-color-surface)"
23530
+ },
23531
+ {
23532
+ "description": "Tooltip text color. Resolved via `getComputedStyle` on every draw.",
23533
+ "name": "--lr-chart-tooltip-text",
23534
+ "default": "var(--lr-color-text)"
23535
+ }
23536
+ ],
23303
23537
  "cssParts": [
23304
23538
  {
23305
23539
  "description": "The chart wrapper.",
@@ -25743,6 +25977,62 @@
25743
25977
  }
25744
25978
  }
25745
25979
  ],
25980
+ "cssProperties": [
25981
+ {
25982
+ "description": "The host's `block-size`. Set on the host element from the `height` property on every change (custom properties only cascade downward, so it cannot be set from inside the shadow root); a host-level override is overwritten the next time `height` changes.",
25983
+ "name": "--lr-chart-height",
25984
+ "default": "var(--lr-size-280px)",
25985
+ "inheritedFrom": {
25986
+ "name": "LyraChart",
25987
+ "module": "src/components/charts/chart/chart.class.ts"
25988
+ }
25989
+ },
25990
+ {
25991
+ "description": "Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).",
25992
+ "name": "--lr-chart-grid-color",
25993
+ "default": "var(--lr-color-border)",
25994
+ "inheritedFrom": {
25995
+ "name": "LyraChart",
25996
+ "module": "src/components/charts/chart/chart.class.ts"
25997
+ }
25998
+ },
25999
+ {
26000
+ "description": "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.",
26001
+ "name": "--lr-chart-tick-color",
26002
+ "default": "var(--lr-color-text-quiet)",
26003
+ "inheritedFrom": {
26004
+ "name": "LyraChart",
26005
+ "module": "src/components/charts/chart/chart.class.ts"
26006
+ }
26007
+ },
26008
+ {
26009
+ "description": "Legend label color. Resolved via `getComputedStyle` on every draw.",
26010
+ "name": "--lr-chart-legend-color",
26011
+ "default": "var(--lr-color-text)",
26012
+ "inheritedFrom": {
26013
+ "name": "LyraChart",
26014
+ "module": "src/components/charts/chart/chart.class.ts"
26015
+ }
26016
+ },
26017
+ {
26018
+ "description": "Tooltip background color. Resolved via `getComputedStyle` on every draw.",
26019
+ "name": "--lr-chart-tooltip-bg",
26020
+ "default": "var(--lr-color-surface)",
26021
+ "inheritedFrom": {
26022
+ "name": "LyraChart",
26023
+ "module": "src/components/charts/chart/chart.class.ts"
26024
+ }
26025
+ },
26026
+ {
26027
+ "description": "Tooltip text color. Resolved via `getComputedStyle` on every draw.",
26028
+ "name": "--lr-chart-tooltip-text",
26029
+ "default": "var(--lr-color-text)",
26030
+ "inheritedFrom": {
26031
+ "name": "LyraChart",
26032
+ "module": "src/components/charts/chart/chart.class.ts"
26033
+ }
26034
+ }
26035
+ ],
25746
26036
  "attributes": [
25747
26037
  {
25748
26038
  "name": "accessible-description",
@@ -27571,6 +27861,62 @@
27571
27861
  }
27572
27862
  }
27573
27863
  ],
27864
+ "cssProperties": [
27865
+ {
27866
+ "description": "The host's `block-size`. Set on the host element from the `height` property on every change (custom properties only cascade downward, so it cannot be set from inside the shadow root); a host-level override is overwritten the next time `height` changes.",
27867
+ "name": "--lr-chart-height",
27868
+ "default": "var(--lr-size-280px)",
27869
+ "inheritedFrom": {
27870
+ "name": "LyraChart",
27871
+ "module": "src/components/charts/chart/chart.class.ts"
27872
+ }
27873
+ },
27874
+ {
27875
+ "description": "Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).",
27876
+ "name": "--lr-chart-grid-color",
27877
+ "default": "var(--lr-color-border)",
27878
+ "inheritedFrom": {
27879
+ "name": "LyraChart",
27880
+ "module": "src/components/charts/chart/chart.class.ts"
27881
+ }
27882
+ },
27883
+ {
27884
+ "description": "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.",
27885
+ "name": "--lr-chart-tick-color",
27886
+ "default": "var(--lr-color-text-quiet)",
27887
+ "inheritedFrom": {
27888
+ "name": "LyraChart",
27889
+ "module": "src/components/charts/chart/chart.class.ts"
27890
+ }
27891
+ },
27892
+ {
27893
+ "description": "Legend label color. Resolved via `getComputedStyle` on every draw.",
27894
+ "name": "--lr-chart-legend-color",
27895
+ "default": "var(--lr-color-text)",
27896
+ "inheritedFrom": {
27897
+ "name": "LyraChart",
27898
+ "module": "src/components/charts/chart/chart.class.ts"
27899
+ }
27900
+ },
27901
+ {
27902
+ "description": "Tooltip background color. Resolved via `getComputedStyle` on every draw.",
27903
+ "name": "--lr-chart-tooltip-bg",
27904
+ "default": "var(--lr-color-surface)",
27905
+ "inheritedFrom": {
27906
+ "name": "LyraChart",
27907
+ "module": "src/components/charts/chart/chart.class.ts"
27908
+ }
27909
+ },
27910
+ {
27911
+ "description": "Tooltip text color. Resolved via `getComputedStyle` on every draw.",
27912
+ "name": "--lr-chart-tooltip-text",
27913
+ "default": "var(--lr-color-text)",
27914
+ "inheritedFrom": {
27915
+ "name": "LyraChart",
27916
+ "module": "src/components/charts/chart/chart.class.ts"
27917
+ }
27918
+ }
27919
+ ],
27574
27920
  "events": [
27575
27921
  {
27576
27922
  "description": "Fired when a click lands on (or nearest, intersect-only — see `handlePointClick()`) a data point/segment. `detail: { datasetIndex: number, index: number, label: string | undefined, value: unknown }`.",
@@ -28896,6 +29242,62 @@
28896
29242
  }
28897
29243
  }
28898
29244
  ],
29245
+ "cssProperties": [
29246
+ {
29247
+ "description": "The host's `block-size`. Set on the host element from the `height` property on every change (custom properties only cascade downward, so it cannot be set from inside the shadow root); a host-level override is overwritten the next time `height` changes.",
29248
+ "name": "--lr-chart-height",
29249
+ "default": "var(--lr-size-280px)",
29250
+ "inheritedFrom": {
29251
+ "name": "LyraChart",
29252
+ "module": "src/components/charts/chart/chart.class.ts"
29253
+ }
29254
+ },
29255
+ {
29256
+ "description": "Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).",
29257
+ "name": "--lr-chart-grid-color",
29258
+ "default": "var(--lr-color-border)",
29259
+ "inheritedFrom": {
29260
+ "name": "LyraChart",
29261
+ "module": "src/components/charts/chart/chart.class.ts"
29262
+ }
29263
+ },
29264
+ {
29265
+ "description": "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.",
29266
+ "name": "--lr-chart-tick-color",
29267
+ "default": "var(--lr-color-text-quiet)",
29268
+ "inheritedFrom": {
29269
+ "name": "LyraChart",
29270
+ "module": "src/components/charts/chart/chart.class.ts"
29271
+ }
29272
+ },
29273
+ {
29274
+ "description": "Legend label color. Resolved via `getComputedStyle` on every draw.",
29275
+ "name": "--lr-chart-legend-color",
29276
+ "default": "var(--lr-color-text)",
29277
+ "inheritedFrom": {
29278
+ "name": "LyraChart",
29279
+ "module": "src/components/charts/chart/chart.class.ts"
29280
+ }
29281
+ },
29282
+ {
29283
+ "description": "Tooltip background color. Resolved via `getComputedStyle` on every draw.",
29284
+ "name": "--lr-chart-tooltip-bg",
29285
+ "default": "var(--lr-color-surface)",
29286
+ "inheritedFrom": {
29287
+ "name": "LyraChart",
29288
+ "module": "src/components/charts/chart/chart.class.ts"
29289
+ }
29290
+ },
29291
+ {
29292
+ "description": "Tooltip text color. Resolved via `getComputedStyle` on every draw.",
29293
+ "name": "--lr-chart-tooltip-text",
29294
+ "default": "var(--lr-color-text)",
29295
+ "inheritedFrom": {
29296
+ "name": "LyraChart",
29297
+ "module": "src/components/charts/chart/chart.class.ts"
29298
+ }
29299
+ }
29300
+ ],
28899
29301
  "attributes": [
28900
29302
  {
28901
29303
  "name": "accessible-description",
@@ -31717,6 +32119,62 @@
31717
32119
  }
31718
32120
  }
31719
32121
  ],
32122
+ "cssProperties": [
32123
+ {
32124
+ "description": "The host's `block-size`. Set on the host element from the `height` property on every change (custom properties only cascade downward, so it cannot be set from inside the shadow root); a host-level override is overwritten the next time `height` changes.",
32125
+ "name": "--lr-chart-height",
32126
+ "default": "var(--lr-size-280px)",
32127
+ "inheritedFrom": {
32128
+ "name": "LyraChart",
32129
+ "module": "src/components/charts/chart/chart.class.ts"
32130
+ }
32131
+ },
32132
+ {
32133
+ "description": "Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).",
32134
+ "name": "--lr-chart-grid-color",
32135
+ "default": "var(--lr-color-border)",
32136
+ "inheritedFrom": {
32137
+ "name": "LyraChart",
32138
+ "module": "src/components/charts/chart/chart.class.ts"
32139
+ }
32140
+ },
32141
+ {
32142
+ "description": "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.",
32143
+ "name": "--lr-chart-tick-color",
32144
+ "default": "var(--lr-color-text-quiet)",
32145
+ "inheritedFrom": {
32146
+ "name": "LyraChart",
32147
+ "module": "src/components/charts/chart/chart.class.ts"
32148
+ }
32149
+ },
32150
+ {
32151
+ "description": "Legend label color. Resolved via `getComputedStyle` on every draw.",
32152
+ "name": "--lr-chart-legend-color",
32153
+ "default": "var(--lr-color-text)",
32154
+ "inheritedFrom": {
32155
+ "name": "LyraChart",
32156
+ "module": "src/components/charts/chart/chart.class.ts"
32157
+ }
32158
+ },
32159
+ {
32160
+ "description": "Tooltip background color. Resolved via `getComputedStyle` on every draw.",
32161
+ "name": "--lr-chart-tooltip-bg",
32162
+ "default": "var(--lr-color-surface)",
32163
+ "inheritedFrom": {
32164
+ "name": "LyraChart",
32165
+ "module": "src/components/charts/chart/chart.class.ts"
32166
+ }
32167
+ },
32168
+ {
32169
+ "description": "Tooltip text color. Resolved via `getComputedStyle` on every draw.",
32170
+ "name": "--lr-chart-tooltip-text",
32171
+ "default": "var(--lr-color-text)",
32172
+ "inheritedFrom": {
32173
+ "name": "LyraChart",
32174
+ "module": "src/components/charts/chart/chart.class.ts"
32175
+ }
32176
+ }
32177
+ ],
31720
32178
  "attributes": [
31721
32179
  {
31722
32180
  "name": "accessible-description",
@@ -33218,6 +33676,62 @@
33218
33676
  }
33219
33677
  }
33220
33678
  ],
33679
+ "cssProperties": [
33680
+ {
33681
+ "description": "The host's `block-size`. Set on the host element from the `height` property on every change (custom properties only cascade downward, so it cannot be set from inside the shadow root); a host-level override is overwritten the next time `height` changes.",
33682
+ "name": "--lr-chart-height",
33683
+ "default": "var(--lr-size-280px)",
33684
+ "inheritedFrom": {
33685
+ "name": "LyraChart",
33686
+ "module": "src/components/charts/chart/chart.class.ts"
33687
+ }
33688
+ },
33689
+ {
33690
+ "description": "Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).",
33691
+ "name": "--lr-chart-grid-color",
33692
+ "default": "var(--lr-color-border)",
33693
+ "inheritedFrom": {
33694
+ "name": "LyraChart",
33695
+ "module": "src/components/charts/chart/chart.class.ts"
33696
+ }
33697
+ },
33698
+ {
33699
+ "description": "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.",
33700
+ "name": "--lr-chart-tick-color",
33701
+ "default": "var(--lr-color-text-quiet)",
33702
+ "inheritedFrom": {
33703
+ "name": "LyraChart",
33704
+ "module": "src/components/charts/chart/chart.class.ts"
33705
+ }
33706
+ },
33707
+ {
33708
+ "description": "Legend label color. Resolved via `getComputedStyle` on every draw.",
33709
+ "name": "--lr-chart-legend-color",
33710
+ "default": "var(--lr-color-text)",
33711
+ "inheritedFrom": {
33712
+ "name": "LyraChart",
33713
+ "module": "src/components/charts/chart/chart.class.ts"
33714
+ }
33715
+ },
33716
+ {
33717
+ "description": "Tooltip background color. Resolved via `getComputedStyle` on every draw.",
33718
+ "name": "--lr-chart-tooltip-bg",
33719
+ "default": "var(--lr-color-surface)",
33720
+ "inheritedFrom": {
33721
+ "name": "LyraChart",
33722
+ "module": "src/components/charts/chart/chart.class.ts"
33723
+ }
33724
+ },
33725
+ {
33726
+ "description": "Tooltip text color. Resolved via `getComputedStyle` on every draw.",
33727
+ "name": "--lr-chart-tooltip-text",
33728
+ "default": "var(--lr-color-text)",
33729
+ "inheritedFrom": {
33730
+ "name": "LyraChart",
33731
+ "module": "src/components/charts/chart/chart.class.ts"
33732
+ }
33733
+ }
33734
+ ],
33221
33735
  "attributes": [
33222
33736
  {
33223
33737
  "name": "accessible-description",
@@ -34719,6 +35233,62 @@
34719
35233
  }
34720
35234
  }
34721
35235
  ],
35236
+ "cssProperties": [
35237
+ {
35238
+ "description": "The host's `block-size`. Set on the host element from the `height` property on every change (custom properties only cascade downward, so it cannot be set from inside the shadow root); a host-level override is overwritten the next time `height` changes.",
35239
+ "name": "--lr-chart-height",
35240
+ "default": "var(--lr-size-280px)",
35241
+ "inheritedFrom": {
35242
+ "name": "LyraChart",
35243
+ "module": "src/components/charts/chart/chart.class.ts"
35244
+ }
35245
+ },
35246
+ {
35247
+ "description": "Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).",
35248
+ "name": "--lr-chart-grid-color",
35249
+ "default": "var(--lr-color-border)",
35250
+ "inheritedFrom": {
35251
+ "name": "LyraChart",
35252
+ "module": "src/components/charts/chart/chart.class.ts"
35253
+ }
35254
+ },
35255
+ {
35256
+ "description": "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.",
35257
+ "name": "--lr-chart-tick-color",
35258
+ "default": "var(--lr-color-text-quiet)",
35259
+ "inheritedFrom": {
35260
+ "name": "LyraChart",
35261
+ "module": "src/components/charts/chart/chart.class.ts"
35262
+ }
35263
+ },
35264
+ {
35265
+ "description": "Legend label color. Resolved via `getComputedStyle` on every draw.",
35266
+ "name": "--lr-chart-legend-color",
35267
+ "default": "var(--lr-color-text)",
35268
+ "inheritedFrom": {
35269
+ "name": "LyraChart",
35270
+ "module": "src/components/charts/chart/chart.class.ts"
35271
+ }
35272
+ },
35273
+ {
35274
+ "description": "Tooltip background color. Resolved via `getComputedStyle` on every draw.",
35275
+ "name": "--lr-chart-tooltip-bg",
35276
+ "default": "var(--lr-color-surface)",
35277
+ "inheritedFrom": {
35278
+ "name": "LyraChart",
35279
+ "module": "src/components/charts/chart/chart.class.ts"
35280
+ }
35281
+ },
35282
+ {
35283
+ "description": "Tooltip text color. Resolved via `getComputedStyle` on every draw.",
35284
+ "name": "--lr-chart-tooltip-text",
35285
+ "default": "var(--lr-color-text)",
35286
+ "inheritedFrom": {
35287
+ "name": "LyraChart",
35288
+ "module": "src/components/charts/chart/chart.class.ts"
35289
+ }
35290
+ }
35291
+ ],
34722
35292
  "attributes": [
34723
35293
  {
34724
35294
  "name": "accessible-description",
@@ -36220,6 +36790,62 @@
36220
36790
  }
36221
36791
  }
36222
36792
  ],
36793
+ "cssProperties": [
36794
+ {
36795
+ "description": "The host's `block-size`. Set on the host element from the `height` property on every change (custom properties only cascade downward, so it cannot be set from inside the shadow root); a host-level override is overwritten the next time `height` changes.",
36796
+ "name": "--lr-chart-height",
36797
+ "default": "var(--lr-size-280px)",
36798
+ "inheritedFrom": {
36799
+ "name": "LyraChart",
36800
+ "module": "src/components/charts/chart/chart.class.ts"
36801
+ }
36802
+ },
36803
+ {
36804
+ "description": "Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).",
36805
+ "name": "--lr-chart-grid-color",
36806
+ "default": "var(--lr-color-border)",
36807
+ "inheritedFrom": {
36808
+ "name": "LyraChart",
36809
+ "module": "src/components/charts/chart/chart.class.ts"
36810
+ }
36811
+ },
36812
+ {
36813
+ "description": "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.",
36814
+ "name": "--lr-chart-tick-color",
36815
+ "default": "var(--lr-color-text-quiet)",
36816
+ "inheritedFrom": {
36817
+ "name": "LyraChart",
36818
+ "module": "src/components/charts/chart/chart.class.ts"
36819
+ }
36820
+ },
36821
+ {
36822
+ "description": "Legend label color. Resolved via `getComputedStyle` on every draw.",
36823
+ "name": "--lr-chart-legend-color",
36824
+ "default": "var(--lr-color-text)",
36825
+ "inheritedFrom": {
36826
+ "name": "LyraChart",
36827
+ "module": "src/components/charts/chart/chart.class.ts"
36828
+ }
36829
+ },
36830
+ {
36831
+ "description": "Tooltip background color. Resolved via `getComputedStyle` on every draw.",
36832
+ "name": "--lr-chart-tooltip-bg",
36833
+ "default": "var(--lr-color-surface)",
36834
+ "inheritedFrom": {
36835
+ "name": "LyraChart",
36836
+ "module": "src/components/charts/chart/chart.class.ts"
36837
+ }
36838
+ },
36839
+ {
36840
+ "description": "Tooltip text color. Resolved via `getComputedStyle` on every draw.",
36841
+ "name": "--lr-chart-tooltip-text",
36842
+ "default": "var(--lr-color-text)",
36843
+ "inheritedFrom": {
36844
+ "name": "LyraChart",
36845
+ "module": "src/components/charts/chart/chart.class.ts"
36846
+ }
36847
+ }
36848
+ ],
36223
36849
  "attributes": [
36224
36850
  {
36225
36851
  "name": "accessible-description",
@@ -37419,6 +38045,11 @@
37419
38045
  "description": "Inactive/idle color.",
37420
38046
  "name": "--lr-audio-visualizer-quiet-color",
37421
38047
  "default": "var(--lr-color-brand-quiet)"
38048
+ },
38049
+ {
38050
+ "description": "The host's block size, which the canvas fills at 100%.",
38051
+ "name": "--lr-audio-visualizer-height",
38052
+ "default": "var(--lr-size-3rem)"
37422
38053
  }
37423
38054
  ],
37424
38055
  "cssParts": [
@@ -38291,6 +38922,10 @@
38291
38922
  "description": "The next-branch chevron button.",
38292
38923
  "name": "next-button"
38293
38924
  },
38925
+ {
38926
+ "description": "The chevron glyph wrapper inside `next-button`.",
38927
+ "name": "next-glyph"
38928
+ },
38294
38929
  {
38295
38930
  "description": "The visible \"2 / 5\" text.",
38296
38931
  "name": "position"
@@ -38298,6 +38933,10 @@
38298
38933
  {
38299
38934
  "description": "The previous-branch chevron button.",
38300
38935
  "name": "previous-button"
38936
+ },
38937
+ {
38938
+ "description": "The chevron glyph wrapper inside `previous-button`.",
38939
+ "name": "previous-glyph"
38301
38940
  }
38302
38941
  ],
38303
38942
  "members": [
@@ -39901,6 +40540,26 @@
39901
40540
  "name": "--lr-chat-message-max-width",
39902
40541
  "default": "80%"
39903
40542
  },
40543
+ {
40544
+ "description": "Bubble fill for every role except `user`.",
40545
+ "name": "--lr-chat-message-bubble-bg",
40546
+ "default": "var(--lr-color-surface)"
40547
+ },
40548
+ {
40549
+ "description": "Bubble text color for every role except `user`.",
40550
+ "name": "--lr-chat-message-bubble-color",
40551
+ "default": "var(--lr-color-text)"
40552
+ },
40553
+ {
40554
+ "description": "Bubble fill for `data-role=\"user\"`.",
40555
+ "name": "--lr-chat-message-user-bubble-bg",
40556
+ "default": "var(--lr-color-brand-quiet)"
40557
+ },
40558
+ {
40559
+ "description": "Bubble text color for `data-role=\"user\"`.",
40560
+ "name": "--lr-chat-message-user-bubble-color",
40561
+ "default": "var(--lr-color-text)"
40562
+ },
39904
40563
  {
39905
40564
  "description": "Streaming-indicator animation duration and timing function.",
39906
40565
  "name": "--lr-transition-ambient",
@@ -39929,7 +40588,7 @@
39929
40588
  "name": "body"
39930
40589
  },
39931
40590
  {
39932
- "description": "The message bubble root. Programmatically focusable (`tabindex=\"-1\"`) so focus has a stable place to land when the built-in retry button is removed (e.g. a `lr-retry` listener flipping `status` away from `\"failed\"`).",
40591
+ "description": "The message bubble root. Programmatically focusable (`tabindex=\"-1\"`) so focus has a stable place to land when the built-in retry button is removed (e.g. a `lr-retry` listener flipping `status` away from `\"failed\"`). Its fill/text derive from `--lr-chat-message-bubble-bg`/`--lr-chat-message-bubble-color` for every role except `user`, which derives from `--lr-chat-message-user-bubble-bg`/`--lr-chat-message-user-bubble-color` instead — override those cssprops rather than the shared `--lr-color-*` tokens they default to.",
39933
40592
  "name": "bubble"
39934
40593
  },
39935
40594
  {
@@ -43240,6 +43899,18 @@
43240
43899
  "kind": "class",
43241
43900
  "description": "`<lr-code-block>` — fenced code display with optional lazy syntax\nhighlighting and a copy button. No highlighting grammar ships in this\ncomponent itself: it lazy-loads the optional peer dependency `shiki` (see\n`code-loader.ts`) for the actual tokenizing, and degrades to a plain\n`<pre><code>` when that peer isn't installed or `language` is unset/\nunrecognized — the exact same optional-peer shape `<lr-markdown>` and\n`<lr-chart>` already establish. That fallback is the *default* rendering\npath, not a degraded one: unhighlighted code is perfectly usable, and it's\nwhat every instance renders at zero extra bytes until shiki resolves.\n\nA `<lr-skeleton>` placeholder stands in only while shiki itself is\nloading for the very first time on the page (cached — see\n`loadShikiHighlighter()`) and `language` is set. It's deliberately *not*\nshown again for a subsequent per-language grammar load (e.g. a second\n`<lr-code-block>` requesting a language no earlier instance has used\nyet) — that grammar fetch is typically fast, and the plain-text fallback\nis already a perfectly readable placeholder for it, so a second\nloading-chrome state would add complexity for little practical benefit.\n\nSet a host `aria-label` (or the matching `accessibleLabel` property) to\noverride the filename/language-derived name on the internal focusable code\nregion. The name is forwarded to the element that owns `role=\"group\"`, not\nleft only on the custom-element host across the shadow boundary.\n\n`languages` is an additive, opt-in escape hatch from that default path for\na consumer whose language set is fixed and known ahead of time: a map of\nlanguage id to an already-imported shiki grammar module (e.g. `import bash\nfrom 'shiki/langs/bash.mjs'`). When `language` matches a key in `languages`,\nthis component seeds a fine-grained `createHighlighterCore()` highlighter\nwith *only* the pre-supplied grammars (see `code-loader.ts`'s\n`loadShikiHighlighterCore()`) instead of waiting on `loadShikiHighlighter()`\nand its dynamic per-language `loadLanguage()` import. The payoff isn't\nruntime cost — the default dynamic-import path is already well-optimized\nfor that — it's *build output*: shiki's main entry point bundles a dynamic\n`import()` per bundled language (~200 of them) because a bundler can't\nstatically narrow which of those a `loadLanguage(lang: string)` call might\nrequest at runtime, so it conservatively emits a build-output chunk for\nevery one of them. `shiki/core`'s fine-grained API has no such table — a\nbundler only ever sees the exact grammar modules `languages` itself\n`import`s, so a consumer who pins its full language set this way trades a\nhand-maintained list for a build output scoped to just those languages\ninstead of shiki's entire bundled set. A language requested but absent\nfrom `languages` still falls back to the ordinary dynamic-import path\nunchanged, so this is a partial opt-in, not a replacement for it.\n\nAdopts the `line-range` slice of this library's shared anchor-target contract:\n`highlights`/`activeHighlightId` paint (and `highlight-lines` additionally marks) per-line\nemphasis in both the shiki and plain-text-fallback rendering paths identically, and\n`scrollToAnchor()` resolves a `line-range` anchor. `interactive-lines` is a separate, purely\nlocal affordance that turns the (`line-numbers`-gated) gutter into a keyboard-navigable,\nclickable roving-tabindex group emitting `lr-line-click` — it doesn't require `highlights` to\nbe set.",
43242
43901
  "name": "LyraCodeBlock",
43902
+ "cssProperties": [
43903
+ {
43904
+ "description": "Scroll cap applied to `body`. The `max-height` attribute, when set, writes this same property inline on `body` and therefore wins.",
43905
+ "name": "--lr-code-block-max-height",
43906
+ "default": "none"
43907
+ },
43908
+ {
43909
+ "description": "Monospace family for the rendered `pre` and `code`.",
43910
+ "name": "--lr-code-block-font",
43911
+ "default": "var(--lr-font-mono)"
43912
+ }
43913
+ ],
43243
43914
  "cssParts": [
43244
43915
  {
43245
43916
  "description": "The outer container.",
@@ -44378,6 +45049,14 @@
44378
45049
  "description": "The last-message preview snippet. Only rendered when `excerpt` is non-empty.",
44379
45050
  "name": "excerpt"
44380
45051
  },
45052
+ {
45053
+ "description": "The wrapper around the `leading` slot, inside `option`. Always rendered, but `hidden` while that slot is empty.",
45054
+ "name": "leading"
45055
+ },
45056
+ {
45057
+ "description": "The wrapper around the `meta` slot. Only rendered in the built-in content path (not when the `content` slot is used), and `hidden` while the `meta` slot is empty.",
45058
+ "name": "meta"
45059
+ },
44381
45060
  {
44382
45061
  "description": "The selectable region (`role=\"button\"`, removed while renaming -- see the class doc). Wraps `content` and `timestamp`.",
44383
45062
  "name": "option"
@@ -47414,6 +48093,13 @@
47414
48093
  "kind": "class",
47415
48094
  "description": "`<lr-markdown>` — sanitized Markdown-to-HTML rendering (GFM tables,\nfenced code blocks, links, blockquotes) built on the optional peer\ndependencies `marked` (parsing) and `dompurify` (sanitizing), both\nlazy-loaded via `markdown-loader.ts` on first connect.\n\nRendering never ships unsanitized or broken markup silently:\n- If `marked` fails to load, or throws while parsing malformed input, the\n component falls back to plain text (`white-space: pre-wrap`, no HTML\n parsing at all) and fires `lr-render-error`.\n- If `sanitize` is `true` (the default) and `dompurify` fails to load, the\n component *also* falls back to plain text + `lr-render-error` — it\n never renders marked's raw HTML output when sanitization was requested\n (or defaulted to) but is unavailable, even though `marked` itself loaded\n fine.\n- If `sanitize` is explicitly `false`, marked's raw output renders as-is\n regardless of whether `dompurify` is installed — the consumer opted out\n of sanitization, so `dompurify`'s absence is irrelevant to that path.\n\nThat same plain-text fallback rendering (`data-fallback` on the `content`\npart) is also, unconditionally and by default, a brief *transient* state on\nevery connect, not just a failure path: `connectedCallback()`'s dynamic\n`import()` of `marked`/`dompurify` (see `markdown-loader.ts`) is\nasynchronous, so the very first paint of any `<lr-markdown>` on a page\nshows plain text for at least one microtask — even when both peers are\nalready installed and load without error — until that import resolves and\na second render replaces it with the real Markdown output. Set\n`eager-load` to skip that window once the shared dependency cache is\nalready warm; see that property's doc for exactly what \"warm\" requires.\n\n`heading`/`code`/`blockquote`/`table`/`link`/`image` tokens are rendered\nthrough a `marked` renderer override that injects `part=\"...\"` attributes\ndirectly into the produced HTML — a single pass, not a second DOM walk\nafter insertion.\n\nFenced code blocks are syntax-highlighted via the same optional `shiki` peer `<lr-code-block>`\nuses (`highlightCode`, default `true` — a pure upgrade gated by whether `shiki` is installed at\nall, not a separate opt-in). `languages`/`languagesOnly` mirror `<lr-code-block>`'s own\nfine-grained bundle-size controls. The very first render of any content is always plain\n(identical to today's output); highlighting arrives as an asynchronous upgrade one render later,\nonce shiki resolves. No highlighting is attempted while `streaming` is `true` — it applies once a\nstream settles, so there is no added per-chunk cost while content is still arriving.\n\nWhen `heading-anchors` is set, every rendered heading's slug (computed via the shared\nGitHub-slugger-style `Slugger`) is stamped as its `id`; `getHeadingTree()` computes that same\noutline on every parse regardless of `heading-anchors`, so a host can build a table of contents\neven while ids aren't in the DOM yet. `scrollToAnchor()` (from the adopted `DocumentAnchorTarget`\nmixin) resolves `fragment` anchors against that outline and `text-quote` anchors via\n`internal/text-quote.ts`'s shared scope/resolve helpers; `highlights` re-resolve by quote after\nevery render (never by node identity), so a highlight painted before a `streaming` update\nfinishes still finds its quote once the matching text arrives. Highlight painting uses\n`internal/text-highlights.ts`'s `acquireHighlightHandle()` -- the CSS Custom Highlight API where\nthe browser supports it (no DOM mutation at all), a `<mark>`-wrap fallback otherwise.\n\n`math` renders `$...$`/`$$...$$` TeX as MathML via the optional `katex` peer's\n`renderToString(tex, { output: 'mathml' })` -- MathML Core renders natively and accessibly in\nevergreen browsers with no extra stylesheet or webfont needing to cross the shadow boundary. A\nmissing `katex` peer renders the literal, unparsed TeX source (delimiters included) and fires one\n`lr-render-error`.",
47416
48095
  "name": "LyraMarkdown",
48096
+ "cssProperties": [
48097
+ {
48098
+ "description": "Monospace family for rendered `<code>` inside `content`.",
48099
+ "name": "--lr-markdown-font-mono",
48100
+ "default": "var(--lr-font-mono)"
48101
+ }
48102
+ ],
47417
48103
  "cssParts": [
47418
48104
  {
47419
48105
  "description": "Every rendered `<blockquote>`.",
@@ -51831,6 +52517,13 @@
51831
52517
  "kind": "class",
51832
52518
  "description": "`<lr-push-to-talk>` — a mic capture button owning the full `getUserMedia` + `MediaRecorder`\nlifecycle: permission request, recording, optional chunked streaming, teardown. The one place in\nthis library that touches the microphone — no SDK, no LiveKit/ElevenLabs import, native browser\nAPIs only.\n\n`mode=\"hold\"` (the default) is a press-and-hold gesture: pointerdown/Enter-or-Space-keydown starts,\npointerup/keyup/blur stops. `mode=\"toggle\"` is click-to-start/click-to-stop with `aria-pressed`.\nEscape cancels the in-progress take in either mode (discarding it — `lr-record-cancel`, never\n`lr-record-stop`). `state` is a read-only lifecycle reflected to the `data-state` attribute (not\n`state`, avoiding any ambiguity with a native form-control `state`): `'idle' | 'requesting' |\n'denied' | 'recording' | 'error'`. A host-level `aria-label` (set on `<lr-push-to-talk>` itself)\noverrides the computed trigger label.",
51833
52519
  "name": "LyraPushToTalk",
52520
+ "cssProperties": [
52521
+ {
52522
+ "description": "Inline and block size of the circular `trigger` button.",
52523
+ "name": "--lr-push-to-talk-size",
52524
+ "default": "var(--lr-size-3rem)"
52525
+ }
52526
+ ],
51834
52527
  "cssParts": [
51835
52528
  {
51836
52529
  "description": "Wrapper around the `icon` slot / default mic glyph.",
@@ -52741,6 +53434,18 @@
52741
53434
  "kind": "class",
52742
53435
  "description": "`<lr-stream-status>` — a compact status indicator for a single streaming\nconnection (SSE, WebSocket, long-poll, …), with built-in heartbeat-aware\nstall detection.\n\nThe host drives `phase` directly for `idle`/`connecting`/`streaming`, and\ncalls `recordActivity()` on every *semantic* frame received while\nstreaming — a real content chunk, never a transport-level keep-alive ping.\nThis component has no payload-inspection logic of its own: \"ignore\nheartbeats\" is entirely a call-site discipline — the host simply never\ncalls `recordActivity()` for a ping, so pings never reset the stall timer\nand a connection that's only sending keep-alives (no real content) for\nlonger than `stall-threshold-ms` correctly reads as stalled.\n\nInternally, an inactivity timer runs only while `phase === 'streaming'`.\nIt's (re)armed whenever the phase transitions to `'streaming'` (directly,\nor via `recordActivity()` recovering from `'stalled'`), on every\nsubsequent `recordActivity()` call while already streaming, whenever\n`stall-threshold-ms` itself changes while already streaming (the new\nvalue takes effect immediately, the same way `<lr-toast-item>`'s\n`duration` re-applies mid-flight, rather than waiting for the next\n`recordActivity()`/phase change), and whenever this element (re)connects\nto the DOM while `phase` is still `'streaming'` (a disconnect always\ndisarms it, so moving the element elsewhere in the page — disconnect then\nreconnect with `phase` unchanged — must resume detection rather than\nsilently disabling it for the rest of the streaming session). It's\ndisarmed the instant `phase` becomes anything else, including a\nhost-driven reassignment away from `'streaming'` — so a stale timer can\nnever fire a stall transition after the host has already moved on. If it\never fires, `phase` becomes `'stalled'` and `lr-stall` is dispatched.\n\n`phase` remains a fully public, directly settable property at all times —\na host can assign `'stalled'` (or any other phase) itself as a manual\noverride, and this component never fights that assignment. `lr-stall`/\n`lr-recover` fire on *any* transition into/out of `'stalled'`\nrespectively, whether timer-driven or host-driven, and never for a\nreassignment to the same value (Lit's default `hasChanged` already skips a\nno-op set, same as every other reflected `@property` in this library).\nLike `<lr-chat-message>`'s `status`, whatever phase this element happens\nto *mount* with is never itself treated as an eventful transition — only a\nlater change fires an event or an announcement.\n\nAccessibility: phase transitions into/out of `'stalled'` are announced\nthrough an internal `<lr-live-region>` (see that component for the\nthrottled/coalesced-announcement machinery this composes) rather than a\nhand-rolled `aria-live` region. `recordActivity()` itself never announces\nanything, no matter how often the host calls it — only the *transition*\nannounces, exactly once per transition, which is the entire point of\nrouting through the throttled announcer instead of writing to a live\nregion on every call. Entering `'stalled'` announces with `mode=\"assertive\"`\n(a stall can need the user's attention, e.g. before they give up and\nnavigate away); leaving `'stalled'` always announces with `mode=\"polite\"`\n(good news doesn't need to interrupt), but the *wording* depends on where\nit lands: `\"Connection restored.\"` only when the destination is\n`'streaming'` (a genuine recovery), or a neutral `\"No longer stalled.\"`\nwhen the destination is `'idle'`/`'connecting'` instead — that's the host\ngiving up on the stream, not the stream recovering, and a screen-reader\nuser must never be told the opposite of what a sighted user sees on\nscreen. The decorative indicator dot is `aria-hidden` — it's a\ncolor/motion cue only, never the sole carrier of state.\n\nVisual: `'stalled'` is styled as a warning, not a danger — a stall is\nusually recoverable (the stream may resume on its own, or the host's own\nretry logic may kick in), so treating it as an actionable warning rather\nthan a hard failure keeps the tone proportionate. A host that wants to\nescalate to danger styling after N stalls can scope its own CSS off\n`[phase=\"stalled\"]`, or simply stop rendering this component and show its\nown danger-styled error state instead.",
52743
53436
  "name": "LyraStreamStatus",
53437
+ "cssProperties": [
53438
+ {
53439
+ "description": "`indicator` dot color. Swapped by the reflected `phase`: `var(--lr-color-brand)` for `connecting`/`streaming`, `var(--lr-color-warning)` for `stalled`.",
53440
+ "name": "--lr-stream-status-dot-color",
53441
+ "default": "var(--lr-color-text-quiet)"
53442
+ },
53443
+ {
53444
+ "description": "`indicator` dot opacity. Swapped by the reflected `phase`: `0.6` for `connecting`, `1` for `streaming` and `stalled`.",
53445
+ "name": "--lr-stream-status-dot-opacity",
53446
+ "default": "0.35"
53447
+ }
53448
+ ],
52744
53449
  "cssParts": [
52745
53450
  {
52746
53451
  "description": "Wrapper around the `actions` slot.",
@@ -53304,6 +54009,18 @@
53304
54009
  "kind": "class",
53305
54010
  "description": "`<lr-streaming-text>` — a token-coalescing incremental text renderer for\nstreaming assistant output, with an optional blinking cursor and\nauto-detected Markdown rendering.\n\nThe host is expected to assign the *entire* current text on every update\nto `content`, not a delta -- this component does no accumulation or\nordering of its own. That matches how most streaming-UI state (SSE/\nWebSocket token accumulation into a growing string in application state)\nis already managed.\n\nToken-by-token streaming can update `content` far faster than a human can\nusefully perceive a re-render -- dozens of times a second for a fast\nmodel. Re-rendering on every single assignment thrashes layout for no\nvisible benefit, so updates funnel through `Announcer`\n(`../../internal/announcer.js`), reused here purely as the generic\n\"coalesce rapid calls, flush the latest\" timing primitive its own class\ndoc says other components should reuse -- with none of its usual\nDOM/ARIA plumbing (that's `<lr-live-region>`'s job, not this\ncomponent's). Within any `coalesce-ms` window, only the *last* `content`\nvalue assigned actually reaches the rendered DOM. Two cases always bypass\nthe throttle and flush immediately instead of waiting out the window: the\nvery first `content` assignment after mount (so an already-complete\nmessage never shows an artificial startup delay), and any transition of\n`streaming` between `true` and `false` in either direction (so the final\nchunk of a finished stream can never be left stranded mid-window, and a\nstream restarting on a reused element can never keep showing the\nprevious stream's stale final content for the length of the window).\n\n`markdown` is a tri-state property, not a plain boolean: left unset (the\ndefault), it auto-detects via a lightweight regex heuristic (see\n`looksLikeMarkdown`) run against whatever text is currently displayed --\ngood enough to route obviously-Markdown output through `<lr-markdown>`\nwithout the host needing to know or declare it up front, at the cost of\nan occasional one-time mode flip if Markdown syntax only appears partway\nthrough a stream. Explicitly setting `markdown` to `true`/`false` always\nwins over the heuristic. Rendering itself is never reimplemented here:\nMarkdown mode composes `<lr-markdown>` (`../markdown/markdown.js`)\ndirectly, forwarding this component's own `streaming` through as that\ncomponent's own forward-compatible `streaming` hint prop; plain-text mode\nrenders into a `white-space: pre-wrap` span instead.\n\nThe blinking cursor (shown only while `streaming` is `true`) degrades to\na static, always-visible bar under `prefers-reduced-motion: reduce`\nrather than disabling the animation into an invisible frozen frame --\nthe same pattern `<lr-typing-indicator>`'s own `cursor` variant uses. In\nplain-text mode the cursor sits inline at the tail of the final\ncharacter, since the text is one continuous inline flow; in Markdown\nmode it renders as its own trailing block below the rendered content\ninstead of attempting to splice into whatever nested block Markdown\nhappens to end with (a paragraph, a table cell, a list item, a fenced\ncode block, …) -- genuinely interleaving into arbitrary rendered Markdown\nwithout reaching across `<lr-markdown>`'s own shadow boundary isn't a\ntractable general solution, so this component doesn't attempt it.\n\nPurely presentational: no events, driven entirely by its properties. It\nalso doesn't announce anything to assistive tech itself -- a host that\nneeds streamed text announced already has `<lr-live-region>` for that\n(composed, for example, inside `<lr-chat-message>`).",
53306
54011
  "name": "LyraStreamingText",
54012
+ "cssProperties": [
54013
+ {
54014
+ "description": "Width of the `cursor` bar (also its border radius).",
54015
+ "name": "--lr-streaming-text-cursor-width",
54016
+ "default": "var(--lr-size-0-125rem)"
54017
+ },
54018
+ {
54019
+ "description": "Height of the `cursor` bar.",
54020
+ "name": "--lr-streaming-text-cursor-height",
54021
+ "default": "var(--lr-size-1em)"
54022
+ }
54023
+ ],
53307
54024
  "cssParts": [
53308
54025
  {
53309
54026
  "description": "The root container.",
@@ -55420,6 +56137,10 @@
55420
56137
  "description": "Present (alongside `entry`) on an interim row.",
55421
56138
  "name": "interim"
55422
56139
  },
56140
+ {
56141
+ "description": "The wrapper around the interim (not-yet-final) entries, rendered as a sibling of `log`. Only rendered while at least one interim entry exists.",
56142
+ "name": "interim-area"
56143
+ },
55423
56144
  {
55424
56145
  "description": "The \"jump to latest\" affordance, shown only while `follow` is `false`.",
55425
56146
  "name": "jump-button"
@@ -59392,11 +60113,31 @@
59392
60113
  "kind": "class",
59393
60114
  "description": "`<lr-calendar>` — responsive month calendar with event markers and agenda mode.\n\nMonth-view event markers are a mouse-only quick-select affordance layered on\ntop of the focusable day cell: the day grid's own roving-tabindex/arrow-key\nnavigation already targets the day `<button>`, and nesting a second\nfocusable control inside that same native `<button>` is not valid (a\n`<button>` element must not contain interactive/tabindex descendants, and\n`role=\"button\"` itself forbids focusable descendants regardless). Agenda\nview renders each event as its own real `<button part=\"agenda-event\">` and\nis the fully keyboard-accessible way to reach `lr-event-select`.",
59394
60115
  "name": "LyraCalendar",
60116
+ "cssProperties": [
60117
+ {
60118
+ "description": "Minimum block size of a day cell.",
60119
+ "name": "--lr-calendar-day-min-block-size",
60120
+ "default": "var(--lr-size-6rem)"
60121
+ },
60122
+ {
60123
+ "description": "Minimum block size of a day cell once the host is narrower than 28rem.",
60124
+ "name": "--lr-calendar-day-min-block-size-narrow",
60125
+ "default": "4rem"
60126
+ }
60127
+ ],
59395
60128
  "cssParts": [
59396
60129
  {
59397
60130
  "description": "Agenda list.",
59398
60131
  "name": "agenda"
59399
60132
  },
60133
+ {
60134
+ "description": "One focusable event button in agenda view (`view=\"agenda\"` only).",
60135
+ "name": "agenda-event"
60136
+ },
60137
+ {
60138
+ "description": "The day-of-month number inside a day cell.",
60139
+ "name": "date"
60140
+ },
59400
60141
  {
59401
60142
  "description": "Day cell.",
59402
60143
  "name": "day"
@@ -59413,10 +60154,18 @@
59413
60154
  "description": "Calendar header.",
59414
60155
  "name": "header"
59415
60156
  },
60157
+ {
60158
+ "description": "A previous/next navigation control in the header (the previous button, and the wrapper around the next button).",
60159
+ "name": "nav"
60160
+ },
59416
60161
  {
59417
60162
  "description": "The previous/next chevron glyph, mirrored under RTL.",
59418
60163
  "name": "nav-glyph"
59419
60164
  },
60165
+ {
60166
+ "description": "The header's month/year title.",
60167
+ "name": "title"
60168
+ },
59420
60169
  {
59421
60170
  "description": "One week row within the month grid.",
59422
60171
  "name": "week"
@@ -60021,6 +60770,12 @@
60021
60770
  "kind": "class",
60022
60771
  "description": "`<lr-context-meter>` — a segmented occupancy meter (bar or ring) for\nshowing how a fixed capacity (a model's context window, a token budget,\nany consumable quota) is divided across labeled categories. First-party\ninvention; no equivalent exists in Web Awesome.\n\nPure data visualization: it renders `segments`/`total` as given and never\ncomputes token counts, costs, or any other domain-specific estimate\nitself — the one exception is the plain arithmetic sum of the segment\nvalues used to build the accessible \"X of Y used\" summary below.",
60023
60772
  "name": "LyraContextMeter",
60773
+ "cssProperties": [
60774
+ {
60775
+ "description": "Per-segment color. Set inline on `[part=\"segment\"]` by the component itself whenever that segment supplies a `color`; unset (and the token unread) otherwise, leaving the `data-tone` palette in charge.",
60776
+ "name": "--lr-context-meter-segment-color"
60777
+ }
60778
+ ],
60024
60779
  "cssParts": [
60025
60780
  {
60026
60781
  "description": "The component's root wrapper (a `<div>` for `bar`, an `<svg>` for `ring`).",
@@ -60576,6 +61331,10 @@
60576
61331
  "description": "Body cell.",
60577
61332
  "name": "cell"
60578
61333
  },
61334
+ {
61335
+ "description": "The single full-width cell rendered in place of body rows while `loading`, or when `rows` is empty.",
61336
+ "name": "empty"
61337
+ },
60579
61338
  {
60580
61339
  "description": "Native table grid.",
60581
61340
  "name": "grid"
@@ -63063,9 +63822,9 @@
63063
63822
  "name": "LyraFlowCanvas",
63064
63823
  "cssProperties": [
63065
63824
  {
63066
- "description": "Dotted background spacing.",
63825
+ "description": "Dotted background spacing. The canvas also writes it inline as `${grid}px` from the `grid` property, which wins over the stylesheet fallback whenever a grid is in effect.",
63067
63826
  "name": "--lr-flow-canvas-grid-size",
63068
- "default": "8px"
63827
+ "default": "var(--lr-size-0-5rem)"
63069
63828
  },
63070
63829
  {
63071
63830
  "description": "Running-edge march animation duration.",
@@ -65978,12 +66737,12 @@
65978
66737
  {
65979
66738
  "description": "Map inline size.",
65980
66739
  "name": "--lr-flow-minimap-inline-size",
65981
- "default": "12rem"
66740
+ "default": "var(--lr-size-12rem)"
65982
66741
  },
65983
66742
  {
65984
66743
  "description": "Map block size.",
65985
66744
  "name": "--lr-flow-minimap-block-size",
65986
- "default": "8rem"
66745
+ "default": "var(--lr-size-8rem)"
65987
66746
  }
65988
66747
  ],
65989
66748
  "cssParts": [
@@ -66570,7 +67329,7 @@
66570
67329
  {
66571
67330
  "description": "Minimum card inline size.",
66572
67331
  "name": "--lr-flow-node-min-inline-size",
66573
- "default": "11rem"
67332
+ "default": "calc(var(--lr-size-10rem) + var(--lr-size-1rem))"
66574
67333
  }
66575
67334
  ],
66576
67335
  "cssParts": [
@@ -69683,7 +70442,7 @@
69683
70442
  "declarations": [
69684
70443
  {
69685
70444
  "kind": "class",
69686
- "description": "`<lr-heatmap>` — a Canvas heatmap with a DPR-aware, resize-aware redraw\nloop, in one of two `mode`s:\n\n- `\"matrix\"` (default): a `rowLabels` x `colLabels` grid of `values`. `-1`\n (or any non-finite value) is treated as \"no data\". `scale=\"sqrt\"`\n compresses the ramp via `sqrtStep()` so one heavy cell doesn't wash out\n the rest; the default `\"linear\"` scale maps linearly instead.\n- `\"calendar\"`: a GitHub-style Sunday-Saturday (or `firstDayOfWeek`-anchored\n — see below) x week grid built from `days`. `scale` governs its\n bucketing too: the default `\"linear\"` buckets by `quartileBucket()`\n (today's original behavior, unchanged); `\"sqrt\"` instead compresses via\n the same `sqrtStep()` magnitude compression matrix mode uses, so one\n heavy day doesn't wash out the rest. As in matrix mode, a cell whose\n `value` is negative or non-finite is treated as \"no data\" rather than\n being bucketed — as is a grid position with no matching entry in `days`\n at all (a gap in a sparse calendar).\n\nThe sequential color ramp's endpoints are read from the\n`--lr-heatmap-scale-lo`/`-hi` custom properties (declared in\n`heatmap.styles.ts`) so hosts can retheme it — canvas can't consume\n`var()` directly, so they're resolved once per draw via\n`getComputedStyle`, then normalized to RGB by `resolveRgb()` (any valid\nCSS color syntax, not just hex — see its doc comment).\n\nEvery cell is independently addressable: a `pointermove` hit test over the\ncanvas shows `[part=\"tooltip\"]` with that cell's label + value (hidden on\n`pointerleave`); the canvas is `tabindex=\"0\"` with arrow-key roving focus\n(a stroked ring redrawn over the focused cell on every draw, plus a\nvisually-hidden `aria-live=\"polite\"` status announcement — avoids a\nDOM-node-per-cell overlay, which would be hundreds of nodes for a year\ncalendar); and a click, or Enter/Space on the focused cell, fires\n`lr-cell-click`. `annotations` additionally strokes a ring around\nspecific cells (e.g. to call out an anomaly), each one optionally\nsurfaced in the legend too via `[part=\"legend-annotation\"]`.\nSet `accessibleCells` when each cell needs a persistent DOM control for\nassistive technology. The opt-in overlay uses native buttons with a\nroving tabindex, localized `aria-label`, and explicit `aria-pressed` state\nderived from the controlled `selectedCell` property; the canvas remains the\nvisual rendering surface underneath.\n\n`columnX` (calendar mode only) overrides the x-origin computed for each\nweek column — drawing, hit-testing, the focus ring, and month-label\npositioning all consult it consistently, so a consumer can pixel-align a\ncalendar's week columns with a sibling chart's coordinate system. Unset\n(the default) keeps the original evenly-spaced formula. `rowY` is its\ncalendar-mode vertical analogue — overrides the y-origin computed for each\nweekday row, consulted consistently by drawing, hit-testing, and the focus\nring via the private `rowYFor()` helper (mirroring `columnXFor()` exactly).\n\n`firstDayOfWeek` (calendar mode only, default `0`/Sunday, no-op in matrix\nmode) anchors the calendar grid at a different weekday — `0`-`6`, same\nnumbering as `CalendarCellPos.weekday` (`0` Sunday .. `6` Saturday) —\nthreaded into `buildCalendarGrid()`.\n\n`cellSize`/`fitToWidth` (previously matrix-mode only) also drive calendar\nmode's per-cell size: unset, calendar mode keeps today's original 11px\ncell size unchanged; explicitly set, the same fixed size (or, with\n`fitToWidth`, the same host-width-derived size matrix mode already\nsupports) governs calendar mode's grid too.",
70445
+ "description": "`<lr-heatmap>` — a Canvas heatmap with a DPR-aware, resize-aware redraw\nloop, in one of two `mode`s:\n\n- `\"matrix\"` (default): a `rowLabels` x `colLabels` grid of `values`. `-1`\n (or any non-finite value) is treated as \"no data\". `scale=\"sqrt\"`\n compresses the ramp via `sqrtStep()` so one heavy cell doesn't wash out\n the rest; the default `\"linear\"` scale maps linearly instead.\n- `\"calendar\"`: a GitHub-style Sunday-Saturday (or `firstDayOfWeek`-anchored\n — see below) x week grid built from `days`. `scale` governs its\n bucketing too: the default `\"linear\"` buckets by `quartileBucket()`\n (today's original behavior, unchanged); `\"sqrt\"` instead compresses via\n the same `sqrtStep()` magnitude compression matrix mode uses, so one\n heavy day doesn't wash out the rest. As in matrix mode, a cell whose\n `value` is negative or non-finite is treated as \"no data\" rather than\n being bucketed — as is a grid position with no matching entry in `days`\n at all (a gap in a sparse calendar).\n\nThe sequential color ramp's endpoints are read from the\n`--lr-heatmap-scale-lo`/`-hi` custom properties (declared in\n`heatmap.styles.ts`) so hosts can retheme it — canvas can't consume\n`var()` directly, so they're resolved once per draw via\n`getComputedStyle`, then normalized to RGB by `resolveRgb()` (any valid\nCSS color syntax, not just hex — see its doc comment).\n\nEvery cell is independently addressable: a `pointermove` hit test over the\ncanvas shows `[part=\"tooltip\"]` with that cell's label + value (hidden on\n`pointerleave`); the canvas is `tabindex=\"0\"` with arrow-key roving focus\n(a stroked ring redrawn over the focused cell on every draw, plus a\nvisually-hidden `aria-live=\"polite\"` status announcement — avoids a\nDOM-node-per-cell overlay, which would be hundreds of nodes for a year\ncalendar); and a click, or Enter/Space on the focused cell, fires\n`lr-cell-click`. `annotations` additionally strokes a ring around\nspecific cells (e.g. to call out an anomaly), each one optionally\nsurfaced in the legend too via `[part=\"legend-annotation\"]`.\n\n`legendStops` swaps the legend's two-endpoint gradient bar for a discrete\nkey of swatches, so a consumer whose `cellColor` callback paints an\nentirely different domain than the `--lr-heatmap-scale-lo`/`-hi` ramp can\nkeep the built-in legend (labels, number formatting, annotation entries)\ninstead of hiding `[part=\"legend\"]` and hand-rolling swatches. It is\npresentation only — it never feeds back into the cell colors.\n\nSet `accessibleCells` when each cell needs a persistent DOM control for\nassistive technology. The opt-in overlay uses native buttons with a\nroving tabindex, localized `aria-label`, and explicit `aria-pressed` state\nderived from the controlled `selectedCell` property; the canvas remains the\nvisual rendering surface underneath.\n\n`columnX` (calendar mode only) overrides the x-origin computed for each\nweek column — drawing, hit-testing, the focus ring, and month-label\npositioning all consult it consistently, so a consumer can pixel-align a\ncalendar's week columns with a sibling chart's coordinate system. Unset\n(the default) keeps the original evenly-spaced formula. `rowY` is its\ncalendar-mode vertical analogue — overrides the y-origin computed for each\nweekday row, consulted consistently by drawing, hit-testing, and the focus\nring via the private `rowYFor()` helper (mirroring `columnXFor()` exactly).\n\n`firstDayOfWeek` (calendar mode only, default `0`/Sunday, no-op in matrix\nmode) anchors the calendar grid at a different weekday — `0`-`6`, same\nnumbering as `CalendarCellPos.weekday` (`0` Sunday .. `6` Saturday) —\nthreaded into `buildCalendarGrid()`.\n\n`cellSize`/`fitToWidth` (previously matrix-mode only) also drive calendar\nmode's per-cell size: unset, calendar mode keeps today's original 11px\ncell size unchanged; explicitly set, the same fixed size (or, with\n`fitToWidth`, the same host-width-derived size matrix mode already\nsupports) governs calendar mode's grid too.",
69687
70446
  "name": "LyraHeatmap",
69688
70447
  "cssProperties": [
69689
70448
  {
@@ -69729,6 +70488,11 @@
69729
70488
  "description": "Border color for the selected cell.",
69730
70489
  "name": "--lr-heatmap-selected-color",
69731
70490
  "default": "var(--lr-color-success)"
70491
+ },
70492
+ {
70493
+ "description": "Gradient painted on the continuous legend bar. Set on the host by the component itself while `colorSteps` is supplied, and removed again when it is not; the fallback is the two-endpoint scale ramp.",
70494
+ "name": "--lr-heatmap-color-steps-gradient",
70495
+ "default": "linear-gradient(to right, var(--lr-heatmap-scale-lo), var(--lr-heatmap-scale-hi))"
69732
70496
  }
69733
70497
  ],
69734
70498
  "cssParts": [
@@ -69757,13 +70521,25 @@
69757
70521
  "name": "legend-annotation"
69758
70522
  },
69759
70523
  {
69760
- "description": "The high legend endpoint.",
70524
+ "description": "The high legend endpoint (omitted when `legendStops` is supplied).",
69761
70525
  "name": "legend-hi"
69762
70526
  },
69763
70527
  {
69764
- "description": "The low legend endpoint.",
70528
+ "description": "The low legend endpoint (omitted when `legendStops` is supplied).",
69765
70529
  "name": "legend-lo"
69766
70530
  },
70531
+ {
70532
+ "description": "One discrete `legendStops` entry — swatch plus label.",
70533
+ "name": "legend-stop"
70534
+ },
70535
+ {
70536
+ "description": "The text of one `legendStops` entry.",
70537
+ "name": "legend-stop-label"
70538
+ },
70539
+ {
70540
+ "description": "The color swatch of one `legendStops` entry.",
70541
+ "name": "legend-swatch"
70542
+ },
69767
70543
  {
69768
70544
  "description": "The visually hidden keyboard announcement region.",
69769
70545
  "name": "live-region"
@@ -70087,6 +70863,14 @@
70087
70863
  "default": "null",
70088
70864
  "description": "The cell currently under the pointer (`null` when not hovering one) — drives `[part=\"tooltip\"]`."
70089
70865
  },
70866
+ {
70867
+ "kind": "field",
70868
+ "name": "legendStops",
70869
+ "type": {
70870
+ "text": "HeatmapLegendStop[] | undefined"
70871
+ },
70872
+ "description": "A discrete legend key rendered *instead of* the `--lr-heatmap-scale-lo`/`-hi` gradient bar\nand its `[part=\"legend-lo\"]`/`[part=\"legend-hi\"]` endpoint labels — one\n`[part=\"legend-stop\"]` per entry, in array order, each a `[part=\"legend-swatch\"]` in that\nentry's `color` plus a `[part=\"legend-stop-label\"]`. Labels default to this component's own\nlocale-aware numeric formatting of `value`, so a stop only needs an explicit `label` when\nthe number isn't the right caption (\"none\", \"≥ 90%\").\n\nExists for the consumer who supplies `cellColor`: because that callback overrides a cell's\ncolor entirely, the built-in two-endpoint bar can describe a ramp the grid no longer uses.\nSupplying the same colors here keeps the legend honest without hiding `[part=\"legend\"]` and\nre-implementing swatches, labels and the annotation entries by hand.\n\nStrictly presentation: the stops are never consulted by the color ramp, the bucket math, the\ntooltip, or the accessible name — supplying them changes nothing a cell renders. Any\n`annotations` with a `label` still render their `[part=\"legend-annotation\"]` entries after\nthe stops. Unset (the default) or an empty array reproduces today's exact gradient legend."
70873
+ },
70090
70874
  {
70091
70875
  "kind": "field",
70092
70876
  "name": "liveText",
@@ -71403,6 +72187,25 @@
71403
72187
  }
71404
72188
  }
71405
72189
  },
72190
+ {
72191
+ "kind": "method",
72192
+ "name": "renderLegendScale",
72193
+ "privacy": "private",
72194
+ "return": {
72195
+ "type": {
72196
+ "text": "TemplateResult"
72197
+ }
72198
+ },
72199
+ "parameters": [
72200
+ {
72201
+ "name": "range",
72202
+ "type": {
72203
+ "text": "[number, number] | null"
72204
+ }
72205
+ }
72206
+ ],
72207
+ "description": "The legend's color description: the discrete `legendStops` key when one is supplied, the\noriginal `--lr-heatmap-scale-lo`/`-hi` gradient bar and its endpoint labels otherwise. An\nunset (or empty) `legendStops` therefore reproduces the pre-`legendStops` markup exactly."
72208
+ },
71406
72209
  {
71407
72210
  "kind": "method",
71408
72211
  "name": "repaintCalendarFocusCell",
@@ -73634,6 +74437,23 @@
73634
74437
  "kind": "class",
73635
74438
  "description": "`<lr-sequence-strip>` — a compact, one-thin-cell-per-item strip visualizing a sequence of\ncategorical states, with an optional secondary per-cell marker. Pure CSS/flex, no chart.js/SVG/\ncanvas — sized/named consistently with the sparkline/heatmap family, but a glanceable aggregate\nvisualization (`role=\"img\"`, one summarizing `aria-label`), not a `role=\"list\"` of\nseparately-operable items: no per-cell keyboard focus, no per-cell click event, matching\n`<lr-sparkline>`'s accessibility model rather than `<lr-heatmap>`'s heavier canvas +\nkeyboard-roving one.",
73636
74439
  "name": "LyraSequenceStrip",
74440
+ "cssProperties": [
74441
+ {
74442
+ "description": "Block size of the strip.",
74443
+ "name": "--lr-sequence-strip-height",
74444
+ "default": "var(--lr-size-1-5rem)"
74445
+ },
74446
+ {
74447
+ "description": "Color of the bottom marker on a `marker: true` cell.",
74448
+ "name": "--lr-sequence-strip-marker-color",
74449
+ "default": "var(--lr-color-text)"
74450
+ },
74451
+ {
74452
+ "description": "Inline and block size of a legend swatch.",
74453
+ "name": "--lr-sequence-strip-legend-swatch-size",
74454
+ "default": "var(--lr-size-0-625rem)"
74455
+ }
74456
+ ],
73637
74457
  "cssParts": [
73638
74458
  {
73639
74459
  "description": "The root strip wrapper (`role=\"img\"`).",
@@ -73643,6 +74463,22 @@
73643
74463
  "description": "Each item's cell, background-colored by its category.",
73644
74464
  "name": "cell"
73645
74465
  },
74466
+ {
74467
+ "description": "The static category key rendered below the strip when `showLegend` is set (`aria-hidden` — it repeats the strip's own `aria-label` visually).",
74468
+ "name": "legend"
74469
+ },
74470
+ {
74471
+ "description": "One swatch + label pair in the legend, one per `categories` entry.",
74472
+ "name": "legend-item"
74473
+ },
74474
+ {
74475
+ "description": "The text of a legend item (the category's `label`, or its `key`).",
74476
+ "name": "legend-label"
74477
+ },
74478
+ {
74479
+ "description": "The color chip of a legend item, matching that category's cell color.",
74480
+ "name": "legend-swatch"
74481
+ },
73646
74482
  {
73647
74483
  "description": "The small bottom marker on a cell whose item sets `marker: true`.",
73648
74484
  "name": "marker"
@@ -73779,6 +74615,17 @@
73779
74615
  "module": "src/internal/lyra-element.ts"
73780
74616
  }
73781
74617
  },
74618
+ {
74619
+ "kind": "field",
74620
+ "name": "showLegend",
74621
+ "type": {
74622
+ "text": "boolean"
74623
+ },
74624
+ "default": "false",
74625
+ "description": "Renders a static `[part=\"legend\"]` key of every `categories` entry below the strip, so the\ncolor-to-category mapping is readable without hovering each cell. Deliberately\nnon-interactive: unlike `<lr-graph-legend>` this toggles nothing and emits nothing — the\nstrip is a presentational aggregate, and the key describes the scheme, not the current data\n(a category with no matching item still gets a row).",
74626
+ "attribute": "show-legend",
74627
+ "reflects": true
74628
+ },
73782
74629
  {
73783
74630
  "kind": "field",
73784
74631
  "name": "stopLocaleSubscription",
@@ -74035,6 +74882,17 @@
74035
74882
  "module": "src/internal/lyra-element.ts"
74036
74883
  }
74037
74884
  },
74885
+ {
74886
+ "kind": "method",
74887
+ "name": "renderLegend",
74888
+ "privacy": "private",
74889
+ "return": {
74890
+ "type": {
74891
+ "text": "TemplateResult"
74892
+ }
74893
+ },
74894
+ "description": "The legend repeats, in visible form, exactly the category names the strip already announces\nthrough `[part=\"base\"]`'s `role=\"img\"` + `aria-label` summary. Exposing it to assistive\ntechnology as well would read the same scheme out twice, so the whole subtree is\n`aria-hidden` — it is a decorative duplicate, and it renders outside the `role=\"img\"` element\nso hiding it removes nothing from the announced summary."
74895
+ },
74038
74896
  {
74039
74897
  "kind": "method",
74040
74898
  "name": "scheduleAfterUpdate",
@@ -74089,6 +74947,15 @@
74089
74947
  "default": "'horizontal'",
74090
74948
  "description": "Only `'horizontal'` (the default) is supported today — vertical is plausible future scope, not\nbuilt speculatively without a motivating case.",
74091
74949
  "fieldName": "orientation"
74950
+ },
74951
+ {
74952
+ "name": "show-legend",
74953
+ "type": {
74954
+ "text": "boolean"
74955
+ },
74956
+ "default": "false",
74957
+ "description": "Renders a static `[part=\"legend\"]` key of every `categories` entry below the strip, so the\ncolor-to-category mapping is readable without hovering each cell. Deliberately\nnon-interactive: unlike `<lr-graph-legend>` this toggles nothing and emits nothing — the\nstrip is a presentational aggregate, and the key describes the scheme, not the current data\n(a category with no matching item still gets a row).",
74958
+ "fieldName": "showLegend"
74092
74959
  }
74093
74960
  ],
74094
74961
  "superclass": {
@@ -75432,6 +76299,30 @@
75432
76299
  "description": "Hover/focus opacity of the resize handle.",
75433
76300
  "name": "--lr-table-resize-handle-opacity",
75434
76301
  "default": "0.12"
76302
+ },
76303
+ {
76304
+ "description": "Cap on the scroll container's block size, past which the table body scrolls.",
76305
+ "name": "--lr-table-max-height",
76306
+ "default": "none"
76307
+ },
76308
+ {
76309
+ "description": "Low endpoint of the heat-tint ramp used by `heatValue` columns.",
76310
+ "name": "--lr-table-heat-tint-lo",
76311
+ "default": "var(--lr-color-brand-quiet)"
76312
+ },
76313
+ {
76314
+ "description": "High endpoint of the heat-tint ramp used by `heatValue` columns.",
76315
+ "name": "--lr-table-heat-tint-hi",
76316
+ "default": "var(--lr-color-brand)"
76317
+ },
76318
+ {
76319
+ "description": "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.",
76320
+ "name": "--lr-table-heat-t"
76321
+ },
76322
+ {
76323
+ "description": "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.",
76324
+ "name": "--lr-table-sticky-offset",
76325
+ "default": "0"
75435
76326
  }
75436
76327
  ],
75437
76328
  "cssParts": [
@@ -77308,6 +78199,31 @@
77308
78199
  "description": "Marker fill/accent color. Swapped per `variant` (see the class doc's variant table); a consumer overriding this directly on one item wins over the variant default via normal CSS cascade/specificity.",
77309
78200
  "name": "--lr-timeline-marker-color",
77310
78201
  "default": "var(--lr-color-text-quiet)"
78202
+ },
78203
+ {
78204
+ "description": "Internal orientation plumbing, not a retheming knob: `[part=\"base\"]`'s `flex-direction`, set by an ancestor `<lr-timeline>`'s `:host` and inherited across the slot boundary (`row` vertical, `column` horizontal). The `row` fallback applies when the item is used standalone.",
78205
+ "name": "--lr-timeline-item-direction",
78206
+ "default": "row"
78207
+ },
78208
+ {
78209
+ "description": "Internal orientation plumbing, not a retheming knob: `[part=\"track\"]`'s `flex-direction`, always the opposite axis from `--lr-timeline-item-direction` and set alongside it by `<lr-timeline>`.",
78210
+ "name": "--lr-timeline-item-track-direction",
78211
+ "default": "column"
78212
+ },
78213
+ {
78214
+ "description": "Internal orientation plumbing, not a retheming knob: `[part=\"content\"]`'s `padding-block-end`, set by a vertical `<lr-timeline>` so the rail reaches the next item's marker. `0` when standalone or horizontal; retheme `--lr-timeline-gap` on `<lr-timeline>` instead.",
78215
+ "name": "--lr-timeline-item-gap-block-end",
78216
+ "default": "0"
78217
+ },
78218
+ {
78219
+ "description": "Internal orientation plumbing, not a retheming knob: the inline-axis counterpart of `--lr-timeline-item-gap-block-end`, non-zero only under a horizontal `<lr-timeline>`.",
78220
+ "name": "--lr-timeline-item-gap-inline-end",
78221
+ "default": "0"
78222
+ },
78223
+ {
78224
+ "description": "Internal plumbing, not a retheming knob: `[part=\"rail\"]`'s `visibility`, set to `hidden` by `<lr-timeline>`'s `::slotted(:last-child)` rule so the final item has no trailing rail.",
78225
+ "name": "--lr-timeline-item-rail-visibility",
78226
+ "default": "visible"
77311
78227
  }
77312
78228
  ],
77313
78229
  "cssParts": [
@@ -78267,6 +79183,13 @@
78267
79183
  "kind": "class",
78268
79184
  "description": "`<lr-tree-node>` — internal recursive renderer for `<lr-tree>`.\n\n`role=\"treeitem\"` (plus `aria-expanded`/`aria-level`/`aria-setsize`/\n`aria-posinset` and the roving `tabindex`, driven by `<lr-tree>`) live on\nthe *host* element, not the internal `[part=\"row\"]` div — that makes this\nnode's own nested children (rendered in *its own* shadow root as further\n`role=\"group\"` content) genuine DOM descendants of the treeitem, which is\nwhat the WAI-ARIA treeitem pattern requires (previously a shadow-root\nsibling).",
78269
79185
  "name": "LyraTreeNode",
79186
+ "cssProperties": [
79187
+ {
79188
+ "description": "Internal indent plumbing, not a retheming knob: this node's `depth`, written inline onto `[part=\"row\"]` by the component and multiplied by `--lr-space-l` (capped at `--lr-size-8rem`) to produce the row's `padding-inline-start`.",
79189
+ "name": "--lr-tree-depth",
79190
+ "default": "0"
79191
+ }
79192
+ ],
78270
79193
  "cssParts": [
78271
79194
  {
78272
79195
  "description": "The optional node badge (the legacy `item.badge`, and/or one chip per `item.badges` entry, tone-mapped via `data-tone`).",
@@ -80252,6 +81175,81 @@
80252
81175
  "description": "Rotation period of the `loading` spinner.",
80253
81176
  "name": "--lr-button-spinner-duration",
80254
81177
  "default": "1s"
81178
+ },
81179
+ {
81180
+ "description": "Text/glyph color for the chrome-less appearances (`outlined`, `plain`, `link`). Swapped per `variant` to that variant's semantic color.",
81181
+ "name": "--lr-button-accent",
81182
+ "default": "var(--lr-color-text)"
81183
+ },
81184
+ {
81185
+ "description": "Background of `appearance=\"filled\"`. Swapped per `variant` to that variant's semantic color.",
81186
+ "name": "--lr-button-fill",
81187
+ "default": "var(--lr-color-surface)"
81188
+ },
81189
+ {
81190
+ "description": "Text color on top of `--lr-button-fill`. Swapped per `variant` to that variant's `on-*` color.",
81191
+ "name": "--lr-button-on-fill",
81192
+ "default": "var(--lr-color-text)"
81193
+ },
81194
+ {
81195
+ "description": "Background of `appearance=\"accent\"` (and its border color). Swapped per `variant` to that variant's semantic color.",
81196
+ "name": "--lr-button-accent-fill",
81197
+ "default": "var(--lr-color-neutral)"
81198
+ },
81199
+ {
81200
+ "description": "Text color on top of `--lr-button-accent-fill`. Swapped per `variant` to that variant's `on-*` color.",
81201
+ "name": "--lr-button-accent-on-fill",
81202
+ "default": "var(--lr-color-on-neutral)"
81203
+ },
81204
+ {
81205
+ "description": "Border color of the internal button. Swapped per `variant` to that variant's semantic color.",
81206
+ "name": "--lr-button-border",
81207
+ "default": "var(--lr-color-border)"
81208
+ },
81209
+ {
81210
+ "description": "Border color of `appearance=\"outlined\"`, which overrides `--lr-button-border`.",
81211
+ "name": "--lr-button-outlined-border",
81212
+ "default": "var(--lr-color-border-strong)"
81213
+ },
81214
+ {
81215
+ "description": "Border color of `appearance=\"quiet\"`.",
81216
+ "name": "--lr-button-quiet-border",
81217
+ "default": "var(--lr-color-border)"
81218
+ },
81219
+ {
81220
+ "description": "Text color of `appearance=\"quiet\"`.",
81221
+ "name": "--lr-button-quiet-text",
81222
+ "default": "var(--lr-color-text-quiet)"
81223
+ },
81224
+ {
81225
+ "description": "`min-block-size` at `size=\"2xs\"`.",
81226
+ "name": "--lr-button-size-2xs",
81227
+ "default": "var(--lr-size-1-25rem)"
81228
+ },
81229
+ {
81230
+ "description": "`min-block-size` at `size=\"xs\"`.",
81231
+ "name": "--lr-button-size-xs",
81232
+ "default": "var(--lr-size-1-5rem)"
81233
+ },
81234
+ {
81235
+ "description": "`min-block-size` at `size=\"s\"`.",
81236
+ "name": "--lr-button-size-s",
81237
+ "default": "var(--lr-size-1-75rem)"
81238
+ },
81239
+ {
81240
+ "description": "`min-block-size` at `size=\"m\"`.",
81241
+ "name": "--lr-button-size-m",
81242
+ "default": "var(--lr-size-2rem)"
81243
+ },
81244
+ {
81245
+ "description": "`min-block-size` at `size=\"l\"`.",
81246
+ "name": "--lr-button-size-l",
81247
+ "default": "var(--lr-size-2-5rem)"
81248
+ },
81249
+ {
81250
+ "description": "`min-block-size` at `size=\"xl\"`.",
81251
+ "name": "--lr-button-size-xl",
81252
+ "default": "var(--lr-size-3rem)"
80255
81253
  }
80256
81254
  ],
80257
81255
  "cssParts": [
@@ -82506,8 +83504,25 @@
82506
83504
  "declarations": [
82507
83505
  {
82508
83506
  "kind": "class",
82509
- "description": "`<lr-code-editor>` — dependency-free multiline code editing surface with optional line numbers.\n\nKeyboard contract (no keyboard trap, WCAG 2.1.2): Tab inserts `tabSize` spaces at the caret.\nShift+Tab is never captured, so it always performs native reverse focus traversal. Pressing\nEscape releases the next Tab for native forward traversal instead of indenting; typing any other\nkey, or focus leaving the editor, re-arms Tab indentation.",
83507
+ "description": "`<lr-code-editor>` — dependency-free multiline code editing surface with optional line numbers.\n\nKeyboard contract (no keyboard trap, WCAG 2.1.2): Tab inserts one indent unit of spaces at the\ncaret. Shift+Tab is never captured, so it always performs native reverse focus traversal.\nPressing Escape releases the next Tab for native forward traversal instead of indenting; typing\nany other key, or focus leaving the editor, re-arms Tab indentation.\n\nTab-width precedence, highest first: an explicitly assigned `tabSize` (property or `tab-size`\nattribute) wins over everything; otherwise a host-level `--lr-code-editor-tab-size` override\nwins; otherwise the stylesheet's `:host` default of `2` applies. The property therefore stays the\nprimary knob, but it no longer silently shadows the token while it sits at its default -- see\n`indentWidth` for how the same order drives the Tab key, not just the rendered tab stops.",
82510
83508
  "name": "LyraCodeEditor",
83509
+ "cssProperties": [
83510
+ {
83511
+ "description": "Minimum block size of the editor frame and its textarea.",
83512
+ "name": "--lr-code-editor-min-block-size",
83513
+ "default": "var(--lr-size-8rem)"
83514
+ },
83515
+ {
83516
+ "description": "Line height shared by the gutter and the textarea, so line numbers stay aligned with their lines.",
83517
+ "name": "--lr-code-editor-line-height",
83518
+ "default": "1.5"
83519
+ },
83520
+ {
83521
+ "description": "The textarea's `tab-size`. The single channel for tab width — the class writes this token rather than setting `tab-size` directly.",
83522
+ "name": "--lr-code-editor-tab-size",
83523
+ "default": "2"
83524
+ }
83525
+ ],
82511
83526
  "cssParts": [
82512
83527
  {
82513
83528
  "description": "Editor frame.",
@@ -82674,6 +83689,16 @@
82674
83689
  "default": "''",
82675
83690
  "attribute": "hint"
82676
83691
  },
83692
+ {
83693
+ "kind": "field",
83694
+ "name": "indentWidth",
83695
+ "type": {
83696
+ "text": "number"
83697
+ },
83698
+ "privacy": "private",
83699
+ "description": "Spaces a Tab press inserts, resolved with the documented precedence: an explicitly assigned\n`tabSize`, else the rendered `--lr-code-editor-tab-size` when it is a plain number, else the\ndefault. A length-valued token (`40px`, `2ch`, ...) is a purely visual tab-stop metric for\nliteral tab characters, so it is deliberately not reinterpreted as a count of spaces.",
83700
+ "readonly": true
83701
+ },
82677
83702
  {
82678
83703
  "kind": "field",
82679
83704
  "name": "label",
@@ -82875,9 +83900,18 @@
82875
83900
  "type": {
82876
83901
  "text": "number"
82877
83902
  },
82878
- "description": "Spaces inserted per Tab keypress, and the native `tab-size` CSS value. Confirmed-crash\nhistory: this used to feed `' '.repeat(Math.max(1, this.tabSize))` directly in `onKeyDown`\nbelow -- `String.prototype.repeat()` throws a `RangeError` for a count of `+Infinity`\nspecifically (e.g. a literal `tab-size=\"Infinity\"` attribute, which `Number(\"Infinity\")`\nhappily converts to), and `Math.max(1, NaN)` is itself `NaN`, silently producing an empty,\nnon-indenting insert for a NaN `tabSize`. Sanitized to a finite integer in `[1, 16]` at\nassignment time instead, so both the `repeat()` call and the inline `tab-size` style always\nsee a safe value.",
83903
+ "description": "Spaces inserted per Tab keypress, and the rendered `tab-size`. Assigning it (or setting the\n`tab-size` attribute) pins both, overriding any `--lr-code-editor-tab-size` the host set;\nleaving it alone lets that token drive them instead. Confirmed-crash history: this used to\nfeed `' '.repeat(Math.max(1, this.tabSize))` directly in `onKeyDown` below --\n`String.prototype.repeat()` throws a `RangeError` for a count of `+Infinity` specifically\n(e.g. a literal `tab-size=\"Infinity\"` attribute, which `Number(\"Infinity\")` happily converts\nto), and `Math.max(1, NaN)` is itself `NaN`, silently producing an empty, non-indenting insert\nfor a NaN `tabSize`. Sanitized to a finite integer in `[1, 16]` at assignment time instead, so\nboth the `repeat()` call and the emitted tab-width style always see a safe value.",
82879
83904
  "attribute": "tab-size"
82880
83905
  },
83906
+ {
83907
+ "kind": "field",
83908
+ "name": "tabSizeAssigned",
83909
+ "type": {
83910
+ "text": "boolean"
83911
+ },
83912
+ "privacy": "private",
83913
+ "default": "false"
83914
+ },
82881
83915
  {
82882
83916
  "kind": "field",
82883
83917
  "name": "textarea",
@@ -83314,7 +84348,7 @@
83314
84348
  "type": {
83315
84349
  "text": "number"
83316
84350
  },
83317
- "description": "Spaces inserted per Tab keypress, and the native `tab-size` CSS value. Confirmed-crash\nhistory: this used to feed `' '.repeat(Math.max(1, this.tabSize))` directly in `onKeyDown`\nbelow -- `String.prototype.repeat()` throws a `RangeError` for a count of `+Infinity`\nspecifically (e.g. a literal `tab-size=\"Infinity\"` attribute, which `Number(\"Infinity\")`\nhappily converts to), and `Math.max(1, NaN)` is itself `NaN`, silently producing an empty,\nnon-indenting insert for a NaN `tabSize`. Sanitized to a finite integer in `[1, 16]` at\nassignment time instead, so both the `repeat()` call and the inline `tab-size` style always\nsee a safe value.",
84351
+ "description": "Spaces inserted per Tab keypress, and the rendered `tab-size`. Assigning it (or setting the\n`tab-size` attribute) pins both, overriding any `--lr-code-editor-tab-size` the host set;\nleaving it alone lets that token drive them instead. Confirmed-crash history: this used to\nfeed `' '.repeat(Math.max(1, this.tabSize))` directly in `onKeyDown` below --\n`String.prototype.repeat()` throws a `RangeError` for a count of `+Infinity` specifically\n(e.g. a literal `tab-size=\"Infinity\"` attribute, which `Number(\"Infinity\")` happily converts\nto), and `Math.max(1, NaN)` is itself `NaN`, silently producing an empty, non-indenting insert\nfor a NaN `tabSize`. Sanitized to a finite integer in `[1, 16]` at assignment time instead, so\nboth the `repeat()` call and the emitted tab-width style always see a safe value.",
83318
84352
  "fieldName": "tabSize"
83319
84353
  },
83320
84354
  {
@@ -85503,6 +86537,13 @@
85503
86537
  "description": "The value was cleared.",
85504
86538
  "name": "lr-clear"
85505
86539
  },
86540
+ {
86541
+ "type": {
86542
+ "text": "CustomEvent<ComboboxFilterDetail>"
86543
+ },
86544
+ "description": "The in-progress filter text changed through user input. `detail.value` is the live filter string, which is not the same thing as the host's `value` (the committed selection). User-input only: the programmatic paths that blank the filter — picking a row, the clear button, `form.reset()`, dismissing the listbox, a `value` write, `setRangeText()` — are all silent, mirroring `<lr-input>`'s `lr-input`.",
86545
+ "name": "lr-filter"
86546
+ },
85506
86547
  {
85507
86548
  "description": "The listbox closed.",
85508
86549
  "name": "lr-hide"
@@ -85770,7 +86811,7 @@
85770
86811
  "declarations": [
85771
86812
  {
85772
86813
  "kind": "class",
85773
- "description": "",
86814
+ "description": "`<lr-option>` — a selectable option for `<lr-combobox>`.\nMirrors `<wa-option>`. Acts as the data source; the combobox renders the\ninteractive rows in its own shadow root and filters/caps them.\n\nThe label is the element's text content (or an explicit `label` attribute).",
85774
86815
  "name": "LyraOption",
85775
86816
  "members": [
85776
86817
  {
@@ -86723,6 +87764,23 @@
86723
87764
  "kind": "class",
86724
87765
  "description": "`<lr-date-input>` — a date field with an attached calendar popover.\nMirrors the core `<wa-date-input>` API under `lr-`. Value is ISO 8601\n(`YYYY-MM-DD`, or `YYYY-MM-DD/YYYY-MM-DD` in range mode). Form-associated.\n\nThis component uses a single text field; typing accepts ISO or a\nlocale-parseable date.\n\n`size` uses the same `2xs`–`xl` scale as `lr-input`/`lr-select`/`lr-combobox`'s own `size`,\ndefault `m`. The calendar-toggle and clear buttons keep a constant touch-target size at every\ntier (mirroring `lr-input`'s own password-toggle button), so only the field's density scales.",
86725
87766
  "name": "LyraDateInput",
87767
+ "cssProperties": [
87768
+ {
87769
+ "description": "Block padding of the input row, scaled by `size`.",
87770
+ "name": "--lr-date-input-padding-block",
87771
+ "default": "var(--lr-space-xs)"
87772
+ },
87773
+ {
87774
+ "description": "Inline padding of the input row, scaled by `size`.",
87775
+ "name": "--lr-date-input-padding-inline",
87776
+ "default": "var(--lr-space-s)"
87777
+ },
87778
+ {
87779
+ "description": "Font size of the text input, scaled by `size`.",
87780
+ "name": "--lr-date-input-font-size",
87781
+ "default": "inherit"
87782
+ }
87783
+ ],
86726
87784
  "cssParts": [
86727
87785
  {
86728
87786
  "description": "The clear control.",
@@ -89572,6 +90630,23 @@
89572
90630
  "kind": "class",
89573
90631
  "description": "`<lr-emoji-picker>` — a searchable, keyboard-navigable, form-associated emoji picker. In the\nsame \"zero/optional-peer dependency\" spirit as `<lr-lite-chart>`/`<lr-heatmap>`: `groups` is\nfully consumer-suppliable (this component ships no emoji data of its own), with an *optional*\nconvenience auto-loader for a default set — see `emoji-data-loader.ts` and the class doc there for\nexactly what that covers.\n\nKeyboard model: the grid is a roving-tabindex listbox (a single Tab stop — only the active emoji\nis tabbable). Arrow keys move the active option (Left/Right follow reading direction and swap\nunder RTL; Up/Down move by one visual row, measured from the live wrap layout), Home/End jump to\nthe first/last option, and Enter/Space picks. The search input doubles as a `role=\"combobox\"`\nover the same listbox: the arrow keys and Enter also work there while focus stays in the input,\nwith `aria-activedescendant` tracking the active option. Large data sets automatically window\ntheir visible rows so scrolling does not create one button per supplied emoji in the DOM.",
89574
90632
  "name": "LyraEmojiPicker",
90633
+ "cssProperties": [
90634
+ {
90635
+ "description": "Each emoji button's box. Clamped up to `--lr-icon-button-size`: a smaller value does not shrink the button.",
90636
+ "name": "--lr-emoji-picker-item-size",
90637
+ "default": "var(--lr-icon-button-size)"
90638
+ },
90639
+ {
90640
+ "description": "Gap between emoji within a windowed row.",
90641
+ "name": "--lr-emoji-picker-gap",
90642
+ "default": "var(--lr-space-2xs)"
90643
+ },
90644
+ {
90645
+ "description": "One windowed row's height. Must stay at or above the item size plus the group-label band, or consecutive absolutely-positioned rows overlap.",
90646
+ "name": "--lr-emoji-picker-row-height",
90647
+ "default": "calc(var(--lr-emoji-picker-item-size) + var(--lr-space-l))"
90648
+ }
90649
+ ],
89575
90650
  "cssParts": [
89576
90651
  {
89577
90652
  "description": "The root wrapper.",
@@ -89596,6 +90671,22 @@
89596
90671
  {
89597
90672
  "description": "The search/filter `<input>` (`role=\"combobox\"` over the grid).",
89598
90673
  "name": "search"
90674
+ },
90675
+ {
90676
+ "description": "The flex row holding one windowed row's emoji buttons.",
90677
+ "name": "virtual-items"
90678
+ },
90679
+ {
90680
+ "description": "The `aria-hidden` placeholder that reserves a row's group-label band when that row has no label, keeping every row the same height. Rendered on the windowed path only.",
90681
+ "name": "virtual-label"
90682
+ },
90683
+ {
90684
+ "description": "One windowed row, absolutely positioned at the `--lr-emoji-picker-row-height` pitch. Rendered on the windowed path only.",
90685
+ "name": "virtual-row"
90686
+ },
90687
+ {
90688
+ "description": "The full-height scroll spacer that gives the grid its scrollbar while only the visible rows exist in the DOM. Rendered on the windowed path only.",
90689
+ "name": "virtual-spacer"
89599
90690
  }
89600
90691
  ],
89601
90692
  "members": [
@@ -89676,6 +90767,30 @@
89676
90767
  "privacy": "private",
89677
90768
  "readonly": true
89678
90769
  },
90770
+ {
90771
+ "kind": "field",
90772
+ "name": "geometryCache",
90773
+ "type": {
90774
+ "text": "EmojiPickerGeometry | undefined"
90775
+ },
90776
+ "privacy": "private"
90777
+ },
90778
+ {
90779
+ "kind": "field",
90780
+ "name": "geometryObserver",
90781
+ "type": {
90782
+ "text": "ResizeObserver | undefined"
90783
+ },
90784
+ "privacy": "private"
90785
+ },
90786
+ {
90787
+ "kind": "field",
90788
+ "name": "geometryProbe",
90789
+ "type": {
90790
+ "text": "{ root: HTMLElement; item: HTMLElement; gap: HTMLElement; row: HTMLElement } | undefined"
90791
+ },
90792
+ "privacy": "private"
90793
+ },
89679
90794
  {
89680
90795
  "kind": "field",
89681
90796
  "name": "gridId",
@@ -89770,6 +90885,11 @@
89770
90885
  "privacy": "private",
89771
90886
  "default": "false"
89772
90887
  },
90888
+ {
90889
+ "kind": "field",
90890
+ "name": "onGeometryResize",
90891
+ "privacy": "private"
90892
+ },
89773
90893
  {
89774
90894
  "kind": "field",
89775
90895
  "name": "onGridFocusIn",
@@ -89922,30 +91042,6 @@
89922
91042
  },
89923
91043
  "description": "Options in the first rendered row. Measured from live layout at call time because the\nflex-wrap column count is fluid (container width, emoji font metrics)."
89924
91044
  },
89925
- {
89926
- "kind": "method",
89927
- "name": "cssPixelValue",
89928
- "privacy": "private",
89929
- "return": {
89930
- "type": {
89931
- "text": "number"
89932
- }
89933
- },
89934
- "parameters": [
89935
- {
89936
- "name": "name",
89937
- "type": {
89938
- "text": "string"
89939
- }
89940
- },
89941
- {
89942
- "name": "fallback",
89943
- "type": {
89944
- "text": "number"
89945
- }
89946
- }
89947
- ]
89948
- },
89949
91045
  {
89950
91046
  "kind": "method",
89951
91047
  "name": "emit",
@@ -89983,6 +91079,17 @@
89983
91079
  "module": "src/internal/lyra-element.ts"
89984
91080
  }
89985
91081
  },
91082
+ {
91083
+ "kind": "method",
91084
+ "name": "geometry",
91085
+ "privacy": "private",
91086
+ "return": {
91087
+ "type": {
91088
+ "text": "EmojiPickerGeometry"
91089
+ }
91090
+ },
91091
+ "description": "The windowed layout's pixel geometry. `getComputedStyle(host).getPropertyValue('--x')` hands\nback a custom property's *computed token stream* (`2.5rem`, `calc(2.5rem + 1rem)`) and never a\npixel length, so parsing it reads a `rem` value's leading number as pixels and cannot read a\n`calc()` at all. Measuring the probe boxes the stylesheet sizes from those same tokens makes\nthe browser do the unit math instead, for every unit `calc()` included.\n\nMeasured at most once per geometry change, not per frame: the result is cached, and the probe\nboxes themselves are the invalidation signal (see `observeGeometryProbe`)."
91092
+ },
89986
91093
  {
89987
91094
  "kind": "method",
89988
91095
  "name": "haystackFor",
@@ -90038,6 +91145,17 @@
90038
91145
  "module": "src/internal/lyra-element.ts"
90039
91146
  }
90040
91147
  },
91148
+ {
91149
+ "kind": "method",
91150
+ "name": "observeGeometryProbe",
91151
+ "privacy": "private",
91152
+ "return": {
91153
+ "type": {
91154
+ "text": "void"
91155
+ }
91156
+ },
91157
+ "description": "The probe boxes double as the change sensor: anything that can move the geometry -- a token\noverride applied after the first render, a theme swap, a root/host font-size change feeding a\n`rem`/`em` value -- resizes them, so the cached pixels are re-derived exactly when they can\nactually differ, with no per-frame reads."
91158
+ },
90041
91159
  {
90042
91160
  "kind": "method",
90043
91161
  "name": "optionButtons",
@@ -90190,21 +91308,22 @@
90190
91308
  },
90191
91309
  {
90192
91310
  "kind": "method",
90193
- "name": "syncGridObserver",
91311
+ "name": "syncGeometryProbe",
90194
91312
  "privacy": "private",
90195
91313
  "return": {
90196
91314
  "type": {
90197
91315
  "text": "void"
90198
91316
  }
90199
- }
91317
+ },
91318
+ "description": "Creates the measurement probe the first time the windowed path needs it. Runs before\n`render()` so the very first windowed render already measures real pixels."
90200
91319
  },
90201
91320
  {
90202
91321
  "kind": "method",
90203
- "name": "virtualRowHeight",
91322
+ "name": "syncGridObserver",
90204
91323
  "privacy": "private",
90205
91324
  "return": {
90206
91325
  "type": {
90207
- "text": "number"
91326
+ "text": "void"
90208
91327
  }
90209
91328
  }
90210
91329
  },
@@ -90305,6 +91424,13 @@
90305
91424
  "kind": "class",
90306
91425
  "description": "`<lr-icon-button>` — an accessible icon-only action button.",
90307
91426
  "name": "LyraIconButton",
91427
+ "cssProperties": [
91428
+ {
91429
+ "description": "Inline and block size of the native button. A library-wide token (declared on `:root` by `tokens.styles.ts`, and the shared minimum tappable size several other components size their icon controls against), so overriding it globally resizes all of them together.",
91430
+ "name": "--lr-icon-button-size",
91431
+ "default": "2.5rem"
91432
+ }
91433
+ ],
90308
91434
  "cssParts": [
90309
91435
  {
90310
91436
  "description": "Native button.",
@@ -90794,6 +91920,18 @@
90794
91920
  {
90795
91921
  "description": "Outer control height floor, scaled by `size`.",
90796
91922
  "name": "--lr-input-control-min-height"
91923
+ },
91924
+ {
91925
+ "description": "Block padding of the native input, scaled by `size`.",
91926
+ "name": "--lr-input-padding-block"
91927
+ },
91928
+ {
91929
+ "description": "Inline padding of the control row, scaled by `size`.",
91930
+ "name": "--lr-input-padding-inline"
91931
+ },
91932
+ {
91933
+ "description": "Font size of the native input, scaled by `size`.",
91934
+ "name": "--lr-input-font-size"
90797
91935
  }
90798
91936
  ],
90799
91937
  "cssParts": [
@@ -91088,17 +92226,18 @@
91088
92226
  "kind": "field",
91089
92227
  "name": "max",
91090
92228
  "type": {
91091
- "text": "number | undefined"
92229
+ "text": "number | string | undefined"
91092
92230
  },
92231
+ "description": "Upper counterpart of `min`, with the same parsing and the same default of `undefined`.",
91093
92232
  "attribute": "max"
91094
92233
  },
91095
92234
  {
91096
92235
  "kind": "field",
91097
92236
  "name": "min",
91098
92237
  "type": {
91099
- "text": "number | undefined"
92238
+ "text": "number | string | undefined"
91100
92239
  },
91101
- "description": "`type=\"number\"` only — forwarded to the internal native `<input>`'s own `min`/`max`/`step`\nand consulted by that same native input's constraint validation (see `updateValidity()`).",
92240
+ "description": "`type=\"number\"` only — forwarded to the internal native `<input>`'s own `min`/`max`/`step`\nand consulted by that same native input's constraint validation (see `updateValidity()`).\nDefaults to `undefined` (no lower bound). The `min` attribute is parsed as a number here; the\ndeclared type also admits a string so a subclass bound to a non-numeric native input type can\nnarrow the attribute parsing to that type's own literal form (`<lr-time-input>`'s `09:00`)\nwithout redeclaring the whole property surface.",
91102
92241
  "attribute": "min"
91103
92242
  },
91104
92243
  {
@@ -91636,16 +92775,17 @@
91636
92775
  {
91637
92776
  "name": "max",
91638
92777
  "type": {
91639
- "text": "number | undefined"
92778
+ "text": "number | string | undefined"
91640
92779
  },
92780
+ "description": "Upper counterpart of `min`, with the same parsing and the same default of `undefined`.",
91641
92781
  "fieldName": "max"
91642
92782
  },
91643
92783
  {
91644
92784
  "name": "min",
91645
92785
  "type": {
91646
- "text": "number | undefined"
92786
+ "text": "number | string | undefined"
91647
92787
  },
91648
- "description": "`type=\"number\"` only — forwarded to the internal native `<input>`'s own `min`/`max`/`step`\nand consulted by that same native input's constraint validation (see `updateValidity()`).",
92788
+ "description": "`type=\"number\"` only — forwarded to the internal native `<input>`'s own `min`/`max`/`step`\nand consulted by that same native input's constraint validation (see `updateValidity()`).\nDefaults to `undefined` (no lower bound). The `min` attribute is parsed as a number here; the\ndeclared type also admits a string so a subclass bound to a non-numeric native input type can\nnarrow the attribute parsing to that type's own literal form (`<lr-time-input>`'s `09:00`)\nwithout redeclaring the whole property surface.",
91649
92789
  "fieldName": "min"
91650
92790
  },
91651
92791
  {
@@ -92060,8 +93200,9 @@
92060
93200
  "kind": "field",
92061
93201
  "name": "max",
92062
93202
  "type": {
92063
- "text": "number | undefined"
93203
+ "text": "number | string | undefined"
92064
93204
  },
93205
+ "description": "Upper counterpart of `min`, with the same parsing and the same default of `undefined`.",
92065
93206
  "attribute": "max",
92066
93207
  "inheritedFrom": {
92067
93208
  "name": "LyraInput",
@@ -92072,9 +93213,9 @@
92072
93213
  "kind": "field",
92073
93214
  "name": "min",
92074
93215
  "type": {
92075
- "text": "number | undefined"
93216
+ "text": "number | string | undefined"
92076
93217
  },
92077
- "description": "`type=\"number\"` only — forwarded to the internal native `<input>`'s own `min`/`max`/`step`\nand consulted by that same native input's constraint validation (see `updateValidity()`).",
93218
+ "description": "`type=\"number\"` only — forwarded to the internal native `<input>`'s own `min`/`max`/`step`\nand consulted by that same native input's constraint validation (see `updateValidity()`).\nDefaults to `undefined` (no lower bound). The `min` attribute is parsed as a number here; the\ndeclared type also admits a string so a subclass bound to a non-numeric native input type can\nnarrow the attribute parsing to that type's own literal form (`<lr-time-input>`'s `09:00`)\nwithout redeclaring the whole property surface.",
92078
93219
  "attribute": "min",
92079
93220
  "inheritedFrom": {
92080
93221
  "name": "LyraInput",
@@ -92721,6 +93862,30 @@
92721
93862
  "name": "LyraInput",
92722
93863
  "module": "src/components/forms/input/input.class.ts"
92723
93864
  }
93865
+ },
93866
+ {
93867
+ "description": "Block padding of the native input, scaled by `size`.",
93868
+ "name": "--lr-input-padding-block",
93869
+ "inheritedFrom": {
93870
+ "name": "LyraInput",
93871
+ "module": "src/components/forms/input/input.class.ts"
93872
+ }
93873
+ },
93874
+ {
93875
+ "description": "Inline padding of the control row, scaled by `size`.",
93876
+ "name": "--lr-input-padding-inline",
93877
+ "inheritedFrom": {
93878
+ "name": "LyraInput",
93879
+ "module": "src/components/forms/input/input.class.ts"
93880
+ }
93881
+ },
93882
+ {
93883
+ "description": "Font size of the native input, scaled by `size`.",
93884
+ "name": "--lr-input-font-size",
93885
+ "inheritedFrom": {
93886
+ "name": "LyraInput",
93887
+ "module": "src/components/forms/input/input.class.ts"
93888
+ }
92724
93889
  }
92725
93890
  ],
92726
93891
  "attributes": [
@@ -92862,8 +94027,9 @@
92862
94027
  {
92863
94028
  "name": "max",
92864
94029
  "type": {
92865
- "text": "number | undefined"
94030
+ "text": "number | string | undefined"
92866
94031
  },
94032
+ "description": "Upper counterpart of `min`, with the same parsing and the same default of `undefined`.",
92867
94033
  "fieldName": "max",
92868
94034
  "inheritedFrom": {
92869
94035
  "name": "LyraInput",
@@ -92873,9 +94039,9 @@
92873
94039
  {
92874
94040
  "name": "min",
92875
94041
  "type": {
92876
- "text": "number | undefined"
94042
+ "text": "number | string | undefined"
92877
94043
  },
92878
- "description": "`type=\"number\"` only — forwarded to the internal native `<input>`'s own `min`/`max`/`step`\nand consulted by that same native input's constraint validation (see `updateValidity()`).",
94044
+ "description": "`type=\"number\"` only — forwarded to the internal native `<input>`'s own `min`/`max`/`step`\nand consulted by that same native input's constraint validation (see `updateValidity()`).\nDefaults to `undefined` (no lower bound). The `min` attribute is parsed as a number here; the\ndeclared type also admits a string so a subclass bound to a non-numeric native input type can\nnarrow the attribute parsing to that type's own literal form (`<lr-time-input>`'s `09:00`)\nwithout redeclaring the whole property surface.",
92879
94045
  "fieldName": "min",
92880
94046
  "inheritedFrom": {
92881
94047
  "name": "LyraInput",
@@ -93070,7 +94236,7 @@
93070
94236
  "declarations": [
93071
94237
  {
93072
94238
  "kind": "class",
93073
- "description": "`<lr-time-input>` — a native time-input alias with Lyra form chrome and events.",
94239
+ "description": "`<lr-time-input>` — a native time-input alias with Lyra form chrome and events.\n\nAdds no API of its own beyond re-typing the inherited `min`/`max` bounds for time values; every\nother property, event, slot and part is `<lr-input>`'s.",
93074
94240
  "name": "LyraTimeInput",
93075
94241
  "members": [
93076
94242
  {
@@ -93368,8 +94534,9 @@
93368
94534
  "kind": "field",
93369
94535
  "name": "max",
93370
94536
  "type": {
93371
- "text": "number | undefined"
94537
+ "text": "number | string | undefined"
93372
94538
  },
94539
+ "description": "Latest selectable time, in the same form as `min`, reported by the native input as\n`rangeOverflow`. Defaults to `undefined` (no upper bound).",
93373
94540
  "attribute": "max",
93374
94541
  "inheritedFrom": {
93375
94542
  "name": "LyraInput",
@@ -93380,9 +94547,9 @@
93380
94547
  "kind": "field",
93381
94548
  "name": "min",
93382
94549
  "type": {
93383
- "text": "number | undefined"
94550
+ "text": "number | string | undefined"
93384
94551
  },
93385
- "description": "`type=\"number\"` only forwarded to the internal native `<input>`'s own `min`/`max`/`step`\nand consulted by that same native input's constraint validation (see `updateValidity()`).",
94552
+ "description": "Earliest selectable time, as the native `<input type=\"time\">` spells it (`HH:MM`, or\n`HH:MM:SS` alongside a seconds-precision `step`). Forwarded verbatim to that native input,\nwhose own constraint validation reports `rangeUnderflow`. Defaults to `undefined` (no lower\nbound). Unlike `<lr-input type=\"number\">`'s numeric `min`, the attribute form is *not*\nparsed as a number.",
93386
94553
  "attribute": "min",
93387
94554
  "inheritedFrom": {
93388
94555
  "name": "LyraInput",
@@ -93891,146 +95058,6 @@
93891
95058
  }
93892
95059
  }
93893
95060
  ],
93894
- "superclass": {
93895
- "name": "LyraInput",
93896
- "module": "/src/components/forms/input/input.class.js"
93897
- },
93898
- "tagName": "lr-time-input",
93899
- "customElement": true,
93900
- "slots": [
93901
- {
93902
- "description": "Adornment after the native input and built-in actions.",
93903
- "name": "end",
93904
- "inheritedFrom": {
93905
- "name": "LyraInput",
93906
- "module": "src/components/forms/input/input.class.ts"
93907
- }
93908
- },
93909
- {
93910
- "description": "Custom error content.",
93911
- "name": "error",
93912
- "inheritedFrom": {
93913
- "name": "LyraInput",
93914
- "module": "src/components/forms/input/input.class.ts"
93915
- }
93916
- },
93917
- {
93918
- "description": "Custom hint content.",
93919
- "name": "hint",
93920
- "inheritedFrom": {
93921
- "name": "LyraInput",
93922
- "module": "src/components/forms/input/input.class.ts"
93923
- }
93924
- },
93925
- {
93926
- "description": "Custom label content.",
93927
- "name": "label",
93928
- "inheritedFrom": {
93929
- "name": "LyraInput",
93930
- "module": "src/components/forms/input/input.class.ts"
93931
- }
93932
- },
93933
- {
93934
- "description": "Adornment before the native input.",
93935
- "name": "start",
93936
- "inheritedFrom": {
93937
- "name": "LyraInput",
93938
- "module": "src/components/forms/input/input.class.ts"
93939
- }
93940
- }
93941
- ],
93942
- "cssParts": [
93943
- {
93944
- "description": "The clear action, rendered for non-empty clearable text/search inputs.",
93945
- "name": "clear-button",
93946
- "inheritedFrom": {
93947
- "name": "LyraInput",
93948
- "module": "src/components/forms/input/input.class.ts"
93949
- }
93950
- },
93951
- {
93952
- "description": "Wrapper around the `end` adornment slot.",
93953
- "name": "end",
93954
- "inheritedFrom": {
93955
- "name": "LyraInput",
93956
- "module": "src/components/forms/input/input.class.ts"
93957
- }
93958
- },
93959
- {
93960
- "description": "The error message.",
93961
- "name": "error",
93962
- "inheritedFrom": {
93963
- "name": "LyraInput",
93964
- "module": "src/components/forms/input/input.class.ts"
93965
- }
93966
- },
93967
- {
93968
- "description": "The outer wrapper around label, input, error and hint.",
93969
- "name": "form-control",
93970
- "inheritedFrom": {
93971
- "name": "LyraInput",
93972
- "module": "src/components/forms/input/input.class.ts"
93973
- }
93974
- },
93975
- {
93976
- "description": "The `<label>` element.",
93977
- "name": "form-control-label",
93978
- "inheritedFrom": {
93979
- "name": "LyraInput",
93980
- "module": "src/components/forms/input/input.class.ts"
93981
- }
93982
- },
93983
- {
93984
- "description": "The hint message.",
93985
- "name": "hint",
93986
- "inheritedFrom": {
93987
- "name": "LyraInput",
93988
- "module": "src/components/forms/input/input.class.ts"
93989
- }
93990
- },
93991
- {
93992
- "description": "The native `<input>` element.",
93993
- "name": "input",
93994
- "inheritedFrom": {
93995
- "name": "LyraInput",
93996
- "module": "src/components/forms/input/input.class.ts"
93997
- }
93998
- },
93999
- {
94000
- "description": "The row wrapping the native input and the password-toggle button.",
94001
- "name": "input-wrapper",
94002
- "inheritedFrom": {
94003
- "name": "LyraInput",
94004
- "module": "src/components/forms/input/input.class.ts"
94005
- }
94006
- },
94007
- {
94008
- "description": "The show/hide-password button, present only when `type=\"password\"`.",
94009
- "name": "password-toggle",
94010
- "inheritedFrom": {
94011
- "name": "LyraInput",
94012
- "module": "src/components/forms/input/input.class.ts"
94013
- }
94014
- },
94015
- {
94016
- "description": "Wrapper around the `start` adornment slot.",
94017
- "name": "start",
94018
- "inheritedFrom": {
94019
- "name": "LyraInput",
94020
- "module": "src/components/forms/input/input.class.ts"
94021
- }
94022
- }
94023
- ],
94024
- "cssProperties": [
94025
- {
94026
- "description": "Outer control height floor, scaled by `size`.",
94027
- "name": "--lr-input-control-min-height",
94028
- "inheritedFrom": {
94029
- "name": "LyraInput",
94030
- "module": "src/components/forms/input/input.class.ts"
94031
- }
94032
- }
94033
- ],
94034
95061
  "attributes": [
94035
95062
  {
94036
95063
  "name": "aria-label",
@@ -94170,8 +95197,9 @@
94170
95197
  {
94171
95198
  "name": "max",
94172
95199
  "type": {
94173
- "text": "number | undefined"
95200
+ "text": "number | string | undefined"
94174
95201
  },
95202
+ "description": "Latest selectable time, in the same form as `min`, reported by the native input as\n`rangeOverflow`. Defaults to `undefined` (no upper bound).",
94175
95203
  "fieldName": "max",
94176
95204
  "inheritedFrom": {
94177
95205
  "name": "LyraInput",
@@ -94181,9 +95209,9 @@
94181
95209
  {
94182
95210
  "name": "min",
94183
95211
  "type": {
94184
- "text": "number | undefined"
95212
+ "text": "number | string | undefined"
94185
95213
  },
94186
- "description": "`type=\"number\"` only forwarded to the internal native `<input>`'s own `min`/`max`/`step`\nand consulted by that same native input's constraint validation (see `updateValidity()`).",
95214
+ "description": "Earliest selectable time, as the native `<input type=\"time\">` spells it (`HH:MM`, or\n`HH:MM:SS` alongside a seconds-precision `step`). Forwarded verbatim to that native input,\nwhose own constraint validation reports `rangeUnderflow`. Defaults to `undefined` (no lower\nbound). Unlike `<lr-input type=\"number\">`'s numeric `min`, the attribute form is *not*\nparsed as a number.",
94187
95215
  "fieldName": "min",
94188
95216
  "inheritedFrom": {
94189
95217
  "name": "LyraInput",
@@ -94278,6 +95306,170 @@
94278
95306
  }
94279
95307
  }
94280
95308
  ],
95309
+ "superclass": {
95310
+ "name": "LyraInput",
95311
+ "module": "/src/components/forms/input/input.class.js"
95312
+ },
95313
+ "tagName": "lr-time-input",
95314
+ "customElement": true,
95315
+ "slots": [
95316
+ {
95317
+ "description": "Adornment after the native input and built-in actions.",
95318
+ "name": "end",
95319
+ "inheritedFrom": {
95320
+ "name": "LyraInput",
95321
+ "module": "src/components/forms/input/input.class.ts"
95322
+ }
95323
+ },
95324
+ {
95325
+ "description": "Custom error content.",
95326
+ "name": "error",
95327
+ "inheritedFrom": {
95328
+ "name": "LyraInput",
95329
+ "module": "src/components/forms/input/input.class.ts"
95330
+ }
95331
+ },
95332
+ {
95333
+ "description": "Custom hint content.",
95334
+ "name": "hint",
95335
+ "inheritedFrom": {
95336
+ "name": "LyraInput",
95337
+ "module": "src/components/forms/input/input.class.ts"
95338
+ }
95339
+ },
95340
+ {
95341
+ "description": "Custom label content.",
95342
+ "name": "label",
95343
+ "inheritedFrom": {
95344
+ "name": "LyraInput",
95345
+ "module": "src/components/forms/input/input.class.ts"
95346
+ }
95347
+ },
95348
+ {
95349
+ "description": "Adornment before the native input.",
95350
+ "name": "start",
95351
+ "inheritedFrom": {
95352
+ "name": "LyraInput",
95353
+ "module": "src/components/forms/input/input.class.ts"
95354
+ }
95355
+ }
95356
+ ],
95357
+ "cssParts": [
95358
+ {
95359
+ "description": "The clear action, rendered for non-empty clearable text/search inputs.",
95360
+ "name": "clear-button",
95361
+ "inheritedFrom": {
95362
+ "name": "LyraInput",
95363
+ "module": "src/components/forms/input/input.class.ts"
95364
+ }
95365
+ },
95366
+ {
95367
+ "description": "Wrapper around the `end` adornment slot.",
95368
+ "name": "end",
95369
+ "inheritedFrom": {
95370
+ "name": "LyraInput",
95371
+ "module": "src/components/forms/input/input.class.ts"
95372
+ }
95373
+ },
95374
+ {
95375
+ "description": "The error message.",
95376
+ "name": "error",
95377
+ "inheritedFrom": {
95378
+ "name": "LyraInput",
95379
+ "module": "src/components/forms/input/input.class.ts"
95380
+ }
95381
+ },
95382
+ {
95383
+ "description": "The outer wrapper around label, input, error and hint.",
95384
+ "name": "form-control",
95385
+ "inheritedFrom": {
95386
+ "name": "LyraInput",
95387
+ "module": "src/components/forms/input/input.class.ts"
95388
+ }
95389
+ },
95390
+ {
95391
+ "description": "The `<label>` element.",
95392
+ "name": "form-control-label",
95393
+ "inheritedFrom": {
95394
+ "name": "LyraInput",
95395
+ "module": "src/components/forms/input/input.class.ts"
95396
+ }
95397
+ },
95398
+ {
95399
+ "description": "The hint message.",
95400
+ "name": "hint",
95401
+ "inheritedFrom": {
95402
+ "name": "LyraInput",
95403
+ "module": "src/components/forms/input/input.class.ts"
95404
+ }
95405
+ },
95406
+ {
95407
+ "description": "The native `<input>` element.",
95408
+ "name": "input",
95409
+ "inheritedFrom": {
95410
+ "name": "LyraInput",
95411
+ "module": "src/components/forms/input/input.class.ts"
95412
+ }
95413
+ },
95414
+ {
95415
+ "description": "The row wrapping the native input and the password-toggle button.",
95416
+ "name": "input-wrapper",
95417
+ "inheritedFrom": {
95418
+ "name": "LyraInput",
95419
+ "module": "src/components/forms/input/input.class.ts"
95420
+ }
95421
+ },
95422
+ {
95423
+ "description": "The show/hide-password button, present only when `type=\"password\"`.",
95424
+ "name": "password-toggle",
95425
+ "inheritedFrom": {
95426
+ "name": "LyraInput",
95427
+ "module": "src/components/forms/input/input.class.ts"
95428
+ }
95429
+ },
95430
+ {
95431
+ "description": "Wrapper around the `start` adornment slot.",
95432
+ "name": "start",
95433
+ "inheritedFrom": {
95434
+ "name": "LyraInput",
95435
+ "module": "src/components/forms/input/input.class.ts"
95436
+ }
95437
+ }
95438
+ ],
95439
+ "cssProperties": [
95440
+ {
95441
+ "description": "Outer control height floor, scaled by `size`.",
95442
+ "name": "--lr-input-control-min-height",
95443
+ "inheritedFrom": {
95444
+ "name": "LyraInput",
95445
+ "module": "src/components/forms/input/input.class.ts"
95446
+ }
95447
+ },
95448
+ {
95449
+ "description": "Block padding of the native input, scaled by `size`.",
95450
+ "name": "--lr-input-padding-block",
95451
+ "inheritedFrom": {
95452
+ "name": "LyraInput",
95453
+ "module": "src/components/forms/input/input.class.ts"
95454
+ }
95455
+ },
95456
+ {
95457
+ "description": "Inline padding of the control row, scaled by `size`.",
95458
+ "name": "--lr-input-padding-inline",
95459
+ "inheritedFrom": {
95460
+ "name": "LyraInput",
95461
+ "module": "src/components/forms/input/input.class.ts"
95462
+ }
95463
+ },
95464
+ {
95465
+ "description": "Font size of the native input, scaled by `size`.",
95466
+ "name": "--lr-input-font-size",
95467
+ "inheritedFrom": {
95468
+ "name": "LyraInput",
95469
+ "module": "src/components/forms/input/input.class.ts"
95470
+ }
95471
+ }
95472
+ ],
94281
95473
  "events": [
94282
95474
  {
94283
95475
  "description": "Re-dispatched from the internal native `<input>`'s own `blur` — bubbling and composed (unlike the native event, which is neither).",
@@ -97340,6 +98532,7 @@
97340
98532
  "type": {
97341
98533
  "text": "NodeList"
97342
98534
  },
98535
+ "description": "Delegates straight to `ElementInternals.labels` -- no logic of its own. Reading it from this\ncomponent's minimal (no wrapping `<form>`, no `keys`) fixture reliably hangs headless Chromium\nindefinitely (very likely a Playwright/Chromium defect in the native accessor itself, not\nanything this getter does); see\n`docs/superpowers/feature_requests/2026-07-19-latent-bugs-found-during-coverage-push.md` item 3.\n`rubric-form.test.ts`'s getters test deliberately omits a `.labels` assertion because of this --\ndo not add one back without first confirming the hang is actually resolved.",
97343
98536
  "readonly": true
97344
98537
  },
97345
98538
  {
@@ -98092,6 +99285,23 @@
98092
99285
  {
98093
99286
  "description": "Decorative expand-icon box size, scaled by `size`.",
98094
99287
  "name": "--lr-select-expand-size"
99288
+ },
99289
+ {
99290
+ "description": "Trigger padding shorthand, scaled by `size`.",
99291
+ "name": "--lr-select-trigger-padding"
99292
+ },
99293
+ {
99294
+ "description": "Trigger block-size floor, scaled by `size`. Applied only for the `xs`/`s`/`l`/`xl` tiers — see the stylesheet note; the default tier stays floor-free.",
99295
+ "name": "--lr-select-trigger-min-height"
99296
+ },
99297
+ {
99298
+ "description": "Trigger font size, scaled by `size`.",
99299
+ "name": "--lr-select-font-size"
99300
+ },
99301
+ {
99302
+ "description": "Exact trigger height. Left at `auto` the trigger is floored only; set it to a length to both floor and cap the trigger (e.g. to pixel-match a sibling field in the same row).",
99303
+ "name": "--lr-select-trigger-height",
99304
+ "default": "auto"
98095
99305
  }
98096
99306
  ],
98097
99307
  "cssParts": [
@@ -100051,7 +101261,7 @@
100051
101261
  {
100052
101262
  "description": "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.",
100053
101263
  "name": "--lr-swatch-picker-selected-blur",
100054
- "default": "0px"
101264
+ "default": "0"
100055
101265
  },
100056
101266
  {
100057
101267
  "description": "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.",
@@ -100523,6 +101733,23 @@
100523
101733
  "kind": "class",
100524
101734
  "description": "`<lr-switch>` — a boolean toggle-switch form control. Structurally the\nsame idea as a checkbox (form-associated via `ElementInternals`, click and\nSpace/Enter both 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.",
100525
101735
  "name": "LyraSwitch",
101736
+ "cssProperties": [
101737
+ {
101738
+ "description": "Inline size of the track, and (with the block size) the distance the thumb travels when checked.",
101739
+ "name": "--lr-switch-track-inline-size",
101740
+ "default": "var(--lr-size-2-25rem)"
101741
+ },
101742
+ {
101743
+ "description": "Block size of the track; the thumb's diameter is derived from it minus twice `--lr-switch-thumb-offset`.",
101744
+ "name": "--lr-switch-track-block-size",
101745
+ "default": "var(--lr-size-1-25rem)"
101746
+ },
101747
+ {
101748
+ "description": "Inset of the thumb from the track's edges.",
101749
+ "name": "--lr-switch-thumb-offset",
101750
+ "default": "var(--lr-size-2px)"
101751
+ }
101752
+ ],
100526
101753
  "cssParts": [
100527
101754
  {
100528
101755
  "description": "The whole interactive control (`role=\"switch\"`); wraps the track and label.",
@@ -103182,6 +104409,18 @@
103182
104409
  "kind": "class",
103183
104410
  "description": "`<lr-token-input>` — an editable, form-associated list of removable tokens.",
103184
104411
  "name": "LyraTokenInput",
104412
+ "cssProperties": [
104413
+ {
104414
+ "description": "`flex-basis` of the native text input within the token row.",
104415
+ "name": "--lr-token-input-input-inline-size",
104416
+ "default": "var(--lr-size-8rem)"
104417
+ },
104418
+ {
104419
+ "description": "Inline-size floor of the native text input, so it stays usable once tokens wrap.",
104420
+ "name": "--lr-token-input-min-input-inline-size",
104421
+ "default": "var(--lr-size-4rem)"
104422
+ }
104423
+ ],
103185
104424
  "cssParts": [
103186
104425
  {
103187
104426
  "description": "Validation message.",
@@ -104644,6 +105883,28 @@
104644
105883
  "kind": "class",
104645
105884
  "description": "`<lr-app-rail>` — a responsive navigation rail that adapts across three\npresentations as the *viewport* narrows (not this element's own inline\nsize — see the `mode` accessor doc for why): `'full'` (nav items show\nicon + label, inline), `'icon-only'` (a narrower inline rail, icons only),\nand `'mobile'` (hidden behind a toggle button; opening it shows a\nfocus-trapped floating overlay over the page).\n\nBreakpoints are viewport-width `matchMedia()` queries against\n`icon-only-breakpoint`/`mobile-breakpoint`, not a `ResizeObserver` on this\nelement — a nav rail's presentation should track the actual device/window\nwidth the way a native OS shell's navigation does, not however much\nhorizontal space a particular layout happens to give it.\n\nThe `'mobile'` state participates in the library's shared overlay stack,\nwhich supplies focus trapping, Escape/backdrop dismissal, inerting, and\nfocus restoration without nesting a `<lr-dialog>` in this component's\nshadow template. `[part=\"base\"]` (the inline\n`'full'`/`'icon-only'` presentation) and `[part=\"panel\"]` (the mobile\noverlay) are the *same* element promoted in place across modes (mirrors\n`<lr-widget>`'s fullscreen mode) — never both at once, and never two\nseparate copies of the slotted content, which slot projection can't\nproduce anyway (a light-DOM node is only ever assigned to one `<slot>`).\nIt's a plain `<div>` with an explicit `role=\"navigation\"` rather than a\nliteral `<nav>` tag: a `<nav>`'s implicit role can't be overridden to\n`role=\"dialog\"` while the overlay is modal without an `aria-allowed-role`\nviolation (verified against axe), whereas an explicit `role=\"navigation\"`\non a generic element can be swapped for `role=\"dialog\"` freely.",
104646
105885
  "name": "LyraAppRail",
105886
+ "cssProperties": [
105887
+ {
105888
+ "description": "The inline rail's width in `'full'` mode. Overridden by an inline width while a `resizable` rail has an explicit `railWidthPx`.",
105889
+ "name": "--lr-app-rail-width",
105890
+ "default": "var(--lr-size-15rem)"
105891
+ },
105892
+ {
105893
+ "description": "The inline rail's width in `'icon-only'` mode, and the maximum width of each slotted `<lr-app-rail-item>` in that mode.",
105894
+ "name": "--lr-app-rail-icon-width",
105895
+ "default": "var(--lr-size-4rem)"
105896
+ },
105897
+ {
105898
+ "description": "The mobile overlay panel's width, capped at `85vw`.",
105899
+ "name": "--lr-app-rail-mobile-width",
105900
+ "default": "var(--lr-size-18rem)"
105901
+ },
105902
+ {
105903
+ "description": "The mobile overlay scrim's background.",
105904
+ "name": "--lr-app-rail-overlay-color",
105905
+ "default": "var(--lr-color-overlay)"
105906
+ }
105907
+ ],
104647
105908
  "cssParts": [
104648
105909
  {
104649
105910
  "description": "The mobile overlay's scrim. Only rendered while open.",
@@ -106476,7 +107737,8 @@
106476
107737
  "cssProperties": [
106477
107738
  {
106478
107739
  "description": "Gap between grouped controls.",
106479
- "name": "--lr-button-group-gap"
107740
+ "name": "--lr-button-group-gap",
107741
+ "default": "var(--lr-space-2xs)"
106480
107742
  }
106481
107743
  ],
106482
107744
  "cssParts": [
@@ -108426,6 +109688,33 @@
108426
109688
  "kind": "class",
108427
109689
  "description": "`<lr-command-palette>` — searchable application command menu with keyboard navigation.\nShared overlay infrastructure (the same one `<lr-dialog>` uses) coordinates focus-trapping\nTab, Escape dismissal, and document scroll-locking for as long as the palette is open.",
108428
109690
  "name": "LyraCommandPalette",
109691
+ "cssProperties": [
109692
+ {
109693
+ "description": "Stacking index of the backdrop.",
109694
+ "name": "--lr-command-palette-z-index",
109695
+ "default": "var(--lr-overlay-stack-index, var(--lr-layer-modal))"
109696
+ },
109697
+ {
109698
+ "description": "Maximum dialog width.",
109699
+ "name": "--lr-command-palette-max-inline-size",
109700
+ "default": "var(--lr-size-48rem)"
109701
+ },
109702
+ {
109703
+ "description": "Maximum dialog height.",
109704
+ "name": "--lr-command-palette-max-block-size",
109705
+ "default": "70vh"
109706
+ },
109707
+ {
109708
+ "description": "Maximum height of the scrolling command list.",
109709
+ "name": "--lr-command-palette-list-max-block-size",
109710
+ "default": "50vh"
109711
+ },
109712
+ {
109713
+ "description": "Gap between the viewport top and the dialog.",
109714
+ "name": "--lr-command-palette-offset-block-start",
109715
+ "default": "12vh"
109716
+ }
109717
+ ],
108429
109718
  "cssParts": [
108430
109719
  {
108431
109720
  "description": "Modal backdrop.",
@@ -108435,10 +109724,22 @@
108435
109724
  "description": "A command button.",
108436
109725
  "name": "command"
108437
109726
  },
109727
+ {
109728
+ "description": "A command's secondary description text. Rendered for every command; empty when the command has no `description`.",
109729
+ "name": "description"
109730
+ },
108438
109731
  {
108439
109732
  "description": "Palette dialog.",
108440
109733
  "name": "dialog"
108441
109734
  },
109735
+ {
109736
+ "description": "The \"no results\" message. Only rendered when the filter matches no command.",
109737
+ "name": "empty"
109738
+ },
109739
+ {
109740
+ "description": "A group heading, rendered before the first command of each `group`.",
109741
+ "name": "group"
109742
+ },
108442
109743
  {
108443
109744
  "description": "Search input.",
108444
109745
  "name": "input"
@@ -108446,6 +109747,14 @@
108446
109747
  {
108447
109748
  "description": "Command list.",
108448
109749
  "name": "list"
109750
+ },
109751
+ {
109752
+ "description": "The search row wrapping the leading icon and the `input`.",
109753
+ "name": "search"
109754
+ },
109755
+ {
109756
+ "description": "A command's trailing shortcut hint. Only rendered when the command has a `shortcut`.",
109757
+ "name": "shortcut"
108449
109758
  }
108450
109759
  ],
108451
109760
  "members": [
@@ -109080,7 +110389,8 @@
109080
110389
  "cssProperties": [
109081
110390
  {
109082
110391
  "description": "Gap between grouped controls.",
109083
- "name": "--lr-control-group-gap"
110392
+ "name": "--lr-control-group-gap",
110393
+ "default": "var(--lr-space-xs)"
109084
110394
  }
109085
110395
  ],
109086
110396
  "cssParts": [
@@ -109466,6 +110776,23 @@
109466
110776
  "kind": "class",
109467
110777
  "description": "`<lr-dashboard-grid>` — a responsive, keyboard-accessible widget grid: positions `layout`\nentries (`DashboardCell`: `x`/`y`/`w`/`h` grid units + a widget descriptor) on a CSS Grid,\ncomposing `<lr-widget>` + `<lr-widget-renderer>` for each cell's default content, and owns all\ndrag/resize/collision interaction as controlled events -- it never mutates `layout` itself, nor\never touches `localStorage`/network; the host applies (or ignores) every emitted event and owns\npersistence entirely, mirroring `lr-flow-canvas`/`lr-table`'s own controlled-component\nconvention. Readonly (viewer) by default; opt into editor gestures individually via\n`cells-draggable`/`cells-resizable`, or lock the whole grid via `locked`.\n\nCell content: a `layout` entry with no matching light-DOM child (matched by `cell-id`) gets a\ndefault `<lr-widget label=\"...\">` wrapping an `<lr-widget-renderer .tree=${cell.widget}>`\nauto-created and adopted into `slot=\"cell-{id}\"` -- this component's own job is the grid\nlayout/drag/resize/collision/persistence-event mechanics *around* that content, not widget\nrendering itself (see `lr-widget-renderer`'s own doc for its declarative-tree contract). A\nconsumer wanting full control over one cell's markup can instead author\n`<div cell-id=\"...\">...</div>` as a direct child; it is adopted in place of the default cell.\n\nKeyboard: cells share one roving tabindex, in row-major (`sortSpatial`) order. Arrow\nkeys/Home/End move the roving focus (RTL-aware: physical Left/Right always match what the\ncursor visually does, matching `lr-flow-canvas`'s own convention). While a cell has focus,\nCtrl/Cmd+Arrow moves it by one grid unit and Ctrl/Cmd+Shift+Arrow resizes it by one grid unit\n(Right/Down grow, Left/Up shrink) -- the full keyboard-operable equivalent of the pointer\ndrag/resize gestures below, per this library's accessibility bar (no pointer-only interaction).\n\nCollision: every move/resize request -- pointer or keyboard -- is resolved through `collision`\n(`'reject'` the default, `'push'`, or `'overlap'`; see `resolvePlacement()` in `layout.ts` for\nthe exact rule). A rejected request leaves `layout` untouched and only announces; an accepted\none emits `lr-cell-move`/`lr-cell-resize` plus a `lr-layout-change` snapshot of the full\nproposed layout (including any `'push'` cascade) -- the host's one persistence hook: listen for\nit and persist `event.detail.layout` however it likes (`localStorage`, a network call, neither).\n\nResponsive: below a ~40rem container allocation (`@container`, not the viewport -- a dashboard\ngrid is commonly embedded in a panel of varying width), cells stack into a single flowing\ncolumn in the same row-major order the grid itself renders them in, instead of overflowing or\nshrinking columns unreadably.",
109468
110778
  "name": "LyraDashboardGrid",
110779
+ "cssProperties": [
110780
+ {
110781
+ "description": "Column count of the underlying CSS Grid. Written inline on `[part=\"base\"]` from the `columns` property on every render, so the fallback only applies to a `[part=\"base\"]` this component has not rendered yet.",
110782
+ "name": "--lr-dashboard-grid-columns",
110783
+ "default": "12"
110784
+ },
110785
+ {
110786
+ "description": "Row track height. Written inline on `[part=\"base\"]` from the `rowHeight` property (in px) on every render.",
110787
+ "name": "--lr-dashboard-grid-row-height",
110788
+ "default": "var(--lr-size-5rem)"
110789
+ },
110790
+ {
110791
+ "description": "Gap between cells on both axes. Written inline on `[part=\"base\"]` from the `gap` property (in px) on every render.",
110792
+ "name": "--lr-dashboard-grid-gap",
110793
+ "default": "var(--lr-space-m)"
110794
+ }
110795
+ ],
109469
110796
  "cssParts": [
109470
110797
  {
109471
110798
  "description": "The grid root.",
@@ -112035,6 +113362,13 @@
112035
113362
  "kind": "class",
112036
113363
  "description": "`<lr-dock-panel>` — a single panel docked to one edge of whatever\ncontains it, resizable by dragging its inner edge. Unlike `<lr-split>`\n(which owns and lays out N sibling panels, and requires restructuring a\nlayout so every panel becomes its direct child), this is one self-\ncontained element you drop next to your existing content -- typically as\nan absolutely-positioned child of a `position: relative` parent, or as a\nflex item alongside a main-content sibling. It deliberately imposes no\n`position`/`inset` of its own (see the styles module): it only manages its\nown size along the resize axis (`inline-size` for `start`/`end`,\n`block-size` for `top`/`bottom`) and fills 100% of the cross axis, leaving\nwhere it sits in the page entirely up to the consumer's own layout.\n\n`lr-split` stays the right primitive for the multi-sibling-panel case;\nthis is the primitive for the single-edge-docked case, kept as a separate\ncomponent rather than a second mode bolted onto `lr-split`'s API.\n\nPointer-drag-resize mirrors `lr-split`'s pointer-capture technique\n(pointerdown captures the pointer on the handle, pointermove computes a\nnew size, pointerup/pointercancel/lostpointercapture all release it) but\nfor a single draggable edge instead of N-1 dividers between N panels, and\nreasons in raw pixels throughout rather than percent -- `size` is a CSS\nlength, and pointer movement is naturally pixels, so there's no percent\ndomain to convert through here. Every resize (drag step, drag release, or\nkeyboard step) always commits `size` as a `px` string regardless of what\nunit `size`/`min-size`/`max-size` were originally expressed in -- a drag\ninherently produces a pixel-precise result, so re-expressing it in the\ncaller's original unit (e.g. back into `rem`) would just be lossy\nre-derivation for no benefit.\n\nCollapsing hides the slotted content but keeps the panel itself at a\nsmall persistent \"rail\" width/height (`--lr-dock-panel-collapsed-size`,\ndefault `var(--lr-icon-button-size)`) rather than collapsing to zero --\na zero-size collapsed panel would have nowhere left to host the toggle\nbutton that re-expands it. `size` itself is left untouched while\ncollapsed, so re-expanding restores exactly what it was.",
112037
113364
  "name": "LyraDockPanel",
113365
+ "cssProperties": [
113366
+ {
113367
+ "description": "The extent the panel keeps along its resize axis while `collapsed` -- enough to still host the toggle button that re-expands it.",
113368
+ "name": "--lr-dock-panel-collapsed-size",
113369
+ "default": "var(--lr-icon-button-size)"
113370
+ }
113371
+ ],
112038
113372
  "cssParts": [
112039
113373
  {
112040
113374
  "description": "The panel root.",
@@ -115931,6 +117265,13 @@
115931
117265
  "kind": "class",
115932
117266
  "description": "`<lr-responsive-panel>` — the same slotted content either docked inline\nin the page's normal layout flow (desktop) or presented as a full-screen/\nbottom-sheet overlay (mobile), depending on viewport width. Typical uses:\na settings panel or a conversation-history sidebar that's a permanent\ndocked pane on a wide screen but a modal on a phone.\n\nBreakpoint detection uses `matchMedia('(max-width: ' + mobileBreakpoint +\n')')`, re-evaluated live while connected -- resizing/rotating a device\nthat crosses the breakpoint while `mode=\"auto\"` (the default) updates the\neffective presentation without unmounting or re-creating the slotted\ncontent: inline and overlay presentation share the exact same shadow DOM\nstructure (only a css class, and the overlay-only `role`/`aria-modal`\nattributes and backdrop element, differ), so lit-html's diffing keeps\n`[part=\"body\"]` and its `<slot>` as the same DOM node across the\ntransition -- scroll position and focus inside the slotted content survive\nit for free. When an open inline panel becomes modal, focus already inside\nis preserved and outside focus moves to the first available target. Closing\nstill returns to the opener captured by the original inline open.\n\nThe overlay presentation uses the library's shared overlay coordinator for\nfocus trapping, Escape/backdrop dismissal, inerting, and stack ordering,\nwhile retaining this component's own responsive rendering and close event.\n\nAccessible name (overlay presentation only -- the inline presentation has\nno dialog semantics to name), in priority order: if the host element itself\nhas an `aria-label` attribute set, its value wins outright, overriding\nevery source below -- the standard ARIA convention for a consumer that\nwants full control over the announced name, matching lr-dialog's\n`accessibleLabel` pattern. Otherwise `label`, when set, is used verbatim.\nWhen both are empty, this falls back to the `header` slot's content -- a\nheading element (`h1`–`h6` or `[role=\"heading\"]`) among the slotted header\ncontent wins if present, otherwise the header slot's full text content is\nused, mirroring lr-dialog's `detectHeading()`/`headingText` fallback (see\ndialog.ts's module doc for why this uses `aria-label`, a copied string,\nrather than `aria-labelledby`: the header content is light DOM while\n`[part=\"panel\"]` lives in this element's shadow tree, and an ID-reference\nattribute can't resolve across that boundary). A panel opened without a\nhost `aria-label`, `label`, or header content still renders `role=\"dialog\"`\nwith no accessible name -- set one of those to avoid that.",
115933
117267
  "name": "LyraResponsivePanel",
117268
+ "cssProperties": [
117269
+ {
117270
+ "description": "The overlay presentation's scrim color, applied to `[part=\"backdrop\"]`.",
117271
+ "name": "--lr-responsive-panel-overlay-color",
117272
+ "default": "var(--lr-color-overlay)"
117273
+ }
117274
+ ],
115934
117275
  "cssParts": [
115935
117276
  {
115936
117277
  "description": "The full-viewport scrim behind the panel -- only rendered in the overlay presentation.",
@@ -116695,11 +118036,13 @@
116695
118036
  "cssProperties": [
116696
118037
  {
116697
118038
  "description": "Control size.",
116698
- "name": "--lr-scroller-control-size"
118039
+ "name": "--lr-scroller-control-size",
118040
+ "default": "var(--lr-size-2rem)"
116699
118041
  },
116700
118042
  {
116701
118043
  "description": "Minimum vertical scroller size.",
116702
- "name": "--lr-scroller-min-block-size"
118044
+ "name": "--lr-scroller-min-block-size",
118045
+ "default": "var(--lr-size-10rem)"
116703
118046
  }
116704
118047
  ],
116705
118048
  "cssParts": [
@@ -117288,6 +118631,21 @@
117288
118631
  "description": "Width of the static fade at each horizontal scroll edge.",
117289
118632
  "name": "--lr-scroll-fade-size",
117290
118633
  "default": "2rem"
118634
+ },
118635
+ {
118636
+ "description": "Minimum height of the `base` track. Re-set per `size` (`2xs` through `xl`); the `auto` default applies at the unset/`m` size.",
118637
+ "name": "--lr-segmented-track-min-height",
118638
+ "default": "auto"
118639
+ },
118640
+ {
118641
+ "description": "Each segment's padding. Re-set per `size`; this default applies at the unset/`m` size.",
118642
+ "name": "--lr-segmented-segment-padding",
118643
+ "default": "var(--lr-size-0-125rem) var(--lr-space-s)"
118644
+ },
118645
+ {
118646
+ "description": "Each segment's font size. Re-set per `size`; this default applies at the unset/`m` size.",
118647
+ "name": "--lr-segmented-font-size",
118648
+ "default": "var(--lr-font-size-sm)"
117291
118649
  }
117292
118650
  ],
117293
118651
  "cssParts": [
@@ -117774,6 +119132,13 @@
117774
119132
  "kind": "class",
117775
119133
  "description": "`<lr-split>` — resizable panels for dashboard layouts. Direct light-DOM\nchildren are the panels; a divider is auto-inserted between each pair.\n\nOptionally, one pane can opt in to responsive collapse via `collapse`\n(`\"start\"`/`\"end\"`, default `\"none\"` — no behavior change when unset): as\nthe split's own container narrows past `railBreakpoint` that pane clamps\nto a fixed `railWidth`, and past the narrower `floatBreakpoint` it instead\nbecomes an absolutely-positioned overlay \"floating card\" above the other\npane. This component only handles the width-collapse mechanics and\nsignals the current state — via the `collapseState`-derived\n`data-collapse-state` attribute (set on both the host and the collapsing\npanel itself) and the `lr-split-collapse-change` event — it renders no\nicon-only/collapsed UI of its own; slotted content is expected to adapt to\nits own clamped width (e.g. via its own container query).\n\n`collapseState` is a public accessor with force/auto semantics mirroring\n`<lr-app-rail>`'s `mode`: it's normally derived automatically from the\nmeasured container width (via a `ResizeObserver` on `[part=\"base\"]`)\nwhenever it crosses `railBreakpoint`/`floatBreakpoint`, but assigning it a\nconcrete `'wide'`/`'rail'`/`'floating'` value pins it there and stops that\nautomatic tracking — useful for a consumer-driven toggle (e.g. a button\nthat forces `'floating'` regardless of width). Assigning the write-only\n`'auto'` sentinel releases the pin and immediately re-derives the state\nfrom the current measured width, resuming automatic tracking. `'auto'` is\nnever a value this getter returns.\n\nThe `'floating'` state is a hidden-by-default drawer, gated by `open`\n(mirrors `<lr-app-rail>`'s mobile overlay): while `collapseState` is\n`'floating'` and `open` is `false` (the default), the collapsing panel\nrenders nothing — `hidden`, out of the accessibility tree, not just\nvisually hidden — instead of the always-visible overlay card this state\nrendered before `open` existed. Setting `open = true` reveals it as a\nfocus-trapped floating panel with a `[part=\"backdrop\"]` scrim; Escape or a\nbackdrop click set `open` back to `false`. `open` is preserved (not reset)\nwhile `collapseState` isn't `'floating'`, but no drawer chrome renders\nuntil it is again — except that leaving `'floating'` while `open` is\n`true` (a breakpoint crossing back to `'wide'`/`'rail'`, or a forced\nreassignment) also closes it, the same way `<lr-app-rail>` closes its\nmobile overlay when leaving `'mobile'` while open.",
117776
119134
  "name": "LyraSplit",
119135
+ "cssProperties": [
119136
+ {
119137
+ "description": "The `'floating'` drawer scrim's color, applied to `[part=\"backdrop\"]`.",
119138
+ "name": "--lr-split-overlay-color",
119139
+ "default": "var(--lr-color-overlay)"
119140
+ }
119141
+ ],
117777
119142
  "cssParts": [
117778
119143
  {
117779
119144
  "description": "The `'floating'` drawer's scrim. Only rendered while `collapseState === 'floating'` and `open`.",
@@ -117958,7 +119323,7 @@
117958
119323
  "type": {
117959
119324
  "text": "SplitOrientation"
117960
119325
  },
117961
- "description": "The live layout and resize axis after applying `orientationBreakpoint` — identical to\n`orientation` whenever `orientationBreakpoint` is unset. Also reflected as the\n`data-effective-orientation` host attribute (only present while `orientationBreakpoint`\nis set, mirroring `data-collapse-state`'s only-present-while-active contract) so CSS can\ntarget the live axis directly instead of every consumer duplicating this fallback.",
119326
+ "description": "The live layout and resize axis after applying `orientationBreakpoint` — identical to\n`orientation` whenever `orientationBreakpoint` is unset (or set to something that doesn't\nresolve to a length). Also reflected as the `data-effective-orientation` host attribute (only\npresent while `orientationBreakpoint` resolves, mirroring `data-collapse-state`'s\nonly-present-while-active contract) so CSS can\ntarget the live axis directly instead of every consumer duplicating this fallback.",
117962
119327
  "readonly": true
117963
119328
  },
117964
119329
  {
@@ -118107,11 +119472,29 @@
118107
119472
  "kind": "field",
118108
119473
  "name": "orientationBreakpoint",
118109
119474
  "type": {
118110
- "text": "number | undefined"
119475
+ "text": "number | string | undefined"
118111
119476
  },
118112
- "description": "Opt-in inline-size breakpoint (px). Below it, `narrowOrientation` becomes effective.",
119477
+ "description": "Opt-in inline-size breakpoint for this component's *own* measured allocation. Below it,\n`narrowOrientation` becomes effective. Unset by default — the whole responsive-orientation\nfeature (and its `ResizeObserver`) is off, and `effectiveOrientation` just tracks\n`orientation`.\n\nAccepts a bare pixel number (`900`, `orientation-breakpoint=\"900\"` — the original form) or a\nCSS length string: `'900px'`, `'56.25rem'`, `'3em'`. Under the default\n`orientationBreakpointBasis=\"container\"`, `rem` resolves against the *document root*'s\ncomputed font size — the rule a `@container` query follows, not a `@media` query's — and `em`\nagainst this element's own computed font size. The length is re-resolved on every measurement,\nnever cached at first render, so a root font-size change moves the crossing width with no\ninvalidation step. To stay in step with a sibling `@media (max-width: 56.25rem)` rule, use\n`orientationBreakpointBasis=\"viewport\"`, which hands the length to the browser instead; see\nthat property for why the two resolve `rem` differently.\n\nAnything else — `''`, `'auto'`, garbage, a non-finite number, and deliberately `%`/`vw`/`vh`/\n`calc()` (which would mix reference boxes against an element-relative measurement) — behaves\nexactly as unset. Set `orientationBreakpointBasis=\"viewport\"` for a viewport-relative\nbreakpoint instead.",
118113
119478
  "attribute": "orientation-breakpoint"
118114
119479
  },
119480
+ {
119481
+ "kind": "field",
119482
+ "name": "orientationBreakpointBasis",
119483
+ "type": {
119484
+ "text": "OrientationBreakpointBasis"
119485
+ },
119486
+ "default": "'container'",
119487
+ "description": "Which box `orientationBreakpoint` measures. `'container'` (the default) observes this\ncomponent's own `[part=\"base\"]` inline size via `ResizeObserver`, comparing strictly `<`.\n`'viewport'` instead evaluates `matchMedia('(max-width: <breakpoint>)')`, which is inclusive\n(`<=`) — native `max-width` semantics, deliberately, so the crossing point matches a CSS\n`@media` rule authored with the same length exactly.\n\nUse `'viewport'` when two siblings in one row must flip together at a shared breakpoint: a row\nthat stacks via a pure-CSS `@media` rule makes each sibling's own width non-monotonic across\nthe transition, so no self-measured threshold can express it. `'viewport'` also lets the\nbrowser resolve a `rem` breakpoint with real `@media` semantics, keeping it in step with such\na rule across browser zoom and user font-size preferences.",
119488
+ "attribute": "orientation-breakpoint-basis",
119489
+ "reflects": true
119490
+ },
119491
+ {
119492
+ "kind": "field",
119493
+ "name": "orientationBreakpoints",
119494
+ "privacy": "private",
119495
+ "default": "new OrientationBreakpointController(this, () => this.updateEffectiveOrientation(this.measuredInlineSize, true), )",
119496
+ "description": "Owns breakpoint resolution, basis selection, and the viewport `MediaQueryList` lifecycle\n(including teardown on disconnect) — see `OrientationBreakpointController`."
119497
+ },
118115
119498
  {
118116
119499
  "kind": "field",
118117
119500
  "name": "overlayActive",
@@ -118187,6 +119570,16 @@
118187
119570
  },
118188
119571
  "privacy": "private"
118189
119572
  },
119573
+ {
119574
+ "kind": "field",
119575
+ "name": "resolvedOrientationBreakpoint",
119576
+ "type": {
119577
+ "text": "number | undefined"
119578
+ },
119579
+ "privacy": "private",
119580
+ "description": "`orientationBreakpoint` resolved to pixels, or `undefined` when it's unset or unresolvable\n(see the property's own doc). Deliberately a getter, not a cached field: every read\nre-resolves, so a `rem` breakpoint tracks the live root font size — caching it at first render\nwould silently freeze the crossing width and defeat the whole point of accepting `rem`. `this`\nis passed as the `em` reference element.\n\nEvery consumer of the breakpoint gates on *this* rather than on `orientationBreakpoint != null`\n— an unresolvable value (`\"abc\"`, `\"80vw\"`) must behave as fully unset, otherwise it would arm\nthe `ResizeObserver` and publish a `data-effective-orientation` marker for a threshold that can\nnever be crossed.",
119581
+ "readonly": true
119582
+ },
118190
119583
  {
118191
119584
  "kind": "field",
118192
119585
  "name": "responsiveObservationEnabled",
@@ -118194,7 +119587,7 @@
118194
119587
  "text": "boolean"
118195
119588
  },
118196
119589
  "privacy": "private",
118197
- "description": "Whether the shared collapse/orientation `ResizeObserver` needs to be armed at all — true\nwhen either responsive feature (`collapse` or `orientationBreakpoint`) is opted into, since\nboth are driven off the same measured `[part=\"base\"]` width (see `armCollapseObserver()`).",
119590
+ "description": "Whether the shared collapse/orientation `ResizeObserver` needs to be armed at all — true when\neither responsive feature (`collapse` or a *container-basis* `orientationBreakpoint`) is opted\ninto, since both are driven off the same measured `[part=\"base\"]` width (see\n`armCollapseObserver()`). A viewport-basis breakpoint is driven by `matchMedia` instead and\ncontributes no arming of its own.",
118198
119591
  "readonly": true
118199
119592
  },
118200
119593
  {
@@ -118833,7 +120226,7 @@
118833
120226
  }
118834
120227
  }
118835
120228
  ],
118836
- "description": "Classifies a measured inline size into the effective resize/layout axis and, only on an\nactual transition, applies it — mirrors `updateCollapseState()`'s shape. `shouldEmit` is\nfalse for the property-driven re-derivation in `willUpdate()` (no fresh measurement, just\nre-mapping the last known width) and true for the shared `ResizeObserver` callback's fresh\nmeasurement, matching `applyCollapseStateChange()`'s only-fire-on-a-real-transition contract\nfor `lr-split-orientation-change`. Safe to call `requestUpdate()` unconditionally here even\nfrom the mid-cycle `willUpdate()` path — see `willUpdate()`'s own doc comment for why that's\nthe documented exception (unlike `updated()`/`firstUpdated()`, `willUpdate()` runs before\nLit clears its pending-update flag, so this can't schedule a redundant second update)."
120229
+ "description": "Classifies a measured inline size into the effective resize/layout axis and, only on an\nactual transition, applies it — mirrors `updateCollapseState()`'s shape. `shouldEmit` is\ntrue only when the caller is acting on a *fresh* read: the shared `ResizeObserver`\ncallback's own fresh measurement (container basis), or the `willUpdate()` caller when basis\nis `'viewport'` (where `configure()` just re-armed `matchMedia` synchronously, so `isBelow()`\nis already live rather than a stale snapshot). It's false for the container-basis\nproperty-driven re-derivation in `willUpdate()`, which only re-maps the last known\n`measuredInlineSize` and defers the emit to the `ResizeObserver`'s next fresh callback.\nMatches `applyCollapseStateChange()`'s only-fire-on-a-real-transition contract for\n`lr-split-orientation-change`. Safe to call `requestUpdate()` unconditionally here even from\nthe mid-cycle `willUpdate()` path — see `willUpdate()`'s own doc comment for why that's the\ndocumented exception (unlike `updated()`/`firstUpdated()`, `willUpdate()` runs before Lit\nclears its pending-update flag, so this can't schedule a redundant second update)."
118837
120230
  },
118838
120231
  {
118839
120232
  "kind": "method",
@@ -118949,11 +120342,20 @@
118949
120342
  {
118950
120343
  "name": "orientation-breakpoint",
118951
120344
  "type": {
118952
- "text": "number | undefined"
120345
+ "text": "number | string | undefined"
118953
120346
  },
118954
- "description": "Opt-in inline-size breakpoint (px). Below it, `narrowOrientation` becomes effective.",
120347
+ "description": "Opt-in inline-size breakpoint for this component's *own* measured allocation. Below it,\n`narrowOrientation` becomes effective. Unset by default — the whole responsive-orientation\nfeature (and its `ResizeObserver`) is off, and `effectiveOrientation` just tracks\n`orientation`.\n\nAccepts a bare pixel number (`900`, `orientation-breakpoint=\"900\"` — the original form) or a\nCSS length string: `'900px'`, `'56.25rem'`, `'3em'`. Under the default\n`orientationBreakpointBasis=\"container\"`, `rem` resolves against the *document root*'s\ncomputed font size — the rule a `@container` query follows, not a `@media` query's — and `em`\nagainst this element's own computed font size. The length is re-resolved on every measurement,\nnever cached at first render, so a root font-size change moves the crossing width with no\ninvalidation step. To stay in step with a sibling `@media (max-width: 56.25rem)` rule, use\n`orientationBreakpointBasis=\"viewport\"`, which hands the length to the browser instead; see\nthat property for why the two resolve `rem` differently.\n\nAnything else — `''`, `'auto'`, garbage, a non-finite number, and deliberately `%`/`vw`/`vh`/\n`calc()` (which would mix reference boxes against an element-relative measurement) — behaves\nexactly as unset. Set `orientationBreakpointBasis=\"viewport\"` for a viewport-relative\nbreakpoint instead.",
118955
120348
  "fieldName": "orientationBreakpoint"
118956
120349
  },
120350
+ {
120351
+ "name": "orientation-breakpoint-basis",
120352
+ "type": {
120353
+ "text": "OrientationBreakpointBasis"
120354
+ },
120355
+ "default": "'container'",
120356
+ "description": "Which box `orientationBreakpoint` measures. `'container'` (the default) observes this\ncomponent's own `[part=\"base\"]` inline size via `ResizeObserver`, comparing strictly `<`.\n`'viewport'` instead evaluates `matchMedia('(max-width: <breakpoint>)')`, which is inclusive\n(`<=`) — native `max-width` semantics, deliberately, so the crossing point matches a CSS\n`@media` rule authored with the same length exactly.\n\nUse `'viewport'` when two siblings in one row must flip together at a shared breakpoint: a row\nthat stacks via a pure-CSS `@media` rule makes each sibling's own width non-monotonic across\nthe transition, so no self-measured threshold can express it. `'viewport'` also lets the\nbrowser resolve a `rem` breakpoint with real `@media` semantics, keeping it in step with such\na rule across browser zoom and user font-size preferences.",
120357
+ "fieldName": "orientationBreakpointBasis"
120358
+ },
118957
120359
  {
118958
120360
  "name": "rail-breakpoint",
118959
120361
  "type": {
@@ -119028,7 +120430,7 @@
119028
120430
  "declarations": [
119029
120431
  {
119030
120432
  "kind": "class",
119031
- "description": "`<lr-stepper>` — ordered multi-step wizard/form navigation: label + index per step,\ncurrent/completed/locked/error state, click-to-jump. First-party invention (no Web Awesome\nequivalent). Fully data-driven and controlled, like `lr-table`'s `columns`/`rows` -- it never\nmutates `steps` itself; a click or Enter/Space on a non-disabled step fires a cancelable\n`lr-step-select`, and the host decides whether/how `steps` changes in response (mirroring\n`lr-dialog-close`'s cancelable-event convention).\n\nAn opt-in `orientationBreakpoint` (unset by default -- no behavior change) makes the effective\nlayout/navigation axis respond to the stepper's own measured inline size instead of only the\nauthored `orientation`: below that width (px, measured on `[part=\"base\"]` via `ResizeObserver`),\n`narrowOrientation` becomes effective; at/above it, `orientation` does. This mirrors `<lr-split>`'s\nidentically-named `orientationBreakpoint`/`narrowOrientation` contract -- the observation boundary\nis the component's own allocation, not the viewport, so a stepper placed in a narrow split pane or\ndialog still responds correctly even in a wide window. The effective axis is exposed via the\n`effectiveOrientation` getter, a `data-effective-orientation` host attribute (only present while\n`orientationBreakpoint` is set), and `lr-stepper-orientation-change`.",
120433
+ "description": "`<lr-stepper>` — ordered multi-step wizard/form navigation: label + index per step,\ncurrent/completed/locked/error state, click-to-jump. First-party invention (no Web Awesome\nequivalent). Fully data-driven and controlled, like `lr-table`'s `columns`/`rows` -- it never\nmutates `steps` itself; a click or Enter/Space on a non-disabled step fires a cancelable\n`lr-step-select`, and the host decides whether/how `steps` changes in response (mirroring\n`lr-dialog-close`'s cancelable-event convention).\n\nAn opt-in `orientationBreakpoint` (unset by default -- no behavior change) makes the effective\nlayout/navigation axis respond to a measured inline size instead of only the authored\n`orientation`: below that width (a pixel number or a `px`/`rem`/`em` CSS length), `narrowOrientation`\nbecomes effective; at/above it, `orientation` does. This mirrors `<lr-split>`'s identically-named\n`orientationBreakpoint`/`narrowOrientation`/`orientationBreakpointBasis` contract. Under the default\n`orientationBreakpointBasis=\"container\"` the breakpoint is measured on this stepper's own\n`[part=\"base\"]` inline size via `ResizeObserver`, so a stepper placed in a narrow split pane or\ndialog still responds correctly even in a wide window; `orientationBreakpointBasis=\"viewport\"`\ninstead evaluates `matchMedia('(max-width: <breakpoint>)')`, needed when the stepper has a fixed\nwidth in a row that stacks at a shared breakpoint. The effective axis is exposed via the\n`effectiveOrientation` getter, a `data-effective-orientation` host attribute (only present while\nthe breakpoint feature is active), and `lr-stepper-orientation-change`.",
119032
120434
  "name": "LyraStepper",
119033
120435
  "cssParts": [
119034
120436
  {
@@ -119188,11 +120590,29 @@
119188
120590
  "kind": "field",
119189
120591
  "name": "orientationBreakpoint",
119190
120592
  "type": {
119191
- "text": "number | undefined"
120593
+ "text": "number | string | undefined"
119192
120594
  },
119193
- "description": "Opt-in inline-size breakpoint (px, measured on `[part=\"base\"]`). Below it, `narrowOrientation`\nbecomes effective instead of `orientation`. Unset (the default): no behavior change, the\nauthored `orientation` always applies.",
120595
+ "description": "Opt-in inline-size breakpoint, measured on `[part=\"base\"]`. Below it, `narrowOrientation`\nbecomes effective instead of `orientation`. Unset (the default): no behavior change, the\nauthored `orientation` always applies.\n\nAccepts a bare pixel number (`500`, `'500'`), an explicit `px` length (`'500px'`), a `rem`\nlength (`'31.25rem'`) or an `em` length (`'3em'`). Under the default\n`orientationBreakpointBasis=\"container\"`, `rem` resolves against the **document root**'s\ncomputed font size -- the rule a `@container` query follows, and *not* a `@media` query's --\nwhile `em` resolves against this element's own computed font size. The length is re-resolved\non every measurement, never cached, so browser zoom, a user font-size preference or an app\nbase-size token change are picked up with no invalidation step. To stay in step with a\nsibling `@media (max-width: …rem)` rule, use `orientationBreakpointBasis=\"viewport\"`, which\nhands the length to the browser instead; see that property for why the two differ.\n\nAny other value -- `%`, `vw`, `calc()`, `'auto'`, an unparseable string -- behaves exactly as\nunset (no responsive observation at all), rather than as an armed breakpoint that can never\nbe crossed. Set `orientationBreakpointBasis=\"viewport\"` for a viewport-relative breakpoint\ninstead.",
119194
120596
  "attribute": "orientation-breakpoint"
119195
120597
  },
120598
+ {
120599
+ "kind": "field",
120600
+ "name": "orientationBreakpointBasis",
120601
+ "type": {
120602
+ "text": "OrientationBreakpointBasis"
120603
+ },
120604
+ "default": "'container'",
120605
+ "description": "Which box `orientationBreakpoint` measures. `'container'` (the default) observes this\nstepper's own `[part=\"base\"]` inline size via `ResizeObserver`, comparing strictly `<`.\n`'viewport'` instead evaluates `matchMedia('(max-width: <breakpoint>)')`, which is inclusive\n(`<=`) -- native `max-width` semantics, deliberately, so the crossing point matches a CSS\n`@media` rule authored with the same length exactly.\n\nA stepper given a fixed width in a row layout cannot react to that row stacking by measuring\nitself -- its own width never changes. That case requires `'viewport'`, which also lets the\nbrowser resolve a `rem` breakpoint with real `@media` semantics.",
120606
+ "attribute": "orientation-breakpoint-basis",
120607
+ "reflects": true
120608
+ },
120609
+ {
120610
+ "kind": "field",
120611
+ "name": "orientationBreakpoints",
120612
+ "privacy": "private",
120613
+ "default": "new OrientationBreakpointController(this, () => this.updateEffectiveOrientation(this.baseEl?.clientWidth ?? Number.POSITIVE_INFINITY, true), )",
120614
+ "description": "Owns breakpoint resolution, basis selection, and the viewport `MediaQueryList` lifecycle\n(including teardown on disconnect) -- see `OrientationBreakpointController`."
120615
+ },
119196
120616
  {
119197
120617
  "kind": "field",
119198
120618
  "name": "pendingLoadController",
@@ -119213,6 +120633,16 @@
119213
120633
  },
119214
120634
  "privacy": "private"
119215
120635
  },
120636
+ {
120637
+ "kind": "field",
120638
+ "name": "resolvedOrientationBreakpoint",
120639
+ "type": {
120640
+ "text": "number | undefined"
120641
+ },
120642
+ "privacy": "private",
120643
+ "description": "`orientationBreakpoint` in pixels, or `undefined` when unset *or* unparseable -- meaningful\nonly under `orientationBreakpointBasis=\"container\"`, where this controller owns the crossing\ncomparison. Deliberately re-resolved per call (never cached): a `rem` breakpoint has to track\nthe live root font size. Never use this to decide whether the feature is on -- under\n`\"viewport\"` basis it's not the number actually in effect; use `orientationBreakpoints.active`\nfor that (see `OrientationBreakpointController`'s class doc).",
120644
+ "readonly": true
120645
+ },
119216
120646
  {
119217
120647
  "kind": "field",
119218
120648
  "name": "steps",
@@ -119503,7 +120933,7 @@
119503
120933
  }
119504
120934
  }
119505
120935
  ],
119506
- "description": "Classifies a measured inline size into the effective layout/navigation axis and, only on an\nactual transition, applies it -- mirrors `<lr-split>`'s identically-shaped\n`updateEffectiveOrientation()`. `emitOnChange` is false for the property-driven re-derivation\nin `willUpdate()` and true for the `ResizeObserver` callback's fresh measurement."
120936
+ "description": "Classifies a measured inline size into the effective layout/navigation axis and, only on an\nactual transition, applies it -- mirrors `<lr-split>`'s identically-shaped\n`updateEffectiveOrientation()`. `emitOnChange` is false for the property-driven re-derivation\nin `willUpdate()` (except a genuine viewport-basis transition after the first update -- see\n`willUpdate()`'s own doc comment) and true for the `ResizeObserver`/`matchMedia` callbacks'\nown fresh measurements."
119507
120937
  }
119508
120938
  ],
119509
120939
  "events": [
@@ -119560,10 +120990,19 @@
119560
120990
  {
119561
120991
  "name": "orientation-breakpoint",
119562
120992
  "type": {
119563
- "text": "number | undefined"
120993
+ "text": "number | string | undefined"
119564
120994
  },
119565
- "description": "Opt-in inline-size breakpoint (px, measured on `[part=\"base\"]`). Below it, `narrowOrientation`\nbecomes effective instead of `orientation`. Unset (the default): no behavior change, the\nauthored `orientation` always applies.",
120995
+ "description": "Opt-in inline-size breakpoint, measured on `[part=\"base\"]`. Below it, `narrowOrientation`\nbecomes effective instead of `orientation`. Unset (the default): no behavior change, the\nauthored `orientation` always applies.\n\nAccepts a bare pixel number (`500`, `'500'`), an explicit `px` length (`'500px'`), a `rem`\nlength (`'31.25rem'`) or an `em` length (`'3em'`). Under the default\n`orientationBreakpointBasis=\"container\"`, `rem` resolves against the **document root**'s\ncomputed font size -- the rule a `@container` query follows, and *not* a `@media` query's --\nwhile `em` resolves against this element's own computed font size. The length is re-resolved\non every measurement, never cached, so browser zoom, a user font-size preference or an app\nbase-size token change are picked up with no invalidation step. To stay in step with a\nsibling `@media (max-width: …rem)` rule, use `orientationBreakpointBasis=\"viewport\"`, which\nhands the length to the browser instead; see that property for why the two differ.\n\nAny other value -- `%`, `vw`, `calc()`, `'auto'`, an unparseable string -- behaves exactly as\nunset (no responsive observation at all), rather than as an armed breakpoint that can never\nbe crossed. Set `orientationBreakpointBasis=\"viewport\"` for a viewport-relative breakpoint\ninstead.",
119566
120996
  "fieldName": "orientationBreakpoint"
120997
+ },
120998
+ {
120999
+ "name": "orientation-breakpoint-basis",
121000
+ "type": {
121001
+ "text": "OrientationBreakpointBasis"
121002
+ },
121003
+ "default": "'container'",
121004
+ "description": "Which box `orientationBreakpoint` measures. `'container'` (the default) observes this\nstepper's own `[part=\"base\"]` inline size via `ResizeObserver`, comparing strictly `<`.\n`'viewport'` instead evaluates `matchMedia('(max-width: <breakpoint>)')`, which is inclusive\n(`<=`) -- native `max-width` semantics, deliberately, so the crossing point matches a CSS\n`@media` rule authored with the same length exactly.\n\nA stepper given a fixed width in a row layout cannot react to that row stacking by measuring\nitself -- its own width never changes. That case requires `'viewport'`, which also lets the\nbrowser resolve a `rem` breakpoint with real `@media` semantics.",
121005
+ "fieldName": "orientationBreakpointBasis"
119567
121006
  }
119568
121007
  ],
119569
121008
  "superclass": {
@@ -120248,6 +121687,13 @@
120248
121687
  "kind": "class",
120249
121688
  "description": "`<lr-virtual-list>` — a generic windowed/virtualized list host. Renders\nonly the items within the current viewport (plus `overscan` padding rows\non each side) as real DOM, regardless of how large `items` is, so a\nmulti-thousand-row chat history sidebar or long message thread stays cheap\nto scroll.\n\nContent is entirely caller-supplied: `renderItem(item, index)` returns\nwhatever `lit-html` value should represent that row (typically a\n`TemplateResult`), and `keyFunction(item, index)` gives it a stable\nidentity for `repeat()`'s DOM-reconciliation key, so scroll position and\nany per-row state (e.g. an `<audio>` element's playback position) survive\nan `items` mutation instead of every row remounting from scratch.\n\n**Windowing math.** Every row — in both `row-height` modes — is positioned\nby a `transform: translateY(offset)` computed from a single cumulative\n`offsets` array (`offsets[i]` = the pixel top of row `i`), rather than by\npage flow. This is what lets only a small DOM window exist while the\nscrollbar still reflects the *true* total content height:\n- **`row-height=\"auto\"` (default).** Each currently-rendered row is\n watched by a `ResizeObserver`; its real height lands in a per-key\n `Map`, and any row not yet measured contributes `DEFAULT_ROW_ESTIMATE_PX`\n to the offsets array until it has been. `offsets` is *not* the same\n thing as a page-count-based `padding-top`/`padding-bottom` spacer pair —\n that approach reflows every unmeasured row's position on every new\n measurement, which is exactly what per-row transform offsets avoid: only\n the rows *after* a newly-measured one shift, and even that shift is a\n cheap style recompute, not a layout-affecting padding change.\n- **Fixed numeric `row-height`.** No measurement needed — `offsets[i]` is\n just `i * rowHeightPx`, computed by the exact same cumulative-array code\n path (a dedicated \"single spacer + start-index\" special case was\n considered and would work too, but reusing one code path for both modes\n avoids maintaining two parallel rendering strategies for a difference\n that's otherwise just \"how is row *i*'s height looked up\").\n\nThe `offsets` array is rebuilt only when `items`, `row-height`, or\n`keyFunction` change, or a row's measured height changes -- not on every\nupdate, so a pure scroll-position tick (potentially every rAF while\nscrolling) only re-runs the cheap range/visibility math in\n`computeRange()`, never the `O(n)` offsets rebuild (which, in\n`row-height=\"auto\"` mode, also means a `keyFunction` call per item). For\nthe list sizes this component is meant for (a scrollable history sidebar,\nrealistically hundreds to a few thousand rows) that rebuild is a trivial\n`O(n)` arithmetic loop even when it does run; it is *not* the right\napproach for a hundred-thousand-row list without further work (e.g. a\nFenwick/segment tree for `O(log n)` offset queries+updates), which is out\nof scope here.\n\n**Accessibility.** The scroll container is `role=\"list\"` and each rendered\nrow is `role=\"listitem\"`, deliberately *not* `listbox`/`option` — this\ncomponent only provides windowing, not the roving-tabindex/\n`aria-activedescendant` keyboard-interaction contract ARIA requires\nalongside a real `listbox`. A consumer that wants full single-select\nlistbox semantics on top of this should compose that behavior itself (see\n`<lr-select>`'s pattern), the same way this component's `active-id`\nonly *scrolls* the matching row into view and marks it `aria-current` —\nit never claims to be a selection widget. `aria-setsize`/`aria-posinset`\nare computed from the row's real index in the full `items` array (not its\nposition among the currently-rendered DOM window), so a screen reader\nstill announces e.g. \"item 12 of 340\" correctly. `[part=\"base\"]` itself\ncarries `tabindex=\"0\"` — `renderItem`'s content is caller-supplied and not\nguaranteed to contain a focusable element, and a scrollable region with no\nfocusable content of its own is otherwise unreachable by keyboard (native\narrow/Page Up/Page Down scrolling included).\n\n**Grouping.** When supplied, `groups` renders a labeled group marker at the\ncorresponding `startIndex`. Group markers are positioned independently of\nthe row window, so they remain available when the first row in a group is\noutside the current overscanned range.\n\n**Programmatic scrolling.** `scrollToIndex()` is the public counterpart to `active-id`'s automatic\nscroll-into-view -- used by `<lr-chat-viewport>`'s virtual mode and any other host that needs to\nscroll to a specific row without also changing which row is \"active.\"\n\n**`item-role=\"row\"` mode.** Additive to the default `'listitem'` mapping above: `[part=\"base\"]`\nbecomes `role=\"rowgroup\"`, `[part=\"spacer\"]` becomes `role=\"presentation\"`, and each row becomes\n`role=\"row\"` with `aria-rowindex` (the row's 1-based index plus `row-index-offset`) instead of\n`aria-setsize`/`aria-posinset`. For a consumer composing its own `role=\"table\"` wrapper and header\nrow around this component (see `<lr-dataset-viewer>`), where `row-index-offset=\"1\"` accounts for\nthat external header row occupying `aria-rowindex=\"1\"`.",
120250
121689
  "name": "LyraVirtualList",
121690
+ "cssProperties": [
121691
+ {
121692
+ "description": "The scroll viewport's height. A virtualized list needs a bounded scroll extent, so this ships a default rather than collapsing to zero when a caller does not size the host.",
121693
+ "name": "--lr-virtual-list-height",
121694
+ "default": "var(--lr-size-24rem)"
121695
+ }
121696
+ ],
120251
121697
  "cssParts": [
120252
121698
  {
120253
121699
  "description": "The scrollable container (`role=\"list\"`).",
@@ -121286,13 +122732,30 @@
121286
122732
  "kind": "class",
121287
122733
  "description": "`<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.",
121288
122734
  "name": "LyraWidget",
122735
+ "cssProperties": [
122736
+ {
122737
+ "description": "The fullscreen scrim's color, applied to `[part=\"backdrop\"]`.",
122738
+ "name": "--lr-widget-overlay-color",
122739
+ "default": "var(--lr-color-overlay)"
122740
+ },
122741
+ {
122742
+ "description": "The `inset` applied to `[part=\"base\"]` while `fullscreen`. Also set inline from the `fullscreen-inset` attribute.",
122743
+ "name": "--lr-widget-fullscreen-inset",
122744
+ "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))"
122745
+ },
122746
+ {
122747
+ "description": "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 (falling back to `fullscreen-inset`). `fullscreen-inset` overrides the default `var(--lr-space-l)` inset applied to `[part=\"base\"]` and `[part=\"backdrop\"]` while fullscreen (e.g. `\"0 0 0 240px\"` to leave a persistent sidebar visible). `compact` tightens header/body padding — same convention as `lr-empty`'s `compact`.",
122748
+ "name": "--lr-widget-backdrop-inset",
122749
+ "default": "var(--lr-widget-fullscreen-inset)"
122750
+ }
122751
+ ],
121289
122752
  "cssParts": [
121290
122753
  {
121291
122754
  "description": "The wrapper around the `actions` slot.",
121292
122755
  "name": "actions"
121293
122756
  },
121294
122757
  {
121295
- "description": "The fullscreen scrim behind the panel. `fullscreen-inset` overrides the default `var(--lr-space-l)` inset applied to `[part=\"base\"]` and `[part=\"backdrop\"]` while fullscreen (e.g. `\"0 0 0 240px\"` to leave a persistent sidebar visible). `compact` tightens header/body padding — same convention as `lr-empty`'s `compact`.",
122758
+ "description": "The fullscreen scrim behind the panel.",
121296
122759
  "name": "backdrop"
121297
122760
  },
121298
122761
  {
@@ -123643,6 +125106,36 @@
123643
125106
  "description": "Duration of one indeterminate upload-spinner rotation. The ambient loop stops under reduced motion.",
123644
125107
  "name": "--lr-attachment-chip-spinner-duration",
123645
125108
  "default": "0.8s"
125109
+ },
125110
+ {
125111
+ "description": "Accent color used for the status text, spinner, and progress fill. Auto-swapped per `status` (`uploading`/`error`/`done`); the default is the neutral `pending` tone.",
125112
+ "name": "--lr-attachment-chip-accent",
125113
+ "default": "var(--lr-color-text-quiet)"
125114
+ },
125115
+ {
125116
+ "description": "Chip background, auto-swapped per `status` to that status's `-quiet` tint.",
125117
+ "name": "--lr-attachment-chip-bg",
125118
+ "default": "var(--lr-color-surface)"
125119
+ },
125120
+ {
125121
+ "description": "Chip border color. Every non-`pending` `status` sets it to `transparent`.",
125122
+ "name": "--lr-attachment-chip-border",
125123
+ "default": "var(--lr-color-border)"
125124
+ },
125125
+ {
125126
+ "description": "Thumbnail size while `compact`, rethemeable independently of `--lr-icon-button-size`.",
125127
+ "name": "--lr-attachment-chip-compact-thumbnail-size",
125128
+ "default": "var(--lr-size-1-75rem)"
125129
+ },
125130
+ {
125131
+ "description": "Font size of `[part=\"base\"]` while `compact`.",
125132
+ "name": "--lr-attachment-chip-compact-font-size",
125133
+ "default": "var(--lr-font-size-xs)"
125134
+ },
125135
+ {
125136
+ "description": "Gap between the chip's parts while `compact`.",
125137
+ "name": "--lr-attachment-chip-compact-gap",
125138
+ "default": "var(--lr-size-0-25rem)"
123646
125139
  }
123647
125140
  ],
123648
125141
  "cssParts": [
@@ -126788,6 +128281,23 @@
126788
128281
  "kind": "class",
126789
128282
  "description": "`<lr-avatar>` — a small, fixed-size identity marker: default-slotted icon/glyph content, an\nimage, or an initials fallback, in that priority order (whichever's set takes over from the\nnext). First-party invention (no Web Awesome equivalent) -- purely presentational, no built-in\ninteractivity; a consumer wraps it in their own `<button>`/`<lr-menu>` trigger for a\nuser-menu affordance.",
126790
128283
  "name": "LyraAvatar",
128284
+ "cssProperties": [
128285
+ {
128286
+ "description": "Inline and block size of the container. `size` swaps it to `var(--lr-size-1-5rem)` (`sm`) or `var(--lr-size-2-5rem)` (`lg`).",
128287
+ "name": "--lr-avatar-size",
128288
+ "default": "var(--lr-size-2rem)"
128289
+ },
128290
+ {
128291
+ "description": "Container background. Each non-neutral `tone` sets it to that tone's `-quiet` tint.",
128292
+ "name": "--lr-avatar-bg",
128293
+ "default": "var(--lr-color-border)"
128294
+ },
128295
+ {
128296
+ "description": "Initials/glyph color. Each non-neutral `tone` sets it to that tone's loud color.",
128297
+ "name": "--lr-avatar-color",
128298
+ "default": "var(--lr-color-text)"
128299
+ }
128300
+ ],
126791
128301
  "cssParts": [
126792
128302
  {
126793
128303
  "description": "The outer circle/square container.",
@@ -132284,6 +133794,13 @@
132284
133794
  "kind": "class",
132285
133795
  "description": "`<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. `safeMediaSrc()` and\n`safeLinkHref()` share a platform-URL-based validator; their sink-specific\nallowlists 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-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-open`.\n\n**Navigation.** This component never navigates on its own for `image`/\n`video` — activating the card only fires `lr-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-open` 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**Accessible action name.** The host `aria-label` maps to\n`accessibleLabel` and overrides the filename/alt/per-kind action name on\nwhichever internal element is actionable for the resolved kind. The name\nis therefore applied directly to the button or link across the shadow\nboundary; it does not replace the image alt text or the video control's\nown label.",
132286
133796
  "name": "LyraMediaCard",
133797
+ "cssProperties": [
133798
+ {
133799
+ "description": "Cap on the block size of the `<img>`/`<video>` in `[part=\"media\"]`.",
133800
+ "name": "--lr-media-card-max-height",
133801
+ "default": "var(--lr-size-20rem)"
133802
+ }
133803
+ ],
132287
133804
  "cssParts": [
132288
133805
  {
132289
133806
  "description": "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.",
@@ -132971,6 +134488,13 @@
132971
134488
  "kind": "class",
132972
134489
  "description": "`<lr-playback>` — steps an index through `[0, length)` on a fixed\ninterval (play/pause), the common building block behind ad-hoc\nplay-timers in time-series dashboards.",
132973
134490
  "name": "LyraPlayback",
134491
+ "cssProperties": [
134492
+ {
134493
+ "description": "Font size of the play/pause glyph, derived from the shared icon-button hit-target size.",
134494
+ "name": "--lr-playback-icon-size",
134495
+ "default": "calc(var(--lr-icon-button-size) * 0.35)"
134496
+ }
134497
+ ],
132974
134498
  "cssParts": [
132975
134499
  {
132976
134500
  "description": "The playback controls wrapper.",
@@ -134385,6 +135909,11 @@
134385
135909
  {
134386
135910
  "description": "Minimum viewport block size.",
134387
135911
  "name": "--lr-zoomable-frame-min-block-size"
135912
+ },
135913
+ {
135914
+ "description": "The scale factor applied to `[part=\"content\"]`. Written by the component itself on every render from the current `zoom`, so it is a read-out rather than a consumer knob; set the `zoom` property instead.",
135915
+ "name": "--lr-zoomable-frame-zoom",
135916
+ "default": "1"
134388
135917
  }
134389
135918
  ],
134390
135919
  "cssParts": [
@@ -134989,6 +136518,23 @@
134989
136518
  "kind": "class",
134990
136519
  "description": "`<lr-badge>` — a compact status label.",
134991
136520
  "name": "LyraBadge",
136521
+ "cssProperties": [
136522
+ {
136523
+ "description": "The badge's background. Each non-neutral `variant` sets it to that variant's `-quiet` tint.",
136524
+ "name": "--lr-badge-background",
136525
+ "default": "var(--lr-color-surface)"
136526
+ },
136527
+ {
136528
+ "description": "The badge's border color. Each non-neutral `variant` sets it to that variant's loud color.",
136529
+ "name": "--lr-badge-border",
136530
+ "default": "var(--lr-color-border)"
136531
+ },
136532
+ {
136533
+ "description": "The badge's text color. Each non-neutral `variant` sets it to that variant's loud color.",
136534
+ "name": "--lr-badge-color",
136535
+ "default": "var(--lr-color-text)"
136536
+ }
136537
+ ],
134992
136538
  "cssParts": [
134993
136539
  {
134994
136540
  "description": "The badge surface.",
@@ -135397,6 +136943,35 @@
135397
136943
  }
135398
136944
  }
135399
136945
  ],
136946
+ "cssProperties": [
136947
+ {
136948
+ "description": "The badge's background. Each non-neutral `variant` sets it to that variant's `-quiet` tint.",
136949
+ "name": "--lr-badge-background",
136950
+ "default": "var(--lr-color-surface)",
136951
+ "inheritedFrom": {
136952
+ "name": "LyraBadge",
136953
+ "module": "src/components/overlays/badge/badge.class.ts"
136954
+ }
136955
+ },
136956
+ {
136957
+ "description": "The badge's border color. Each non-neutral `variant` sets it to that variant's loud color.",
136958
+ "name": "--lr-badge-border",
136959
+ "default": "var(--lr-color-border)",
136960
+ "inheritedFrom": {
136961
+ "name": "LyraBadge",
136962
+ "module": "src/components/overlays/badge/badge.class.ts"
136963
+ }
136964
+ },
136965
+ {
136966
+ "description": "The badge's text color. Each non-neutral `variant` sets it to that variant's loud color.",
136967
+ "name": "--lr-badge-color",
136968
+ "default": "var(--lr-color-text)",
136969
+ "inheritedFrom": {
136970
+ "name": "LyraBadge",
136971
+ "module": "src/components/overlays/badge/badge.class.ts"
136972
+ }
136973
+ }
136974
+ ],
135400
136975
  "attributes": [
135401
136976
  {
135402
136977
  "name": "locale",
@@ -135769,6 +137344,23 @@
135769
137344
  "kind": "class",
135770
137345
  "description": "`<lr-callout>` — an inline message surface for status, warning, and error content.\nSet `inline` for lightweight reactive status/error text: it removes the panel chrome while\npreserving the semantic role, optional leading icon, and close action.",
135771
137346
  "name": "LyraCallout",
137347
+ "cssProperties": [
137348
+ {
137349
+ "description": "The callout surface's background. Each non-neutral `variant` sets it to that variant's `-quiet` tint.",
137350
+ "name": "--lr-callout-background",
137351
+ "default": "var(--lr-color-surface)"
137352
+ },
137353
+ {
137354
+ "description": "The callout surface's border color. Each non-neutral `variant` sets it to that variant's loud color.",
137355
+ "name": "--lr-callout-border",
137356
+ "default": "var(--lr-color-border)"
137357
+ },
137358
+ {
137359
+ "description": "The callout's text color. Each non-neutral `variant` sets it to that variant's loud color.",
137360
+ "name": "--lr-callout-color",
137361
+ "default": "var(--lr-color-text)"
137362
+ }
137363
+ ],
135772
137364
  "cssParts": [
135773
137365
  {
135774
137366
  "description": "The callout surface.",
@@ -136754,10 +138346,55 @@
136754
138346
  "description": "`<lr-chip>` — a small, content-agnostic pill for a short label: a tag, an\nactive-filter/scope indicator, etc. Distinct from `<lr-attachment-chip>`\n(specifically file-shaped, with a thumbnail/size/upload-progress) — this\none carries no domain assumptions at all, just a label and an optional\nleading icon/dot.\n\n`tone` tints the whole pill using the same loud-color-on-quiet-tint\nconvention `<lr-tool-call-chip>`/`<lr-citation-badge>` already\nestablish for status coloring: background is the tone's `-quiet` tint,\ntext/icon is the tone's loud color. `neutral` (the default) has no\ndedicated token pair of its own, so it falls back to a plain\nbordered-surface look — the same \"no signal\" treatment\n`<lr-citation-badge>`'s `default` status and `<lr-tool-call-chip>`'s\n`pending` status already use.\n\nThis is a controlled component: clicking the remove (×) button only fires\n`lr-remove` — the chip never removes itself from the DOM on its own\ninteraction, the same contract `<lr-attachment-chip>`/\n`<lr-conversation-item>` already follow. A consumer owns the underlying\nlist and decides whether/how the click actually removes anything.",
136755
138347
  "name": "LyraChip",
136756
138348
  "cssProperties": [
138349
+ {
138350
+ "description": "Text/icon color of the pill. Each `tone` sets it to that tone's loud color.",
138351
+ "name": "--lr-chip-accent",
138352
+ "default": "var(--lr-color-text)"
138353
+ },
138354
+ {
138355
+ "description": "Background of the pill. Each `tone` sets it to that tone's `-quiet` tint.",
138356
+ "name": "--lr-chip-bg",
138357
+ "default": "var(--lr-color-surface)"
138358
+ },
138359
+ {
138360
+ "description": "Border color of the pill. Every non-neutral `tone` sets it to `transparent`.",
138361
+ "name": "--lr-chip-border",
138362
+ "default": "var(--lr-color-border)"
138363
+ },
138364
+ {
138365
+ "description": "Label font size. Each `size` sets it to that step's font size.",
138366
+ "name": "--lr-chip-font-size",
138367
+ "default": "var(--lr-font-size-sm)"
138368
+ },
138369
+ {
138370
+ "description": "Gap between the icon, label, and remove button. Each `size` sets it to that step's gap.",
138371
+ "name": "--lr-chip-gap",
138372
+ "default": "var(--lr-space-xs)"
138373
+ },
138374
+ {
138375
+ "description": "Font size of the `icon` slot wrapper. Each `size` sets it to that step's icon size.",
138376
+ "name": "--lr-chip-icon-size",
138377
+ "default": "var(--lr-font-size-sm)"
138378
+ },
138379
+ {
138380
+ "description": "Block padding of the pill. Each `size` sets it to that step's block padding.",
138381
+ "name": "--lr-chip-padding-block",
138382
+ "default": "var(--lr-size-0-25rem)"
138383
+ },
138384
+ {
138385
+ "description": "Inline padding of the pill. Each `size` sets it to that step's inline padding.",
138386
+ "name": "--lr-chip-padding-inline",
138387
+ "default": "var(--lr-space-s)"
138388
+ },
136757
138389
  {
136758
138390
  "description": "Background while a toggleable chip is selected, independently themeable from its resting background.",
136759
138391
  "name": "--lr-chip-pressed-bg",
136760
138392
  "default": "var(--lr-chip-bg)"
138393
+ },
138394
+ {
138395
+ "description": "Border color while a toggleable chip is selected, independently themeable from the label/icon color.",
138396
+ "name": "--lr-chip-pressed-border",
138397
+ "default": "var(--lr-chip-accent)"
136761
138398
  }
136762
138399
  ],
136763
138400
  "cssParts": [
@@ -137348,6 +138985,23 @@
137348
138985
  "kind": "class",
137349
138986
  "description": "`<lr-dialog>` — a general-purpose modal/overlay. `role=\"dialog\"`,\nfocus-trapped while open, dismissible via Escape or a backdrop click, and\nscroll-locks the document for as long as it's open. Chrome stays minimal by\ndefault — no built-in title bar or close button; a consumer supplies a\nheading and any close affordance itself via the default/`footer` slots.\n`heading`/`closable` are an opt-in convenience for the common case where\nhand-building that chrome isn't worth it (see below).\n\nAccessible name / visible header, in priority order:\n0. If the host element itself has an `aria-label` attribute set, its value\n becomes `aria-label` on the panel outright, overriding every source\n below (including a slotted heading) — the standard ARIA convention for\n a consumer that wants full control over the announced name regardless\n of whatever `heading`/`label` props are also set. Also suppresses the\n visible header/`heading` row and the sr-only `label` element from\n rendering at all, same as case 1 already does to cases 2/3 below.\n1. Otherwise, if a heading element (`h1`–`h6` or `[role=\"heading\"]`) is a *direct\n child* (not inside `slot=\"footer\"`), its text content becomes\n `aria-label` on the panel — unchanged, and takes priority over `heading`\n below so an existing consumer that already slots its own heading keeps\n rendering it exactly as before.\n2. Otherwise, when `heading` is set, a visible header row (`part=\"header\"`)\n renders containing that text (`part=\"heading\"`), which becomes the\n `aria-labelledby` target.\n3. Otherwise, when `label` is set, an invisible (`.sr-only`, exposed as the\n `label` part) element carrying that text is rendered inside the panel\n and `aria-labelledby` points at it instead.\nOnly one of cases 2/3 ever renders at a time, so exactly one element ever\nclaims `aria-labelledby`. `label` itself never renders visible chrome on\nits own — `::part(label)` can be restyled to make the sr-only text visible,\nor `heading` can be set instead, if a consumer wants visible chrome without\nslotting a real heading element.\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\n`heading`/`label`-prop cases above, where the target element is rendered\ninside the same shadow root it labels, so `aria-labelledby` there is safe.\n\n`closable` renders a close (X) button in the header row (creating one, with\nno heading text, if `heading` is unset) that closes the dialog via the same\n`close()` path as Escape/backdrop-dismiss, with reason `'close-button'`.\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.",
137350
138987
  "name": "LyraDialog",
138988
+ "cssProperties": [
138989
+ {
138990
+ "description": "Backdrop scrim color.",
138991
+ "name": "--lr-dialog-overlay-color",
138992
+ "default": "var(--lr-color-overlay)"
138993
+ },
138994
+ {
138995
+ "description": "Assertive inline size for the panel. Left at `auto` the panel shrink-wraps to its content.",
138996
+ "name": "--lr-dialog-width",
138997
+ "default": "auto"
138998
+ },
138999
+ {
139000
+ "description": "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.",
139001
+ "name": "--lr-dialog-max-width",
139002
+ "default": "var(--lr-dialog-width, var(--lr-size-32rem))"
139003
+ }
139004
+ ],
137351
139005
  "cssParts": [
137352
139006
  {
137353
139007
  "description": "The full-viewport scrim behind the panel.",
@@ -137986,6 +139640,43 @@
137986
139640
  {
137987
139641
  "description": "Block size for top/bottom drawers.",
137988
139642
  "name": "--lr-drawer-height"
139643
+ },
139644
+ {
139645
+ "description": "Horizontal offset the panel animates in from for start/end drawers. Set per placement (and flipped under RTL) by the stylesheet; only read when `prefers-reduced-motion` is `no-preference`.",
139646
+ "name": "--lr-drawer-enter-x",
139647
+ "default": "calc(-1 * var(--lr-size-1rem))"
139648
+ },
139649
+ {
139650
+ "description": "Vertical offset the panel animates in from for top/bottom drawers. Set to `var(--lr-size-1rem)` for `bottom`; only read when `prefers-reduced-motion` is `no-preference`.",
139651
+ "name": "--lr-drawer-enter-y",
139652
+ "default": "calc(-1 * var(--lr-size-1rem))"
139653
+ },
139654
+ {
139655
+ "description": "Backdrop scrim color.",
139656
+ "name": "--lr-dialog-overlay-color",
139657
+ "default": "var(--lr-color-overlay)",
139658
+ "inheritedFrom": {
139659
+ "name": "LyraDialog",
139660
+ "module": "src/components/overlays/dialog/dialog.class.ts"
139661
+ }
139662
+ },
139663
+ {
139664
+ "description": "Assertive inline size for the panel. Left at `auto` the panel shrink-wraps to its content.",
139665
+ "name": "--lr-dialog-width",
139666
+ "default": "auto",
139667
+ "inheritedFrom": {
139668
+ "name": "LyraDialog",
139669
+ "module": "src/components/overlays/dialog/dialog.class.ts"
139670
+ }
139671
+ },
139672
+ {
139673
+ "description": "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.",
139674
+ "name": "--lr-dialog-max-width",
139675
+ "default": "var(--lr-dialog-width, var(--lr-size-32rem))",
139676
+ "inheritedFrom": {
139677
+ "name": "LyraDialog",
139678
+ "module": "src/components/overlays/dialog/dialog.class.ts"
139679
+ }
137989
139680
  }
137990
139681
  ],
137991
139682
  "slots": [
@@ -142345,6 +144036,13 @@
142345
144036
  "kind": "class",
142346
144037
  "description": "`<lr-progress-ring>` — a circular determinate or indeterminate progress indicator.",
142347
144038
  "name": "LyraProgressRing",
144039
+ "cssProperties": [
144040
+ {
144041
+ "description": "Outer diameter of the ring.",
144042
+ "name": "--lr-progress-ring-size",
144043
+ "default": "var(--lr-size-2-5rem)"
144044
+ }
144045
+ ],
142348
144046
  "cssParts": [
142349
144047
  {
142350
144048
  "description": "The progress wrapper.",
@@ -143377,6 +145075,16 @@
143377
145075
  "description": "Animation duration and timing function shared by the pulse and sheen effects.",
143378
145076
  "name": "--lr-transition-ambient",
143379
145077
  "default": "1.8s ease-in-out"
145078
+ },
145079
+ {
145080
+ "description": "Inline size of the placeholder.",
145081
+ "name": "--lr-skeleton-w",
145082
+ "default": "100%"
145083
+ },
145084
+ {
145085
+ "description": "Block size of the placeholder.",
145086
+ "name": "--lr-skeleton-h",
145087
+ "default": "var(--lr-size-1em)"
143380
145088
  }
143381
145089
  ],
143382
145090
  "cssParts": [
@@ -143842,6 +145550,23 @@
143842
145550
  "kind": "class",
143843
145551
  "description": "`<lr-spinner>` — an indeterminate busy indicator.",
143844
145552
  "name": "LyraSpinner",
145553
+ "cssProperties": [
145554
+ {
145555
+ "description": "Outer diameter of the indicator.",
145556
+ "name": "--lr-spinner-size",
145557
+ "default": "var(--lr-size-1-25rem)"
145558
+ },
145559
+ {
145560
+ "description": "Thickness of the ring track.",
145561
+ "name": "--lr-spinner-track-width",
145562
+ "default": "var(--lr-border-width-medium)"
145563
+ },
145564
+ {
145565
+ "description": "Duration of one rotation. Not read under `prefers-reduced-motion: reduce`, where the animation is disabled entirely.",
145566
+ "name": "--lr-spinner-duration",
145567
+ "default": "800ms"
145568
+ }
145569
+ ],
143845
145570
  "cssParts": [
143846
145571
  {
143847
145572
  "description": "The wrapper.",
@@ -144251,6 +145976,38 @@
144251
145976
  "kind": "class",
144252
145977
  "description": "`<lr-toast-item>` — a single toast notification.\nMirrors the Web Awesome `<wa-toast-item>` API under the `lr-` prefix.",
144253
145978
  "name": "LyraToastItem",
145979
+ "cssProperties": [
145980
+ {
145981
+ "description": "Width of the accent bar, and the extra inline-start padding reserved for it.",
145982
+ "name": "--lr-toast-accent-width",
145983
+ "default": "var(--lr-size-4px)"
145984
+ },
145985
+ {
145986
+ "description": "Color of the accent bar and the icon, auto-swapped per `variant`.",
145987
+ "name": "--lr-toast-accent-color",
145988
+ "default": "var(--lr-color-border)"
145989
+ },
145990
+ {
145991
+ "description": "Padding of the item, auto-swapped per `size`.",
145992
+ "name": "--lr-toast-padding",
145993
+ "default": "var(--lr-space-m)"
145994
+ },
145995
+ {
145996
+ "description": "Font size of the item, auto-swapped per `size`.",
145997
+ "name": "--lr-toast-font-size",
145998
+ "default": "var(--lr-font-size-md)"
145999
+ },
146000
+ {
146001
+ "description": "Opacity/transform transition used while showing.",
146002
+ "name": "--lr-toast-show-duration",
146003
+ "default": "var(--lr-transition-base, 180ms ease-out)"
146004
+ },
146005
+ {
146006
+ "description": "Opacity/transform transition used while hiding.",
146007
+ "name": "--lr-toast-hide-duration",
146008
+ "default": "var(--lr-transition-base, 180ms ease-out)"
146009
+ }
146010
+ ],
144254
146011
  "cssParts": [
144255
146012
  {
144256
146013
  "description": "The colored accent bar.",
@@ -144915,6 +146672,48 @@
144915
146672
  "kind": "class",
144916
146673
  "description": "`<lr-toast>` — the stacking toast region. One per page is recommended.\nMirrors the Web Awesome `<wa-toast>` API under the `lr-` prefix.",
144917
146674
  "name": "LyraToast",
146675
+ "cssProperties": [
146676
+ {
146677
+ "description": "Gap between stacked items.",
146678
+ "name": "--lr-toast-gap",
146679
+ "default": "var(--lr-space-s)"
146680
+ },
146681
+ {
146682
+ "description": "Inline size of the stack, capped by the viewport minus the placement insets.",
146683
+ "name": "--lr-toast-width",
146684
+ "default": "var(--lr-size-28rem)"
146685
+ },
146686
+ {
146687
+ "description": "Width of a slotted item's accent bar. Read by `<lr-toast-item>`'s own stylesheet, so set it on the item.",
146688
+ "name": "--lr-toast-accent-width",
146689
+ "default": "var(--lr-size-4px)"
146690
+ },
146691
+ {
146692
+ "description": "Accent bar / icon color of a slotted item, auto-swapped per its `variant`. Read by `<lr-toast-item>`, so set it on the item.",
146693
+ "name": "--lr-toast-accent-color",
146694
+ "default": "var(--lr-color-border)"
146695
+ },
146696
+ {
146697
+ "description": "Padding of a slotted item, auto-swapped per its `size`. Read by `<lr-toast-item>`, so set it on the item.",
146698
+ "name": "--lr-toast-padding",
146699
+ "default": "var(--lr-space-m)"
146700
+ },
146701
+ {
146702
+ "description": "Font size of a slotted item, auto-swapped per its `size`. Read by `<lr-toast-item>`, so set it on the item.",
146703
+ "name": "--lr-toast-font-size",
146704
+ "default": "var(--lr-font-size-md)"
146705
+ },
146706
+ {
146707
+ "description": "Show transition of a slotted item. Read by `<lr-toast-item>`, so set it on the item.",
146708
+ "name": "--lr-toast-show-duration",
146709
+ "default": "var(--lr-transition-base, 180ms ease-out)"
146710
+ },
146711
+ {
146712
+ "description": "Hide transition of a slotted item. Read by `<lr-toast-item>`, so set it on the item.",
146713
+ "name": "--lr-toast-hide-duration",
146714
+ "default": "var(--lr-transition-base, 180ms ease-out)"
146715
+ }
146716
+ ],
144918
146717
  "cssParts": [
144919
146718
  {
144920
146719
  "description": "The fl-column container holding the items.",
@@ -145971,6 +147770,23 @@
145971
147770
  "kind": "class",
145972
147771
  "description": "`<lr-citation-badge>` — an inline `[n]` citation marker with a hover/\nfocus preview popover and confidence/verification-status coloring. Used\nfor an agent response's inline citations, each carrying a `source-id`\nthat matches a corresponding `<lr-source-card>` shown elsewhere on the\npage (a sibling component in this same family — this component doesn't\nimport or know anything about it, only carries the id through its\nevents).\n\nThe default slot is *not* the badge's visible content — the badge always\nrenders `[index]` — it's reserved for optional rich preview content (e.g.\na filename + short excerpt) shown in a floating popover on hover/focus,\npositioned with `internal/positioner.js`'s `place()` the same way\n`<lr-tool-call-chip>` positions its own detail tooltip. No popover shows\nat all when the slot carries no content, and the popover never traps\nfocus — it's supplementary preview content, not a modal, so Tab continues\npast the badge normally even while it happens to be visible from a mouse\nhover. When preview content exists, the button keeps a stable\n`aria-describedby` relationship to the `role=\"tooltip\"` panel while it is\nboth hidden and visible, so assistive technology can resolve the preview\nas soon as focus causes it to open.\n\nTwo distinct signals fire from the same badge: `lr-citation-activate`\n(click, or Enter while focused — native `<button>` behavior, no listener\nneeded for the Enter case) is the lightweight \"jump to this source\"\nsignal a host wires to scrolling/highlighting the matching\n`<lr-source-card>`. `lr-citation-open` (dblclick, or Space while\nfocused) is a distinct \"full preview\" signal — `href` in its detail is\n`undefined` when the `href` prop isn't set; the consumer decides what\n\"open\" means (a new tab, a dialog, etc). A double-click still fires two\n`lr-citation-activate` events (one per constituent click — standard\nbrowser `dblclick` behavior) in addition to the one `lr-citation-open`;\na consumer that only cares about the richer signal on a double-click\nshould ignore the paired activate events in that case.\n\nStatus coloring: `verified`/`high` use the success tones (a claim that's\nbeen checked out, or the model is confident in). `medium`/`low` use\nwarning (progressively less certain, but still a real citation).\n`unverified` uses danger — deliberately distinct from `low`: \"hasn't been\nchecked at all\" is a different (arguably riskier) claim than \"checked but\nuncertain\". `default` renders as plain neutral text with no background\ntint, for citations that carry no confidence/verification signal at all.",
145973
147772
  "name": "LyraCitationBadge",
147773
+ "cssProperties": [
147774
+ {
147775
+ "description": "Text color of `base`, and its hover border color. Swapped by the reflected `status`: `var(--lr-color-success)` for `high`/`verified`, `var(--lr-color-warning)` for `medium`/`low`, `var(--lr-color-danger)` for `unverified`.",
147776
+ "name": "--lr-citation-badge-accent",
147777
+ "default": "var(--lr-color-text-quiet)"
147778
+ },
147779
+ {
147780
+ "description": "Background of `base`. Swapped by the reflected `status` to the matching `-quiet` tone (`success`/`warning`/`danger`).",
147781
+ "name": "--lr-citation-badge-bg",
147782
+ "default": "transparent"
147783
+ },
147784
+ {
147785
+ "description": "Resting border color of `base`; no `status` changes it, so it stays transparent unless a host overrides it.",
147786
+ "name": "--lr-citation-badge-border",
147787
+ "default": "transparent"
147788
+ }
147789
+ ],
145974
147790
  "cssParts": [
145975
147791
  {
145976
147792
  "description": "The clickable badge (`<button>`).",
@@ -147616,6 +149432,11 @@
147616
149432
  "description": "Background color.",
147617
149433
  "name": "--lr-entity-chip-bg",
147618
149434
  "default": "var(--lr-color-brand-quiet)"
149435
+ },
149436
+ {
149437
+ "description": "Border color of the chip.",
149438
+ "name": "--lr-entity-chip-border",
149439
+ "default": "transparent"
147619
149440
  }
147620
149441
  ],
147621
149442
  "cssParts": [
@@ -152897,6 +154718,10 @@
152897
154718
  "description": "The row's `<lr-progress-bar>`, only rendered for an active (uploading through indexing) stage.",
152898
154719
  "name": "item-progress"
152899
154720
  },
154721
+ {
154722
+ "description": "The row's `<lr-badge>` showing the localized stage label; its `variant` tracks `stage`.",
154723
+ "name": "item-stage"
154724
+ },
152900
154725
  {
152901
154726
  "description": "The row container in non-virtualized mode (`role=\"list\"`).",
152902
154727
  "name": "list"
@@ -160317,6 +162142,10 @@
160317
162142
  "description": "One metadata entry's key (a `<dt>`).",
160318
162143
  "name": "evidence-metadata-key"
160319
162144
  },
162145
+ {
162146
+ "description": "One metadata entry's `<dt>`/`<dd>` pair wrapper, inside `evidence-metadata`.",
162147
+ "name": "evidence-metadata-row"
162148
+ },
160320
162149
  {
160321
162150
  "description": "One metadata entry's value (a `<dd>`).",
160322
162151
  "name": "evidence-metadata-value"
@@ -163160,6 +164989,13 @@
163160
164989
  "kind": "class",
163161
164990
  "description": "`<lr-diff-view>` — a real two-string line diff (Myers/LCS-style alignment), rendered as\ninterleaved unified-diff output -- not diff-flavored syntax highlighting over an\nalready-formatted string (`lr-code-block`'s `language=\"diff\"` only lexically colors a string\nthe consumer already unified-diffed; it has no two-string-compare entry point). First-party\ninvention (no Web Awesome equivalent).",
163162
164991
  "name": "LyraDiffView",
164992
+ "cssProperties": [
164993
+ {
164994
+ "description": "Font family used for the diff lines.",
164995
+ "name": "--lr-diff-view-font",
164996
+ "default": "var(--lr-font-mono)"
164997
+ }
164998
+ ],
163163
164999
  "cssParts": [
163164
165000
  {
163165
165001
  "description": "The root wrapper.",
@@ -166886,6 +168722,13 @@
166886
168722
  "kind": "class",
166887
168723
  "description": "`<lr-icon>` — a tiny dependency-free SVG icon primitive using a named path set.",
166888
168724
  "name": "LyraIcon",
168725
+ "cssProperties": [
168726
+ {
168727
+ "description": "Inline and block size of the icon box.",
168728
+ "name": "--lr-icon-size",
168729
+ "default": "var(--lr-size-1-25rem)"
168730
+ }
168731
+ ],
166889
168732
  "cssParts": [
166890
168733
  {
166891
168734
  "description": "The rendered SVG.",
@@ -167790,6 +169633,18 @@
167790
169633
  "kind": "class",
167791
169634
  "description": "`<lr-json-viewer>` — a collapsible, copyable tree view for an arbitrary\nJSON-serializable value (object/array/string/number/boolean/null/\nundefined). Serves as the fallback renderer wherever a raw payload (tool\ncall arguments, a tool result, an API response) needs inspecting without a\nbespoke view.\n\nExpand/collapse state is keyed by structural path (not by object identity),\nso it survives a `data` reassignment that keeps the same shape -- e.g. a\nstreaming tool result being patched in place.",
167792
169635
  "name": "LyraJsonViewer",
169636
+ "cssProperties": [
169637
+ {
169638
+ "description": "Cap on `[part=\"base\"]`'s block size, past which the viewer scrolls internally. The `maxHeight` property sets this token inline on `[part=\"base\"]`.",
169639
+ "name": "--lr-json-viewer-max-height",
169640
+ "default": "none"
169641
+ },
169642
+ {
169643
+ "description": "Font family used for the rendered tree.",
169644
+ "name": "--lr-json-viewer-font",
169645
+ "default": "var(--lr-font-mono)"
169646
+ }
169647
+ ],
167793
169648
  "cssParts": [
167794
169649
  {
167795
169650
  "description": "The root scroll container; respects `max-height`.",
@@ -168590,6 +170445,43 @@
168590
170445
  "kind": "class",
168591
170446
  "description": "`<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-`, with `appearance`/`pill`/`form` dropped and `size` normalized to\nthis library's own `xs`–`xl` scale, matching every other lyra form control\nmirrored from a Web Awesome counterpart.\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. Non-digit keystrokes are\nrejected before they reach a field's state -- no locale-specific numeral\ninput (e.g. Arabic-Indic digits) is supported.\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.",
168592
170447
  "name": "LyraKnownDate",
170448
+ "cssProperties": [
170449
+ {
170450
+ "description": "Block padding of each `field-input`, auto-swapped per `size`.",
170451
+ "name": "--lr-known-date-field-padding-block",
170452
+ "default": "var(--lr-space-s)"
170453
+ },
170454
+ {
170455
+ "description": "Inline padding of each `field-input`, auto-swapped per `size`.",
170456
+ "name": "--lr-known-date-field-padding-inline",
170457
+ "default": "var(--lr-space-s)"
170458
+ },
170459
+ {
170460
+ "description": "Font size of each `field-input`, auto-swapped per `size`.",
170461
+ "name": "--lr-known-date-field-font-size",
170462
+ "default": "var(--lr-font-size-md-sm)"
170463
+ },
170464
+ {
170465
+ "description": "Gap between the three field blocks.",
170466
+ "name": "--lr-known-date-field-gap",
170467
+ "default": "var(--lr-space-s)"
170468
+ },
170469
+ {
170470
+ "description": "Inline size of the day field.",
170471
+ "name": "--lr-known-date-day-field-width",
170472
+ "default": "var(--lr-size-3-5em)"
170473
+ },
170474
+ {
170475
+ "description": "Inline size of the month field.",
170476
+ "name": "--lr-known-date-month-field-width",
170477
+ "default": "var(--lr-size-3-5em)"
170478
+ },
170479
+ {
170480
+ "description": "Inline size of the year field.",
170481
+ "name": "--lr-known-date-year-field-width",
170482
+ "default": "var(--lr-size-5em)"
170483
+ }
170484
+ ],
168593
170485
  "cssParts": [
168594
170486
  {
168595
170487
  "description": "The validation message.",
@@ -174777,6 +176669,13 @@
174777
176669
  "kind": "class",
174778
176670
  "description": "Parses `.ics` calendars with the optional `ical.js` peer and renders each\nVEVENT as plain text, preserving summaries, times, locations, and details.",
174779
176671
  "name": "LyraCalendarViewer",
176672
+ "cssProperties": [
176673
+ {
176674
+ "description": "Maximum block size of `[part=\"body\"]` before it scrolls internally. The `maxHeight` property sets this token inline on `[part=\"base\"]`.",
176675
+ "name": "--lr-calendar-viewer-max-height",
176676
+ "default": "none"
176677
+ }
176678
+ ],
174780
176679
  "cssParts": [
174781
176680
  {
174782
176681
  "description": "The root container.",
@@ -176654,6 +178553,18 @@
176654
178553
  "kind": "class",
176655
178554
  "description": "Fetches delimited text and renders a virtualized, accessible data table: a `role=\"table\"`\ncontainer with a sticky `role=\"row\"` header, composed with `<lr-virtual-list item-role=\"row\">`\nfor the body so files far larger than a real synchronous `<table>` can render without locking the\nmain thread.\n\nAdopts `DocumentAnchorTarget`: a `cell-range` anchor addresses the raw file grid, 1-based, with\nthe header row always occupying row 1 (this component always parses with PapaParse's `header:\ntrue`, so the first row is never part of the virtualized body) -- `scrollToAnchor()` scrolls the\naddressed row into view via the virtualized list's `active-id`. A `sheet`-qualified anchor never\nresolves here -- this viewer has no sheets. `highlights` paint as a `part=\"cell-highlight\"` cell\nwrapping a focusable `part=\"cell-highlight-action\"` native button (keeping the ARIA table tree\nintact) on membership, recomputed per row inside `renderRow()` so a row scrolled out and back\nin reconstructs its highlight for free, with no persistent DOM to keep in sync. `search()` is a\ncase-insensitive substring match over every body cell's raw string value, ordered row then column.",
176656
178555
  "name": "LyraDatasetViewer",
178556
+ "cssProperties": [
178557
+ {
178558
+ "description": "Maximum block size of `[part=\"body\"]` before it scrolls internally. The `maxHeight` property sets this token inline on `[part=\"base\"]`.",
178559
+ "name": "--lr-dataset-viewer-max-height",
178560
+ "default": "none"
178561
+ },
178562
+ {
178563
+ "description": "Outline color of a highlighted cell. The active highlight sets it inline to `var(--lr-color-warning, var(--lr-color-brand))`.",
178564
+ "name": "--lr-dataset-viewer-highlight-color",
178565
+ "default": "var(--lr-color-brand)"
178566
+ }
178567
+ ],
176657
178568
  "cssParts": [
176658
178569
  {
176659
178570
  "description": "The root wrapper.",
@@ -177389,7 +179300,7 @@
177389
179300
  {
177390
179301
  "description": "Maximum block size of a side-by-side pane before it scrolls internally.",
177391
179302
  "name": "--lr-document-compare-pane-max-height",
177392
- "default": "24rem"
179303
+ "default": "var(--lr-size-24rem)"
177393
179304
  }
177394
179305
  ],
177395
179306
  "cssParts": [
@@ -178076,6 +179987,11 @@
178076
179987
  "description": "Duration of one indeterminate loading-indicator rotation.",
178077
179988
  "name": "--lr-document-preview-spin-duration",
178078
179989
  "default": "0.8s"
179990
+ },
179991
+ {
179992
+ "description": "Unitless 0-100 completion of the determinate loading ring (multiplied by `1%` in its conic gradient). Written inline by the component from the clamped `progress` value, so it is a read-out rather than a consumer knob.",
179993
+ "name": "--lr-document-preview-progress",
179994
+ "default": "0"
178079
179995
  }
178080
179996
  ],
178081
179997
  "cssParts": [
@@ -181740,6 +183656,13 @@
181740
183656
  "kind": "class",
181741
183657
  "description": "Parses `.eml` messages with the optional `postal-mime` peer and renders\ntheir HTML body only after DOMPurify sanitization. Plain-text messages remain\nuseful without DOMPurify. Attachment rows are real buttons that emit\n`lr-attachment-open` with the attachment's decoded bytes -- this component itself never\nopens, downloads, or object-URLs the content; a host routes the event into e.g.\n`URL.createObjectURL(new Blob([content], { type: mimeType }))` -> `lr-document-viewer` ->\nrevoke on `lr-close`. `fold-quotes` collapses trailing quoted-reply text/HTML behind a\nlocalized toggle.",
181742
183658
  "name": "LyraEmailViewer",
183659
+ "cssProperties": [
183660
+ {
183661
+ "description": "Maximum block size of `[part=\"body\"]` before it scrolls internally. The `maxHeight` property sets this token inline on `[part=\"base\"]`.",
183662
+ "name": "--lr-email-viewer-max-height",
183663
+ "default": "none"
183664
+ }
183665
+ ],
181743
183666
  "cssParts": [
181744
183667
  {
181745
183668
  "description": "An attachment's open button.",
@@ -183489,6 +185412,13 @@
183489
185412
  "kind": "class",
183490
185413
  "description": "Fetches and safely renders an inline HTML document.",
183491
185414
  "name": "LyraHtmlViewer",
185415
+ "cssProperties": [
185416
+ {
185417
+ "description": "Maximum block size of `[part=\"body\"]` before it scrolls internally. The `maxHeight` property sets this token inline on `[part=\"base\"]`.",
185418
+ "name": "--lr-html-viewer-max-height",
185419
+ "default": "none"
185420
+ }
185421
+ ],
183492
185422
  "cssParts": [
183493
185423
  {
183494
185424
  "description": "The root container.",