@aceshooting/lyra-ui 6.2.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1843) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/README.md +30 -2
  3. package/custom-elements.json +88678 -64875
  4. package/dist/ai/adapters/a2ui.d.ts +26 -0
  5. package/dist/ai/adapters/a2ui.d.ts.map +1 -0
  6. package/dist/ai/adapters/a2ui.js +46 -0
  7. package/dist/ai/adapters/a2ui.js.map +1 -0
  8. package/dist/ai/adapters/ag-ui.d.ts +28 -0
  9. package/dist/ai/adapters/ag-ui.d.ts.map +1 -0
  10. package/dist/ai/adapters/ag-ui.js +174 -0
  11. package/dist/ai/adapters/ag-ui.js.map +1 -0
  12. package/dist/ai/adapters/ai-sdk.d.ts +10 -0
  13. package/dist/ai/adapters/ai-sdk.d.ts.map +1 -0
  14. package/dist/ai/adapters/ai-sdk.js +128 -0
  15. package/dist/ai/adapters/ai-sdk.js.map +1 -0
  16. package/dist/ai/adapters/index.d.ts +4 -0
  17. package/dist/ai/adapters/index.d.ts.map +1 -0
  18. package/dist/ai/adapters/index.js +4 -0
  19. package/dist/ai/adapters/index.js.map +1 -0
  20. package/dist/ai/index.d.ts +2 -0
  21. package/dist/ai/index.d.ts.map +1 -1
  22. package/dist/ai/index.js +2 -0
  23. package/dist/ai/index.js.map +1 -1
  24. package/dist/ai/runtime.d.ts +77 -0
  25. package/dist/ai/runtime.d.ts.map +1 -0
  26. package/dist/ai/runtime.js +226 -0
  27. package/dist/ai/runtime.js.map +1 -0
  28. package/dist/ai/types.contract.js +26 -0
  29. package/dist/ai/types.contract.js.map +1 -1
  30. package/dist/ai/types.d.ts +100 -1
  31. package/dist/ai/types.d.ts.map +1 -1
  32. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts +0 -2
  33. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts.map +1 -1
  34. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +1 -19
  35. package/dist/components/agent-tools/activity-feed/activity-feed.class.js.map +1 -1
  36. package/dist/components/agent-tools/activity-feed/activity-feed.d.ts +2 -0
  37. package/dist/components/agent-tools/activity-feed/activity-feed.d.ts.map +1 -1
  38. package/dist/components/agent-tools/activity-feed/activity-feed.js +2 -0
  39. package/dist/components/agent-tools/activity-feed/activity-feed.js.map +1 -1
  40. package/dist/components/agent-tools/activity-feed/activity-feed.styles.d.ts.map +1 -1
  41. package/dist/components/agent-tools/activity-feed/activity-feed.styles.js +2 -0
  42. package/dist/components/agent-tools/activity-feed/activity-feed.styles.js.map +1 -1
  43. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.d.ts +4 -3
  44. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.d.ts.map +1 -1
  45. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.js +72 -11
  46. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.js.map +1 -1
  47. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.d.ts +3 -0
  48. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.d.ts.map +1 -1
  49. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.js +3 -0
  50. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.js.map +1 -1
  51. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.d.ts.map +1 -1
  52. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.js +17 -0
  53. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.js.map +1 -1
  54. package/dist/components/agent-tools/agent-run/agent-run.class.d.ts +4 -7
  55. package/dist/components/agent-tools/agent-run/agent-run.class.d.ts.map +1 -1
  56. package/dist/components/agent-tools/agent-run/agent-run.class.js +24 -39
  57. package/dist/components/agent-tools/agent-run/agent-run.class.js.map +1 -1
  58. package/dist/components/agent-tools/agent-run/agent-run.d.ts +6 -0
  59. package/dist/components/agent-tools/agent-run/agent-run.d.ts.map +1 -1
  60. package/dist/components/agent-tools/agent-run/agent-run.js +6 -0
  61. package/dist/components/agent-tools/agent-run/agent-run.js.map +1 -1
  62. package/dist/components/agent-tools/agent-run/agent-run.styles.d.ts.map +1 -1
  63. package/dist/components/agent-tools/agent-run/agent-run.styles.js +13 -4
  64. package/dist/components/agent-tools/agent-run/agent-run.styles.js.map +1 -1
  65. package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts +0 -3
  66. package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts.map +1 -1
  67. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +0 -8
  68. package/dist/components/agent-tools/agent-trace/agent-trace.class.js.map +1 -1
  69. package/dist/components/agent-tools/agent-trace/agent-trace.d.ts.map +1 -1
  70. package/dist/components/agent-tools/agent-trace/agent-trace.js +2 -2
  71. package/dist/components/agent-tools/agent-trace/agent-trace.js.map +1 -1
  72. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +2 -3
  73. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts.map +1 -1
  74. package/dist/components/agent-tools/approval-queue/approval-queue.class.js +12 -7
  75. package/dist/components/agent-tools/approval-queue/approval-queue.class.js.map +1 -1
  76. package/dist/components/agent-tools/approval-queue/approval-queue.d.ts +2 -0
  77. package/dist/components/agent-tools/approval-queue/approval-queue.d.ts.map +1 -1
  78. package/dist/components/agent-tools/approval-queue/approval-queue.js +2 -0
  79. package/dist/components/agent-tools/approval-queue/approval-queue.js.map +1 -1
  80. package/dist/components/agent-tools/approval-queue/approval-queue.styles.js +1 -1
  81. package/dist/components/agent-tools/artifact-panel/artifact-panel.class.d.ts +1 -2
  82. package/dist/components/agent-tools/artifact-panel/artifact-panel.class.d.ts.map +1 -1
  83. package/dist/components/agent-tools/artifact-panel/artifact-panel.class.js +3 -6
  84. package/dist/components/agent-tools/artifact-panel/artifact-panel.class.js.map +1 -1
  85. package/dist/components/agent-tools/artifact-panel/artifact-panel.d.ts +1 -0
  86. package/dist/components/agent-tools/artifact-panel/artifact-panel.d.ts.map +1 -1
  87. package/dist/components/agent-tools/artifact-panel/artifact-panel.js +1 -0
  88. package/dist/components/agent-tools/artifact-panel/artifact-panel.js.map +1 -1
  89. package/dist/components/agent-tools/browser-frame/browser-frame.class.d.ts +16 -0
  90. package/dist/components/agent-tools/browser-frame/browser-frame.class.d.ts.map +1 -1
  91. package/dist/components/agent-tools/browser-frame/browser-frame.class.js +12 -14
  92. package/dist/components/agent-tools/browser-frame/browser-frame.class.js.map +1 -1
  93. package/dist/components/agent-tools/browser-frame/browser-frame.styles.d.ts.map +1 -1
  94. package/dist/components/agent-tools/browser-frame/browser-frame.styles.js +17 -6
  95. package/dist/components/agent-tools/browser-frame/browser-frame.styles.js.map +1 -1
  96. package/dist/components/agent-tools/commit-card/commit-card.class.d.ts.map +1 -1
  97. package/dist/components/agent-tools/commit-card/commit-card.class.js +1 -15
  98. package/dist/components/agent-tools/commit-card/commit-card.class.js.map +1 -1
  99. package/dist/components/agent-tools/compare-panel/compare-panel.class.d.ts +1 -2
  100. package/dist/components/agent-tools/compare-panel/compare-panel.class.d.ts.map +1 -1
  101. package/dist/components/agent-tools/compare-panel/compare-panel.class.js +6 -4
  102. package/dist/components/agent-tools/compare-panel/compare-panel.class.js.map +1 -1
  103. package/dist/components/agent-tools/compare-panel/compare-panel.d.ts.map +1 -1
  104. package/dist/components/agent-tools/compare-panel/compare-panel.js +1 -1
  105. package/dist/components/agent-tools/compare-panel/compare-panel.js.map +1 -1
  106. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.d.ts.map +1 -1
  107. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js +13 -3
  108. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js.map +1 -1
  109. package/dist/components/agent-tools/confirm-bar/confirm-bar.styles.js +3 -3
  110. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.d.ts +0 -5
  111. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.d.ts.map +1 -1
  112. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.js +23 -8
  113. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.js.map +1 -1
  114. package/dist/components/agent-tools/eval-dataset/eval-dataset.d.ts.map +1 -1
  115. package/dist/components/agent-tools/eval-dataset/eval-dataset.js +2 -2
  116. package/dist/components/agent-tools/eval-dataset/eval-dataset.js.map +1 -1
  117. package/dist/components/agent-tools/eval-dataset/eval-dataset.styles.d.ts.map +1 -1
  118. package/dist/components/agent-tools/eval-dataset/eval-dataset.styles.js +7 -0
  119. package/dist/components/agent-tools/eval-dataset/eval-dataset.styles.js.map +1 -1
  120. package/dist/components/agent-tools/eval-result/eval-result.class.d.ts.map +1 -1
  121. package/dist/components/agent-tools/eval-result/eval-result.class.js +20 -5
  122. package/dist/components/agent-tools/eval-result/eval-result.class.js.map +1 -1
  123. package/dist/components/agent-tools/eval-result/eval-result.styles.d.ts.map +1 -1
  124. package/dist/components/agent-tools/eval-result/eval-result.styles.js +7 -0
  125. package/dist/components/agent-tools/eval-result/eval-result.styles.js.map +1 -1
  126. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.d.ts +0 -9
  127. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.d.ts.map +1 -1
  128. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js +20 -20
  129. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js.map +1 -1
  130. package/dist/components/agent-tools/evaluation-run/evaluation-run.d.ts +9 -0
  131. package/dist/components/agent-tools/evaluation-run/evaluation-run.d.ts.map +1 -1
  132. package/dist/components/agent-tools/evaluation-run/evaluation-run.js +9 -0
  133. package/dist/components/agent-tools/evaluation-run/evaluation-run.js.map +1 -1
  134. package/dist/components/agent-tools/evaluation-run/evaluation-run.styles.d.ts.map +1 -1
  135. package/dist/components/agent-tools/evaluation-run/evaluation-run.styles.js +6 -2
  136. package/dist/components/agent-tools/evaluation-run/evaluation-run.styles.js.map +1 -1
  137. package/dist/components/agent-tools/index.d.ts +36 -0
  138. package/dist/components/agent-tools/index.d.ts.map +1 -0
  139. package/dist/components/agent-tools/index.js +36 -0
  140. package/dist/components/agent-tools/index.js.map +1 -0
  141. package/dist/components/agent-tools/mcp-app/mcp-app.class.d.ts +93 -0
  142. package/dist/components/agent-tools/mcp-app/mcp-app.class.d.ts.map +1 -0
  143. package/dist/components/agent-tools/mcp-app/mcp-app.class.js +238 -0
  144. package/dist/components/agent-tools/mcp-app/mcp-app.class.js.map +1 -0
  145. package/dist/components/agent-tools/mcp-app/mcp-app.d.ts +2 -0
  146. package/dist/components/agent-tools/mcp-app/mcp-app.d.ts.map +1 -0
  147. package/dist/components/agent-tools/mcp-app/mcp-app.js +5 -0
  148. package/dist/components/agent-tools/mcp-app/mcp-app.js.map +1 -0
  149. package/dist/components/agent-tools/mcp-app/mcp-app.styles.d.ts +2 -0
  150. package/dist/components/agent-tools/mcp-app/mcp-app.styles.d.ts.map +1 -0
  151. package/dist/components/agent-tools/mcp-app/mcp-app.styles.js +45 -0
  152. package/dist/components/agent-tools/mcp-app/mcp-app.styles.js.map +1 -0
  153. package/dist/components/agent-tools/policy-summary/policy-summary.class.d.ts +4 -7
  154. package/dist/components/agent-tools/policy-summary/policy-summary.class.d.ts.map +1 -1
  155. package/dist/components/agent-tools/policy-summary/policy-summary.class.js +5 -8
  156. package/dist/components/agent-tools/policy-summary/policy-summary.class.js.map +1 -1
  157. package/dist/components/agent-tools/policy-summary/policy-summary.styles.d.ts.map +1 -1
  158. package/dist/components/agent-tools/policy-summary/policy-summary.styles.js +4 -1
  159. package/dist/components/agent-tools/policy-summary/policy-summary.styles.js.map +1 -1
  160. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +91 -0
  161. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts.map +1 -0
  162. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +236 -0
  163. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js.map +1 -0
  164. package/dist/components/agent-tools/prompt-studio/prompt-studio.d.ts +2 -0
  165. package/dist/components/agent-tools/prompt-studio/prompt-studio.d.ts.map +1 -0
  166. package/dist/components/agent-tools/prompt-studio/prompt-studio.js +5 -0
  167. package/dist/components/agent-tools/prompt-studio/prompt-studio.js.map +1 -0
  168. package/dist/components/agent-tools/prompt-studio/prompt-studio.styles.d.ts +2 -0
  169. package/dist/components/agent-tools/prompt-studio/prompt-studio.styles.d.ts.map +1 -0
  170. package/dist/components/agent-tools/prompt-studio/prompt-studio.styles.js +60 -0
  171. package/dist/components/agent-tools/prompt-studio/prompt-studio.styles.js.map +1 -0
  172. package/dist/components/agent-tools/result-card/result-card.styles.d.ts.map +1 -1
  173. package/dist/components/agent-tools/result-card/result-card.styles.js +3 -1
  174. package/dist/components/agent-tools/result-card/result-card.styles.js.map +1 -1
  175. package/dist/components/agent-tools/result-card/result-field.class.d.ts.map +1 -1
  176. package/dist/components/agent-tools/result-card/result-field.class.js +3 -1
  177. package/dist/components/agent-tools/result-card/result-field.class.js.map +1 -1
  178. package/dist/components/agent-tools/result-card/result-field.styles.d.ts.map +1 -1
  179. package/dist/components/agent-tools/result-card/result-field.styles.js +3 -1
  180. package/dist/components/agent-tools/result-card/result-field.styles.js.map +1 -1
  181. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +77 -0
  182. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts.map +1 -0
  183. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +196 -0
  184. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js.map +1 -0
  185. package/dist/components/agent-tools/schema-viewer/schema-viewer.d.ts +4 -0
  186. package/dist/components/agent-tools/schema-viewer/schema-viewer.d.ts.map +1 -0
  187. package/dist/components/agent-tools/schema-viewer/schema-viewer.js +7 -0
  188. package/dist/components/agent-tools/schema-viewer/schema-viewer.js.map +1 -0
  189. package/dist/components/agent-tools/schema-viewer/schema-viewer.styles.d.ts +2 -0
  190. package/dist/components/agent-tools/schema-viewer/schema-viewer.styles.d.ts.map +1 -0
  191. package/dist/components/agent-tools/schema-viewer/schema-viewer.styles.js +32 -0
  192. package/dist/components/agent-tools/schema-viewer/schema-viewer.styles.js.map +1 -0
  193. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts +2 -0
  194. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts.map +1 -1
  195. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +41 -14
  196. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js.map +1 -1
  197. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.d.ts.map +1 -1
  198. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +1 -0
  199. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js.map +1 -1
  200. package/dist/components/agent-tools/stack-trace/stack-trace-parse.d.ts.map +1 -1
  201. package/dist/components/agent-tools/stack-trace/stack-trace-parse.js +10 -1
  202. package/dist/components/agent-tools/stack-trace/stack-trace-parse.js.map +1 -1
  203. package/dist/components/agent-tools/stack-trace/stack-trace.class.d.ts +2 -2
  204. package/dist/components/agent-tools/stack-trace/stack-trace.class.d.ts.map +1 -1
  205. package/dist/components/agent-tools/stack-trace/stack-trace.class.js +15 -26
  206. package/dist/components/agent-tools/stack-trace/stack-trace.class.js.map +1 -1
  207. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.d.ts +72 -0
  208. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.d.ts.map +1 -0
  209. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +213 -0
  210. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js.map +1 -0
  211. package/dist/components/agent-tools/subagent-panel/subagent-panel.d.ts +4 -0
  212. package/dist/components/agent-tools/subagent-panel/subagent-panel.d.ts.map +1 -0
  213. package/dist/components/agent-tools/subagent-panel/subagent-panel.js +7 -0
  214. package/dist/components/agent-tools/subagent-panel/subagent-panel.js.map +1 -0
  215. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.d.ts +2 -0
  216. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.d.ts.map +1 -0
  217. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js +38 -0
  218. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js.map +1 -0
  219. package/dist/components/agent-tools/task-list/task-list.class.d.ts +11 -2
  220. package/dist/components/agent-tools/task-list/task-list.class.d.ts.map +1 -1
  221. package/dist/components/agent-tools/task-list/task-list.class.js +3 -10
  222. package/dist/components/agent-tools/task-list/task-list.class.js.map +1 -1
  223. package/dist/components/agent-tools/task-list/task-list.d.ts +1 -0
  224. package/dist/components/agent-tools/task-list/task-list.d.ts.map +1 -1
  225. package/dist/components/agent-tools/task-list/task-list.js +1 -0
  226. package/dist/components/agent-tools/task-list/task-list.js.map +1 -1
  227. package/dist/components/agent-tools/task-list/task-list.styles.js +1 -1
  228. package/dist/components/agent-tools/terminal/terminal.class.d.ts +5 -1
  229. package/dist/components/agent-tools/terminal/terminal.class.d.ts.map +1 -1
  230. package/dist/components/agent-tools/terminal/terminal.class.js +45 -24
  231. package/dist/components/agent-tools/terminal/terminal.class.js.map +1 -1
  232. package/dist/components/agent-tools/terminal/terminal.d.ts +1 -0
  233. package/dist/components/agent-tools/terminal/terminal.d.ts.map +1 -1
  234. package/dist/components/agent-tools/terminal/terminal.js +1 -0
  235. package/dist/components/agent-tools/terminal/terminal.js.map +1 -1
  236. package/dist/components/agent-tools/terminal/terminal.styles.d.ts.map +1 -1
  237. package/dist/components/agent-tools/terminal/terminal.styles.js +3 -0
  238. package/dist/components/agent-tools/terminal/terminal.styles.js.map +1 -1
  239. package/dist/components/agent-tools/test-results/test-results.class.d.ts +1 -3
  240. package/dist/components/agent-tools/test-results/test-results.class.d.ts.map +1 -1
  241. package/dist/components/agent-tools/test-results/test-results.class.js +22 -37
  242. package/dist/components/agent-tools/test-results/test-results.class.js.map +1 -1
  243. package/dist/components/agent-tools/test-results/test-results.d.ts +3 -0
  244. package/dist/components/agent-tools/test-results/test-results.d.ts.map +1 -1
  245. package/dist/components/agent-tools/test-results/test-results.js +3 -0
  246. package/dist/components/agent-tools/test-results/test-results.js.map +1 -1
  247. package/dist/components/agent-tools/test-results/test-results.styles.d.ts.map +1 -1
  248. package/dist/components/agent-tools/test-results/test-results.styles.js +2 -0
  249. package/dist/components/agent-tools/test-results/test-results.styles.js.map +1 -1
  250. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts.map +1 -1
  251. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.js +7 -3
  252. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.js.map +1 -1
  253. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.d.ts.map +1 -1
  254. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +6 -2
  255. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js.map +1 -1
  256. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.d.ts.map +1 -1
  257. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js +18 -29
  258. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js.map +1 -1
  259. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.styles.d.ts.map +1 -1
  260. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.styles.js +5 -0
  261. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.styles.js.map +1 -1
  262. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +2 -1
  263. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts.map +1 -1
  264. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +10 -4
  265. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js.map +1 -1
  266. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.styles.js +1 -1
  267. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts +7 -0
  268. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts.map +1 -1
  269. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +24 -16
  270. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js.map +1 -1
  271. package/dist/components/agent-tools/tool-param-form/tool-param-form.styles.d.ts.map +1 -1
  272. package/dist/components/agent-tools/tool-param-form/tool-param-form.styles.js +3 -0
  273. package/dist/components/agent-tools/tool-param-form/tool-param-form.styles.js.map +1 -1
  274. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.d.ts +10 -1
  275. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.d.ts.map +1 -1
  276. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.js +18 -4
  277. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.js.map +1 -1
  278. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.d.ts.map +1 -1
  279. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +17 -9
  280. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js.map +1 -1
  281. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts.map +1 -1
  282. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +1 -0
  283. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js.map +1 -1
  284. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.d.ts +3 -0
  285. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.d.ts.map +1 -1
  286. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +29 -24
  287. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js.map +1 -1
  288. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.styles.d.ts.map +1 -1
  289. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.styles.js +6 -3
  290. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.styles.js.map +1 -1
  291. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +12 -5
  292. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts.map +1 -1
  293. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +60 -37
  294. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js.map +1 -1
  295. package/dist/components/agent-tools/tool-timeline/tool-timeline.d.ts +4 -0
  296. package/dist/components/agent-tools/tool-timeline/tool-timeline.d.ts.map +1 -1
  297. package/dist/components/agent-tools/tool-timeline/tool-timeline.js +4 -0
  298. package/dist/components/agent-tools/tool-timeline/tool-timeline.js.map +1 -1
  299. package/dist/components/agent-tools/tool-timeline/tool-timeline.styles.d.ts.map +1 -1
  300. package/dist/components/agent-tools/tool-timeline/tool-timeline.styles.js +12 -8
  301. package/dist/components/agent-tools/tool-timeline/tool-timeline.styles.js.map +1 -1
  302. package/dist/components/agent-tools/trace-tree/trace-tree.class.d.ts +14 -1
  303. package/dist/components/agent-tools/trace-tree/trace-tree.class.d.ts.map +1 -1
  304. package/dist/components/agent-tools/trace-tree/trace-tree.class.js +164 -51
  305. package/dist/components/agent-tools/trace-tree/trace-tree.class.js.map +1 -1
  306. package/dist/components/agent-tools/trace-tree/trace-tree.styles.d.ts.map +1 -1
  307. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +111 -24
  308. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js.map +1 -1
  309. package/dist/components/charts/chart/box-plot.class.d.ts +3 -0
  310. package/dist/components/charts/chart/box-plot.class.d.ts.map +1 -1
  311. package/dist/components/charts/chart/box-plot.class.js +57 -32
  312. package/dist/components/charts/chart/box-plot.class.js.map +1 -1
  313. package/dist/components/charts/chart/box-plot.styles.d.ts.map +1 -1
  314. package/dist/components/charts/chart/box-plot.styles.js +7 -0
  315. package/dist/components/charts/chart/box-plot.styles.js.map +1 -1
  316. package/dist/components/charts/chart/chart-colors.d.ts +17 -0
  317. package/dist/components/charts/chart/chart-colors.d.ts.map +1 -0
  318. package/dist/components/charts/chart/chart-colors.js +77 -0
  319. package/dist/components/charts/chart/chart-colors.js.map +1 -0
  320. package/dist/components/charts/chart/chart.class.d.ts +20 -8
  321. package/dist/components/charts/chart/chart.class.d.ts.map +1 -1
  322. package/dist/components/charts/chart/chart.class.js +188 -72
  323. package/dist/components/charts/chart/chart.class.js.map +1 -1
  324. package/dist/components/charts/chart/chart.styles.d.ts.map +1 -1
  325. package/dist/components/charts/chart/chart.styles.js +28 -0
  326. package/dist/components/charts/chart/chart.styles.js.map +1 -1
  327. package/dist/components/charts/chart/histogram-bin.d.ts +3 -2
  328. package/dist/components/charts/chart/histogram-bin.d.ts.map +1 -1
  329. package/dist/components/charts/chart/histogram-bin.js +17 -3
  330. package/dist/components/charts/chart/histogram-bin.js.map +1 -1
  331. package/dist/components/charts/chart/histogram.class.d.ts.map +1 -1
  332. package/dist/components/charts/chart/histogram.class.js +7 -3
  333. package/dist/components/charts/chart/histogram.class.js.map +1 -1
  334. package/dist/components/charts/chart/lite-chart.class.d.ts +18 -15
  335. package/dist/components/charts/chart/lite-chart.class.d.ts.map +1 -1
  336. package/dist/components/charts/chart/lite-chart.class.js +240 -97
  337. package/dist/components/charts/chart/lite-chart.class.js.map +1 -1
  338. package/dist/components/charts/chart/lite-chart.styles.d.ts.map +1 -1
  339. package/dist/components/charts/chart/lite-chart.styles.js +17 -1
  340. package/dist/components/charts/chart/lite-chart.styles.js.map +1 -1
  341. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +8 -13
  342. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts.map +1 -1
  343. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +44 -44
  344. package/dist/components/conversation/agent-workspace/agent-workspace.class.js.map +1 -1
  345. package/dist/components/conversation/agent-workspace/agent-workspace.d.ts +11 -0
  346. package/dist/components/conversation/agent-workspace/agent-workspace.d.ts.map +1 -1
  347. package/dist/components/conversation/agent-workspace/agent-workspace.js +11 -0
  348. package/dist/components/conversation/agent-workspace/agent-workspace.js.map +1 -1
  349. package/dist/components/conversation/agent-workspace/agent-workspace.styles.d.ts.map +1 -1
  350. package/dist/components/conversation/agent-workspace/agent-workspace.styles.js +4 -1
  351. package/dist/components/conversation/agent-workspace/agent-workspace.styles.js.map +1 -1
  352. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts.map +1 -1
  353. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +7 -5
  354. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js.map +1 -1
  355. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts +3 -0
  356. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts.map +1 -1
  357. package/dist/components/conversation/branch-picker/branch-picker.class.js +14 -2
  358. package/dist/components/conversation/branch-picker/branch-picker.class.js.map +1 -1
  359. package/dist/components/conversation/branch-picker/branch-picker.styles.d.ts.map +1 -1
  360. package/dist/components/conversation/branch-picker/branch-picker.styles.js +2 -0
  361. package/dist/components/conversation/branch-picker/branch-picker.styles.js.map +1 -1
  362. package/dist/components/conversation/chat-composer/chat-composer.class.d.ts +2 -16
  363. package/dist/components/conversation/chat-composer/chat-composer.class.d.ts.map +1 -1
  364. package/dist/components/conversation/chat-composer/chat-composer.class.js +6 -38
  365. package/dist/components/conversation/chat-composer/chat-composer.class.js.map +1 -1
  366. package/dist/components/conversation/chat-message/chat-message.class.d.ts +11 -0
  367. package/dist/components/conversation/chat-message/chat-message.class.d.ts.map +1 -1
  368. package/dist/components/conversation/chat-message/chat-message.class.js +16 -4
  369. package/dist/components/conversation/chat-message/chat-message.class.js.map +1 -1
  370. package/dist/components/conversation/chat-message/chat-message.styles.d.ts.map +1 -1
  371. package/dist/components/conversation/chat-message/chat-message.styles.js +22 -11
  372. package/dist/components/conversation/chat-message/chat-message.styles.js.map +1 -1
  373. package/dist/components/conversation/chat-viewport/chat-viewport.class.d.ts +3 -7
  374. package/dist/components/conversation/chat-viewport/chat-viewport.class.d.ts.map +1 -1
  375. package/dist/components/conversation/chat-viewport/chat-viewport.class.js +9 -28
  376. package/dist/components/conversation/chat-viewport/chat-viewport.class.js.map +1 -1
  377. package/dist/components/conversation/checkpoint/checkpoint.class.d.ts +7 -2
  378. package/dist/components/conversation/checkpoint/checkpoint.class.d.ts.map +1 -1
  379. package/dist/components/conversation/checkpoint/checkpoint.class.js +4 -11
  380. package/dist/components/conversation/checkpoint/checkpoint.class.js.map +1 -1
  381. package/dist/components/conversation/checkpoint/checkpoint.styles.js +1 -1
  382. package/dist/components/conversation/code-block/code-block-core.class.d.ts +5 -6
  383. package/dist/components/conversation/code-block/code-block-core.class.d.ts.map +1 -1
  384. package/dist/components/conversation/code-block/code-block-core.class.js +51 -20
  385. package/dist/components/conversation/code-block/code-block-core.class.js.map +1 -1
  386. package/dist/components/conversation/code-block/code-block-shared.d.ts +5 -1
  387. package/dist/components/conversation/code-block/code-block-shared.d.ts.map +1 -1
  388. package/dist/components/conversation/code-block/code-block-shared.js +22 -6
  389. package/dist/components/conversation/code-block/code-block-shared.js.map +1 -1
  390. package/dist/components/conversation/code-block/code-block.class.d.ts +7 -6
  391. package/dist/components/conversation/code-block/code-block.class.d.ts.map +1 -1
  392. package/dist/components/conversation/code-block/code-block.class.js +65 -29
  393. package/dist/components/conversation/code-block/code-block.class.js.map +1 -1
  394. package/dist/components/conversation/code-block/code-block.styles.d.ts.map +1 -1
  395. package/dist/components/conversation/code-block/code-block.styles.js +12 -4
  396. package/dist/components/conversation/code-block/code-block.styles.js.map +1 -1
  397. package/dist/components/conversation/conversation-item/conversation-item.class.d.ts +3 -0
  398. package/dist/components/conversation/conversation-item/conversation-item.class.d.ts.map +1 -1
  399. package/dist/components/conversation/conversation-item/conversation-item.class.js +44 -46
  400. package/dist/components/conversation/conversation-item/conversation-item.class.js.map +1 -1
  401. package/dist/components/conversation/generation-status/generation-status.class.d.ts.map +1 -1
  402. package/dist/components/conversation/generation-status/generation-status.class.js +8 -0
  403. package/dist/components/conversation/generation-status/generation-status.class.js.map +1 -1
  404. package/dist/components/conversation/generation-status/generation-status.styles.d.ts.map +1 -1
  405. package/dist/components/conversation/generation-status/generation-status.styles.js +4 -1
  406. package/dist/components/conversation/generation-status/generation-status.styles.js.map +1 -1
  407. package/dist/components/conversation/handoff-divider/handoff-divider.class.d.ts +0 -1
  408. package/dist/components/conversation/handoff-divider/handoff-divider.class.d.ts.map +1 -1
  409. package/dist/components/conversation/handoff-divider/handoff-divider.class.js +1 -2
  410. package/dist/components/conversation/handoff-divider/handoff-divider.class.js.map +1 -1
  411. package/dist/components/conversation/handoff-divider/handoff-divider.d.ts +1 -0
  412. package/dist/components/conversation/handoff-divider/handoff-divider.d.ts.map +1 -1
  413. package/dist/components/conversation/handoff-divider/handoff-divider.js +1 -0
  414. package/dist/components/conversation/handoff-divider/handoff-divider.js.map +1 -1
  415. package/dist/components/conversation/index.d.ts +36 -0
  416. package/dist/components/conversation/index.d.ts.map +1 -0
  417. package/dist/components/conversation/index.js +34 -0
  418. package/dist/components/conversation/index.js.map +1 -0
  419. package/dist/components/conversation/markdown/markdown-core.class.d.ts +13 -0
  420. package/dist/components/conversation/markdown/markdown-core.class.d.ts.map +1 -1
  421. package/dist/components/conversation/markdown/markdown-core.class.js +30 -17
  422. package/dist/components/conversation/markdown/markdown-core.class.js.map +1 -1
  423. package/dist/components/conversation/markdown/markdown-shared.js +1 -1
  424. package/dist/components/conversation/markdown/markdown-shared.js.map +1 -1
  425. package/dist/components/conversation/markdown/markdown.class.d.ts +13 -0
  426. package/dist/components/conversation/markdown/markdown.class.d.ts.map +1 -1
  427. package/dist/components/conversation/markdown/markdown.class.js +35 -14
  428. package/dist/components/conversation/markdown/markdown.class.js.map +1 -1
  429. package/dist/components/conversation/markdown/markdown.styles.d.ts.map +1 -1
  430. package/dist/components/conversation/markdown/markdown.styles.js +20 -13
  431. package/dist/components/conversation/markdown/markdown.styles.js.map +1 -1
  432. package/dist/components/conversation/message-actions/message-actions.class.d.ts +2 -0
  433. package/dist/components/conversation/message-actions/message-actions.class.d.ts.map +1 -1
  434. package/dist/components/conversation/message-actions/message-actions.class.js +32 -4
  435. package/dist/components/conversation/message-actions/message-actions.class.js.map +1 -1
  436. package/dist/components/conversation/message-actions/message-actions.styles.d.ts.map +1 -1
  437. package/dist/components/conversation/message-actions/message-actions.styles.js +0 -9
  438. package/dist/components/conversation/message-actions/message-actions.styles.js.map +1 -1
  439. package/dist/components/conversation/message-feedback/message-feedback.class.d.ts +2 -2
  440. package/dist/components/conversation/message-feedback/message-feedback.class.d.ts.map +1 -1
  441. package/dist/components/conversation/message-feedback/message-feedback.class.js +17 -3
  442. package/dist/components/conversation/message-feedback/message-feedback.class.js.map +1 -1
  443. package/dist/components/conversation/message-feedback/message-feedback.d.ts +2 -0
  444. package/dist/components/conversation/message-feedback/message-feedback.d.ts.map +1 -1
  445. package/dist/components/conversation/message-feedback/message-feedback.js +2 -0
  446. package/dist/components/conversation/message-feedback/message-feedback.js.map +1 -1
  447. package/dist/components/conversation/message-feedback/message-feedback.styles.d.ts.map +1 -1
  448. package/dist/components/conversation/message-feedback/message-feedback.styles.js +16 -5
  449. package/dist/components/conversation/message-feedback/message-feedback.styles.js.map +1 -1
  450. package/dist/components/conversation/message-parts/message-parts.class.d.ts +91 -0
  451. package/dist/components/conversation/message-parts/message-parts.class.d.ts.map +1 -0
  452. package/dist/components/conversation/message-parts/message-parts.class.js +230 -0
  453. package/dist/components/conversation/message-parts/message-parts.class.js.map +1 -0
  454. package/dist/components/conversation/message-parts/message-parts.d.ts +11 -0
  455. package/dist/components/conversation/message-parts/message-parts.d.ts.map +1 -0
  456. package/dist/components/conversation/message-parts/message-parts.js +14 -0
  457. package/dist/components/conversation/message-parts/message-parts.js.map +1 -0
  458. package/dist/components/conversation/message-parts/message-parts.styles.d.ts +2 -0
  459. package/dist/components/conversation/message-parts/message-parts.styles.d.ts.map +1 -0
  460. package/dist/components/conversation/message-parts/message-parts.styles.js +67 -0
  461. package/dist/components/conversation/message-parts/message-parts.styles.js.map +1 -0
  462. package/dist/components/conversation/model-select/model-select.class.d.ts +1 -1
  463. package/dist/components/conversation/model-select/model-select.class.d.ts.map +1 -1
  464. package/dist/components/conversation/model-select/model-select.class.js +13 -34
  465. package/dist/components/conversation/model-select/model-select.class.js.map +1 -1
  466. package/dist/components/conversation/model-select/model-select.styles.d.ts.map +1 -1
  467. package/dist/components/conversation/model-select/model-select.styles.js +1 -0
  468. package/dist/components/conversation/model-select/model-select.styles.js.map +1 -1
  469. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.d.ts.map +1 -1
  470. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js +7 -2
  471. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js.map +1 -1
  472. package/dist/components/conversation/model-settings-panel/model-settings-panel.styles.js +2 -2
  473. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +148 -0
  474. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts.map +1 -0
  475. package/dist/components/conversation/prompt-input/prompt-input.class.js +375 -0
  476. package/dist/components/conversation/prompt-input/prompt-input.class.js.map +1 -0
  477. package/dist/components/conversation/prompt-input/prompt-input.d.ts +10 -0
  478. package/dist/components/conversation/prompt-input/prompt-input.d.ts.map +1 -0
  479. package/dist/components/conversation/prompt-input/prompt-input.js +13 -0
  480. package/dist/components/conversation/prompt-input/prompt-input.js.map +1 -0
  481. package/dist/components/conversation/prompt-input/prompt-input.styles.d.ts +2 -0
  482. package/dist/components/conversation/prompt-input/prompt-input.styles.d.ts.map +1 -0
  483. package/dist/components/conversation/prompt-input/prompt-input.styles.js +74 -0
  484. package/dist/components/conversation/prompt-input/prompt-input.styles.js.map +1 -0
  485. package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +59 -0
  486. package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts.map +1 -0
  487. package/dist/components/conversation/prompt-queue/prompt-queue.class.js +145 -0
  488. package/dist/components/conversation/prompt-queue/prompt-queue.class.js.map +1 -0
  489. package/dist/components/conversation/prompt-queue/prompt-queue.d.ts +4 -0
  490. package/dist/components/conversation/prompt-queue/prompt-queue.d.ts.map +1 -0
  491. package/dist/components/conversation/prompt-queue/prompt-queue.js +7 -0
  492. package/dist/components/conversation/prompt-queue/prompt-queue.js.map +1 -0
  493. package/dist/components/conversation/prompt-queue/prompt-queue.styles.d.ts +2 -0
  494. package/dist/components/conversation/prompt-queue/prompt-queue.styles.d.ts.map +1 -0
  495. package/dist/components/conversation/prompt-queue/prompt-queue.styles.js +74 -0
  496. package/dist/components/conversation/prompt-queue/prompt-queue.styles.js.map +1 -0
  497. package/dist/components/conversation/push-to-talk/push-to-talk.class.d.ts +7 -1
  498. package/dist/components/conversation/push-to-talk/push-to-talk.class.d.ts.map +1 -1
  499. package/dist/components/conversation/push-to-talk/push-to-talk.class.js +40 -14
  500. package/dist/components/conversation/push-to-talk/push-to-talk.class.js.map +1 -1
  501. package/dist/components/conversation/push-to-talk/push-to-talk.styles.d.ts.map +1 -1
  502. package/dist/components/conversation/push-to-talk/push-to-talk.styles.js +4 -0
  503. package/dist/components/conversation/push-to-talk/push-to-talk.styles.js.map +1 -1
  504. package/dist/components/conversation/realtime-session/realtime-session.class.d.ts +66 -0
  505. package/dist/components/conversation/realtime-session/realtime-session.class.d.ts.map +1 -0
  506. package/dist/components/conversation/realtime-session/realtime-session.class.js +159 -0
  507. package/dist/components/conversation/realtime-session/realtime-session.class.js.map +1 -0
  508. package/dist/components/conversation/realtime-session/realtime-session.d.ts +6 -0
  509. package/dist/components/conversation/realtime-session/realtime-session.d.ts.map +1 -0
  510. package/dist/components/conversation/realtime-session/realtime-session.js +9 -0
  511. package/dist/components/conversation/realtime-session/realtime-session.js.map +1 -0
  512. package/dist/components/conversation/realtime-session/realtime-session.styles.d.ts +2 -0
  513. package/dist/components/conversation/realtime-session/realtime-session.styles.d.ts.map +1 -0
  514. package/dist/components/conversation/realtime-session/realtime-session.styles.js +20 -0
  515. package/dist/components/conversation/realtime-session/realtime-session.styles.js.map +1 -0
  516. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts +69 -0
  517. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts.map +1 -0
  518. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +268 -0
  519. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js.map +1 -0
  520. package/dist/components/conversation/selection-toolbar/selection-toolbar.d.ts +3 -0
  521. package/dist/components/conversation/selection-toolbar/selection-toolbar.d.ts.map +1 -0
  522. package/dist/components/conversation/selection-toolbar/selection-toolbar.js +6 -0
  523. package/dist/components/conversation/selection-toolbar/selection-toolbar.js.map +1 -0
  524. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.d.ts +2 -0
  525. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.d.ts.map +1 -0
  526. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js +62 -0
  527. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js.map +1 -0
  528. package/dist/components/conversation/stream-status/stream-status.styles.d.ts.map +1 -1
  529. package/dist/components/conversation/stream-status/stream-status.styles.js +10 -0
  530. package/dist/components/conversation/stream-status/stream-status.styles.js.map +1 -1
  531. package/dist/components/conversation/streaming-text/streaming-text.class.d.ts +1 -0
  532. package/dist/components/conversation/streaming-text/streaming-text.class.d.ts.map +1 -1
  533. package/dist/components/conversation/streaming-text/streaming-text.class.js +6 -0
  534. package/dist/components/conversation/streaming-text/streaming-text.class.js.map +1 -1
  535. package/dist/components/conversation/suggestion-chips/suggestion-chips.class.d.ts +2 -0
  536. package/dist/components/conversation/suggestion-chips/suggestion-chips.class.d.ts.map +1 -1
  537. package/dist/components/conversation/suggestion-chips/suggestion-chips.class.js +16 -1
  538. package/dist/components/conversation/suggestion-chips/suggestion-chips.class.js.map +1 -1
  539. package/dist/components/conversation/thread-list/thread-list.class.d.ts +5 -3
  540. package/dist/components/conversation/thread-list/thread-list.class.d.ts.map +1 -1
  541. package/dist/components/conversation/thread-list/thread-list.class.js +68 -40
  542. package/dist/components/conversation/thread-list/thread-list.class.js.map +1 -1
  543. package/dist/components/conversation/thread-list/thread-list.d.ts.map +1 -1
  544. package/dist/components/conversation/thread-list/thread-list.js +2 -2
  545. package/dist/components/conversation/thread-list/thread-list.js.map +1 -1
  546. package/dist/components/conversation/thread-list/thread-list.styles.d.ts.map +1 -1
  547. package/dist/components/conversation/thread-list/thread-list.styles.js +3 -0
  548. package/dist/components/conversation/thread-list/thread-list.styles.js.map +1 -1
  549. package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts.map +1 -1
  550. package/dist/components/conversation/transcript-feed/transcript-feed.class.js +14 -21
  551. package/dist/components/conversation/transcript-feed/transcript-feed.class.js.map +1 -1
  552. package/dist/components/conversation/transcript-feed/transcript-feed.styles.d.ts.map +1 -1
  553. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +16 -1
  554. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js.map +1 -1
  555. package/dist/components/conversation/usage-badge/usage-badge.class.d.ts +2 -1
  556. package/dist/components/conversation/usage-badge/usage-badge.class.d.ts.map +1 -1
  557. package/dist/components/conversation/usage-badge/usage-badge.class.js +30 -7
  558. package/dist/components/conversation/usage-badge/usage-badge.class.js.map +1 -1
  559. package/dist/components/conversation/usage-badge/usage-badge.styles.d.ts.map +1 -1
  560. package/dist/components/conversation/usage-badge/usage-badge.styles.js +21 -1
  561. package/dist/components/conversation/usage-badge/usage-badge.styles.js.map +1 -1
  562. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +24 -2
  563. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts.map +1 -1
  564. package/dist/components/conversation/voice-picker/voice-picker.class.js +97 -64
  565. package/dist/components/conversation/voice-picker/voice-picker.class.js.map +1 -1
  566. package/dist/components/conversation/voice-picker/voice-picker.styles.d.ts.map +1 -1
  567. package/dist/components/conversation/voice-picker/voice-picker.styles.js +22 -7
  568. package/dist/components/conversation/voice-picker/voice-picker.styles.js.map +1 -1
  569. package/dist/components/conversation/widget-renderer/registry.d.ts +6 -0
  570. package/dist/components/conversation/widget-renderer/registry.d.ts.map +1 -1
  571. package/dist/components/conversation/widget-renderer/registry.js.map +1 -1
  572. package/dist/components/conversation/widget-renderer/resolve.d.ts +18 -0
  573. package/dist/components/conversation/widget-renderer/resolve.d.ts.map +1 -1
  574. package/dist/components/conversation/widget-renderer/resolve.js +66 -4
  575. package/dist/components/conversation/widget-renderer/resolve.js.map +1 -1
  576. package/dist/components/conversation/widget-renderer/widget-renderer.class.d.ts +16 -1
  577. package/dist/components/conversation/widget-renderer/widget-renderer.class.d.ts.map +1 -1
  578. package/dist/components/conversation/widget-renderer/widget-renderer.class.js +70 -7
  579. package/dist/components/conversation/widget-renderer/widget-renderer.class.js.map +1 -1
  580. package/dist/components/conversation/widget-renderer/widget-renderer.styles.d.ts.map +1 -1
  581. package/dist/components/conversation/widget-renderer/widget-renderer.styles.js +6 -0
  582. package/dist/components/conversation/widget-renderer/widget-renderer.styles.js.map +1 -1
  583. package/dist/components/data/calendar/calendar.class.d.ts +3 -8
  584. package/dist/components/data/calendar/calendar.class.d.ts.map +1 -1
  585. package/dist/components/data/calendar/calendar.class.js +10 -11
  586. package/dist/components/data/calendar/calendar.class.js.map +1 -1
  587. package/dist/components/data/calendar/calendar.styles.d.ts.map +1 -1
  588. package/dist/components/data/calendar/calendar.styles.js +6 -1
  589. package/dist/components/data/calendar/calendar.styles.js.map +1 -1
  590. package/dist/components/data/context-meter/context-meter.class.d.ts +4 -3
  591. package/dist/components/data/context-meter/context-meter.class.d.ts.map +1 -1
  592. package/dist/components/data/context-meter/context-meter.class.js +34 -30
  593. package/dist/components/data/context-meter/context-meter.class.js.map +1 -1
  594. package/dist/components/data/document-library/document-library.class.d.ts +0 -7
  595. package/dist/components/data/document-library/document-library.class.d.ts.map +1 -1
  596. package/dist/components/data/document-library/document-library.class.js +15 -15
  597. package/dist/components/data/document-library/document-library.class.js.map +1 -1
  598. package/dist/components/data/env-list/env-list.class.d.ts +8 -1
  599. package/dist/components/data/env-list/env-list.class.d.ts.map +1 -1
  600. package/dist/components/data/env-list/env-list.class.js +13 -20
  601. package/dist/components/data/env-list/env-list.class.js.map +1 -1
  602. package/dist/components/data/env-list/env-list.d.ts +1 -0
  603. package/dist/components/data/env-list/env-list.d.ts.map +1 -1
  604. package/dist/components/data/env-list/env-list.js +1 -0
  605. package/dist/components/data/env-list/env-list.js.map +1 -1
  606. package/dist/components/data/env-list/env-list.styles.d.ts.map +1 -1
  607. package/dist/components/data/env-list/env-list.styles.js +3 -0
  608. package/dist/components/data/env-list/env-list.styles.js.map +1 -1
  609. package/dist/components/data/file-tree/file-tree.class.d.ts +0 -2
  610. package/dist/components/data/file-tree/file-tree.class.d.ts.map +1 -1
  611. package/dist/components/data/file-tree/file-tree.class.js +8 -8
  612. package/dist/components/data/file-tree/file-tree.class.js.map +1 -1
  613. package/dist/components/data/file-tree/file-tree.d.ts +2 -0
  614. package/dist/components/data/file-tree/file-tree.d.ts.map +1 -1
  615. package/dist/components/data/file-tree/file-tree.js +2 -0
  616. package/dist/components/data/file-tree/file-tree.js.map +1 -1
  617. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +13 -7
  618. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts.map +1 -1
  619. package/dist/components/data/flow-canvas/flow-canvas.class.js +106 -28
  620. package/dist/components/data/flow-canvas/flow-canvas.class.js.map +1 -1
  621. package/dist/components/data/flow-canvas/flow-canvas.styles.d.ts.map +1 -1
  622. package/dist/components/data/flow-canvas/flow-canvas.styles.js +22 -3
  623. package/dist/components/data/flow-canvas/flow-canvas.styles.js.map +1 -1
  624. package/dist/components/data/flow-controls/flow-controls.class.d.ts +1 -3
  625. package/dist/components/data/flow-controls/flow-controls.class.d.ts.map +1 -1
  626. package/dist/components/data/flow-controls/flow-controls.class.js +16 -16
  627. package/dist/components/data/flow-controls/flow-controls.class.js.map +1 -1
  628. package/dist/components/data/flow-minimap/flow-minimap.class.d.ts +6 -3
  629. package/dist/components/data/flow-minimap/flow-minimap.class.d.ts.map +1 -1
  630. package/dist/components/data/flow-minimap/flow-minimap.class.js +49 -15
  631. package/dist/components/data/flow-minimap/flow-minimap.class.js.map +1 -1
  632. package/dist/components/data/flow-node/flow-node.class.d.ts.map +1 -1
  633. package/dist/components/data/flow-node/flow-node.class.js +15 -4
  634. package/dist/components/data/flow-node/flow-node.class.js.map +1 -1
  635. package/dist/components/data/flow-run-overlay/flow-run-overlay.class.d.ts +3 -0
  636. package/dist/components/data/flow-run-overlay/flow-run-overlay.class.d.ts.map +1 -1
  637. package/dist/components/data/flow-run-overlay/flow-run-overlay.class.js +40 -13
  638. package/dist/components/data/flow-run-overlay/flow-run-overlay.class.js.map +1 -1
  639. package/dist/components/data/gauge/gauge.class.d.ts.map +1 -1
  640. package/dist/components/data/gauge/gauge.class.js +19 -16
  641. package/dist/components/data/gauge/gauge.class.js.map +1 -1
  642. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +16 -0
  643. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts.map +1 -1
  644. package/dist/components/data/graph-query-builder/graph-query-builder.class.js +119 -17
  645. package/dist/components/data/graph-query-builder/graph-query-builder.class.js.map +1 -1
  646. package/dist/components/data/graph-query-builder/graph-query-builder.styles.d.ts.map +1 -1
  647. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +18 -0
  648. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js.map +1 -1
  649. package/dist/components/data/heatmap/heatmap.class.d.ts +7 -13
  650. package/dist/components/data/heatmap/heatmap.class.d.ts.map +1 -1
  651. package/dist/components/data/heatmap/heatmap.class.js +123 -60
  652. package/dist/components/data/heatmap/heatmap.class.js.map +1 -1
  653. package/dist/components/data/heatmap/heatmap.styles.d.ts.map +1 -1
  654. package/dist/components/data/heatmap/heatmap.styles.js +2 -0
  655. package/dist/components/data/heatmap/heatmap.styles.js.map +1 -1
  656. package/dist/components/data/pagination/pagination.class.d.ts +4 -0
  657. package/dist/components/data/pagination/pagination.class.d.ts.map +1 -1
  658. package/dist/components/data/pagination/pagination.class.js +7 -0
  659. package/dist/components/data/pagination/pagination.class.js.map +1 -1
  660. package/dist/components/data/pagination/pagination.styles.d.ts.map +1 -1
  661. package/dist/components/data/pagination/pagination.styles.js +8 -6
  662. package/dist/components/data/pagination/pagination.styles.js.map +1 -1
  663. package/dist/components/data/query-builder/query-builder.class.d.ts +1 -0
  664. package/dist/components/data/query-builder/query-builder.class.d.ts.map +1 -1
  665. package/dist/components/data/query-builder/query-builder.class.js +15 -11
  666. package/dist/components/data/query-builder/query-builder.class.js.map +1 -1
  667. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +18 -14
  668. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts.map +1 -1
  669. package/dist/components/data/sequence-strip/sequence-strip.class.js +66 -13
  670. package/dist/components/data/sequence-strip/sequence-strip.class.js.map +1 -1
  671. package/dist/components/data/sequence-strip/sequence-strip.styles.d.ts.map +1 -1
  672. package/dist/components/data/sequence-strip/sequence-strip.styles.js +5 -0
  673. package/dist/components/data/sequence-strip/sequence-strip.styles.js.map +1 -1
  674. package/dist/components/data/sparkline/sparkline.class.d.ts.map +1 -1
  675. package/dist/components/data/sparkline/sparkline.class.js +6 -2
  676. package/dist/components/data/sparkline/sparkline.class.js.map +1 -1
  677. package/dist/components/data/stat/stat.class.d.ts.map +1 -1
  678. package/dist/components/data/stat/stat.class.js +10 -2
  679. package/dist/components/data/stat/stat.class.js.map +1 -1
  680. package/dist/components/data/stat/stat.styles.d.ts.map +1 -1
  681. package/dist/components/data/stat/stat.styles.js +24 -0
  682. package/dist/components/data/stat/stat.styles.js.map +1 -1
  683. package/dist/components/data/table/table.class.d.ts +102 -10
  684. package/dist/components/data/table/table.class.d.ts.map +1 -1
  685. package/dist/components/data/table/table.class.js +265 -45
  686. package/dist/components/data/table/table.class.js.map +1 -1
  687. package/dist/components/data/table/table.d.ts +3 -0
  688. package/dist/components/data/table/table.d.ts.map +1 -1
  689. package/dist/components/data/table/table.js +3 -0
  690. package/dist/components/data/table/table.js.map +1 -1
  691. package/dist/components/data/table/table.styles.d.ts.map +1 -1
  692. package/dist/components/data/table/table.styles.js +3 -0
  693. package/dist/components/data/table/table.styles.js.map +1 -1
  694. package/dist/components/data/timeline/timeline-item.class.d.ts.map +1 -1
  695. package/dist/components/data/timeline/timeline-item.class.js +9 -1
  696. package/dist/components/data/timeline/timeline-item.class.js.map +1 -1
  697. package/dist/components/data/timeline/timeline-item.styles.d.ts.map +1 -1
  698. package/dist/components/data/timeline/timeline-item.styles.js +4 -0
  699. package/dist/components/data/timeline/timeline-item.styles.js.map +1 -1
  700. package/dist/components/data/timeline/timeline.class.d.ts.map +1 -1
  701. package/dist/components/data/timeline/timeline.class.js +1 -1
  702. package/dist/components/data/timeline/timeline.class.js.map +1 -1
  703. package/dist/components/data/timeline/timeline.styles.d.ts.map +1 -1
  704. package/dist/components/data/timeline/timeline.styles.js +2 -0
  705. package/dist/components/data/timeline/timeline.styles.js.map +1 -1
  706. package/dist/components/data/tree/tree-item.d.ts +5 -0
  707. package/dist/components/data/tree/tree-item.d.ts.map +1 -1
  708. package/dist/components/data/tree/tree-node.class.d.ts +2 -0
  709. package/dist/components/data/tree/tree-node.class.d.ts.map +1 -1
  710. package/dist/components/data/tree/tree-node.class.js +25 -4
  711. package/dist/components/data/tree/tree-node.class.js.map +1 -1
  712. package/dist/components/data/tree/tree-node.styles.d.ts.map +1 -1
  713. package/dist/components/data/tree/tree-node.styles.js +11 -0
  714. package/dist/components/data/tree/tree-node.styles.js.map +1 -1
  715. package/dist/components/data/tree/tree.class.d.ts +1 -2
  716. package/dist/components/data/tree/tree.class.d.ts.map +1 -1
  717. package/dist/components/data/tree/tree.class.js +59 -19
  718. package/dist/components/data/tree/tree.class.js.map +1 -1
  719. package/dist/components/data/tree/tree.d.ts +2 -0
  720. package/dist/components/data/tree/tree.d.ts.map +1 -1
  721. package/dist/components/data/tree/tree.js +2 -0
  722. package/dist/components/data/tree/tree.js.map +1 -1
  723. package/dist/components/data/word-cloud/word-cloud.class.d.ts +5 -13
  724. package/dist/components/data/word-cloud/word-cloud.class.d.ts.map +1 -1
  725. package/dist/components/data/word-cloud/word-cloud.class.js +32 -28
  726. package/dist/components/data/word-cloud/word-cloud.class.js.map +1 -1
  727. package/dist/components/data/word-cloud/word-cloud.styles.d.ts.map +1 -1
  728. package/dist/components/data/word-cloud/word-cloud.styles.js +9 -0
  729. package/dist/components/data/word-cloud/word-cloud.styles.js.map +1 -1
  730. package/dist/components/forms/button/button.class.d.ts +19 -5
  731. package/dist/components/forms/button/button.class.d.ts.map +1 -1
  732. package/dist/components/forms/button/button.class.js +48 -9
  733. package/dist/components/forms/button/button.class.js.map +1 -1
  734. package/dist/components/forms/button/button.styles.js +1 -1
  735. package/dist/components/forms/checkbox/checkbox.class.d.ts.map +1 -1
  736. package/dist/components/forms/checkbox/checkbox.class.js +1 -10
  737. package/dist/components/forms/checkbox/checkbox.class.js.map +1 -1
  738. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +9 -1
  739. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts.map +1 -1
  740. package/dist/components/forms/checkbox-group/checkbox-group.class.js +91 -8
  741. package/dist/components/forms/checkbox-group/checkbox-group.class.js.map +1 -1
  742. package/dist/components/forms/code-editor/code-editor.class.d.ts +13 -1
  743. package/dist/components/forms/code-editor/code-editor.class.d.ts.map +1 -1
  744. package/dist/components/forms/code-editor/code-editor.class.js +22 -11
  745. package/dist/components/forms/code-editor/code-editor.class.js.map +1 -1
  746. package/dist/components/forms/code-editor/code-editor.styles.js +2 -2
  747. package/dist/components/forms/color-picker/color-picker.class.d.ts +8 -0
  748. package/dist/components/forms/color-picker/color-picker.class.d.ts.map +1 -1
  749. package/dist/components/forms/color-picker/color-picker.class.js +26 -0
  750. package/dist/components/forms/color-picker/color-picker.class.js.map +1 -1
  751. package/dist/components/forms/color-picker/color-picker.styles.d.ts.map +1 -1
  752. package/dist/components/forms/color-picker/color-picker.styles.js +7 -3
  753. package/dist/components/forms/color-picker/color-picker.styles.js.map +1 -1
  754. package/dist/components/forms/combobox/combobox.class.d.ts +5 -1
  755. package/dist/components/forms/combobox/combobox.class.d.ts.map +1 -1
  756. package/dist/components/forms/combobox/combobox.class.js +73 -18
  757. package/dist/components/forms/combobox/combobox.class.js.map +1 -1
  758. package/dist/components/forms/combobox/combobox.styles.d.ts.map +1 -1
  759. package/dist/components/forms/combobox/combobox.styles.js +17 -0
  760. package/dist/components/forms/combobox/combobox.styles.js.map +1 -1
  761. package/dist/components/forms/date-picker/date-input.class.d.ts +6 -0
  762. package/dist/components/forms/date-picker/date-input.class.d.ts.map +1 -1
  763. package/dist/components/forms/date-picker/date-input.class.js +10 -17
  764. package/dist/components/forms/date-picker/date-input.class.js.map +1 -1
  765. package/dist/components/forms/date-picker/date-input.styles.d.ts.map +1 -1
  766. package/dist/components/forms/date-picker/date-input.styles.js +8 -3
  767. package/dist/components/forms/date-picker/date-input.styles.js.map +1 -1
  768. package/dist/components/forms/date-picker/date-picker.class.d.ts +3 -0
  769. package/dist/components/forms/date-picker/date-picker.class.d.ts.map +1 -1
  770. package/dist/components/forms/date-picker/date-picker.class.js +3 -0
  771. package/dist/components/forms/date-picker/date-picker.class.js.map +1 -1
  772. package/dist/components/forms/date-picker/date-picker.styles.d.ts.map +1 -1
  773. package/dist/components/forms/date-picker/date-picker.styles.js +8 -5
  774. package/dist/components/forms/date-picker/date-picker.styles.js.map +1 -1
  775. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +7 -1
  776. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts.map +1 -1
  777. package/dist/components/forms/emoji-picker/emoji-picker.class.js +19 -7
  778. package/dist/components/forms/emoji-picker/emoji-picker.class.js.map +1 -1
  779. package/dist/components/forms/emoji-picker/emoji-picker.styles.d.ts.map +1 -1
  780. package/dist/components/forms/emoji-picker/emoji-picker.styles.js +14 -8
  781. package/dist/components/forms/emoji-picker/emoji-picker.styles.js.map +1 -1
  782. package/dist/components/forms/icon-button/icon-button.class.d.ts +16 -0
  783. package/dist/components/forms/icon-button/icon-button.class.d.ts.map +1 -1
  784. package/dist/components/forms/icon-button/icon-button.class.js +54 -2
  785. package/dist/components/forms/icon-button/icon-button.class.js.map +1 -1
  786. package/dist/components/forms/icon-button/icon-button.styles.js +2 -2
  787. package/dist/components/forms/input/input.class.d.ts +1 -0
  788. package/dist/components/forms/input/input.class.d.ts.map +1 -1
  789. package/dist/components/forms/input/input.class.js +5 -4
  790. package/dist/components/forms/input/input.class.js.map +1 -1
  791. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +6 -0
  792. package/dist/components/forms/locale-picker/locale-picker.class.d.ts.map +1 -1
  793. package/dist/components/forms/locale-picker/locale-picker.class.js +7 -5
  794. package/dist/components/forms/locale-picker/locale-picker.class.js.map +1 -1
  795. package/dist/components/forms/locale-picker/locale-picker.styles.d.ts.map +1 -1
  796. package/dist/components/forms/locale-picker/locale-picker.styles.js +11 -9
  797. package/dist/components/forms/locale-picker/locale-picker.styles.js.map +1 -1
  798. package/dist/components/forms/phone-input/phone-input.class.d.ts +11 -0
  799. package/dist/components/forms/phone-input/phone-input.class.d.ts.map +1 -1
  800. package/dist/components/forms/phone-input/phone-input.class.js +37 -20
  801. package/dist/components/forms/phone-input/phone-input.class.js.map +1 -1
  802. package/dist/components/forms/phone-input/phone-input.styles.d.ts.map +1 -1
  803. package/dist/components/forms/phone-input/phone-input.styles.js +23 -9
  804. package/dist/components/forms/phone-input/phone-input.styles.js.map +1 -1
  805. package/dist/components/forms/radio/radio-group.class.d.ts +5 -0
  806. package/dist/components/forms/radio/radio-group.class.d.ts.map +1 -1
  807. package/dist/components/forms/radio/radio-group.class.js +44 -5
  808. package/dist/components/forms/radio/radio-group.class.js.map +1 -1
  809. package/dist/components/forms/rubric-form/rubric-form.class.d.ts +1 -0
  810. package/dist/components/forms/rubric-form/rubric-form.class.d.ts.map +1 -1
  811. package/dist/components/forms/rubric-form/rubric-form.class.js +91 -20
  812. package/dist/components/forms/rubric-form/rubric-form.class.js.map +1 -1
  813. package/dist/components/forms/rubric-form/rubric-form.styles.d.ts.map +1 -1
  814. package/dist/components/forms/rubric-form/rubric-form.styles.js +7 -1
  815. package/dist/components/forms/rubric-form/rubric-form.styles.js.map +1 -1
  816. package/dist/components/forms/select/select.class.d.ts +3 -0
  817. package/dist/components/forms/select/select.class.d.ts.map +1 -1
  818. package/dist/components/forms/select/select.class.js +41 -20
  819. package/dist/components/forms/select/select.class.js.map +1 -1
  820. package/dist/components/forms/slider/slider.class.d.ts +8 -6
  821. package/dist/components/forms/slider/slider.class.d.ts.map +1 -1
  822. package/dist/components/forms/slider/slider.class.js +21 -28
  823. package/dist/components/forms/slider/slider.class.js.map +1 -1
  824. package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts +5 -1
  825. package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts.map +1 -1
  826. package/dist/components/forms/swatch-picker/swatch-picker.class.js +41 -12
  827. package/dist/components/forms/swatch-picker/swatch-picker.class.js.map +1 -1
  828. package/dist/components/forms/swatch-picker/swatch-picker.styles.d.ts.map +1 -1
  829. package/dist/components/forms/swatch-picker/swatch-picker.styles.js +9 -4
  830. package/dist/components/forms/swatch-picker/swatch-picker.styles.js.map +1 -1
  831. package/dist/components/forms/textarea/textarea.class.d.ts +5 -0
  832. package/dist/components/forms/textarea/textarea.class.d.ts.map +1 -1
  833. package/dist/components/forms/textarea/textarea.class.js +5 -8
  834. package/dist/components/forms/textarea/textarea.class.js.map +1 -1
  835. package/dist/components/forms/time-range/time-range.class.d.ts +19 -0
  836. package/dist/components/forms/time-range/time-range.class.d.ts.map +1 -1
  837. package/dist/components/forms/time-range/time-range.class.js +80 -23
  838. package/dist/components/forms/time-range/time-range.class.js.map +1 -1
  839. package/dist/components/forms/time-range/time-range.styles.d.ts.map +1 -1
  840. package/dist/components/forms/time-range/time-range.styles.js +60 -12
  841. package/dist/components/forms/time-range/time-range.styles.js.map +1 -1
  842. package/dist/components/forms/token-input/token-input.class.d.ts +14 -0
  843. package/dist/components/forms/token-input/token-input.class.d.ts.map +1 -1
  844. package/dist/components/forms/token-input/token-input.class.js +27 -4
  845. package/dist/components/forms/token-input/token-input.class.js.map +1 -1
  846. package/dist/components/forms/token-input/token-input.styles.d.ts.map +1 -1
  847. package/dist/components/forms/token-input/token-input.styles.js +30 -9
  848. package/dist/components/forms/token-input/token-input.styles.js.map +1 -1
  849. package/dist/components/layout/app-rail/app-rail-item.class.d.ts +3 -3
  850. package/dist/components/layout/app-rail/app-rail-item.class.d.ts.map +1 -1
  851. package/dist/components/layout/app-rail/app-rail-item.class.js +33 -24
  852. package/dist/components/layout/app-rail/app-rail-item.class.js.map +1 -1
  853. package/dist/components/layout/app-rail/app-rail-item.styles.d.ts.map +1 -1
  854. package/dist/components/layout/app-rail/app-rail-item.styles.js +18 -12
  855. package/dist/components/layout/app-rail/app-rail-item.styles.js.map +1 -1
  856. package/dist/components/layout/app-rail/app-rail.class.d.ts +19 -10
  857. package/dist/components/layout/app-rail/app-rail.class.d.ts.map +1 -1
  858. package/dist/components/layout/app-rail/app-rail.class.js +62 -14
  859. package/dist/components/layout/app-rail/app-rail.class.js.map +1 -1
  860. package/dist/components/layout/breadcrumb/breadcrumb-item.class.d.ts +4 -3
  861. package/dist/components/layout/breadcrumb/breadcrumb-item.class.d.ts.map +1 -1
  862. package/dist/components/layout/breadcrumb/breadcrumb-item.class.js +14 -9
  863. package/dist/components/layout/breadcrumb/breadcrumb-item.class.js.map +1 -1
  864. package/dist/components/layout/breadcrumb/breadcrumb-item.styles.d.ts.map +1 -1
  865. package/dist/components/layout/breadcrumb/breadcrumb-item.styles.js +16 -5
  866. package/dist/components/layout/breadcrumb/breadcrumb-item.styles.js.map +1 -1
  867. package/dist/components/layout/breadcrumb/breadcrumb.styles.d.ts.map +1 -1
  868. package/dist/components/layout/breadcrumb/breadcrumb.styles.js +15 -8
  869. package/dist/components/layout/breadcrumb/breadcrumb.styles.js.map +1 -1
  870. package/dist/components/layout/card/card.class.d.ts +16 -8
  871. package/dist/components/layout/card/card.class.d.ts.map +1 -1
  872. package/dist/components/layout/card/card.class.js +84 -41
  873. package/dist/components/layout/card/card.class.js.map +1 -1
  874. package/dist/components/layout/card/card.styles.d.ts.map +1 -1
  875. package/dist/components/layout/card/card.styles.js +33 -20
  876. package/dist/components/layout/card/card.styles.js.map +1 -1
  877. package/dist/components/layout/carousel/carousel.class.d.ts +8 -4
  878. package/dist/components/layout/carousel/carousel.class.d.ts.map +1 -1
  879. package/dist/components/layout/carousel/carousel.class.js +133 -65
  880. package/dist/components/layout/carousel/carousel.class.js.map +1 -1
  881. package/dist/components/layout/carousel/carousel.styles.d.ts.map +1 -1
  882. package/dist/components/layout/carousel/carousel.styles.js +38 -28
  883. package/dist/components/layout/carousel/carousel.styles.js.map +1 -1
  884. package/dist/components/layout/command-palette/command-palette.class.d.ts +31 -6
  885. package/dist/components/layout/command-palette/command-palette.class.d.ts.map +1 -1
  886. package/dist/components/layout/command-palette/command-palette.class.js +369 -66
  887. package/dist/components/layout/command-palette/command-palette.class.js.map +1 -1
  888. package/dist/components/layout/command-palette/command-palette.styles.d.ts.map +1 -1
  889. package/dist/components/layout/command-palette/command-palette.styles.js +164 -18
  890. package/dist/components/layout/command-palette/command-palette.styles.js.map +1 -1
  891. package/dist/components/layout/dashboard-grid/dashboard-grid.class.d.ts +12 -8
  892. package/dist/components/layout/dashboard-grid/dashboard-grid.class.d.ts.map +1 -1
  893. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +199 -111
  894. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js.map +1 -1
  895. package/dist/components/layout/dashboard-grid/dashboard-grid.styles.d.ts.map +1 -1
  896. package/dist/components/layout/dashboard-grid/dashboard-grid.styles.js +25 -18
  897. package/dist/components/layout/dashboard-grid/dashboard-grid.styles.js.map +1 -1
  898. package/dist/components/layout/details/accordion.class.d.ts +6 -3
  899. package/dist/components/layout/details/accordion.class.d.ts.map +1 -1
  900. package/dist/components/layout/details/accordion.class.js +47 -14
  901. package/dist/components/layout/details/accordion.class.js.map +1 -1
  902. package/dist/components/layout/dock-panel/dock-panel.class.d.ts +6 -6
  903. package/dist/components/layout/dock-panel/dock-panel.class.d.ts.map +1 -1
  904. package/dist/components/layout/dock-panel/dock-panel.class.js +76 -74
  905. package/dist/components/layout/dock-panel/dock-panel.class.js.map +1 -1
  906. package/dist/components/layout/dock-panel/dock-panel.styles.d.ts.map +1 -1
  907. package/dist/components/layout/dock-panel/dock-panel.styles.js +39 -36
  908. package/dist/components/layout/dock-panel/dock-panel.styles.js.map +1 -1
  909. package/dist/components/layout/drilldown-panel/drilldown-panel.class.d.ts.map +1 -1
  910. package/dist/components/layout/drilldown-panel/drilldown-panel.class.js +1 -14
  911. package/dist/components/layout/drilldown-panel/drilldown-panel.class.js.map +1 -1
  912. package/dist/components/layout/filter-bar/filter-bar.class.d.ts +17 -16
  913. package/dist/components/layout/filter-bar/filter-bar.class.d.ts.map +1 -1
  914. package/dist/components/layout/filter-bar/filter-bar.class.js +126 -60
  915. package/dist/components/layout/filter-bar/filter-bar.class.js.map +1 -1
  916. package/dist/components/layout/menu/menu.class.d.ts +24 -19
  917. package/dist/components/layout/menu/menu.class.d.ts.map +1 -1
  918. package/dist/components/layout/menu/menu.class.js +108 -76
  919. package/dist/components/layout/menu/menu.class.js.map +1 -1
  920. package/dist/components/layout/menu/menu.styles.d.ts.map +1 -1
  921. package/dist/components/layout/menu/menu.styles.js +28 -19
  922. package/dist/components/layout/menu/menu.styles.js.map +1 -1
  923. package/dist/components/layout/reorder-list/reorder-list.class.d.ts +5 -6
  924. package/dist/components/layout/reorder-list/reorder-list.class.d.ts.map +1 -1
  925. package/dist/components/layout/reorder-list/reorder-list.class.js +52 -32
  926. package/dist/components/layout/reorder-list/reorder-list.class.js.map +1 -1
  927. package/dist/components/layout/reorder-list/reorder-list.d.ts +2 -1
  928. package/dist/components/layout/reorder-list/reorder-list.d.ts.map +1 -1
  929. package/dist/components/layout/reorder-list/reorder-list.js +5 -4
  930. package/dist/components/layout/reorder-list/reorder-list.js.map +1 -1
  931. package/dist/components/layout/responsive-panel/responsive-panel.class.d.ts +11 -9
  932. package/dist/components/layout/responsive-panel/responsive-panel.class.d.ts.map +1 -1
  933. package/dist/components/layout/responsive-panel/responsive-panel.class.js +87 -45
  934. package/dist/components/layout/responsive-panel/responsive-panel.class.js.map +1 -1
  935. package/dist/components/layout/scroller/scroller.class.d.ts +6 -5
  936. package/dist/components/layout/scroller/scroller.class.d.ts.map +1 -1
  937. package/dist/components/layout/scroller/scroller.class.js +89 -37
  938. package/dist/components/layout/scroller/scroller.class.js.map +1 -1
  939. package/dist/components/layout/scroller/scroller.styles.d.ts.map +1 -1
  940. package/dist/components/layout/scroller/scroller.styles.js +27 -22
  941. package/dist/components/layout/scroller/scroller.styles.js.map +1 -1
  942. package/dist/components/layout/segmented/segmented.class.d.ts +11 -6
  943. package/dist/components/layout/segmented/segmented.class.d.ts.map +1 -1
  944. package/dist/components/layout/segmented/segmented.class.js +92 -41
  945. package/dist/components/layout/segmented/segmented.class.js.map +1 -1
  946. package/dist/components/layout/segmented/segmented.styles.d.ts.map +1 -1
  947. package/dist/components/layout/segmented/segmented.styles.js +26 -18
  948. package/dist/components/layout/segmented/segmented.styles.js.map +1 -1
  949. package/dist/components/layout/split/split.class.d.ts +22 -15
  950. package/dist/components/layout/split/split.class.d.ts.map +1 -1
  951. package/dist/components/layout/split/split.class.js +283 -163
  952. package/dist/components/layout/split/split.class.js.map +1 -1
  953. package/dist/components/layout/stepper/stepper.class.d.ts +14 -14
  954. package/dist/components/layout/stepper/stepper.class.d.ts.map +1 -1
  955. package/dist/components/layout/stepper/stepper.class.js +106 -74
  956. package/dist/components/layout/stepper/stepper.class.js.map +1 -1
  957. package/dist/components/layout/stepper/stepper.styles.d.ts.map +1 -1
  958. package/dist/components/layout/stepper/stepper.styles.js +24 -18
  959. package/dist/components/layout/stepper/stepper.styles.js.map +1 -1
  960. package/dist/components/layout/tabs/tabs.styles.d.ts.map +1 -1
  961. package/dist/components/layout/tabs/tabs.styles.js +22 -15
  962. package/dist/components/layout/tabs/tabs.styles.js.map +1 -1
  963. package/dist/components/layout/virtual-list/virtual-list.class.d.ts +23 -19
  964. package/dist/components/layout/virtual-list/virtual-list.class.d.ts.map +1 -1
  965. package/dist/components/layout/virtual-list/virtual-list.class.js +171 -100
  966. package/dist/components/layout/virtual-list/virtual-list.class.js.map +1 -1
  967. package/dist/components/layout/widget/widget.class.d.ts +13 -6
  968. package/dist/components/layout/widget/widget.class.d.ts.map +1 -1
  969. package/dist/components/layout/widget/widget.class.js +165 -64
  970. package/dist/components/layout/widget/widget.class.js.map +1 -1
  971. package/dist/components/layout/widget/widget.styles.d.ts.map +1 -1
  972. package/dist/components/layout/widget/widget.styles.js +65 -40
  973. package/dist/components/layout/widget/widget.styles.js.map +1 -1
  974. package/dist/components/media/animated-image/animated-image.class.d.ts +2 -0
  975. package/dist/components/media/animated-image/animated-image.class.d.ts.map +1 -1
  976. package/dist/components/media/animated-image/animated-image.class.js +17 -17
  977. package/dist/components/media/animated-image/animated-image.class.js.map +1 -1
  978. package/dist/components/media/animation/animation.class.d.ts +3 -0
  979. package/dist/components/media/animation/animation.class.d.ts.map +1 -1
  980. package/dist/components/media/animation/animation.class.js +35 -21
  981. package/dist/components/media/animation/animation.class.js.map +1 -1
  982. package/dist/components/media/attachment-chip/attachment-chip.class.d.ts +4 -17
  983. package/dist/components/media/attachment-chip/attachment-chip.class.d.ts.map +1 -1
  984. package/dist/components/media/attachment-chip/attachment-chip.class.js +20 -50
  985. package/dist/components/media/attachment-chip/attachment-chip.class.js.map +1 -1
  986. package/dist/components/media/attachment-chip/attachment-chip.styles.js +2 -2
  987. package/dist/components/media/attachment-chip/file-size.d.ts +11 -0
  988. package/dist/components/media/attachment-chip/file-size.d.ts.map +1 -0
  989. package/dist/components/media/attachment-chip/file-size.js +28 -0
  990. package/dist/components/media/attachment-chip/file-size.js.map +1 -0
  991. package/dist/components/media/attachment-trigger/attachment-trigger.class.d.ts +7 -2
  992. package/dist/components/media/attachment-trigger/attachment-trigger.class.d.ts.map +1 -1
  993. package/dist/components/media/attachment-trigger/attachment-trigger.class.js +36 -19
  994. package/dist/components/media/attachment-trigger/attachment-trigger.class.js.map +1 -1
  995. package/dist/components/media/av-player/av-player.class.d.ts +5 -1
  996. package/dist/components/media/av-player/av-player.class.d.ts.map +1 -1
  997. package/dist/components/media/av-player/av-player.class.js +115 -38
  998. package/dist/components/media/av-player/av-player.class.js.map +1 -1
  999. package/dist/components/media/av-player/av-player.d.ts +1 -0
  1000. package/dist/components/media/av-player/av-player.d.ts.map +1 -1
  1001. package/dist/components/media/av-player/av-player.js +1 -0
  1002. package/dist/components/media/av-player/av-player.js.map +1 -1
  1003. package/dist/components/media/av-player/av-player.styles.d.ts.map +1 -1
  1004. package/dist/components/media/av-player/av-player.styles.js +2 -0
  1005. package/dist/components/media/av-player/av-player.styles.js.map +1 -1
  1006. package/dist/components/media/avatar-group/avatar-group.class.d.ts +3 -0
  1007. package/dist/components/media/avatar-group/avatar-group.class.d.ts.map +1 -1
  1008. package/dist/components/media/avatar-group/avatar-group.class.js +34 -6
  1009. package/dist/components/media/avatar-group/avatar-group.class.js.map +1 -1
  1010. package/dist/components/media/file-icon/file-icon.class.d.ts.map +1 -1
  1011. package/dist/components/media/file-icon/file-icon.class.js +5 -2
  1012. package/dist/components/media/file-icon/file-icon.class.js.map +1 -1
  1013. package/dist/components/media/file-input/file-input.class.d.ts +8 -9
  1014. package/dist/components/media/file-input/file-input.class.d.ts.map +1 -1
  1015. package/dist/components/media/file-input/file-input.class.js +27 -29
  1016. package/dist/components/media/file-input/file-input.class.js.map +1 -1
  1017. package/dist/components/media/flag/flag.class.d.ts +7 -3
  1018. package/dist/components/media/flag/flag.class.d.ts.map +1 -1
  1019. package/dist/components/media/flag/flag.class.js +29 -5
  1020. package/dist/components/media/flag/flag.class.js.map +1 -1
  1021. package/dist/components/media/flag/flag.styles.d.ts.map +1 -1
  1022. package/dist/components/media/flag/flag.styles.js +6 -0
  1023. package/dist/components/media/flag/flag.styles.js.map +1 -1
  1024. package/dist/components/media/image-comparer/image-comparer.class.d.ts +7 -0
  1025. package/dist/components/media/image-comparer/image-comparer.class.d.ts.map +1 -1
  1026. package/dist/components/media/image-comparer/image-comparer.class.js +17 -1
  1027. package/dist/components/media/image-comparer/image-comparer.class.js.map +1 -1
  1028. package/dist/components/media/image-viewer/image-viewer.class.d.ts +12 -2
  1029. package/dist/components/media/image-viewer/image-viewer.class.d.ts.map +1 -1
  1030. package/dist/components/media/image-viewer/image-viewer.class.js +60 -15
  1031. package/dist/components/media/image-viewer/image-viewer.class.js.map +1 -1
  1032. package/dist/components/media/image-viewer/image-viewer.styles.d.ts.map +1 -1
  1033. package/dist/components/media/image-viewer/image-viewer.styles.js +21 -7
  1034. package/dist/components/media/image-viewer/image-viewer.styles.js.map +1 -1
  1035. package/dist/components/media/lightbox/lightbox.class.d.ts.map +1 -1
  1036. package/dist/components/media/lightbox/lightbox.class.js +45 -3
  1037. package/dist/components/media/lightbox/lightbox.class.js.map +1 -1
  1038. package/dist/components/media/map/map-loader.d.ts +2 -1
  1039. package/dist/components/media/map/map-loader.d.ts.map +1 -1
  1040. package/dist/components/media/map/map-loader.js +2 -1
  1041. package/dist/components/media/map/map-loader.js.map +1 -1
  1042. package/dist/components/media/map/map.class.d.ts +10 -1
  1043. package/dist/components/media/map/map.class.d.ts.map +1 -1
  1044. package/dist/components/media/map/map.class.js +47 -8
  1045. package/dist/components/media/map/map.class.js.map +1 -1
  1046. package/dist/components/media/media-card/media-card.class.d.ts +16 -0
  1047. package/dist/components/media/media-card/media-card.class.d.ts.map +1 -1
  1048. package/dist/components/media/media-card/media-card.class.js +24 -0
  1049. package/dist/components/media/media-card/media-card.class.js.map +1 -1
  1050. package/dist/components/media/playback/playback.class.d.ts +4 -6
  1051. package/dist/components/media/playback/playback.class.d.ts.map +1 -1
  1052. package/dist/components/media/playback/playback.class.js +7 -22
  1053. package/dist/components/media/playback/playback.class.js.map +1 -1
  1054. package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts.map +1 -1
  1055. package/dist/components/media/zoomable-frame/zoomable-frame.class.js +15 -1
  1056. package/dist/components/media/zoomable-frame/zoomable-frame.class.js.map +1 -1
  1057. package/dist/components/media/zoomable-frame/zoomable-frame.styles.d.ts.map +1 -1
  1058. package/dist/components/media/zoomable-frame/zoomable-frame.styles.js +3 -0
  1059. package/dist/components/media/zoomable-frame/zoomable-frame.styles.js.map +1 -1
  1060. package/dist/components/overlays/callout/callout.class.d.ts +8 -5
  1061. package/dist/components/overlays/callout/callout.class.d.ts.map +1 -1
  1062. package/dist/components/overlays/callout/callout.class.js +26 -21
  1063. package/dist/components/overlays/callout/callout.class.js.map +1 -1
  1064. package/dist/components/overlays/chip/chip-group.class.d.ts +3 -0
  1065. package/dist/components/overlays/chip/chip-group.class.d.ts.map +1 -1
  1066. package/dist/components/overlays/chip/chip-group.class.js +22 -1
  1067. package/dist/components/overlays/chip/chip-group.class.js.map +1 -1
  1068. package/dist/components/overlays/chip/chip.class.d.ts +26 -15
  1069. package/dist/components/overlays/chip/chip.class.d.ts.map +1 -1
  1070. package/dist/components/overlays/chip/chip.class.js +58 -32
  1071. package/dist/components/overlays/chip/chip.class.js.map +1 -1
  1072. package/dist/components/overlays/chip/chip.styles.d.ts.map +1 -1
  1073. package/dist/components/overlays/chip/chip.styles.js +28 -19
  1074. package/dist/components/overlays/chip/chip.styles.js.map +1 -1
  1075. package/dist/components/overlays/dialog/dialog.class.d.ts +1 -0
  1076. package/dist/components/overlays/dialog/dialog.class.d.ts.map +1 -1
  1077. package/dist/components/overlays/dialog/dialog.class.js +6 -5
  1078. package/dist/components/overlays/dialog/dialog.class.js.map +1 -1
  1079. package/dist/components/overlays/empty/empty.class.d.ts +8 -2
  1080. package/dist/components/overlays/empty/empty.class.d.ts.map +1 -1
  1081. package/dist/components/overlays/empty/empty.class.js +22 -2
  1082. package/dist/components/overlays/empty/empty.class.js.map +1 -1
  1083. package/dist/components/overlays/kbd/kbd.class.js +1 -1
  1084. package/dist/components/overlays/kbd/kbd.class.js.map +1 -1
  1085. package/dist/components/overlays/overlay/overlay.styles.d.ts.map +1 -1
  1086. package/dist/components/overlays/overlay/overlay.styles.js +1 -2
  1087. package/dist/components/overlays/overlay/overlay.styles.js.map +1 -1
  1088. package/dist/components/overlays/overlay/popover.class.d.ts +29 -23
  1089. package/dist/components/overlays/overlay/popover.class.d.ts.map +1 -1
  1090. package/dist/components/overlays/overlay/popover.class.js +161 -64
  1091. package/dist/components/overlays/overlay/popover.class.js.map +1 -1
  1092. package/dist/components/overlays/overlay/tooltip.class.d.ts +20 -1
  1093. package/dist/components/overlays/overlay/tooltip.class.d.ts.map +1 -1
  1094. package/dist/components/overlays/overlay/tooltip.class.js +169 -17
  1095. package/dist/components/overlays/overlay/tooltip.class.js.map +1 -1
  1096. package/dist/components/overlays/progress/progress-bar.class.d.ts +3 -0
  1097. package/dist/components/overlays/progress/progress-bar.class.d.ts.map +1 -1
  1098. package/dist/components/overlays/progress/progress-bar.class.js +13 -4
  1099. package/dist/components/overlays/progress/progress-bar.class.js.map +1 -1
  1100. package/dist/components/overlays/progress/progress-ring.class.d.ts +2 -0
  1101. package/dist/components/overlays/progress/progress-ring.class.d.ts.map +1 -1
  1102. package/dist/components/overlays/progress/progress-ring.class.js +13 -4
  1103. package/dist/components/overlays/progress/progress-ring.class.js.map +1 -1
  1104. package/dist/components/overlays/progress/progress.styles.js +3 -3
  1105. package/dist/components/overlays/rating/rating.class.d.ts +7 -0
  1106. package/dist/components/overlays/rating/rating.class.d.ts.map +1 -1
  1107. package/dist/components/overlays/rating/rating.class.js +17 -0
  1108. package/dist/components/overlays/rating/rating.class.js.map +1 -1
  1109. package/dist/components/overlays/skeleton/skeleton.class.d.ts.map +1 -1
  1110. package/dist/components/overlays/skeleton/skeleton.class.js +1 -14
  1111. package/dist/components/overlays/skeleton/skeleton.class.js.map +1 -1
  1112. package/dist/components/overlays/spinner/spinner.class.d.ts +2 -1
  1113. package/dist/components/overlays/spinner/spinner.class.d.ts.map +1 -1
  1114. package/dist/components/overlays/spinner/spinner.class.js +2 -1
  1115. package/dist/components/overlays/spinner/spinner.class.js.map +1 -1
  1116. package/dist/components/overlays/spinner/spinner.styles.js +1 -1
  1117. package/dist/components/overlays/toast/toast-item.class.d.ts +2 -0
  1118. package/dist/components/overlays/toast/toast-item.class.d.ts.map +1 -1
  1119. package/dist/components/overlays/toast/toast-item.class.js +19 -1
  1120. package/dist/components/overlays/toast/toast-item.class.js.map +1 -1
  1121. package/dist/components/overlays/toast/toast-item.styles.d.ts.map +1 -1
  1122. package/dist/components/overlays/toast/toast-item.styles.js +9 -1
  1123. package/dist/components/overlays/toast/toast-item.styles.js.map +1 -1
  1124. package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.d.ts.map +1 -1
  1125. package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.js +6 -2
  1126. package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.js.map +1 -1
  1127. package/dist/components/retrieval/chunk-inspector/chunk-inspector.styles.d.ts.map +1 -1
  1128. package/dist/components/retrieval/chunk-inspector/chunk-inspector.styles.js +6 -0
  1129. package/dist/components/retrieval/chunk-inspector/chunk-inspector.styles.js.map +1 -1
  1130. package/dist/components/retrieval/citation-badge/citation-badge.class.js +1 -1
  1131. package/dist/components/retrieval/citation-badge/citation-badge.class.js.map +1 -1
  1132. package/dist/components/retrieval/citation-badge/citation-badge.styles.d.ts.map +1 -1
  1133. package/dist/components/retrieval/citation-badge/citation-badge.styles.js +2 -0
  1134. package/dist/components/retrieval/citation-badge/citation-badge.styles.js.map +1 -1
  1135. package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts +50 -0
  1136. package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts.map +1 -0
  1137. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +133 -0
  1138. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js.map +1 -0
  1139. package/dist/components/retrieval/claim-evidence/claim-evidence.d.ts +5 -0
  1140. package/dist/components/retrieval/claim-evidence/claim-evidence.d.ts.map +1 -0
  1141. package/dist/components/retrieval/claim-evidence/claim-evidence.js +8 -0
  1142. package/dist/components/retrieval/claim-evidence/claim-evidence.js.map +1 -0
  1143. package/dist/components/retrieval/claim-evidence/claim-evidence.styles.d.ts +2 -0
  1144. package/dist/components/retrieval/claim-evidence/claim-evidence.styles.d.ts.map +1 -0
  1145. package/dist/components/retrieval/claim-evidence/claim-evidence.styles.js +84 -0
  1146. package/dist/components/retrieval/claim-evidence/claim-evidence.styles.js.map +1 -0
  1147. package/dist/components/retrieval/community-card/community-card.class.d.ts.map +1 -1
  1148. package/dist/components/retrieval/community-card/community-card.class.js +9 -3
  1149. package/dist/components/retrieval/community-card/community-card.class.js.map +1 -1
  1150. package/dist/components/retrieval/community-card/community-card.styles.d.ts.map +1 -1
  1151. package/dist/components/retrieval/community-card/community-card.styles.js +6 -0
  1152. package/dist/components/retrieval/community-card/community-card.styles.js.map +1 -1
  1153. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.d.ts +5 -2
  1154. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.d.ts.map +1 -1
  1155. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +52 -24
  1156. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js.map +1 -1
  1157. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.d.ts.map +1 -1
  1158. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js +7 -2
  1159. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js.map +1 -1
  1160. package/dist/components/retrieval/entity-card/entity-card.class.d.ts.map +1 -1
  1161. package/dist/components/retrieval/entity-card/entity-card.class.js +11 -16
  1162. package/dist/components/retrieval/entity-card/entity-card.class.js.map +1 -1
  1163. package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts.map +1 -1
  1164. package/dist/components/retrieval/entity-chip/entity-chip.class.js +3 -1
  1165. package/dist/components/retrieval/entity-chip/entity-chip.class.js.map +1 -1
  1166. package/dist/components/retrieval/entity-chip/entity-chip.styles.d.ts.map +1 -1
  1167. package/dist/components/retrieval/entity-chip/entity-chip.styles.js +4 -1
  1168. package/dist/components/retrieval/entity-chip/entity-chip.styles.js.map +1 -1
  1169. package/dist/components/retrieval/entity-dossier/entity-dossier.class.d.ts.map +1 -1
  1170. package/dist/components/retrieval/entity-dossier/entity-dossier.class.js +1 -14
  1171. package/dist/components/retrieval/entity-dossier/entity-dossier.class.js.map +1 -1
  1172. package/dist/components/retrieval/graph/graph-canvas.d.ts.map +1 -1
  1173. package/dist/components/retrieval/graph/graph-canvas.js +4 -1
  1174. package/dist/components/retrieval/graph/graph-canvas.js.map +1 -1
  1175. package/dist/components/retrieval/graph/graph.class.d.ts +6 -0
  1176. package/dist/components/retrieval/graph/graph.class.d.ts.map +1 -1
  1177. package/dist/components/retrieval/graph/graph.class.js +103 -32
  1178. package/dist/components/retrieval/graph/graph.class.js.map +1 -1
  1179. package/dist/components/retrieval/graph/graph.styles.d.ts.map +1 -1
  1180. package/dist/components/retrieval/graph/graph.styles.js +6 -1
  1181. package/dist/components/retrieval/graph/graph.styles.js.map +1 -1
  1182. package/dist/components/retrieval/graph-legend/graph-legend.class.d.ts.map +1 -1
  1183. package/dist/components/retrieval/graph-legend/graph-legend.class.js +1 -14
  1184. package/dist/components/retrieval/graph-legend/graph-legend.class.js.map +1 -1
  1185. package/dist/components/retrieval/graph-legend/graph-legend.styles.d.ts.map +1 -1
  1186. package/dist/components/retrieval/graph-legend/graph-legend.styles.js +3 -0
  1187. package/dist/components/retrieval/graph-legend/graph-legend.styles.js.map +1 -1
  1188. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +8 -1
  1189. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts.map +1 -1
  1190. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +19 -2
  1191. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js.map +1 -1
  1192. package/dist/components/retrieval/grounding-summary/grounding-summary.d.ts +1 -0
  1193. package/dist/components/retrieval/grounding-summary/grounding-summary.d.ts.map +1 -1
  1194. package/dist/components/retrieval/grounding-summary/grounding-summary.js +1 -0
  1195. package/dist/components/retrieval/grounding-summary/grounding-summary.js.map +1 -1
  1196. package/dist/components/retrieval/index.d.ts +31 -0
  1197. package/dist/components/retrieval/index.d.ts.map +1 -0
  1198. package/dist/components/retrieval/index.js +31 -0
  1199. package/dist/components/retrieval/index.js.map +1 -0
  1200. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.d.ts +8 -5
  1201. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.d.ts.map +1 -1
  1202. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js +53 -16
  1203. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js.map +1 -1
  1204. package/dist/components/retrieval/ingestion-queue/ingestion-queue.d.ts +4 -0
  1205. package/dist/components/retrieval/ingestion-queue/ingestion-queue.d.ts.map +1 -1
  1206. package/dist/components/retrieval/ingestion-queue/ingestion-queue.js +4 -0
  1207. package/dist/components/retrieval/ingestion-queue/ingestion-queue.js.map +1 -1
  1208. package/dist/components/retrieval/ingestion-queue/ingestion-queue.styles.d.ts.map +1 -1
  1209. package/dist/components/retrieval/ingestion-queue/ingestion-queue.styles.js +5 -0
  1210. package/dist/components/retrieval/ingestion-queue/ingestion-queue.styles.js.map +1 -1
  1211. package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +0 -5
  1212. package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts.map +1 -1
  1213. package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +12 -12
  1214. package/dist/components/retrieval/knowledge-base/knowledge-base.class.js.map +1 -1
  1215. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts +4 -2
  1216. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts.map +1 -1
  1217. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js +78 -8
  1218. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js.map +1 -1
  1219. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.d.ts +2 -0
  1220. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.d.ts.map +1 -1
  1221. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.js +2 -0
  1222. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.js.map +1 -1
  1223. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.d.ts.map +1 -1
  1224. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js +3 -0
  1225. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js.map +1 -1
  1226. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +12 -0
  1227. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts.map +1 -1
  1228. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +103 -21
  1229. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js.map +1 -1
  1230. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.d.ts.map +1 -1
  1231. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +5 -0
  1232. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js.map +1 -1
  1233. package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +6 -2
  1234. package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts.map +1 -1
  1235. package/dist/components/retrieval/memory-panel/memory-panel.class.js +71 -17
  1236. package/dist/components/retrieval/memory-panel/memory-panel.class.js.map +1 -1
  1237. package/dist/components/retrieval/memory-panel/memory-panel.styles.d.ts.map +1 -1
  1238. package/dist/components/retrieval/memory-panel/memory-panel.styles.js +6 -0
  1239. package/dist/components/retrieval/memory-panel/memory-panel.styles.js.map +1 -1
  1240. package/dist/components/retrieval/mind-map/mind-map.class.d.ts +10 -0
  1241. package/dist/components/retrieval/mind-map/mind-map.class.d.ts.map +1 -1
  1242. package/dist/components/retrieval/mind-map/mind-map.class.js +96 -3
  1243. package/dist/components/retrieval/mind-map/mind-map.class.js.map +1 -1
  1244. package/dist/components/retrieval/neighbor-list/neighbor-list.class.d.ts.map +1 -1
  1245. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +23 -7
  1246. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js.map +1 -1
  1247. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.d.ts.map +1 -1
  1248. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +3 -1
  1249. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js.map +1 -1
  1250. package/dist/components/retrieval/node-palette/node-palette.class.d.ts +8 -0
  1251. package/dist/components/retrieval/node-palette/node-palette.class.d.ts.map +1 -1
  1252. package/dist/components/retrieval/node-palette/node-palette.class.js +107 -15
  1253. package/dist/components/retrieval/node-palette/node-palette.class.js.map +1 -1
  1254. package/dist/components/retrieval/node-palette/node-palette.styles.d.ts.map +1 -1
  1255. package/dist/components/retrieval/node-palette/node-palette.styles.js +9 -1
  1256. package/dist/components/retrieval/node-palette/node-palette.styles.js.map +1 -1
  1257. package/dist/components/retrieval/path-strip/path-strip.class.d.ts +4 -1
  1258. package/dist/components/retrieval/path-strip/path-strip.class.d.ts.map +1 -1
  1259. package/dist/components/retrieval/path-strip/path-strip.class.js +28 -1
  1260. package/dist/components/retrieval/path-strip/path-strip.class.js.map +1 -1
  1261. package/dist/components/retrieval/provenance-panel/provenance-panel.class.d.ts.map +1 -1
  1262. package/dist/components/retrieval/provenance-panel/provenance-panel.class.js +2 -1
  1263. package/dist/components/retrieval/provenance-panel/provenance-panel.class.js.map +1 -1
  1264. package/dist/components/retrieval/provenance-panel/provenance-panel.styles.d.ts.map +1 -1
  1265. package/dist/components/retrieval/provenance-panel/provenance-panel.styles.js +3 -0
  1266. package/dist/components/retrieval/provenance-panel/provenance-panel.styles.js.map +1 -1
  1267. package/dist/components/retrieval/rag-answer/rag-answer.class.d.ts +6 -8
  1268. package/dist/components/retrieval/rag-answer/rag-answer.class.d.ts.map +1 -1
  1269. package/dist/components/retrieval/rag-answer/rag-answer.class.js +9 -14
  1270. package/dist/components/retrieval/rag-answer/rag-answer.class.js.map +1 -1
  1271. package/dist/components/retrieval/rag-answer/rag-answer.d.ts +7 -0
  1272. package/dist/components/retrieval/rag-answer/rag-answer.d.ts.map +1 -1
  1273. package/dist/components/retrieval/rag-answer/rag-answer.js +7 -0
  1274. package/dist/components/retrieval/rag-answer/rag-answer.js.map +1 -1
  1275. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.d.ts +78 -0
  1276. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.d.ts.map +1 -0
  1277. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js +186 -0
  1278. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js.map +1 -0
  1279. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.d.ts +5 -0
  1280. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.d.ts.map +1 -0
  1281. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.js +8 -0
  1282. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.js.map +1 -0
  1283. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.styles.d.ts +2 -0
  1284. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.styles.d.ts.map +1 -0
  1285. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.styles.js +95 -0
  1286. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.styles.js.map +1 -0
  1287. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.d.ts +58 -0
  1288. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.d.ts.map +1 -0
  1289. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.js +157 -0
  1290. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.js.map +1 -0
  1291. package/dist/components/retrieval/retrieval-compare/retrieval-compare.d.ts +3 -0
  1292. package/dist/components/retrieval/retrieval-compare/retrieval-compare.d.ts.map +1 -0
  1293. package/dist/components/retrieval/retrieval-compare/retrieval-compare.js +6 -0
  1294. package/dist/components/retrieval/retrieval-compare/retrieval-compare.js.map +1 -0
  1295. package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.d.ts +2 -0
  1296. package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.d.ts.map +1 -0
  1297. package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.js +103 -0
  1298. package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.js.map +1 -0
  1299. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +3 -6
  1300. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts.map +1 -1
  1301. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +33 -45
  1302. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js.map +1 -1
  1303. package/dist/components/retrieval/retrieval-results/retrieval-results.styles.d.ts.map +1 -1
  1304. package/dist/components/retrieval/retrieval-results/retrieval-results.styles.js +3 -4
  1305. package/dist/components/retrieval/retrieval-results/retrieval-results.styles.js.map +1 -1
  1306. package/dist/components/retrieval/retrieval-search/retrieval-search.class.d.ts.map +1 -1
  1307. package/dist/components/retrieval/retrieval-search/retrieval-search.class.js +20 -6
  1308. package/dist/components/retrieval/retrieval-search/retrieval-search.class.js.map +1 -1
  1309. package/dist/components/retrieval/retrieval-search/retrieval-search.styles.d.ts.map +1 -1
  1310. package/dist/components/retrieval/retrieval-search/retrieval-search.styles.js +1 -0
  1311. package/dist/components/retrieval/retrieval-search/retrieval-search.styles.js.map +1 -1
  1312. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.d.ts +4 -2
  1313. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.d.ts.map +1 -1
  1314. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +31 -23
  1315. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js.map +1 -1
  1316. package/dist/components/retrieval/retrieval-trace/retrieval-trace.styles.d.ts.map +1 -1
  1317. package/dist/components/retrieval/retrieval-trace/retrieval-trace.styles.js +3 -0
  1318. package/dist/components/retrieval/retrieval-trace/retrieval-trace.styles.js.map +1 -1
  1319. package/dist/components/retrieval/source-card/source-card.styles.d.ts.map +1 -1
  1320. package/dist/components/retrieval/source-card/source-card.styles.js +13 -0
  1321. package/dist/components/retrieval/source-card/source-card.styles.js.map +1 -1
  1322. package/dist/components/retrieval/source-list/source-list.class.d.ts +3 -0
  1323. package/dist/components/retrieval/source-list/source-list.class.d.ts.map +1 -1
  1324. package/dist/components/retrieval/source-list/source-list.class.js +30 -3
  1325. package/dist/components/retrieval/source-list/source-list.class.js.map +1 -1
  1326. package/dist/components/retrieval/source-list/source-list.styles.d.ts.map +1 -1
  1327. package/dist/components/retrieval/source-list/source-list.styles.js +6 -0
  1328. package/dist/components/retrieval/source-list/source-list.styles.js.map +1 -1
  1329. package/dist/components/retrieval/source-picker/source-picker.class.d.ts +5 -1
  1330. package/dist/components/retrieval/source-picker/source-picker.class.d.ts.map +1 -1
  1331. package/dist/components/retrieval/source-picker/source-picker.class.js +68 -21
  1332. package/dist/components/retrieval/source-picker/source-picker.class.js.map +1 -1
  1333. package/dist/components/retrieval/source-picker/source-picker.styles.d.ts.map +1 -1
  1334. package/dist/components/retrieval/source-picker/source-picker.styles.js +25 -1
  1335. package/dist/components/retrieval/source-picker/source-picker.styles.js.map +1 -1
  1336. package/dist/components/utility/copy-button/copy-button.class.d.ts +2 -0
  1337. package/dist/components/utility/copy-button/copy-button.class.d.ts.map +1 -1
  1338. package/dist/components/utility/copy-button/copy-button.class.js +6 -0
  1339. package/dist/components/utility/copy-button/copy-button.class.js.map +1 -1
  1340. package/dist/components/utility/diff-view/diff-line-diff.d.ts +3 -4
  1341. package/dist/components/utility/diff-view/diff-line-diff.d.ts.map +1 -1
  1342. package/dist/components/utility/diff-view/diff-line-diff.js +85 -35
  1343. package/dist/components/utility/diff-view/diff-line-diff.js.map +1 -1
  1344. package/dist/components/utility/diff-view/diff-view.class.d.ts +11 -0
  1345. package/dist/components/utility/diff-view/diff-view.class.d.ts.map +1 -1
  1346. package/dist/components/utility/diff-view/diff-view.class.js +64 -13
  1347. package/dist/components/utility/diff-view/diff-view.class.js.map +1 -1
  1348. package/dist/components/utility/diff-view/diff-view.styles.d.ts.map +1 -1
  1349. package/dist/components/utility/diff-view/diff-view.styles.js +19 -6
  1350. package/dist/components/utility/diff-view/diff-view.styles.js.map +1 -1
  1351. package/dist/components/utility/export-button/export-button.class.d.ts +9 -0
  1352. package/dist/components/utility/export-button/export-button.class.d.ts.map +1 -1
  1353. package/dist/components/utility/export-button/export-button.class.js +45 -8
  1354. package/dist/components/utility/export-button/export-button.class.js.map +1 -1
  1355. package/dist/components/utility/export-button/export-button.styles.d.ts.map +1 -1
  1356. package/dist/components/utility/export-button/export-button.styles.js +4 -0
  1357. package/dist/components/utility/export-button/export-button.styles.js.map +1 -1
  1358. package/dist/components/utility/format/format-date.class.d.ts.map +1 -1
  1359. package/dist/components/utility/format/format-date.class.js +11 -4
  1360. package/dist/components/utility/format/format-date.class.js.map +1 -1
  1361. package/dist/components/utility/format/format-number.class.d.ts.map +1 -1
  1362. package/dist/components/utility/format/format-number.class.js +18 -4
  1363. package/dist/components/utility/format/format-number.class.js.map +1 -1
  1364. package/dist/components/utility/format/relative-time.class.d.ts.map +1 -1
  1365. package/dist/components/utility/format/relative-time.class.js +11 -2
  1366. package/dist/components/utility/format/relative-time.class.js.map +1 -1
  1367. package/dist/components/utility/icon/icon.class.d.ts.map +1 -1
  1368. package/dist/components/utility/icon/icon.class.js +4 -2
  1369. package/dist/components/utility/icon/icon.class.js.map +1 -1
  1370. package/dist/components/utility/intersection-observer/intersection-observer.class.d.ts.map +1 -1
  1371. package/dist/components/utility/intersection-observer/intersection-observer.class.js +23 -9
  1372. package/dist/components/utility/intersection-observer/intersection-observer.class.js.map +1 -1
  1373. package/dist/components/utility/intersection-observer/intersection-observer.styles.d.ts +1 -1
  1374. package/dist/components/utility/intersection-observer/intersection-observer.styles.d.ts.map +1 -1
  1375. package/dist/components/utility/intersection-observer/intersection-observer.styles.js +1 -7
  1376. package/dist/components/utility/intersection-observer/intersection-observer.styles.js.map +1 -1
  1377. package/dist/components/utility/json-viewer/json-viewer.class.d.ts +15 -2
  1378. package/dist/components/utility/json-viewer/json-viewer.class.d.ts.map +1 -1
  1379. package/dist/components/utility/json-viewer/json-viewer.class.js +182 -44
  1380. package/dist/components/utility/json-viewer/json-viewer.class.js.map +1 -1
  1381. package/dist/components/utility/json-viewer/json-viewer.styles.d.ts.map +1 -1
  1382. package/dist/components/utility/json-viewer/json-viewer.styles.js +14 -4
  1383. package/dist/components/utility/json-viewer/json-viewer.styles.js.map +1 -1
  1384. package/dist/components/utility/known-date/known-date.class.d.ts +6 -3
  1385. package/dist/components/utility/known-date/known-date.class.d.ts.map +1 -1
  1386. package/dist/components/utility/known-date/known-date.class.js +35 -5
  1387. package/dist/components/utility/known-date/known-date.class.js.map +1 -1
  1388. package/dist/components/utility/known-date/known-date.styles.d.ts.map +1 -1
  1389. package/dist/components/utility/known-date/known-date.styles.js +5 -0
  1390. package/dist/components/utility/known-date/known-date.styles.js.map +1 -1
  1391. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +51 -27
  1392. package/dist/components/utility/mention-popover/mention-popover.class.d.ts.map +1 -1
  1393. package/dist/components/utility/mention-popover/mention-popover.class.js +130 -35
  1394. package/dist/components/utility/mention-popover/mention-popover.class.js.map +1 -1
  1395. package/dist/components/utility/mention-popover/mention-popover.styles.d.ts.map +1 -1
  1396. package/dist/components/utility/mention-popover/mention-popover.styles.js +5 -1
  1397. package/dist/components/utility/mention-popover/mention-popover.styles.js.map +1 -1
  1398. package/dist/components/utility/mutation-observer/mutation-observer.class.d.ts.map +1 -1
  1399. package/dist/components/utility/mutation-observer/mutation-observer.class.js +8 -22
  1400. package/dist/components/utility/mutation-observer/mutation-observer.class.js.map +1 -1
  1401. package/dist/components/utility/mutation-observer/mutation-observer.styles.d.ts +1 -1
  1402. package/dist/components/utility/mutation-observer/mutation-observer.styles.d.ts.map +1 -1
  1403. package/dist/components/utility/mutation-observer/mutation-observer.styles.js +1 -7
  1404. package/dist/components/utility/mutation-observer/mutation-observer.styles.js.map +1 -1
  1405. package/dist/components/utility/poll-status/poll-status.class.d.ts +6 -4
  1406. package/dist/components/utility/poll-status/poll-status.class.d.ts.map +1 -1
  1407. package/dist/components/utility/poll-status/poll-status.class.js +23 -21
  1408. package/dist/components/utility/poll-status/poll-status.class.js.map +1 -1
  1409. package/dist/components/utility/poll-status/poll-status.styles.d.ts.map +1 -1
  1410. package/dist/components/utility/poll-status/poll-status.styles.js +9 -1
  1411. package/dist/components/utility/poll-status/poll-status.styles.js.map +1 -1
  1412. package/dist/components/utility/random-content/random-content.class.d.ts +30 -9
  1413. package/dist/components/utility/random-content/random-content.class.d.ts.map +1 -1
  1414. package/dist/components/utility/random-content/random-content.class.js +196 -24
  1415. package/dist/components/utility/random-content/random-content.class.js.map +1 -1
  1416. package/dist/components/utility/random-content/random-content.styles.d.ts.map +1 -1
  1417. package/dist/components/utility/random-content/random-content.styles.js +22 -0
  1418. package/dist/components/utility/random-content/random-content.styles.js.map +1 -1
  1419. package/dist/components/utility/resize-observer/resize-observer.class.d.ts.map +1 -1
  1420. package/dist/components/utility/resize-observer/resize-observer.class.js +3 -4
  1421. package/dist/components/utility/resize-observer/resize-observer.class.js.map +1 -1
  1422. package/dist/components/utility/resize-observer/resize-observer.styles.d.ts +1 -1
  1423. package/dist/components/utility/resize-observer/resize-observer.styles.d.ts.map +1 -1
  1424. package/dist/components/utility/resize-observer/resize-observer.styles.js +1 -10
  1425. package/dist/components/utility/resize-observer/resize-observer.styles.js.map +1 -1
  1426. package/dist/components/utility/tour/tour.class.d.ts +14 -19
  1427. package/dist/components/utility/tour/tour.class.d.ts.map +1 -1
  1428. package/dist/components/utility/tour/tour.class.js +116 -51
  1429. package/dist/components/utility/tour/tour.class.js.map +1 -1
  1430. package/dist/components/utility/tour/tour.styles.d.ts.map +1 -1
  1431. package/dist/components/utility/tour/tour.styles.js +7 -0
  1432. package/dist/components/utility/tour/tour.styles.js.map +1 -1
  1433. package/dist/components/viewers/archive-viewer/archive-viewer.class.d.ts +5 -3
  1434. package/dist/components/viewers/archive-viewer/archive-viewer.class.d.ts.map +1 -1
  1435. package/dist/components/viewers/archive-viewer/archive-viewer.class.js +91 -14
  1436. package/dist/components/viewers/archive-viewer/archive-viewer.class.js.map +1 -1
  1437. package/dist/components/viewers/archive-viewer/zip-resource-guard.d.ts +36 -0
  1438. package/dist/components/viewers/archive-viewer/zip-resource-guard.d.ts.map +1 -0
  1439. package/dist/components/viewers/archive-viewer/zip-resource-guard.js +261 -0
  1440. package/dist/components/viewers/archive-viewer/zip-resource-guard.js.map +1 -0
  1441. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts +4 -1
  1442. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts.map +1 -1
  1443. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js +44 -11
  1444. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js.map +1 -1
  1445. package/dist/components/viewers/calendar-viewer/calendar-viewer.js +13 -2
  1446. package/dist/components/viewers/calendar-viewer/calendar-viewer.js.map +1 -1
  1447. package/dist/components/viewers/contact-viewer/contact-viewer.class.d.ts +7 -1
  1448. package/dist/components/viewers/contact-viewer/contact-viewer.class.d.ts.map +1 -1
  1449. package/dist/components/viewers/contact-viewer/contact-viewer.class.js +67 -9
  1450. package/dist/components/viewers/contact-viewer/contact-viewer.class.js.map +1 -1
  1451. package/dist/components/viewers/contact-viewer/contact-viewer.js +7 -0
  1452. package/dist/components/viewers/contact-viewer/contact-viewer.js.map +1 -1
  1453. package/dist/components/viewers/contact-viewer/contact-viewer.styles.d.ts.map +1 -1
  1454. package/dist/components/viewers/contact-viewer/contact-viewer.styles.js +2 -0
  1455. package/dist/components/viewers/contact-viewer/contact-viewer.styles.js.map +1 -1
  1456. package/dist/components/viewers/contact-viewer/vcard.d.ts +1 -1
  1457. package/dist/components/viewers/contact-viewer/vcard.d.ts.map +1 -1
  1458. package/dist/components/viewers/contact-viewer/vcard.js +9 -2
  1459. package/dist/components/viewers/contact-viewer/vcard.js.map +1 -1
  1460. package/dist/components/viewers/csv-viewer/csv-viewer.class.d.ts +17 -10
  1461. package/dist/components/viewers/csv-viewer/csv-viewer.class.d.ts.map +1 -1
  1462. package/dist/components/viewers/csv-viewer/csv-viewer.class.js +102 -54
  1463. package/dist/components/viewers/csv-viewer/csv-viewer.class.js.map +1 -1
  1464. package/dist/components/viewers/csv-viewer/csv-viewer.d.ts +1 -0
  1465. package/dist/components/viewers/csv-viewer/csv-viewer.d.ts.map +1 -1
  1466. package/dist/components/viewers/csv-viewer/csv-viewer.js +1 -0
  1467. package/dist/components/viewers/csv-viewer/csv-viewer.js.map +1 -1
  1468. package/dist/components/viewers/csv-viewer/csv-viewer.styles.js +6 -6
  1469. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts +17 -15
  1470. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts.map +1 -1
  1471. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js +127 -53
  1472. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js.map +1 -1
  1473. package/dist/components/viewers/dataset-viewer/dataset-viewer.d.ts +1 -0
  1474. package/dist/components/viewers/dataset-viewer/dataset-viewer.d.ts.map +1 -1
  1475. package/dist/components/viewers/dataset-viewer/dataset-viewer.js +1 -0
  1476. package/dist/components/viewers/dataset-viewer/dataset-viewer.js.map +1 -1
  1477. package/dist/components/viewers/dataset-viewer/dataset-viewer.styles.js +4 -4
  1478. package/dist/components/viewers/document-compare/document-compare.class.d.ts +5 -2
  1479. package/dist/components/viewers/document-compare/document-compare.class.d.ts.map +1 -1
  1480. package/dist/components/viewers/document-compare/document-compare.class.js +4 -16
  1481. package/dist/components/viewers/document-compare/document-compare.class.js.map +1 -1
  1482. package/dist/components/viewers/document-compare/document-compare.d.ts +2 -0
  1483. package/dist/components/viewers/document-compare/document-compare.d.ts.map +1 -1
  1484. package/dist/components/viewers/document-compare/document-compare.js +2 -0
  1485. package/dist/components/viewers/document-compare/document-compare.js.map +1 -1
  1486. package/dist/components/viewers/document-compare/document-compare.styles.d.ts.map +1 -1
  1487. package/dist/components/viewers/document-compare/document-compare.styles.js +4 -0
  1488. package/dist/components/viewers/document-compare/document-compare.styles.js.map +1 -1
  1489. package/dist/components/viewers/document-preview/document-preview.class.d.ts +20 -2
  1490. package/dist/components/viewers/document-preview/document-preview.class.d.ts.map +1 -1
  1491. package/dist/components/viewers/document-preview/document-preview.class.js +128 -37
  1492. package/dist/components/viewers/document-preview/document-preview.class.js.map +1 -1
  1493. package/dist/components/viewers/document-preview/document-preview.d.ts +1 -0
  1494. package/dist/components/viewers/document-preview/document-preview.d.ts.map +1 -1
  1495. package/dist/components/viewers/document-preview/document-preview.js +1 -0
  1496. package/dist/components/viewers/document-preview/document-preview.js.map +1 -1
  1497. package/dist/components/viewers/document-preview/document-preview.styles.d.ts.map +1 -1
  1498. package/dist/components/viewers/document-preview/document-preview.styles.js +70 -12
  1499. package/dist/components/viewers/document-preview/document-preview.styles.js.map +1 -1
  1500. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +11 -10
  1501. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts.map +1 -1
  1502. package/dist/components/viewers/document-viewer/document-viewer.class.js +38 -12
  1503. package/dist/components/viewers/document-viewer/document-viewer.class.js.map +1 -1
  1504. package/dist/components/viewers/document-viewer/document-viewer.d.ts +1 -0
  1505. package/dist/components/viewers/document-viewer/document-viewer.d.ts.map +1 -1
  1506. package/dist/components/viewers/document-viewer/document-viewer.js +1 -0
  1507. package/dist/components/viewers/document-viewer/document-viewer.js.map +1 -1
  1508. package/dist/components/viewers/docx-viewer/docx-resource-guard.d.ts +10 -0
  1509. package/dist/components/viewers/docx-viewer/docx-resource-guard.d.ts.map +1 -0
  1510. package/dist/components/viewers/docx-viewer/docx-resource-guard.js +18 -0
  1511. package/dist/components/viewers/docx-viewer/docx-resource-guard.js.map +1 -0
  1512. package/dist/components/viewers/docx-viewer/docx-viewer.class.d.ts +13 -0
  1513. package/dist/components/viewers/docx-viewer/docx-viewer.class.d.ts.map +1 -1
  1514. package/dist/components/viewers/docx-viewer/docx-viewer.class.js +62 -7
  1515. package/dist/components/viewers/docx-viewer/docx-viewer.class.js.map +1 -1
  1516. package/dist/components/viewers/docx-viewer/docx-viewer.styles.js +15 -15
  1517. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +1 -0
  1518. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts.map +1 -1
  1519. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +93 -34
  1520. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js.map +1 -1
  1521. package/dist/components/viewers/ebook-viewer/epub-resource-guard.d.ts +10 -0
  1522. package/dist/components/viewers/ebook-viewer/epub-resource-guard.d.ts.map +1 -0
  1523. package/dist/components/viewers/ebook-viewer/epub-resource-guard.js +18 -0
  1524. package/dist/components/viewers/ebook-viewer/epub-resource-guard.js.map +1 -0
  1525. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +10 -0
  1526. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts.map +1 -1
  1527. package/dist/components/viewers/email-viewer/email-viewer.class.js +116 -47
  1528. package/dist/components/viewers/email-viewer/email-viewer.class.js.map +1 -1
  1529. package/dist/components/viewers/email-viewer/email-viewer.js +13 -3
  1530. package/dist/components/viewers/email-viewer/email-viewer.js.map +1 -1
  1531. package/dist/components/viewers/geojson-view/geojson-view.class.d.ts +6 -8
  1532. package/dist/components/viewers/geojson-view/geojson-view.class.d.ts.map +1 -1
  1533. package/dist/components/viewers/geojson-view/geojson-view.class.js +239 -67
  1534. package/dist/components/viewers/geojson-view/geojson-view.class.js.map +1 -1
  1535. package/dist/components/viewers/geojson-view/geojson-view.js +7 -0
  1536. package/dist/components/viewers/geojson-view/geojson-view.js.map +1 -1
  1537. package/dist/components/viewers/highlight-layer/highlight-layer-timing.d.ts +2 -0
  1538. package/dist/components/viewers/highlight-layer/highlight-layer-timing.d.ts.map +1 -0
  1539. package/dist/components/viewers/highlight-layer/highlight-layer-timing.js +31 -0
  1540. package/dist/components/viewers/highlight-layer/highlight-layer-timing.js.map +1 -0
  1541. package/dist/components/viewers/highlight-layer/highlight-layer.class.d.ts +28 -5
  1542. package/dist/components/viewers/highlight-layer/highlight-layer.class.d.ts.map +1 -1
  1543. package/dist/components/viewers/highlight-layer/highlight-layer.class.js +206 -62
  1544. package/dist/components/viewers/highlight-layer/highlight-layer.class.js.map +1 -1
  1545. package/dist/components/viewers/highlight-layer/highlight-layer.styles.d.ts.map +1 -1
  1546. package/dist/components/viewers/highlight-layer/highlight-layer.styles.js +84 -21
  1547. package/dist/components/viewers/highlight-layer/highlight-layer.styles.js.map +1 -1
  1548. package/dist/components/viewers/html-viewer/html-viewer.class.d.ts +2 -0
  1549. package/dist/components/viewers/html-viewer/html-viewer.class.d.ts.map +1 -1
  1550. package/dist/components/viewers/html-viewer/html-viewer.class.js +23 -3
  1551. package/dist/components/viewers/html-viewer/html-viewer.class.js.map +1 -1
  1552. package/dist/components/viewers/include/include.class.d.ts +2 -0
  1553. package/dist/components/viewers/include/include.class.d.ts.map +1 -1
  1554. package/dist/components/viewers/include/include.class.js +19 -1
  1555. package/dist/components/viewers/include/include.class.js.map +1 -1
  1556. package/dist/components/viewers/notebook-viewer/dompurify-loader.js.map +1 -1
  1557. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.d.ts +15 -13
  1558. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.d.ts.map +1 -1
  1559. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +255 -41
  1560. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js.map +1 -1
  1561. package/dist/components/viewers/notebook-viewer/notebook-viewer.styles.d.ts.map +1 -1
  1562. package/dist/components/viewers/notebook-viewer/notebook-viewer.styles.js +17 -0
  1563. package/dist/components/viewers/notebook-viewer/notebook-viewer.styles.js.map +1 -1
  1564. package/dist/components/viewers/page-rail/page-rail.class.d.ts +8 -3
  1565. package/dist/components/viewers/page-rail/page-rail.class.d.ts.map +1 -1
  1566. package/dist/components/viewers/page-rail/page-rail.class.js +96 -26
  1567. package/dist/components/viewers/page-rail/page-rail.class.js.map +1 -1
  1568. package/dist/components/viewers/page-rail/page-rail.d.ts +3 -0
  1569. package/dist/components/viewers/page-rail/page-rail.d.ts.map +1 -1
  1570. package/dist/components/viewers/page-rail/page-rail.js +3 -0
  1571. package/dist/components/viewers/page-rail/page-rail.js.map +1 -1
  1572. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts +3 -3
  1573. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts.map +1 -1
  1574. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +198 -46
  1575. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js.map +1 -1
  1576. package/dist/components/viewers/pdf-viewer/pdf-viewer.d.ts +3 -0
  1577. package/dist/components/viewers/pdf-viewer/pdf-viewer.d.ts.map +1 -1
  1578. package/dist/components/viewers/pdf-viewer/pdf-viewer.js +3 -0
  1579. package/dist/components/viewers/pdf-viewer/pdf-viewer.js.map +1 -1
  1580. package/dist/components/viewers/pdf-viewer/pdf-viewer.styles.d.ts.map +1 -1
  1581. package/dist/components/viewers/pdf-viewer/pdf-viewer.styles.js +11 -1
  1582. package/dist/components/viewers/pdf-viewer/pdf-viewer.styles.js.map +1 -1
  1583. package/dist/components/viewers/pptx-viewer/pptx-loader.d.ts.map +1 -1
  1584. package/dist/components/viewers/pptx-viewer/pptx-loader.js +13 -1
  1585. package/dist/components/viewers/pptx-viewer/pptx-loader.js.map +1 -1
  1586. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.d.ts +0 -1
  1587. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.d.ts.map +1 -1
  1588. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.js +14 -7
  1589. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.js.map +1 -1
  1590. package/dist/components/viewers/pptx-viewer/pptx-viewer.d.ts +1 -0
  1591. package/dist/components/viewers/pptx-viewer/pptx-viewer.d.ts.map +1 -1
  1592. package/dist/components/viewers/pptx-viewer/pptx-viewer.js +1 -0
  1593. package/dist/components/viewers/pptx-viewer/pptx-viewer.js.map +1 -1
  1594. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.d.ts +12 -7
  1595. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.d.ts.map +1 -1
  1596. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.js +144 -44
  1597. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.js.map +1 -1
  1598. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.d.ts +2 -0
  1599. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.d.ts.map +1 -1
  1600. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.js +2 -0
  1601. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.js.map +1 -1
  1602. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.styles.d.ts.map +1 -1
  1603. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.styles.js +7 -11
  1604. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.styles.js.map +1 -1
  1605. package/dist/components/viewers/spreadsheet-viewer/xlsx-resource-guard.d.ts +17 -0
  1606. package/dist/components/viewers/spreadsheet-viewer/xlsx-resource-guard.d.ts.map +1 -0
  1607. package/dist/components/viewers/spreadsheet-viewer/xlsx-resource-guard.js +26 -0
  1608. package/dist/components/viewers/spreadsheet-viewer/xlsx-resource-guard.js.map +1 -0
  1609. package/dist/components/viewers/svg-viewer/svg-viewer.class.d.ts +14 -1
  1610. package/dist/components/viewers/svg-viewer/svg-viewer.class.d.ts.map +1 -1
  1611. package/dist/components/viewers/svg-viewer/svg-viewer.class.js +101 -34
  1612. package/dist/components/viewers/svg-viewer/svg-viewer.class.js.map +1 -1
  1613. package/dist/components/viewers/svg-viewer/svg-viewer.d.ts +1 -0
  1614. package/dist/components/viewers/svg-viewer/svg-viewer.d.ts.map +1 -1
  1615. package/dist/components/viewers/svg-viewer/svg-viewer.js +1 -0
  1616. package/dist/components/viewers/svg-viewer/svg-viewer.js.map +1 -1
  1617. package/dist/components/viewers/svg-viewer/svg-viewer.styles.d.ts.map +1 -1
  1618. package/dist/components/viewers/svg-viewer/svg-viewer.styles.js +66 -6
  1619. package/dist/components/viewers/svg-viewer/svg-viewer.styles.js.map +1 -1
  1620. package/dist/components/viewers/xml-viewer/xml-viewer.class.d.ts +4 -0
  1621. package/dist/components/viewers/xml-viewer/xml-viewer.class.d.ts.map +1 -1
  1622. package/dist/components/viewers/xml-viewer/xml-viewer.class.js +0 -0
  1623. package/dist/components/viewers/xml-viewer/xml-viewer.class.js.map +1 -1
  1624. package/dist/internal/anchor-target.d.ts.map +1 -1
  1625. package/dist/internal/anchor-target.js +7 -3
  1626. package/dist/internal/anchor-target.js.map +1 -1
  1627. package/dist/internal/anchored-popover-controller.d.ts +10 -0
  1628. package/dist/internal/anchored-popover-controller.d.ts.map +1 -0
  1629. package/dist/internal/anchored-popover-controller.js +17 -0
  1630. package/dist/internal/anchored-popover-controller.js.map +1 -0
  1631. package/dist/internal/aria-controls.d.ts +12 -0
  1632. package/dist/internal/aria-controls.d.ts.map +1 -0
  1633. package/dist/internal/aria-controls.js +33 -0
  1634. package/dist/internal/aria-controls.js.map +1 -0
  1635. package/dist/internal/catalog-picker.d.ts +12 -0
  1636. package/dist/internal/catalog-picker.d.ts.map +1 -0
  1637. package/dist/internal/catalog-picker.js +17 -0
  1638. package/dist/internal/catalog-picker.js.map +1 -0
  1639. package/dist/internal/converters.d.ts +22 -0
  1640. package/dist/internal/converters.d.ts.map +1 -0
  1641. package/dist/internal/converters.js +38 -0
  1642. package/dist/internal/converters.js.map +1 -0
  1643. package/dist/internal/delimited-data.d.ts +17 -0
  1644. package/dist/internal/delimited-data.d.ts.map +1 -0
  1645. package/dist/internal/delimited-data.js +24 -0
  1646. package/dist/internal/delimited-data.js.map +1 -0
  1647. package/dist/internal/intl-cache.d.ts +8 -2
  1648. package/dist/internal/intl-cache.d.ts.map +1 -1
  1649. package/dist/internal/intl-cache.js +0 -0
  1650. package/dist/internal/intl-cache.js.map +1 -1
  1651. package/dist/internal/latest-task.d.ts +11 -0
  1652. package/dist/internal/latest-task.d.ts.map +1 -0
  1653. package/dist/internal/latest-task.js +17 -0
  1654. package/dist/internal/latest-task.js.map +1 -0
  1655. package/dist/internal/localization.d.ts +8 -1
  1656. package/dist/internal/localization.d.ts.map +1 -1
  1657. package/dist/internal/localization.js +141 -2
  1658. package/dist/internal/localization.js.map +1 -1
  1659. package/dist/internal/lyra-element.d.ts +9 -0
  1660. package/dist/internal/lyra-element.d.ts.map +1 -1
  1661. package/dist/internal/lyra-element.js +41 -0
  1662. package/dist/internal/lyra-element.js.map +1 -1
  1663. package/dist/internal/observer-wrapper.styles.d.ts +3 -0
  1664. package/dist/internal/observer-wrapper.styles.d.ts.map +1 -0
  1665. package/dist/internal/observer-wrapper.styles.js +9 -0
  1666. package/dist/internal/observer-wrapper.styles.js.map +1 -0
  1667. package/dist/internal/overlay-manager.d.ts +2 -0
  1668. package/dist/internal/overlay-manager.d.ts.map +1 -1
  1669. package/dist/internal/overlay-manager.js +4 -0
  1670. package/dist/internal/overlay-manager.js.map +1 -1
  1671. package/dist/internal/root-registration-allowlist.d.ts +1 -1
  1672. package/dist/internal/root-registration-allowlist.d.ts.map +1 -1
  1673. package/dist/internal/root-registration-allowlist.js +12 -0
  1674. package/dist/internal/root-registration-allowlist.js.map +1 -1
  1675. package/dist/internal/slotted-observer.d.ts +8 -0
  1676. package/dist/internal/slotted-observer.d.ts.map +1 -0
  1677. package/dist/internal/slotted-observer.js +11 -0
  1678. package/dist/internal/slotted-observer.js.map +1 -0
  1679. package/dist/internal/text-quote.d.ts +2 -2
  1680. package/dist/internal/text-quote.d.ts.map +1 -1
  1681. package/dist/internal/text-quote.js +175 -27
  1682. package/dist/internal/text-quote.js.map +1 -1
  1683. package/dist/internal/text-viewer-target.d.ts.map +1 -1
  1684. package/dist/internal/text-viewer-target.js +95 -8
  1685. package/dist/internal/text-viewer-target.js.map +1 -1
  1686. package/dist/lyra.d.ts +43 -3
  1687. package/dist/lyra.d.ts.map +1 -1
  1688. package/dist/lyra.js +40 -0
  1689. package/dist/lyra.js.map +1 -1
  1690. package/dist/theme/gemstones-data.d.ts +16 -0
  1691. package/dist/theme/gemstones-data.d.ts.map +1 -0
  1692. package/dist/theme/gemstones-data.js +28 -0
  1693. package/dist/theme/gemstones-data.js.map +1 -0
  1694. package/dist/theme/gemstones.d.ts +2 -15
  1695. package/dist/theme/gemstones.d.ts.map +1 -1
  1696. package/dist/theme/gemstones.js +1 -27
  1697. package/dist/theme/gemstones.js.map +1 -1
  1698. package/dist/theme/theme.d.ts +16 -4
  1699. package/dist/theme/theme.d.ts.map +1 -1
  1700. package/dist/theme/theme.js +16 -5
  1701. package/dist/theme/theme.js.map +1 -1
  1702. package/llms/components/lr-agent-eval-dashboard.md +10 -3
  1703. package/llms/components/lr-agent-run.md +7 -1
  1704. package/llms/components/lr-animated-image.md +4 -0
  1705. package/llms/components/lr-app-rail-item.md +15 -7
  1706. package/llms/components/lr-app-rail.md +15 -7
  1707. package/llms/components/lr-approval-queue.md +5 -1
  1708. package/llms/components/lr-attachment-trigger.md +4 -0
  1709. package/llms/components/lr-av-player.md +2 -2
  1710. package/llms/components/lr-box-plot.md +2 -2
  1711. package/llms/components/lr-branch-picker.md +4 -0
  1712. package/llms/components/lr-breadcrumb-item.md +5 -1
  1713. package/llms/components/lr-breadcrumb.md +4 -0
  1714. package/llms/components/lr-browser-frame.md +10 -1
  1715. package/llms/components/lr-button.md +11 -3
  1716. package/llms/components/lr-card.md +6 -1
  1717. package/llms/components/lr-chart.md +27 -13
  1718. package/llms/components/lr-chat-message.md +17 -2
  1719. package/llms/components/lr-checkbox-group.md +11 -6
  1720. package/llms/components/lr-checkbox.md +1 -1
  1721. package/llms/components/lr-chip-group.md +19 -17
  1722. package/llms/components/lr-chip.md +20 -18
  1723. package/llms/components/lr-claim-evidence.md +37 -0
  1724. package/llms/components/lr-code-block-core.md +1 -3
  1725. package/llms/components/lr-code-block.md +6 -6
  1726. package/llms/components/lr-code-editor.md +6 -1
  1727. package/llms/components/lr-color-picker.md +8 -1
  1728. package/llms/components/lr-combobox.md +9 -3
  1729. package/llms/components/lr-command-palette.md +8 -1
  1730. package/llms/components/lr-compare-panel.md +2 -1
  1731. package/llms/components/lr-context-meter.md +15 -7
  1732. package/llms/components/lr-copy-button.md +4 -0
  1733. package/llms/components/lr-csv-viewer.md +6 -4
  1734. package/llms/components/lr-dashboard-grid.md +5 -1
  1735. package/llms/components/lr-date-input.md +16 -4
  1736. package/llms/components/lr-date-picker.md +16 -4
  1737. package/llms/components/lr-diff-view.md +22 -9
  1738. package/llms/components/lr-dock-panel.md +4 -2
  1739. package/llms/components/lr-document-compare.md +35 -4
  1740. package/llms/components/lr-document-preview.md +12 -4
  1741. package/llms/components/lr-document-viewer.md +5 -4
  1742. package/llms/components/lr-docx-viewer.md +12 -1
  1743. package/llms/components/lr-dropdown-item.md +6 -2
  1744. package/llms/components/lr-ebook-viewer.md +4 -0
  1745. package/llms/components/lr-email-viewer.md +2 -2
  1746. package/llms/components/lr-embedding-explorer.md +4 -1
  1747. package/llms/components/lr-emoji-picker.md +12 -3
  1748. package/llms/components/lr-export-button.md +4 -2
  1749. package/llms/components/lr-file-input.md +6 -6
  1750. package/llms/components/lr-filter-bar.md +19 -4
  1751. package/llms/components/lr-flag.md +5 -1
  1752. package/llms/components/lr-flow-canvas.md +15 -6
  1753. package/llms/components/lr-flow-minimap.md +8 -3
  1754. package/llms/components/lr-geojson-view.md +3 -1
  1755. package/llms/components/lr-graph-query-builder.md +10 -1
  1756. package/llms/components/lr-graph.md +3 -3
  1757. package/llms/components/lr-grounding-summary.md +10 -6
  1758. package/llms/components/lr-highlight-layer.md +17 -3
  1759. package/llms/components/lr-icon-button.md +14 -6
  1760. package/llms/components/lr-image-comparer.md +2 -0
  1761. package/llms/components/lr-image-viewer.md +13 -7
  1762. package/llms/components/lr-include.md +5 -4
  1763. package/llms/components/lr-ingestion-queue.md +5 -3
  1764. package/llms/components/lr-input.md +7 -2
  1765. package/llms/components/lr-json-viewer.md +17 -7
  1766. package/llms/components/lr-kbd.md +7 -5
  1767. package/llms/components/lr-known-date.md +4 -0
  1768. package/llms/components/lr-locale-picker.md +10 -1
  1769. package/llms/components/lr-map.md +13 -3
  1770. package/llms/components/lr-markdown-core.md +11 -1
  1771. package/llms/components/lr-markdown.md +11 -1
  1772. package/llms/components/lr-mcp-app.md +51 -0
  1773. package/llms/components/lr-media-card.md +3 -0
  1774. package/llms/components/lr-mention-popover.md +41 -22
  1775. package/llms/components/lr-menu-item.md +6 -2
  1776. package/llms/components/lr-menu.md +6 -2
  1777. package/llms/components/lr-message-parts.md +59 -0
  1778. package/llms/components/lr-notebook-viewer.md +16 -11
  1779. package/llms/components/lr-option.md +8 -2
  1780. package/llms/components/lr-pagination.md +6 -1
  1781. package/llms/components/lr-pdf-viewer.md +1 -1
  1782. package/llms/components/lr-phone-input.md +15 -4
  1783. package/llms/components/lr-playback.md +2 -2
  1784. package/llms/components/lr-popover.md +4 -2
  1785. package/llms/components/lr-progress-bar.md +7 -1
  1786. package/llms/components/lr-progress-ring.md +1 -1
  1787. package/llms/components/lr-prompt-input.md +56 -0
  1788. package/llms/components/lr-prompt-queue.md +35 -0
  1789. package/llms/components/lr-prompt-studio.md +53 -0
  1790. package/llms/components/lr-push-to-talk.md +5 -0
  1791. package/llms/components/lr-query-builder.md +8 -2
  1792. package/llms/components/lr-rag-answer.md +3 -2
  1793. package/llms/components/lr-rag-eval-dashboard.md +46 -0
  1794. package/llms/components/lr-random-content.md +7 -4
  1795. package/llms/components/lr-rating.md +6 -0
  1796. package/llms/components/lr-realtime-session.md +41 -0
  1797. package/llms/components/lr-retrieval-compare.md +37 -0
  1798. package/llms/components/lr-retrieval-trace.md +3 -2
  1799. package/llms/components/lr-rubric-form.md +4 -1
  1800. package/llms/components/lr-schema-viewer.md +48 -0
  1801. package/llms/components/lr-segmented.md +7 -1
  1802. package/llms/components/lr-select.md +12 -14
  1803. package/llms/components/lr-selection-toolbar.md +44 -0
  1804. package/llms/components/lr-slider.md +9 -2
  1805. package/llms/components/lr-source-card.md +4 -5
  1806. package/llms/components/lr-source-list.md +4 -5
  1807. package/llms/components/lr-source-picker.md +4 -4
  1808. package/llms/components/lr-split.md +4 -2
  1809. package/llms/components/lr-spreadsheet-viewer.md +6 -4
  1810. package/llms/components/lr-stat.md +2 -1
  1811. package/llms/components/lr-stepper.md +13 -13
  1812. package/llms/components/lr-stream-status.md +4 -4
  1813. package/llms/components/lr-streaming-text.md +1 -1
  1814. package/llms/components/lr-subagent-panel.md +43 -0
  1815. package/llms/components/lr-svg-viewer.md +9 -2
  1816. package/llms/components/lr-swatch-picker.md +12 -5
  1817. package/llms/components/lr-switch.md +1 -1
  1818. package/llms/components/lr-table.md +61 -9
  1819. package/llms/components/lr-terminal.md +6 -1
  1820. package/llms/components/lr-textarea.md +8 -2
  1821. package/llms/components/lr-time-range.md +30 -10
  1822. package/llms/components/lr-toast-item.md +4 -6
  1823. package/llms/components/lr-toast.md +4 -6
  1824. package/llms/components/lr-token-input.md +17 -3
  1825. package/llms/components/lr-tool-result-dialog.md +12 -1
  1826. package/llms/components/lr-tool-timeline.md +12 -1
  1827. package/llms/components/lr-trace-tree.md +12 -1
  1828. package/llms/components/lr-tree-node.md +18 -6
  1829. package/llms/components/lr-tree.md +18 -6
  1830. package/llms/components/lr-virtual-list.md +1 -1
  1831. package/llms/components/lr-voice-picker.md +13 -1
  1832. package/llms/components/lr-widget-renderer.md +2 -1
  1833. package/llms/components/lr-widget.md +13 -7
  1834. package/llms/components/lr-xml-viewer.md +6 -4
  1835. package/llms/index.md +17 -5
  1836. package/llms/peers.md +15 -8
  1837. package/llms/shared.md +72 -18
  1838. package/llms-full.txt +1445 -337
  1839. package/llms.txt +6 -5
  1840. package/package.json +48 -14
  1841. package/vscode-css-data.json +1441 -97
  1842. package/vscode-html-data.json +877 -194
  1843. package/web-types.json +1712 -218
@@ -123,7 +123,7 @@
123
123
  "name": "lr-agent-eval-dashboard",
124
124
  "description": {
125
125
  "kind": "markdown",
126
- "value": "`<lr-agent-eval-dashboard>` — a controlled evaluation overview with metric cards, a trend chart,\nand run-status history. It never launches or scores evaluations.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root dashboard wrapper. |\n| `chart` | The trend chart. |\n| `empty` | The empty history message. |\n| `heading` | The visible heading. |\n| `metric` | One metric card. |\n| `metrics` | The metric-card grid. |\n| `run` | One run row. |\n| `run-label` | A run label. |\n| `run-meta` | Status and metric value. |\n| `run-status` | A run status badge. |\n| `runs` | The run history. |\n| `runs-heading` | The run history heading. |"
126
+ "value": "`<lr-agent-eval-dashboard>` — a controlled evaluation overview with metric cards, a trend chart,\nand run-status history. It never launches or scores evaluations.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root dashboard wrapper. |\n| `chart` | The trend chart. |\n| `empty` | The empty history message. |\n| `heading` | The visible heading. |\n| `metric` | One metric card. |\n| `metrics` | The metric-card grid. |\n| `run` | One run row. |\n| `run-label` | A run label. |\n| `run-meta` | Status and metric value. |\n| `run-status` | A run status badge. |\n| `runs` | The run history. |\n| `runs-heading` | The run history heading. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-agent-eval-dashboard-active-border` (default: `var(--lr-color-brand)`) — Active metric border.\n- `--lr-agent-eval-dashboard-active-background` (default: `var(--lr-color-brand-quiet)`) — Active metric background."
127
127
  },
128
128
  "attributes": [
129
129
  {
@@ -133,6 +133,13 @@
133
133
  "value": "Type: `string` \nDefault: `'220px'`"
134
134
  }
135
135
  },
136
+ {
137
+ "name": "currency",
138
+ "description": {
139
+ "kind": "markdown",
140
+ "value": "ISO 4217 currency code used by metrics whose format is `currency`. Invalid codes use USD.\n\nType: `string` \nDefault: `'USD'`"
141
+ }
142
+ },
136
143
  {
137
144
  "name": "label",
138
145
  "description": {
@@ -167,7 +174,7 @@
167
174
  "name": "lr-agent-run",
168
175
  "description": {
169
176
  "kind": "markdown",
170
- "value": "`<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.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `actions` | Extra header actions alongside the built-in Cancel/Retry buttons. |\n| `header` | Replaces the built-in lifecycle header and its built-in actions. |\n| `output` | The run's final output content. No default content. |\n| `reasoning` | Reasoning/thinking content. No default content. |\n| `summary` | Replaces the built-in model, usage, and metrics summary. |\n| `tasks` | Task/plan content. Falls back to a `<lr-task-list>` built from `run.steps` when nothing is slotted and `run.steps` is non-empty. |\n| `tools` | Tool-call content (e.g. `<lr-tool-call-chip>`/`<lr-tool-result-view>` rows). No default content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | Wrapper around the `actions` slot and the built-in Cancel/Retry buttons. |\n| `base` | The root container. |\n| `body` | Wrapper around the four composition slots. |\n| `cancel-button` | The built-in Cancel button. Only rendered while cancelable (see the class doc). |\n| `current-step` | Wrapper around the current-step icon and label. Only rendered while a step has `status.kind === 'running'`. |\n| `current-step-icon` | The spinning current-step icon. |\n| `current-step-label` | The current step's `label` text. |\n| `elapsed` | The composed `<lr-generation-status>`, only rendered while the run is actively ticking (see the class doc). |\n| `elapsed-static` | The static formatted duration for a terminal run with both `startedAt` and `endedAt`. |\n| `empty` | The `<lr-empty>` shown when `run` is `null`. |\n| `header` | The header row wrapping status, elapsed time, current step, summary, and actions. |\n| `metric` | One arbitrary metric in the built-in summary. |\n| `metric-label` | The metric's label. |\n| `metric-value` | The metric's value. |\n| `model` | `run.model`, when set. |\n| `output` | The `output` slot. |\n| `reasoning` | The `reasoning` slot. |\n| `retry-button` | The built-in Retry button. Only rendered while retryable. |\n| `status` | Wrapper around the status badge and optional status message. |\n| `status-badge` | The resolved `<lr-badge>` lifecycle-status pill. |\n| `status-message` | `run.status.message`, when set. |\n| `summary` | Wrapper around the model text and the composed `<lr-usage-badge>`. Only rendered while `run.model` or a valid `run.costEstimate` is present. |\n| `tasks` | The `tasks` slot. |\n| `tools` | The `tools` slot. |\n| `usage` | The composed `<lr-usage-badge>`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-agent-run-spin` (default: `1s linear`) — Current-step icon spin animation duration and timing.\n- `--lr-agent-run-compact-padding` (default: `var(--lr-space-s)`) — `[part=\"base\"]` padding while `compact`.\n- `--lr-agent-run-compact-gap` (default: `var(--lr-space-s)`) — Gap between `[part=\"base\"]`'s header and body while `compact`."
177
+ "value": "`<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.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `actions` | Extra header actions alongside the built-in Cancel/Retry buttons. |\n| `header` | Replaces the built-in lifecycle header and its built-in actions. |\n| `output` | The run's final output content. No default content. |\n| `reasoning` | Reasoning/thinking content. No default content. |\n| `summary` | Replaces the built-in model, usage, and metrics summary. |\n| `tasks` | Task/plan content. Falls back to a `<lr-task-list>` built from `run.steps` when nothing is slotted and `run.steps` is non-empty. |\n| `tools` | Tool-call content (e.g. `<lr-tool-call-chip>`/`<lr-tool-result-view>` rows). No default content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | Wrapper around the `actions` slot and the built-in Cancel/Retry buttons. |\n| `base` | The root container. |\n| `body` | Wrapper around the four composition slots. |\n| `cancel-button` | The built-in Cancel button. Only rendered while cancelable (see the class doc). |\n| `current-step` | Wrapper around the current-step icon and label. Only rendered while a step has `status.kind === 'running'`. |\n| `current-step-icon` | The spinning current-step icon. |\n| `current-step-label` | The current step's `label` text. |\n| `elapsed` | The composed `<lr-generation-status>`, only rendered while the run is actively ticking (see the class doc). |\n| `elapsed-static` | The static formatted duration for a terminal run with both `startedAt` and `endedAt`. |\n| `empty` | The `<lr-empty>` shown when `run` is `null`. |\n| `header` | The header row wrapping status, elapsed time, current step, summary, and actions. |\n| `metric` | One arbitrary metric in the built-in summary. |\n| `metric-label` | The metric's label. |\n| `metric-value` | The metric's value. |\n| `model` | `run.model`, when set. |\n| `output` | The `output` slot. |\n| `reasoning` | The `reasoning` slot. |\n| `retry-button` | The built-in Retry button. Only rendered while retryable. |\n| `status` | Wrapper around the status badge and optional status message. |\n| `status-badge` | The resolved `<lr-badge>` lifecycle-status pill. |\n| `status-message` | `run.status.message`, when set. |\n| `summary` | Wrapper around the model text and the composed `<lr-usage-badge>`. Only rendered while `run.model` or a valid `run.costEstimate` is present. |\n| `tasks` | The `tasks` slot. |\n| `tools` | The `tools` slot. |\n| `usage` | The composed `<lr-usage-badge>`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-agent-run-spin` (default: `var(--lr-transition-ambient)`) — Current-step icon spin animation.\n- `--lr-agent-run-metric-danger-color` (default: `var(--lr-color-danger)`) — Danger metric value.\n- `--lr-agent-run-metric-success-color` (default: `var(--lr-color-success)`) — Success metric value.\n- `--lr-agent-run-metric-warning-color` (default: `var(--lr-color-warning)`) — Warning metric value.\n- `--lr-agent-run-compact-padding` (default: `var(--lr-space-s)`) — `[part=\"base\"]` padding while `compact`.\n- `--lr-agent-run-compact-gap` (default: `var(--lr-space-s)`) — Gap between `[part=\"base\"]`'s header and body while `compact`."
171
178
  },
172
179
  "attributes": [
173
180
  {
@@ -262,7 +269,7 @@
262
269
  "name": "lr-agent-workspace",
263
270
  "description": {
264
271
  "kind": "markdown",
265
- "value": "`<lr-agent-workspace>` — a responsive, controlled shell for an AI conversation and its\nsupporting agent state. It renders the transcript and composer in the main pane, and composes\nexisting run, tool, retrieval, grounding, and context primitives in an optional details pane.\n\nThe component performs no network requests, model calls, retrieval, or persistence. Assign new\ndata to the public properties as the host application receives updates. The `messages` fallback\nrenders sanitized Markdown from each message's `text`; applications needing richer message\ncontent can replace that entire region with the `messages` slot. The `details` slot similarly\nreplaces the built-in details pane while keeping the responsive shell.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `composer` | Replaces the built-in `<lr-chat-composer>`. |\n| `details` | Replaces the built-in run/tool/retrieval/grounding/context details pane. |\n| `header-actions` | Header actions such as model selection, settings, or export controls. |\n| `messages` | Replaces the data-driven transcript message list. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root workspace wrapper. |\n| `body` | The main conversation/details layout. |\n| `composer` | The composer region. |\n| `composer-input` | The built-in `<lr-chat-composer>`. |\n| `conversation` | The main transcript pane. |\n| `details` | The responsive details pane. |\n| `details-content` | The built-in details content wrapper. |\n| `header` | The workspace heading and header-actions slot. |\n| `header-actions` | The header-actions slot wrapper. |\n| `heading` | The visible workspace heading. |\n| `messages` | The transcript message wrapper. |\n| `messages-empty` | The empty transcript state. |\n| `section` | A built-in run, tools, retrieval, grounding, or context section. |\n| `section-heading` | A built-in details section heading. |\n| `viewport` | The composed `<lr-chat-viewport>`. |"
272
+ "value": "`<lr-agent-workspace>` — a responsive, controlled shell for an AI conversation and its\nsupporting agent state. It renders the transcript and composer in the main pane, and composes\nexisting run, tool, retrieval, grounding, and context primitives in an optional details pane.\n\nThe component performs no network requests, model calls, retrieval, or persistence. Assign new\ndata to the public properties as the host application receives updates. The `messages` fallback\nrenders ordered `message.parts` through `<lr-message-parts>` when supplied, otherwise sanitized\nMarkdown from the legacy `message.text`; applications can replace the entire region with the\n`messages` slot. The `details` slot similarly replaces the built-in details pane while keeping\nthe responsive shell. To keep the data-driven fallback bounded, at most the latest 500 messages\nare materialized; applications needing a larger retained transcript can supply a virtualized\n`messages` slot.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `composer` | Replaces the built-in `<lr-chat-composer>`. |\n| `details` | Replaces the built-in run/tool/retrieval/grounding/context details pane. |\n| `header-actions` | Header actions such as model selection, settings, or export controls. |\n| `messages` | Replaces the data-driven transcript message list. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root workspace wrapper. |\n| `body` | The main conversation/details layout. |\n| `composer` | The composer region. |\n| `composer-input` | The built-in `<lr-chat-composer>`. |\n| `conversation` | The main transcript pane. |\n| `details` | The responsive details pane. |\n| `details-content` | The built-in details content wrapper. |\n| `header` | The workspace heading and header-actions slot. |\n| `header-actions` | The header-actions slot wrapper. |\n| `heading` | The visible workspace heading. |\n| `messages` | The transcript message wrapper. |\n| `messages-empty` | The empty transcript state. |\n| `section` | A built-in run, tools, retrieval, grounding, or context section. |\n| `section-heading` | A built-in details section heading. |\n| `viewport` | The composed `<lr-chat-viewport>`. |"
266
273
  },
267
274
  "attributes": [
268
275
  {
@@ -642,6 +649,13 @@
642
649
  "value": "Whether the mobile floating overlay is shown. Only meaningful while\n`mode` is `'mobile'` — the value is preserved (not reset) while another\nmode is active, but no overlay chrome renders until `mode` is\n`'mobile'` again. Set this directly, or use the built-in toggle button\n— there is no separate `show()`/`hide()` pair.\n\nType: `boolean` \nDefault: `false`"
643
650
  }
644
651
  },
652
+ {
653
+ "name": "persist",
654
+ "description": {
655
+ "kind": "markdown",
656
+ "value": "Whitespace-separated persistence allowlist. `open width` is the backward-compatible default;\nuse `width preferred-mode` to retain layout preference without restoring the transient mobile\noverlay. Valid tokens are `open`, `width`, and `preferred-mode`.\n\nType: `string` \nDefault: `'open width'`"
657
+ }
658
+ },
645
659
  {
646
660
  "name": "preferred-mode",
647
661
  "description": {
@@ -660,14 +674,14 @@
660
674
  "name": "resizable",
661
675
  "description": {
662
676
  "kind": "markdown",
663
- "value": "Opts a continuously draggable width in for the `'full'` state — exposes a `[part=\"resizer\"]`\nhandle (pointer-drag and `ArrowLeft`/`ArrowRight` keyboard stepping, RTL-aware) clamped to\n`[minRailWidthPx, maxRailWidthPx]`. Set `storageKey` to persist the chosen width (and `open`)\nacross reloads; otherwise listen for `lr-rail-resize` and persist `widthPx` yourself. `false`\n(the default) renders no resizer and leaves the fixed-width `--lr-app-rail-width` CSS token\nexactly as before this property existed.\n\nType: `boolean` \nDefault: `false`"
677
+ "value": "Opts a continuously draggable width in for the `'full'` state — exposes a `[part=\"resizer\"]`\nhandle (pointer-drag and `ArrowLeft`/`ArrowRight` keyboard stepping, RTL-aware) clamped to\n`[minRailWidthPx, maxRailWidthPx]`. Set `storageKey` to persist the fields selected by\n`persist`; otherwise listen for `lr-rail-resize` and persist `widthPx` yourself. `false` (the\ndefault) renders no resizer and leaves the fixed-width `--lr-app-rail-width` CSS token exactly\nas before this property existed.\n\nType: `boolean` \nDefault: `false`"
664
678
  }
665
679
  },
666
680
  {
667
681
  "name": "storage-key",
668
682
  "description": {
669
683
  "kind": "markdown",
670
- "value": "When set, persists `open` and `railWidthPx` to `localStorage` under\n`lr-app-rail:${storageKey}`, restoring them on the next mount — mirrors `lr-split`'s\n`storage-key`. `mode` is breakpoint-derived and is never persisted. Unset (the default) means\nno persistence, exactly as before.\n\nType: `string | undefined`"
684
+ "value": "When set, persists the fields selected by `persist` to `localStorage` under\n`lr-app-rail:${storageKey}`, restoring them on the next mount — mirrors `lr-split`'s\n`storage-key`. Effective `mode` is breakpoint-derived and is never persisted. Unset (the\ndefault) means no persistence, exactly as before.\n\nType: `string | undefined`"
671
685
  }
672
686
  }
673
687
  ]
@@ -697,7 +711,7 @@
697
711
  "name": "href",
698
712
  "description": {
699
713
  "kind": "markdown",
700
- "value": "Optional destination. Without `href`, the item renders as a button.\n\nType: `string` \nDefault: `''`"
714
+ "value": "Optional destination. Without `href`, the item renders as a button.\n\nType: `string` \nDefault: `\"\"`"
701
715
  }
702
716
  },
703
717
  {
@@ -711,7 +725,7 @@
711
725
  "name": "target",
712
726
  "description": {
713
727
  "kind": "markdown",
714
- "value": "Optional link target.\n\nType: `string` \nDefault: `''`"
728
+ "value": "Optional link target.\n\nType: `string` \nDefault: `\"\"`"
715
729
  }
716
730
  },
717
731
  {
@@ -727,7 +741,7 @@
727
741
  "name": "lr-approval-queue",
728
742
  "description": {
729
743
  "kind": "markdown",
730
- "value": "`<lr-approval-queue>` — a controlled queue of tool calls that need human approval, with a\nkeyboard-accessible request list and a single reused `<lr-tool-approval-dialog>`. It never\nexecutes tools, applies permissions, or persists decisions; the host owns those operations.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root queue wrapper. |\n| `count` | The pending-count text. |\n| `empty` | The empty state. |\n| `heading` | The visible queue heading. |\n| `heading-row` | The heading and pending-count row. |\n| `list` | The request list. |\n| `request` | One selectable request row. |\n| `request-id` | The stable request id. |\n| `request-info` | Request name and id wrapper. |\n| `status` | The request status badge. |\n| `tool-name` | The proposed tool name. |"
744
+ "value": "`<lr-approval-queue>` — a controlled queue of tool calls that need human approval, with a\nkeyboard-accessible request list and a single reused `<lr-tool-approval-dialog>`. It never\nexecutes tools, applies permissions, or persists decisions; the host owns those operations.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root queue wrapper. |\n| `count` | The pending-count text. |\n| `empty` | The empty state. |\n| `heading` | The visible queue heading. |\n| `heading-row` | The heading and pending-count row. |\n| `list` | The request list. |\n| `request` | One selectable request row. |\n| `request-id` | The stable request id. |\n| `request-info` | Request name and id wrapper. |\n| `status` | The request status badge. |\n| `tool-name` | The proposed tool name. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-approval-queue-selected-border` (default: `var(--lr-color-brand)`) — Selected request border."
731
745
  },
732
746
  "attributes": [
733
747
  {
@@ -771,7 +785,7 @@
771
785
  "name": "lr-archive-viewer",
772
786
  "description": {
773
787
  "kind": "markdown",
774
- "value": "Lists names and uncompressed sizes in a ZIP archive without rendering entry contents. File sizes\nare measured through JSZip's public async API, so opening an archive decompresses each file once.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root container. |\n| `body` | The archive listing body. |\n| `entry` | An archive entry row. |\n| `entry-icon` | The decorative folder or file icon. |\n| `entry-name` | The entry path. |\n| `entry-name-dir` | The entry path of a directory row (also carries `entry-name`). |\n| `entry-size` | The human-readable file size. |\n| `error` | The error region. |\n| `spinner` | The loading region. |"
788
+ "value": "Lists names and uncompressed sizes in a ZIP archive without rendering entry contents. Sizes use\narchive metadata when available; file entries without size metadata are inflated sequentially\nonce for measurement. The combined declared and measured uncompressed size is capped at 100 MB.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root container. |\n| `body` | The archive listing body. |\n| `entry` | An archive entry row. |\n| `entry-icon` | The decorative folder or file icon. |\n| `entry-name` | The entry path. |\n| `entry-name-dir` | The entry path of a directory row (also carries `entry-name`). |\n| `entry-size` | The human-readable file size. |\n| `error` | The error region. |\n| `spinner` | The loading region. |"
775
789
  },
776
790
  "attributes": [
777
791
  {
@@ -829,7 +843,7 @@
829
843
  "name": "download-src",
830
844
  "description": {
831
845
  "kind": "markdown",
832
- "value": "The download URL, sanitized through `safeMediaSrc()` before use. Empty hides the button.\n\nType: `string` \nDefault: `''`"
846
+ "value": "The download URL, sanitized through `safeDownloadHref()` before use. Empty hides the button.\n\nType: `string` \nDefault: `''`"
833
847
  }
834
848
  },
835
849
  {
@@ -1374,7 +1388,7 @@
1374
1388
  "name": "data-labels",
1375
1389
  "description": {
1376
1390
  "kind": "markdown",
1377
- "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
1391
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
1378
1392
  }
1379
1393
  },
1380
1394
  {
@@ -1599,7 +1613,7 @@
1599
1613
  "name": "lr-breadcrumb-item",
1600
1614
  "description": {
1601
1615
  "kind": "markdown",
1602
- "value": "`<lr-breadcrumb-item>` — one link or current-page label in a breadcrumb.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Item label. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The link or current-page label. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-breadcrumb-current-color` (default: `var(--lr-color-text-quiet)`) — Text color of the current-page item (`current`/`aria-current=\"page\"`). Declared as an inline `var()` fallback (never on `:host`), so setting it on the element or an ancestor recolors only the current item without hijacking the library-wide `--lr-color-text-quiet` token."
1616
+ "value": "`<lr-breadcrumb-item>` — one link or current-page label in a breadcrumb.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Item label. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The link or current-page label. |\n| `separator` | Decorative separator shown before non-first items. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-breadcrumb-current-color` (default: `var(--lr-color-text-quiet)`) — Text color of the current-page item (`current`/`aria-current=\"page\"`). Declared as an inline `var()` fallback (never on `:host`), so setting it on the element or an ancestor recolors only the current item without hijacking the library-wide `--lr-color-text-quiet` token."
1603
1617
  },
1604
1618
  "attributes": [
1605
1619
  {
@@ -1613,7 +1627,7 @@
1613
1627
  "name": "href",
1614
1628
  "description": {
1615
1629
  "kind": "markdown",
1616
- "value": "Type: `string` \nDefault: `''`"
1630
+ "value": "Type: `string` \nDefault: `\"\"`"
1617
1631
  }
1618
1632
  },
1619
1633
  {
@@ -1629,7 +1643,7 @@
1629
1643
  "name": "lr-browser-frame",
1630
1644
  "description": {
1631
1645
  "kind": "markdown",
1632
- "value": "`<lr-browser-frame>` — presentational \"agent computer\" viewport: a screenshot/frame stream (or\nslotted live media), read-only URL display, action-ping overlays, and take-over/stop affordances.\nNo automation transport, no input relay — take-over is an event; the host swaps in its own\ninteractive element.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Host-owned live element (e.g. `<video>` or an interactive `<iframe>`), replacing the `frame-src` image. |\n| `actions` | Extra toolbar controls. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | The `actions` slot wrapper. |\n| `base` | The root wrapper (`role=\"group\"`). |\n| `controller-badge` | The current controller indicator. |\n| `frame` | The `frame-src` `<img>` (absent once the default slot is populated). |\n| `ping` | One action-ping marker; carries `data-kind`. |\n| `status` | The visible status text (`role=\"status\"`). |\n| `stop-button` | The stop button. |\n| `take-over-button` | The take-over/hand-back button. |\n| `toolbar` | The header row. |\n| `url` | The read-only address text. |\n| `viewport` | The frame/media container. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-browser-frame-aspect-ratio` (default: `16 / 9`) — The viewport's aspect ratio."
1646
+ "value": "`<lr-browser-frame>` — presentational \"agent computer\" viewport: a screenshot/frame stream (or\nslotted live media), read-only URL display, action-ping overlays, and take-over/stop affordances.\nNo automation transport, no input relay — take-over is an event; the host swaps in its own\ninteractive element.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Host-owned live element (e.g. `<video>` or an interactive `<iframe>`), replacing the `frame-src` image. |\n| `actions` | Extra toolbar controls. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | The `actions` slot wrapper. |\n| `base` | The root wrapper (`role=\"group\"`). |\n| `controller-badge` | The current controller indicator. |\n| `frame` | The `frame-src` `<img>` (absent once the default slot is populated). |\n| `ping` | One action-ping marker; carries `data-kind`. |\n| `status` | The visible status text (`role=\"status\"`). |\n| `stop-button` | The stop button. |\n| `take-over-button` | The take-over/hand-back button. |\n| `toolbar` | The header row. |\n| `url` | The read-only address text. |\n| `viewport` | The frame/media container. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-browser-frame-aspect-ratio` (default: `16 / 9`) — The viewport's aspect ratio.\n- `--lr-browser-frame-controller-background` (default: `var(--lr-color-brand-quiet)`) — Controller badge background.\n- `--lr-browser-frame-controller-color` (default: `var(--lr-color-brand)`) — Controller badge text color.\n- `--lr-browser-frame-ping-click-color` (default: `var(--lr-color-brand)`) — Click-ping border color.\n- `--lr-browser-frame-ping-type-color` (default: `var(--lr-color-success)`) — Type-ping border color.\n- `--lr-browser-frame-ping-scroll-color` (default: `var(--lr-color-warning)`) — Scroll-ping border color.\n- `--lr-browser-frame-ping-move-color` (default: `var(--lr-color-text-quiet)`) — Move-ping border color."
1633
1647
  },
1634
1648
  "attributes": [
1635
1649
  {
@@ -1715,7 +1729,7 @@
1715
1729
  "name": "data-labels",
1716
1730
  "description": {
1717
1731
  "kind": "markdown",
1718
- "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
1732
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
1719
1733
  }
1720
1734
  },
1721
1735
  {
@@ -1815,7 +1829,7 @@
1815
1829
  "name": "lr-button",
1816
1830
  "description": {
1817
1831
  "kind": "markdown",
1818
- "value": "`<lr-button>` — a generic action-button primitive. Renders an internal native\n`<button part=\"base\">`. `type=\"submit\"`/`type=\"reset\"`\nare handled by this component itself via the host's own `closest('form')` — a shadow-internal\nnative `<button type=\"submit\">` does not participate in an ancestor light-DOM form's submission\non its own, since form-submitter semantics don't cross the shadow boundary.\n\nWhen `href` is set to a safe link URL (`http:`/`https:`/`blob:`/`mailto:`/relative — see\n`safeLinkHref`, or `safeDownloadHref` which drops `mailto:` when `download` is set) the root\nrenders as a real `<a part=\"base\" href=…>` instead — for a link styled\nas a button (e.g. a CTA). Native navigation is then the anchor's own activation, so the\nsubmit/reset click handler and `type` (submit/reset) have no effect in that mode. When the\nbutton is disabled (its own `disabled` or an ancestor `<fieldset disabled>`) the anchor renders\nwith `aria-disabled=\"true\"` and **no `href`** — an href-less anchor is not focusable or\nnavigable, so a disabled link button genuinely cannot be activated (unlike a bare\n`aria-disabled` on a still-navigable link). An unsafe/unparseable `href` falls back to the\nnative `<button>`.\n\nA host `aria-label` is forwarded to the internal button/anchor as a literal string (for an\nicon-only button with no visible label); external `aria-labelledby`/`aria-describedby` idrefs\nare not copied across the shadow boundary.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Default slot: the button's label content. |\n| `end` | Trailing icon/content, rendered after the label. |\n| `start` | Leading icon/content, rendered before the label. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The internal native `<button>` (or an `<a>` when `href` resolves to a safe link). |\n| `end` | The `end` slot wrapper. |\n| `label` | The default-slot label wrapper. |\n| `spinner` | The loading spinner, present only while `loading` is `true`. |\n| `start` | The `start` slot wrapper. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-button-width` (default: `100%`) — Inline size of the internal button. The host defaults it to `100%` so the native button follows the host's own width; override to `auto` (or any other value) for a compact inline composition.\n- `--lr-button-hover-brightness` (default: `1.08`) — `filter: brightness()` multiplier applied while hovering a non-disabled button.\n- `--lr-button-active-scale` (default: `0.9875`) — `transform: scale()` factor applied while a non-disabled button is pressed.\n- `--lr-button-spinner-duration` (default: `1s`) — Rotation period of the `loading` spinner.\n- `--lr-button-accent` (default: `var(--lr-color-text)`) — Text/glyph color for the chrome-less appearances (`outlined`, `plain`, `link`). Swapped per `variant` to that variant's semantic color.\n- `--lr-button-fill` (default: `var(--lr-color-surface)`) — Background of `appearance=\"filled\"`. Swapped per `variant` to that variant's semantic color.\n- `--lr-button-on-fill` (default: `var(--lr-color-text)`) — Text color on top of `--lr-button-fill`. Swapped per `variant` to that variant's `on-*` color.\n- `--lr-button-accent-fill` (default: `var(--lr-color-neutral)`) — Background of `appearance=\"accent\"` (and its border color). Swapped per `variant` to that variant's semantic color.\n- `--lr-button-accent-on-fill` (default: `var(--lr-color-on-neutral)`) — Text color on top of `--lr-button-accent-fill`. Swapped per `variant` to that variant's `on-*` color.\n- `--lr-button-border` (default: `var(--lr-color-border)`) — Border color of the internal button. Swapped per `variant` to that variant's semantic color.\n- `--lr-button-outlined-border` (default: `var(--lr-color-border-strong)`) — Border color of `appearance=\"outlined\"`, which overrides `--lr-button-border`.\n- `--lr-button-outlined-fill` (default: `transparent`) — Background of `appearance=\"outlined\"`. Transparent by default; set it to tint the button (e.g. a faint surface wash behind the outline) without a `::part(base)` rule. Like `--lr-button-quiet-*`, it is deliberately *not* swapped per `variant`. Note that the `:hover` `filter: brightness()` applies to whatever fill is set, so a tinted outlined button now visibly brightens on hover where a transparent one did not.\n- `--lr-button-quiet-border` (default: `var(--lr-color-border)`) — Border color of `appearance=\"quiet\"`.\n- `--lr-button-quiet-text` (default: `var(--lr-color-text-quiet)`) — Text color of `appearance=\"quiet\"`.\n- `--lr-button-size-2xs` (default: `var(--lr-size-1-25rem)`) — `min-block-size` at `size=\"2xs\"`.\n- `--lr-button-size-xs` (default: `var(--lr-size-1-5rem)`) — `min-block-size` at `size=\"xs\"`.\n- `--lr-button-size-s` (default: `var(--lr-size-1-875rem)`) — `min-block-size` at `size=\"s\"`. Matches `lr-input`/`lr-select`/`lr-combobox`'s own `size=\"s\"` control height.\n- `--lr-button-size-m` (default: `var(--lr-size-2-5rem)`) — `min-block-size` at `size=\"m\"`. Matches `lr-input`/`lr-select`/`lr-combobox`'s own default control height, so a default-size button sitting next to a default-size input/select/combobox in the same row lines up.\n- `--lr-button-size-l` (default: `var(--lr-size-3rem)`) — `min-block-size` at `size=\"l\"`. Matches `lr-input`/`lr-select`/`lr-combobox`'s own `size=\"l\"` control height.\n- `--lr-button-size-xl` (default: `var(--lr-size-3-5rem)`) — `min-block-size` at `size=\"xl\"`. Matches `lr-input`/`lr-select`/`lr-combobox`'s own `size=\"xl\"` control height.\n- `--lr-button-padding-block` (default: `var(--lr-space-xs)`) — Block padding of the internal button, re-assigned per `size` tier (the default is the `m` tier's value). Override it to retune a tier without a `::part(base)` rule; `appearance=\"link\"` ignores it (it renders with zero padding).\n- `--lr-button-padding-inline` (default: `var(--lr-space-m)`) — Inline padding of the internal button, re-assigned per `size` tier (the default is the `m` tier's value). `appearance=\"link\"` ignores it.\n- `--lr-button-font-size` (default: `var(--lr-font-size-m)`) — Font size of the internal button, re-assigned per `size` tier (the default is the `m` tier's value). `appearance=\"link\"` ignores it and inherits the ambient font instead.\n- `--lr-button-min-height` (default: `var(--lr-button-size-m)`) — The active tier's `min-block-size` floor. Re-assigned per `size` tier to that tier's own `--lr-button-size-*` token, and used as the fallback when `--lr-button-height` is unset.\n- `--lr-button-height` — Exact height of the internal button. **Undeclared by default** — so the button keeps the active tier's `min-block-size` floor and an `auto` height, exactly as before. Set it (e.g. to pin the button to a fixed toolbar row) to both floor *and* cap the height. Never declare it as `auto`: a declared value wins over the `var()` fallback arm and would make every tier's floor dead code. `appearance=\"link\"` ignores it.\n- `--lr-button-gap` (default: `var(--lr-space-2xs)`) — Gap between the icon/label and any slotted content in the internal button. Unlike the size knobs above it does not vary by `size` tier. Override it to retune without a `::part(base)` rule.\n- `--lr-button-radius` (default: `var(--lr-radius)`) — Corner radius of the internal button. Does not vary by `size` tier. `appearance=\"link\"` ignores it (it renders with zero radius).\n- `--lr-button-shadow` — Box shadow of the internal button. **Undeclared by default**, so `box-shadow` falls back to `none` — byte-identical to before this property existed. Set it (e.g. an elevated/floating action button) without a `::part(base)` rule."
1832
+ "value": "`<lr-button>` — a generic action-button primitive. Renders an internal native\n`<button part=\"base\">`. `type=\"submit\"`/`type=\"reset\"`\nare handled by this component itself via the host's own `closest('form')` — a shadow-internal\nnative `<button type=\"submit\">` does not participate in an ancestor light-DOM form's submission\non its own, since form-submitter semantics don't cross the shadow boundary.\n\nWhen `href` is set to a safe link URL (`http:`/`https:`/`blob:`/`mailto:`/relative — see\n`safeLinkHref`, or `safeDownloadHref` which drops `mailto:` when `download` is set) the root\nrenders as a real `<a part=\"base\" href=…>` instead — for a link styled\nas a button (e.g. a CTA). Native navigation is then the anchor's own activation, so the\nsubmit/reset click handler and `type` (submit/reset) have no effect in that mode. When the\nbutton is disabled (its own `disabled` or an ancestor `<fieldset disabled>`) the anchor renders\nwith `aria-disabled=\"true\"` and **no `href`** — an href-less anchor is not focusable or\nnavigable, so a disabled link button genuinely cannot be activated (unlike a bare\n`aria-disabled` on a still-navigable link). An unsafe/unparseable `href` falls back to the\nnative `<button>`.\n\n`accessibleLabel` (attribute `aria-label`) is forwarded reactively to the internal button/anchor\nas a literal string (for an icon-only button with no visible label); external\n`aria-labelledby`/`aria-describedby` idrefs are not copied across the shadow boundary.\nHost `aria-haspopup` and `aria-expanded` values are likewise forwarded to the internal semantic\ncontrol. When host `aria-controls` names elements in the host's own root, the controls\nrelationship is resolved onto the internal control through the reflected element-reference API\nso it remains valid across this component's shadow boundary; browsers without that API retain\nthe forwarded string attribute as a best-effort fallback.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Default slot: the button's label content. |\n| `end` | Trailing icon/content, rendered after the label. |\n| `start` | Leading icon/content, rendered before the label. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The internal native `<button>` (or an `<a>` when `href` resolves to a safe link). |\n| `end` | The `end` slot wrapper. |\n| `label` | The default-slot label wrapper. |\n| `spinner` | The loading spinner, present only while `loading` is `true`. |\n| `start` | The `start` slot wrapper. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-button-width` (default: `100%`) — Inline size of the internal button. The host defaults it to `100%` so the native button follows the host's own width; override to `auto` (or any other value) for a compact inline composition.\n- `--lr-button-hover-brightness` (default: `1.08`) — `filter: brightness()` multiplier applied while hovering a non-disabled button.\n- `--lr-button-active-scale` (default: `0.9875`) — `transform: scale()` factor applied while a non-disabled button is pressed.\n- `--lr-button-spinner-duration` (default: `var(--lr-transition-ambient)`) — Timing of the `loading` spinner.\n- `--lr-button-accent` (default: `var(--lr-color-text)`) — Text/glyph color for the chrome-less appearances (`outlined`, `plain`, `link`). Swapped per `variant` to that variant's semantic color.\n- `--lr-button-fill` (default: `var(--lr-color-surface)`) — Background of `appearance=\"filled\"`. Swapped per `variant` to that variant's semantic color.\n- `--lr-button-on-fill` (default: `var(--lr-color-text)`) — Text color on top of `--lr-button-fill`. Swapped per `variant` to that variant's `on-*` color.\n- `--lr-button-accent-fill` (default: `var(--lr-color-neutral)`) — Background of `appearance=\"accent\"` (and its border color). Swapped per `variant` to that variant's semantic color.\n- `--lr-button-accent-on-fill` (default: `var(--lr-color-on-neutral)`) — Text color on top of `--lr-button-accent-fill`. Swapped per `variant` to that variant's `on-*` color.\n- `--lr-button-border` (default: `var(--lr-color-border)`) — Border color of the internal button. Swapped per `variant` to that variant's semantic color.\n- `--lr-button-outlined-border` (default: `var(--lr-color-border-strong)`) — Border color of `appearance=\"outlined\"`, which overrides `--lr-button-border`.\n- `--lr-button-outlined-fill` (default: `transparent`) — Background of `appearance=\"outlined\"`. Transparent by default; set it to tint the button (e.g. a faint surface wash behind the outline) without a `::part(base)` rule. Like `--lr-button-quiet-*`, it is deliberately *not* swapped per `variant`. Note that the `:hover` `filter: brightness()` applies to whatever fill is set, so a tinted outlined button now visibly brightens on hover where a transparent one did not.\n- `--lr-button-quiet-border` (default: `var(--lr-color-border)`) — Border color of `appearance=\"quiet\"`.\n- `--lr-button-quiet-text` (default: `var(--lr-color-text-quiet)`) — Text color of `appearance=\"quiet\"`.\n- `--lr-button-size-2xs` (default: `var(--lr-size-1-25rem)`) — `min-block-size` at `size=\"2xs\"`.\n- `--lr-button-size-xs` (default: `var(--lr-size-1-5rem)`) — `min-block-size` at `size=\"xs\"`.\n- `--lr-button-size-s` (default: `var(--lr-size-1-875rem)`) — `min-block-size` at `size=\"s\"`. Matches `lr-input`/`lr-select`/`lr-combobox`'s own `size=\"s\"` control height.\n- `--lr-button-size-m` (default: `var(--lr-size-2-5rem)`) — `min-block-size` at `size=\"m\"`. Matches `lr-input`/`lr-select`/`lr-combobox`'s own default control height, so a default-size button sitting next to a default-size input/select/combobox in the same row lines up.\n- `--lr-button-size-l` (default: `var(--lr-size-3rem)`) — `min-block-size` at `size=\"l\"`. Matches `lr-input`/`lr-select`/`lr-combobox`'s own `size=\"l\"` control height.\n- `--lr-button-size-xl` (default: `var(--lr-size-3-5rem)`) — `min-block-size` at `size=\"xl\"`. Matches `lr-input`/`lr-select`/`lr-combobox`'s own `size=\"xl\"` control height.\n- `--lr-button-padding-block` (default: `var(--lr-space-xs)`) — Block padding of the internal button, re-assigned per `size` tier (the default is the `m` tier's value). Override it to retune a tier without a `::part(base)` rule; `appearance=\"link\"` ignores it (it renders with zero padding).\n- `--lr-button-padding-inline` (default: `var(--lr-space-m)`) — Inline padding of the internal button, re-assigned per `size` tier (the default is the `m` tier's value). `appearance=\"link\"` ignores it.\n- `--lr-button-font-size` (default: `var(--lr-font-size-m)`) — Font size of the internal button, re-assigned per `size` tier (the default is the `m` tier's value). `appearance=\"link\"` ignores it and inherits the ambient font instead.\n- `--lr-button-min-height` (default: `var(--lr-button-size-m)`) — The active tier's `min-block-size` floor. Re-assigned per `size` tier to that tier's own `--lr-button-size-*` token, and used as the fallback when `--lr-button-height` is unset.\n- `--lr-button-height` — Exact height of the internal button. **Undeclared by default** — so the button keeps the active tier's `min-block-size` floor and an `auto` height, exactly as before. Set it (e.g. to pin the button to a fixed toolbar row) to both floor *and* cap the height. Never declare it as `auto`: a declared value wins over the `var()` fallback arm and would make every tier's floor dead code. `appearance=\"link\"` ignores it.\n- `--lr-button-gap` (default: `var(--lr-space-2xs)`) — Gap between the icon/label and any slotted content in the internal button. Unlike the size knobs above it does not vary by `size` tier. Override it to retune without a `::part(base)` rule.\n- `--lr-button-radius` (default: `var(--lr-radius)`) — Corner radius of the internal button. Does not vary by `size` tier. `appearance=\"link\"` ignores it (it renders with zero radius).\n- `--lr-button-shadow` — Box shadow of the internal button. **Undeclared by default**, so `box-shadow` falls back to `none` — byte-identical to before this property existed. Set it (e.g. an elevated/floating action button) without a `::part(base)` rule."
1819
1833
  },
1820
1834
  "attributes": [
1821
1835
  {
@@ -1825,6 +1839,34 @@
1825
1839
  "value": "`'filled'` (the default) reads `--lr-button-fill`, which for `variant=\"neutral\"` is the\nambient `--lr-color-surface` -- matching this component's own container, by design, for a\nlow-emphasis default. `'accent'` is the loud tier: a solid, high-contrast fill for every\nvariant, including `neutral`. `'link'` is zero-chrome inline text — no padding, border, or\nmin-height, underlined, colored from `--lr-button-accent` (the same token `'plain'` uses)\nand inheriting the surrounding font — for a text link that flows inline in a sentence rather\nthan a button-shaped control. `'quiet'` is a bordered, transparent-until-hover tier for a\ntoolbar-style icon+label action — its border/text read fixed `--lr-color-border`/`--lr-color-text-quiet`\ntokens regardless of `variant`, unlike `'outlined'`'s variant-tinted text, so it stays\nvisually muted at rest.\n\nType: `ButtonAppearance` \nDefault: `'filled'`"
1826
1840
  }
1827
1841
  },
1842
+ {
1843
+ "name": "aria-controls",
1844
+ "description": {
1845
+ "kind": "markdown",
1846
+ "value": "Type: `string | null` \nDefault: `null`"
1847
+ }
1848
+ },
1849
+ {
1850
+ "name": "aria-expanded",
1851
+ "description": {
1852
+ "kind": "markdown",
1853
+ "value": "Type: `string | null` \nDefault: `null`"
1854
+ }
1855
+ },
1856
+ {
1857
+ "name": "aria-haspopup",
1858
+ "description": {
1859
+ "kind": "markdown",
1860
+ "value": "Type: `string | null` \nDefault: `null`"
1861
+ }
1862
+ },
1863
+ {
1864
+ "name": "aria-label",
1865
+ "description": {
1866
+ "kind": "markdown",
1867
+ "value": "Accessible name forwarded to the internal native button or anchor. Bound to the host's\n`aria-label` content attribute so changing or removing that attribute after mount keeps the\nactual focused control synchronized.\n\nType: `string | null` \nDefault: `null`"
1868
+ }
1869
+ },
1828
1870
  {
1829
1871
  "name": "disabled",
1830
1872
  "description": {
@@ -1924,7 +1966,7 @@
1924
1966
  "name": "lr-calendar",
1925
1967
  "description": {
1926
1968
  "kind": "markdown",
1927
- "value": "`<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`.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `agenda` | Agenda list. |\n| `agenda-event` | One focusable event button in agenda view (`view=\"agenda\"` only). |\n| `date` | The day-of-month number inside a day cell. |\n| `day` | Day cell. |\n| `event` | Event marker. |\n| `grid` | Month grid. |\n| `header` | Calendar header. |\n| `nav` | A previous/next navigation control in the header (the previous button, and the wrapper around the next button). |\n| `nav-glyph` | The previous/next chevron glyph, mirrored under RTL. |\n| `title` | The header's month/year title. |\n| `week` | One week row within the month grid. |\n| `weekday` | One weekday header cell. |\n| `weekdays` | Weekday header row. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-calendar-day-min-block-size` (default: `var(--lr-size-6rem)`) — Minimum block size of a day cell.\n- `--lr-calendar-day-min-block-size-narrow` (default: `var(--lr-size-4rem)`) — Minimum block size of a day cell once the host is narrower than 28rem.\n- `--lr-calendar-day-selected-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a selected day cell, decoupled from the shared token also driving the nav-button/agenda-event hover background."
1969
+ "value": "`<lr-calendar>` — responsive month calendar with event markers and agenda mode.\n\nMonth-view event markers are real buttons inside each focusable gridcell, so\nkeyboard users can activate individual events without switching views.\nAgenda view renders the same events as full-width buttons.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `agenda` | Agenda list. |\n| `agenda-event` | One focusable event button in agenda view (`view=\"agenda\"` only). |\n| `date` | The day-of-month number inside a day cell. |\n| `day` | Day cell. |\n| `event` | Event marker. |\n| `grid` | Month grid. |\n| `header` | Calendar header. |\n| `nav` | A previous/next navigation control in the header (the previous button, and the wrapper around the next button). |\n| `nav-glyph` | The previous/next chevron glyph, mirrored under RTL. |\n| `title` | The header's month/year title. |\n| `week` | One week row within the month grid. |\n| `weekday` | One weekday header cell. |\n| `weekdays` | Weekday header row. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-calendar-day-min-block-size` (default: `var(--lr-size-6rem)`) — Minimum block size of a day cell.\n- `--lr-calendar-day-min-block-size-narrow` (default: `var(--lr-size-4rem)`) — Minimum block size of a day cell once the host is narrower than 28rem.\n- `--lr-calendar-day-selected-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a selected day cell, decoupled from the shared token also driving the nav-button/agenda-event hover background."
1928
1970
  },
1929
1971
  "attributes": [
1930
1972
  {
@@ -1992,7 +2034,7 @@
1992
2034
  "name": "name",
1993
2035
  "description": {
1994
2036
  "kind": "markdown",
1995
- "value": "Display name associated with the calendar. Used as the accessible name of `[part='base']`, falling back to a host `aria-label` and then the localized `calendarViewerLabel` default, matching the `csvViewerLabel`-style sibling document viewers.\n\nType: `string` \nDefault: `''`"
2037
+ "value": "Display name associated with the calendar. Used as the accessible name of `[part='base']` after an explicit host `aria-label`, and before the localized `calendarViewerLabel` default.\n\nType: `string` \nDefault: `''`"
1996
2038
  }
1997
2039
  },
1998
2040
  {
@@ -2008,7 +2050,7 @@
2008
2050
  "name": "lr-callout",
2009
2051
  "description": {
2010
2052
  "kind": "markdown",
2011
- "value": "`<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.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Message content. |\n| `heading` | Optional heading. |\n| `icon` | Optional icon. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The callout surface. |\n| `close-button` | The close button's interactive hit target, sized to the shared minimum tappable size (`--lr-icon-button-size`) in both the default panel and the compact `inline` variant. |\n| `close-icon` | The close button's visible \"×\" glyph, independent of `close-button`'s hit target size -- shrinks in the `inline` variant while the hit target stays full-size. |\n| `content` | The message content. |\n| `heading` | The heading wrapper. |\n| `icon` | The icon wrapper. |\n| `message` | The message content wrapper. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-callout-background` (default: `var(--lr-color-surface)`) — The callout surface's background. Each non-neutral `variant` sets it to that variant's `-quiet` tint.\n- `--lr-callout-border` (default: `var(--lr-color-border)`) — The callout surface's border color. Each non-neutral `variant` sets it to that variant's loud color.\n- `--lr-callout-color` (default: `var(--lr-color-text)`) — The callout's text color. Each non-neutral `variant` sets it to that variant's loud color.\n- `--lr-callout-close-hover-bg` (default: `var(--lr-color-brand-quiet)`) — The close button's hover background, decoupled from `--lr-callout-background` so a consumer can retint one without affecting the other (e.g. keeping the hover fill visibly distinct from a `variant=\"brand\"` panel, which shares the same default token)."
2053
+ "value": "`<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.\nInitial content is not announced as a new live update. Later message, heading, or variant\nchanges activate polite announcements, or assertive announcements for `variant=\"danger\"`.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Message content. |\n| `heading` | Optional heading. |\n| `icon` | Optional icon. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The callout surface. |\n| `close-button` | The close button's interactive hit target, sized to the shared minimum tappable size (`--lr-icon-button-size`) in both the default panel and the compact `inline` variant. |\n| `close-icon` | The close button's visible \"×\" glyph, independent of `close-button`'s hit target size -- shrinks in the `inline` variant while the hit target stays full-size. |\n| `content` | The message content. |\n| `heading` | The heading wrapper. |\n| `icon` | The icon wrapper. |\n| `message` | The message content wrapper. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-callout-background` (default: `var(--lr-color-surface)`) — The callout surface's background. Each non-neutral `variant` sets it to that variant's `-quiet` tint.\n- `--lr-callout-border` (default: `var(--lr-color-border)`) — The callout surface's border color. Each non-neutral `variant` sets it to that variant's loud color.\n- `--lr-callout-color` (default: `var(--lr-color-text)`) — The callout's text color. Each non-neutral `variant` sets it to that variant's loud color.\n- `--lr-callout-close-hover-bg` (default: `var(--lr-color-brand-quiet)`) — The close button's hover background, decoupled from `--lr-callout-background` so a consumer can retint one without affecting the other (e.g. keeping the hover fill visibly distinct from a `variant=\"brand\"` panel, which shares the same default token)."
2012
2054
  },
2013
2055
  "attributes": [
2014
2056
  {
@@ -2050,7 +2092,7 @@
2050
2092
  "name": "open",
2051
2093
  "description": {
2052
2094
  "kind": "markdown",
2053
- "value": "Whether the callout is shown. Defaults `true`; uses `trueDefaultBooleanConverter` (above) so\nplain HTML `open=\"false\"` actually renders it closed -- Lit's default presence-based\n`type: Boolean` converter cannot distinguish an absent attribute from the literal string\n`\"false\"`.\n\nType: `boolean` \nDefault: `true`"
2095
+ "value": "Type: `boolean` \nDefault: `true`"
2054
2096
  }
2055
2097
  },
2056
2098
  {
@@ -2066,14 +2108,21 @@
2066
2108
  "name": "lr-card",
2067
2109
  "description": {
2068
2110
  "kind": "markdown",
2069
- "value": "`<lr-card>` — a generic, styled bordered content container: the \"small bordered surface with\npadding\" idiom common to hero highlights, clickable grid tiles, and management-list items. A\ndirect `<lr-*>` counterpart to `<wa-card>`'s contract, staying slot-compatible with\n`lr-result-card` where they overlap.\n\nThe header is allocation-responsive: long or translated header content can shrink and wrap,\nand the actions group moves onto another line when both no longer fit side by side.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The card body. |\n| `actions` | Small header controls, rendered alongside the header content. |\n| `footer` | Footer content, rendered below the body. |\n| `header` | Header row content, rendered above the body. |\n| `media` | Media content (e.g. an image), rendered above the header. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | Wrapper around the `actions` slot. Hidden entirely when empty. |\n| `base` | The outer container (a `<div>`, or an `<a>` when `href` is set). |\n| `body` | Wrapper around the default slot. |\n| `footer` | Wrapper around the `footer` slot. Hidden entirely when empty. |\n| `header` | Wrapper around the `header` slot and `actions`. Hidden entirely when both are empty. |\n| `media` | Wrapper around the `media` slot. Hidden entirely when empty. |"
2111
+ "value": "`<lr-card>` — a generic, styled bordered content container: the \"small bordered surface with\npadding\" idiom common to hero highlights, clickable grid tiles, and management-list items. A\ndirect `<lr-*>` counterpart to `<wa-card>`'s contract, staying slot-compatible with\n`lr-result-card` where they overlap.\n\nThe header is allocation-responsive: long or translated header content can shrink and wrap,\nand the actions group moves onto another line when both no longer fit side by side.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The card body. |\n| `actions` | Small header controls, rendered alongside the header content. |\n| `footer` | Footer content, rendered below the body. |\n| `header` | Header row content, rendered above the body. |\n| `media` | Media content (e.g. an image), rendered above the header. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | Wrapper around the `actions` slot. Hidden entirely when empty. |\n| `activation-button` | The native whole-card action, rendered while `interactive` without `href`. It is a sibling of slotted controls, so actionable descendants are never nested inside another actionable role. |\n| `base` | The outer container (a `<div>`, or an `<a>` when `href` is set). |\n| `body` | Wrapper around the default slot. |\n| `footer` | Wrapper around the `footer` slot. Hidden entirely when empty. |\n| `header` | Wrapper around the `header` slot and `actions`. Hidden entirely when both are empty. |\n| `media` | Wrapper around the `media` slot. Hidden entirely when empty. |"
2070
2112
  },
2071
2113
  "attributes": [
2072
2114
  {
2073
2115
  "name": "appearance",
2074
2116
  "description": {
2075
2117
  "kind": "markdown",
2076
- "value": "Visual treatment, mirroring `wa-card`'s `appearance` vocabulary. `'outlined'` (the default)\nis a bordered surface -- the common \"small bordered surface with padding\" idiom.\n\nType: `CardAppearance` \nDefault: `'outlined'`"
2118
+ "value": "Visual treatment, mirroring `wa-card`'s `appearance` vocabulary. `'outlined'` (the default)\nis a bordered surface -- the common \"small bordered surface with padding\" idiom.\n\nType: `CardAppearance` \nDefault: `\"outlined\"`"
2119
+ }
2120
+ },
2121
+ {
2122
+ "name": "aria-label",
2123
+ "description": {
2124
+ "kind": "markdown",
2125
+ "value": "Host `aria-label` forwarded to the native no-href activation button.\n\nType: `string | null` \nDefault: `null`"
2077
2126
  }
2078
2127
  },
2079
2128
  {
@@ -2117,14 +2166,14 @@
2117
2166
  "name": "accessible-label",
2118
2167
  "description": {
2119
2168
  "kind": "markdown",
2120
- "value": "Type: `string` \nDefault: `''`"
2169
+ "value": "Type: `string` \nDefault: `\"\"`"
2121
2170
  }
2122
2171
  },
2123
2172
  {
2124
2173
  "name": "aria-label",
2125
2174
  "description": {
2126
2175
  "kind": "markdown",
2127
- "value": "Type: `string | null` \nDefault: `null`"
2176
+ "value": "Type: `| string\n | null` \nDefault: `null`"
2128
2177
  }
2129
2178
  },
2130
2179
  {
@@ -2226,7 +2275,7 @@
2226
2275
  "name": "data-labels",
2227
2276
  "description": {
2228
2277
  "kind": "markdown",
2229
- "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
2278
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
2230
2279
  }
2231
2280
  },
2232
2281
  {
@@ -2431,7 +2480,7 @@
2431
2480
  "name": "spellcheck",
2432
2481
  "description": {
2433
2482
  "kind": "markdown",
2434
- "value": "Forwarded to the internal `<textarea>`'s own `spellcheck`. Defaults to `true`, matching the\nnative element's own default. Uses trueDefaultBooleanConverter rather than Lit's\ndefault presence-based `type: Boolean` handling, so a plain-HTML consumer with no way to write\na `.spellcheck` property binding can still turn this off with `spellcheck=\"false\"`; a Lit\ntemplate can do the same with either that attribute string or a `.spellcheck=${false}`\nproperty binding.\n\nType: `boolean` \nDefault: `true`"
2483
+ "value": "Type: `boolean` \nDefault: `true`"
2435
2484
  }
2436
2485
  },
2437
2486
  {
@@ -2445,7 +2494,7 @@
2445
2494
  "name": "stoppable",
2446
2495
  "description": {
2447
2496
  "kind": "markdown",
2448
- "value": "When `false`, the built-in button never renders as a Stop/cancel control\nwhile busy -- instead it stays a (disabled) Send button, since there is\nno cancellation operation to offer. Defaults to `true`, reproducing\ntoday's Stop-button behavior for every `status` other than `'idle'`. Uses\ntrueDefaultBooleanConverter so a plain-HTML consumer can turn this off with the\nattribute string `stoppable=\"false\"`, not just a `.stoppable=${false}` property binding.\n\nType: `boolean` \nDefault: `true`"
2497
+ "value": "Type: `boolean` \nDefault: `true`"
2449
2498
  }
2450
2499
  },
2451
2500
  {
@@ -2459,7 +2508,7 @@
2459
2508
  "name": "submit-on-enter",
2460
2509
  "description": {
2461
2510
  "kind": "markdown",
2462
- "value": "Enter-to-send toggle -- see the class doc's \"Enter-to-send\" paragraph. Uses\ntrueDefaultBooleanConverter rather than Lit's default presence-based `type: Boolean`\nhandling, so a plain-HTML consumer can turn this off with the attribute string\n`submit-on-enter=\"false\"`, not just a `.submitOnEnter=${false}` property binding.\n\nType: `boolean` \nDefault: `true`"
2511
+ "value": "Type: `boolean` \nDefault: `true`"
2463
2512
  }
2464
2513
  },
2465
2514
  {
@@ -2475,7 +2524,7 @@
2475
2524
  "name": "lr-chat-message",
2476
2525
  "description": {
2477
2526
  "kind": "markdown",
2478
- "value": "`<lr-chat-message>` — a role-based message bubble *shell* for a chat/\nagent conversation surface. It renders none of the message content itself:\nthe default slot carries whatever a consumer wants to display (plain\ntext, a `<lr-markdown>`, a custom template, anything at all) and this\ncomponent only supplies the surrounding chrome — alignment/coloring by\n`role`, an avatar/badges header row, an optional collapse toggle, an\nattachments strip, and a status-aware footer (a live-updating status dot +\ntext, the formatted `timestamp`, a built-in retry affordance for\n`status=\"failed\"`, and an `actions` slot for everything else).\n\nNo built-in copy button is rendered. Deciding what \"the copyable text\" of\nan arbitrary slotted message even means (plain text? the rendered\nmarkdown source? something else?) is exactly the kind of content\ninterpretation this shell deliberately stays out of — slot a copy control\ninto `actions` instead. Firing `lr-copy` (`detail: { text }`) from that\ncontrol keeps the event name consistent with `<lr-json-viewer>`'s own\ncopy affordance, for anything listening at the conversation-surface level.\n\nAccessibility of `status`: the current status is always available as\nplain visible text (`[part=\"status-text\"]`), never color alone. A\ntransition *to* `\"failed\"`, or *from* `\"streaming\"` to `\"sent\"` (a stream\nfinishing), is additionally announced through an internal\n`<lr-live-region>` (see that component's header for the throttled-\nannouncement wiring this composes) so a screen-reader user who isn't\ncurrently focused on this message still learns about it — *unless* the\n`failure` slot has content, in which case this internal announcement is\nskipped: the host's own `role=\"alert\"` failure content is expected to\nannounce itself, and firing both would double-announce the same failure\nwith two different (and differently specific) messages. This differs\nfrom `<lr-typing-indicator>`'s deliberately simpler `role=\"status\"`\napproach — that component only ever has one thing to announce (its own\nmount); this one has a `status` that can flip between several values\nacross a single element's lifetime, which is exactly the coalescing job\n`<lr-live-region>` exists for.\n\n`role` is a message-author role (`user`/`assistant`/`system`, matching\nthe vocabulary of every chat/completion API), *not* a WAI-ARIA role, so\nit reflects to a `data-role` attribute rather than the bare `role`\nattribute — `role=\"user\"` would collide with `Element`'s own ARIA `role`\naccessor and is not a valid ARIA role token to begin with.\n\n`actionsOutsideBubble` allows the `actions` slot to render as a sibling\nimmediately after the message bubble instead of nested inside the footer —\nuseful for consumers whose action row (e.g., a hover-reveal copy button)\nmust sit visually outside the bubble's chrome.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The message body. |\n| `actions` | Action controls (e.g. copy, retry), rendered at the end of the footer. |\n| `attachments` | File/image attachment chips, rendered below the message body by default; see `attachments-position`. |\n| `avatar` | An avatar/icon for the message author. |\n| `badges` | Small status/metric chips (e.g. token count, latency, model name) — entirely app-supplied; this component computes none of that itself. |\n| `failure` | Only ever rendered while `status=\"failed\"`. Empty (the default), the footer keeps its built-in `[part=\"status-text\"]`/`[part=\"retry-button\"]` exactly as before. The moment this slot has assigned content, that built-in status text and retry button are suppressed — the host is now fully responsible for presenting its own failure UI, and the built-in `chatFailedAnnounce` live-region announcement is suppressed too (see `@event lr-retry` below for the effect on that event, and the \"Accessibility of `status`\" paragraph above for the built-in announcement this replaces). Content assigned here should carry `role=\"alert\"` itself when it represents an actionable send failure — this component does not add that role on the host's behalf, since it has no way to know what markup the host puts in this slot. This mirrors `lr-flow-node`'s `header` slot, which replaces that component's own built-in heading row the same way. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | The wrapper around the `actions` slot. Rendered inside the footer by default; a sibling immediately after `bubble` when `actionsOutsideBubble` is set. |\n| `attachments` | The wrapper around the `attachments` slot. |\n| `avatar` | The wrapper around the `avatar` slot. |\n| `badges` | The wrapper around the `badges` slot. |\n| `body` | The wrapper around the default slot (the message content). Hidden while `collapsed`. |\n| `bubble` | 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. Its geometry comes from `--lr-chat-message-bubble-padding`/`--lr-chat-message-bubble-radius` for the same reason — a `::part(bubble)` override from the consumer's tree outranks the per-`status` rules in this shadow tree and silently erases the `failed`/`streaming` treatments. |\n| `collapse-button` | The built-in collapse/expand toggle (only rendered when `collapsible`). |\n| `failure` | The `failure` slot itself (`display: contents` — it contributes no box of its own, so the host's own content lays out exactly as if it were a direct child of `bubble`, with no `::part(failure)` override needed to get there). Only present in the DOM while `status=\"failed\"`. |\n| `footer` | The row below the message body — status, timestamp, retry, and actions. Hidden entirely when none of those have anything to show. |\n| `header` | The row above the message body — avatar, badges, and the collapse toggle. Hidden entirely when none of those have anything to show. |\n| `retry-button` | The built-in retry button (only rendered when `status=\"failed\"`). |\n| `status-indicator` | A small decorative (`aria-hidden`) dot reflecting `status`; absent while `status=\"sent\"`. |\n| `status-text` | The visible text twin of `status-indicator` — carries the state in text, not just color. |\n| `timestamp` | The formatted `timestamp`, rendered in a `<time>` element. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-chat-message-max-width` (default: `80%`) — Maximum inline size of the message bubble.\n- `--lr-chat-message-bubble-bg` (default: `var(--lr-color-surface)`) — Bubble fill for every role except `user`.\n- `--lr-chat-message-bubble-color` (default: `var(--lr-color-text)`) — Bubble text color for every role except `user`.\n- `--lr-chat-message-user-bubble-bg` (default: `var(--lr-color-brand-quiet)`) — Bubble fill for `data-role=\"user\"`.\n- `--lr-chat-message-user-bubble-color` (default: `var(--lr-color-text)`) — Bubble text color for `data-role=\"user\"`.\n- `--lr-chat-message-bubble-padding` (default: `var(--lr-space-m)`) — Bubble padding. Prefer this over a `::part(bubble)` padding override: an outer-tree `::part` declaration outranks every rule in this shadow tree, which silently suppresses the per-`status` and per-role bubble styling below it.\n- `--lr-chat-message-bubble-radius` (default: `var(--lr-radius)`) — Bubble corner radius. Bubble-only by design — `collapse-button` and `retry-button` keep reading the shared `--lr-radius`, so a rounder bubble never desyncs the controls from the rest of the library.\n- `--lr-transition-ambient` (default: `1.8s ease-in-out`) — Streaming-indicator animation duration and timing function."
2527
+ "value": "`<lr-chat-message>` — a role-based message bubble *shell* for a chat/\nagent conversation surface. It renders none of the message content itself:\nthe default slot carries whatever a consumer wants to display (plain\ntext, a `<lr-markdown>`, a custom template, anything at all) and this\ncomponent only supplies the surrounding chrome — alignment/coloring by\n`role`, an avatar/badges header row, an optional collapse toggle, an\nattachments strip, and a status-aware footer (a live-updating status dot +\ntext, the formatted `timestamp`, a built-in retry affordance for\n`status=\"failed\"`, and an `actions` slot for everything else).\n\nNo built-in copy button is rendered. Deciding what \"the copyable text\" of\nan arbitrary slotted message even means (plain text? the rendered\nmarkdown source? something else?) is exactly the kind of content\ninterpretation this shell deliberately stays out of — slot a copy control\ninto `actions` instead. Firing `lr-copy` (`detail: { text }`) from that\ncontrol keeps the event name consistent with `<lr-json-viewer>`'s own\ncopy affordance, for anything listening at the conversation-surface level.\n\nAccessibility of `status`: the current status is always available as\nplain visible text (`[part=\"status-text\"]`), never color alone. A\ntransition *to* `\"failed\"`, or *from* `\"streaming\"` to `\"sent\"` (a stream\nfinishing), is additionally announced through an internal\n`<lr-live-region>` (see that component's header for the throttled-\nannouncement wiring this composes) so a screen-reader user who isn't\ncurrently focused on this message still learns about it — *unless* the\n`failure` slot has content, in which case this internal announcement is\nskipped: the host's own `role=\"alert\"` failure content is expected to\nannounce itself, and firing both would double-announce the same failure\nwith two different (and differently specific) messages. This differs\nfrom `<lr-typing-indicator>`'s deliberately simpler `role=\"status\"`\napproach — that component only ever has one thing to announce (its own\nmount); this one has a `status` that can flip between several values\nacross a single element's lifetime, which is exactly the coalescing job\n`<lr-live-region>` exists for.\n\n`role` is a message-author role (`user`/`assistant`/`system`, matching\nthe vocabulary of every chat/completion API), *not* a WAI-ARIA role, so\nit reflects to a `data-role` attribute rather than the bare `role`\nattribute — `role=\"user\"` would collide with `Element`'s own ARIA `role`\naccessor and is not a valid ARIA role token to begin with.\n\n`actionsOutsideBubble` allows the `actions` slot to render as a sibling\nimmediately after the message bubble instead of nested inside the footer —\nuseful for consumers whose action row (e.g., a hover-reveal copy button)\nmust sit visually outside the bubble's chrome.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The message body. |\n| `actions` | Action controls (e.g. copy, retry), rendered at the end of the footer. |\n| `attachments` | File/image attachment chips, rendered below the message body by default; see `attachments-position`. |\n| `avatar` | An avatar/icon for the message author. |\n| `badges` | Small status/metric chips (e.g. token count, latency, model name) — entirely app-supplied; this component computes none of that itself. |\n| `failure` | Only ever rendered while `status=\"failed\"`. Empty (the default), the footer keeps its built-in `[part=\"status-text\"]`/`[part=\"retry-button\"]` exactly as before. The moment this slot has assigned content, that built-in status text and retry button are suppressed — the host is now fully responsible for presenting its own failure UI, and the built-in `chatFailedAnnounce` live-region announcement is suppressed too (see `@event lr-retry` below for the effect on that event, and the \"Accessibility of `status`\" paragraph above for the built-in announcement this replaces). Content assigned here should carry `role=\"alert\"` itself when it represents an actionable send failure — this component does not add that role on the host's behalf, since it has no way to know what markup the host puts in this slot. This mirrors `lr-flow-node`'s `header` slot, which replaces that component's own built-in heading row the same way. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | The wrapper around the `actions` slot. Rendered inside the footer by default; a sibling immediately after `bubble` when `actionsOutsideBubble` is set. |\n| `attachments` | The wrapper around the `attachments` slot. |\n| `avatar` | The wrapper around the `avatar` slot. |\n| `badges` | The wrapper around the `badges` slot. |\n| `body` | The wrapper around the default slot (the message content). Hidden while `collapsed`. |\n| `bubble` | 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. Its geometry comes from `--lr-chat-message-bubble-padding`/`--lr-chat-message-bubble-radius` for the same reason — a `::part(bubble)` override from the consumer's tree outranks the per-`status` rules in this shadow tree and silently erases the `failed`/`streaming` treatments. |\n| `collapse-button` | The built-in collapse/expand toggle (only rendered when `collapsible`). |\n| `failure` | The `failure` slot itself (`display: contents` — it contributes no box of its own, so the host's own content lays out exactly as if it were a direct child of `bubble`, with no `::part(failure)` override needed to get there). Only present in the DOM while `status=\"failed\"`. |\n| `footer` | The row below the message body — status, timestamp, retry, and actions. Hidden entirely when none of those have anything to show. |\n| `header` | The row above the message body — avatar, badges, and the collapse toggle. Hidden entirely when none of those have anything to show. |\n| `retry-button` | The built-in retry button (only rendered when `status=\"failed\"`). |\n| `status-indicator` | A small decorative (`aria-hidden`) dot reflecting `status`; absent while `status=\"sent\"`. |\n| `status-text` | The visible text twin of `status-indicator` — carries the state in text, not just color. |\n| `timestamp` | The formatted `timestamp`, rendered in a `<time>` element. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-chat-message-max-width` (default: `80%`) — Maximum inline size of the message bubble.\n- `--lr-chat-message-bubble-bg` (default: `var(--lr-color-surface)`) — Bubble fill for every role except `user`.\n- `--lr-chat-message-bubble-color` (default: `var(--lr-color-text)`) — Bubble text color for every role except `user`.\n- `--lr-chat-message-user-bubble-bg` (default: `var(--lr-color-brand-quiet)`) — Bubble fill for `data-role=\"user\"`.\n- `--lr-chat-message-user-bubble-color` (default: `var(--lr-color-text)`) — Bubble text color for `data-role=\"user\"`.\n- `--lr-chat-message-system-color` (default: `var(--lr-color-text-quiet)`) — System-message text color.\n- `--lr-chat-message-streaming-border-color` (default: `var(--lr-color-brand)`) — Streaming bubble border.\n- `--lr-chat-message-failed-border-color` (default: `var(--lr-color-danger)`) — Failed bubble border.\n- `--lr-chat-message-failed-bg` (default: `var(--lr-color-danger-quiet)`) — Failed bubble fill.\n- `--lr-chat-message-footer-color` (default: `var(--lr-color-text-quiet)`) — Default footer text.\n- `--lr-chat-message-user-footer-color` (default: `var(--lr-color-text)`) — User-message footer text.\n- `--lr-chat-message-failed-footer-color` (default: `var(--lr-color-danger)`) — Failed-message footer text.\n- `--lr-chat-message-indicator-color` (default: `var(--lr-color-text-quiet)`) — Default status indicator.\n- `--lr-chat-message-streaming-indicator-color` (default: `var(--lr-color-brand)`) — Streaming indicator.\n- `--lr-chat-message-failed-indicator-color` (default: `var(--lr-color-danger)`) — Failed indicator.\n- `--lr-chat-message-failed-status-color` (default: `var(--lr-color-danger)`) — Failed status text.\n- `--lr-chat-message-bubble-padding` (default: `var(--lr-space-m)`) — Bubble padding. Prefer this over a `::part(bubble)` padding override: an outer-tree `::part` declaration outranks every rule in this shadow tree, which silently suppresses the per-`status` and per-role bubble styling below it.\n- `--lr-chat-message-bubble-radius` (default: `var(--lr-radius)`) — Bubble corner radius. Bubble-only by design — `collapse-button` and `retry-button` keep reading the shared `--lr-radius`, so a rounder bubble never desyncs the controls from the rest of the library.\n- `--lr-transition-ambient` (default: `1.8s ease-in-out`) — Streaming-indicator animation duration and timing function."
2479
2528
  },
2480
2529
  "attributes": [
2481
2530
  {
@@ -2548,7 +2597,7 @@
2548
2597
  "name": "lr-chat-viewport",
2549
2598
  "description": {
2550
2599
  "kind": "markdown",
2551
- "value": "`<lr-chat-viewport>` — the transcript scroll container: owns stick-to-bottom behavior while an\nanswer streams, the \"jump to latest\" pill, and the unread divider.\n\n**Two supported content shapes, auto-detected:** ordinary element children (typically\n`<lr-chat-message>`s -- *slotted mode*), or exactly one `<lr-virtual-list>` (*virtual mode*,\ndetected via `instanceof` against the imported class so custom prefixes keep working). In virtual\nmode this component defers all scrolling to the slotted list's own `scrollToIndex()`, and sizes\nthat list to its own height -- without which the list would scroll inside `lr-virtual-list`'s\n24rem `--lr-virtual-list-height` default no matter how tall this viewport is. That sizing is a\npercentage, so virtual mode needs a height-bounded parent, the same requirement slotted mode's\nown scroll container already has; a consumer's own rule or inline style setting\n`--lr-virtual-list-height` on the list still wins.\n\n**Follow/release state machine.** While `follow` is engaged, content growth re-scrolls to the end.\nRelease happens only on a *user-intent* gesture (wheel, touchmove, scrollbar-drag, or\nPageUp/ArrowUp/Home while the log region has focus) that leaves the view more than\n`bottomThreshold` from the end -- a scroll caused by this component's own programmatic scrolling,\nor by a layout shift, never releases it. Reaching the bottom again by any means re-engages `follow`.\nThe internal log defaults to `live=\"off\"`, which avoids announcing every streaming token. Consumers\nthat append complete messages at an announcement-safe cadence can opt into `polite` or `assertive`.\n\n**`scrollToUnread()` in virtual mode.** The target row is scrolled with `align: 'start'` so the\ndivider boundary lands at the top of the view with the unread content visible below it -- the\nonly alignment that matches what \"scroll to the divider\" means here. The underlying virtual list\nonly issues a corrective re-scroll for an initially-unmeasured target when that target's *own*\nheight is what was uncertain (`align: 'end'`/a downward `align: 'auto'`); a `'start'`-aligned\ntarget's position is a function of the rows *before* it, so it has no such self-correction. In\npractice the rows leading up to an unread boundary are usually ones the reader already scrolled\npast (and so already measured), which keeps this accurate in the common case; a still-unmeasured\nlong-distance jump can land approximately rather than pixel-exact. Fixing that fully would mean\nchanging how the underlying list resolves offsets, which is out of scope here -- `align: 'end'`\nwas considered and rejected because it changes the visible outcome (it would put the *bottom* of\nthe boundary row at the viewport's bottom edge, hiding the unread content the jump is meant to\nreveal, not just changing how precisely it lands).\n\nRenders no messages and computes no unread state itself -- the host supplies `unreadStartIndex`;\nno virtualization of its own (`<lr-virtual-list>`); not a generic overflow surface\n(`<lr-scroller>`); no message semantics (`<lr-chat-message>`).\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The transcript: ordinary element children, or exactly one `<lr-virtual-list>`. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The positioning root. |\n| `content` | The slotted-content wrapper the growth observers watch. |\n| `jump-pill` | The built-in jump-to-latest button, absent while `follow` is engaged. |\n| `scroll` | The scroll container (`role=\"log\"`, `tabindex=\"0\"`). In virtual mode it stops scrolling itself (the slotted list scrolls) but keeps the role. |\n| `unread-divider` | The \"New messages\" separator (slotted mode only). |"
2600
+ "value": "`<lr-chat-viewport>` — the transcript scroll container: owns stick-to-bottom behavior while an\nanswer streams, the \"jump to latest\" pill, and the unread divider.\n\n**Two supported content shapes, auto-detected:** ordinary element children (typically\n`<lr-chat-message>`s -- *slotted mode*), or exactly one `<lr-virtual-list>` (*virtual mode*,\ndetected via `instanceof` against the imported class so custom prefixes keep working). In virtual\nmode this component defers all scrolling to the slotted list's own `scrollToIndex()`, and sizes\nthat list to its own height -- without which the list would scroll inside `lr-virtual-list`'s\n24rem `--lr-virtual-list-height` default no matter how tall this viewport is. That sizing is a\npercentage, so virtual mode needs a height-bounded parent, the same requirement slotted mode's\nown scroll container already has; a consumer's own rule or inline style setting\n`--lr-virtual-list-height` on the list still wins.\n\n**Follow/release state machine.** While `follow` is engaged, content growth re-scrolls to the end.\nRelease happens only on a *user-intent* gesture (wheel, touchmove, scrollbar-drag, or\nPageUp/ArrowUp/Home while the log region has focus) that leaves the view more than\n`bottomThreshold` from the end -- a scroll caused by this component's own programmatic scrolling,\nor by a layout shift, never releases it. Reaching the bottom again by any means re-engages `follow`.\nThe internal log defaults to `live=\"off\"`, which avoids announcing every streaming token. Consumers\nthat append complete messages at an announcement-safe cadence can opt into `polite` or `assertive`.\n\n**`scrollToUnread()` in virtual mode.** The target row is scrolled with `align: 'start'` so the\ndivider boundary lands at the top of the view with the unread content visible below it -- the\nonly alignment that matches what \"scroll to the divider\" means here. The underlying virtual list\nonly issues a corrective re-scroll for an initially-unmeasured target when that target's *own*\nheight is what was uncertain (`align: 'end'`/a downward `align: 'auto'`); a `'start'`-aligned\ntarget's position is a function of the rows *before* it, so it has no such self-correction. In\npractice the rows leading up to an unread boundary are usually ones the reader already scrolled\npast (and so already measured), which keeps this accurate in the common case; a still-unmeasured\nlong-distance jump can land approximately rather than pixel-exact. Fixing that fully would mean\nchanging how the underlying list resolves offsets, which is out of scope here -- `align: 'end'`\nwas considered and rejected because it changes the visible outcome (it would put the *bottom* of\nthe boundary row at the viewport's bottom edge, hiding the unread content the jump is meant to\nreveal, not just changing how precisely it lands).\n\nRenders no messages and computes no unread state itself -- the host supplies `unreadStartIndex`;\nno virtualization of its own (`<lr-virtual-list>`); not a generic overflow surface\n(`<lr-scroller>`); no message semantics (`<lr-chat-message>`).\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The transcript: ordinary element children, or exactly one `<lr-virtual-list>`. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The positioning root. |\n| `content` | The slotted-content wrapper the growth observers watch. |\n| `jump-pill` | The built-in jump-to-latest button, absent while `follow` is engaged. |\n| `scroll` | The scroll container (`role=\"log\"` and, in slotted mode, `tabindex=\"0\"`). In virtual mode it stops scrolling itself and drops its tab stop because the slotted list owns both scrolling and keyboard focus. |\n| `unread-divider` | The \"New messages\" separator (slotted mode only). |"
2552
2601
  },
2553
2602
  "attributes": [
2554
2603
  {
@@ -2569,7 +2618,7 @@
2569
2618
  "name": "follow",
2570
2619
  "description": {
2571
2620
  "kind": "markdown",
2572
- "value": "Component-managed stick-to-bottom state, host-writable. Setting `true` scrolls to the end and\nre-engages following; setting `false` releases it. Uses trueDefaultBooleanConverter\nrather than Lit's default presence-based `type: Boolean` handling, so a plain-HTML consumer\ncan start released with the attribute string `follow=\"false\"`, not just a `.follow=${false}`\nproperty binding.\n\nType: `boolean` \nDefault: `true`"
2621
+ "value": "Type: `boolean` \nDefault: `true`"
2573
2622
  }
2574
2623
  },
2575
2624
  {
@@ -2729,7 +2778,7 @@
2729
2778
  "name": "lr-checkpoint",
2730
2779
  "description": {
2731
2780
  "kind": "markdown",
2732
- "value": "`<lr-checkpoint>` — an inline conversation restore point: a labeled marker between messages\nwhose Restore affordance confirms inline, then hands the host a `lr-restore` event. This\ncomponent persists and restores nothing itself — host state in, events out.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Optional supplemental content under the marker row (e.g. what changed since this point). |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The marker root (`role=\"group\"`). |\n| `cancel-button` | Cancels, reverting to `restore-button`. |\n| `confirm-button` | Confirms the restore, firing `lr-restore`. |\n| `confirm-group` | The inline confirm prompt, swapped in for `restore-button` while confirming. |\n| `confirm-prompt` | The confirm prompt text. |\n| `icon` | The bookmark glyph. |\n| `label` | The computed label text. |\n| `line` | Each of the two flanking rules. |\n| `restore-button` | The Restore button. Only rendered while `restorable`. |\n| `timestamp` | The formatted `timestamp`, when set. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-checkpoint-spin-duration` (default: `1s`) — Duration of one restoring-spinner rotation (stopped under reduced motion)."
2781
+ "value": "`<lr-checkpoint>` — an inline conversation restore point: a labeled marker between messages\nwhose Restore affordance confirms inline, then hands the host a `lr-restore` event. This\ncomponent persists and restores nothing itself — host state in, events out.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Optional supplemental content under the marker row (e.g. what changed since this point). |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The marker root (`role=\"group\"`). |\n| `cancel-button` | Cancels, reverting to `restore-button`. |\n| `confirm-button` | Confirms the restore, firing `lr-restore`. |\n| `confirm-group` | The inline confirm prompt, swapped in for `restore-button` while confirming. |\n| `confirm-prompt` | The confirm prompt text. |\n| `icon` | The bookmark glyph. |\n| `label` | The computed label text. |\n| `line` | Each of the two flanking rules. |\n| `restore-button` | The Restore button. Only rendered while `restorable`. |\n| `timestamp` | The formatted `timestamp`, when set. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-checkpoint-spin-duration` (default: `var(--lr-transition-ambient)`) — Restoring-spinner timing, inheriting the shared ambient-motion token by default (stopped under reduced motion)."
2733
2782
  },
2734
2783
  "attributes": [
2735
2784
  {
@@ -2780,7 +2829,7 @@
2780
2829
  "name": "lr-chip",
2781
2830
  "description": {
2782
2831
  "kind": "markdown",
2783
- "value": "`<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.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The chip's label content. |\n| `icon` | Optional leading icon or status dot. Nothing is reserved for it (no extra gap) when left empty. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The pill's root container. |\n| `icon` | Wrapper around the `icon` slot. Hidden entirely while empty. |\n| `label` | Wrapper around the default slot. |\n| `remove-button` | The remove (×) affordance, only rendered while `removable`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-chip-accent` (default: `var(--lr-color-text)`) — Text/icon color of the pill. Each `tone` sets it to that tone's loud color.\n- `--lr-chip-bg` (default: `var(--lr-color-surface)`) — Background of the pill. Each `tone` sets it to that tone's `-quiet` tint.\n- `--lr-chip-border` (default: `var(--lr-color-border)`) — Border color of the pill. Every non-neutral `tone` sets it to `transparent`.\n- `--lr-chip-font-size` (default: `var(--lr-font-size-sm)`) — Label font size. Each `size` sets it to that step's font size.\n- `--lr-chip-gap` (default: `var(--lr-space-xs)`) — Gap between the icon, label, and remove button. Each `size` sets it to that step's gap.\n- `--lr-chip-radius` (default: `var(--lr-radius-pill)`) — Corner radius of the pill and of the remove button, kept in sync so retuning one retunes both. Does not vary by `size` tier.\n- `--lr-chip-icon-size` (default: `var(--lr-font-size-sm)`) — Font size of the `icon` slot wrapper. Each `size` sets it to that step's icon size.\n- `--lr-chip-padding-block` (default: `var(--lr-size-0-25rem)`) — Block padding of the pill. Each `size` sets it to that step's block padding.\n- `--lr-chip-padding-inline` (default: `var(--lr-space-s)`) — Inline padding of the pill. Each `size` sets it to that step's inline padding.\n- `--lr-chip-min-height` (default: `var(--lr-size-1-5rem)`) — Minimum block size of an interactive (`removable`/`toggleable`) chip's tap target. `size` keeps `3xs`/`2xs`/`xs`/`s`/`m` at the `1.5rem` (24px) WCAG 2.2 SC 2.5.8 minimum and raises `l` to `var(--lr-size-1-75rem)` and `xl` to `var(--lr-size-2rem)`. Non-interactive display chips are unaffected by this floor.\n- `--lr-chip-height` — Exact block size of the chip. Undeclared by default, so the chip grows to fit its content (floored by `--lr-chip-min-height` when interactive). Set it to pin a fixed height. A value below the 24px interactive target is for non-interactive chips only.\n- `--lr-chip-pressed-bg` (default: `var(--lr-chip-bg)`) — Background while a toggleable chip is selected, independently themeable from its resting background.\n- `--lr-chip-pressed-border` (default: `var(--lr-chip-accent)`) — Border color while a toggleable chip is selected, independently themeable from the label/icon color."
2832
+ "value": "`<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.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The chip's label content. |\n| `icon` | Optional leading icon or status dot. Nothing is reserved for it (no extra gap) when left empty. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The pill's root container. |\n| `icon` | Wrapper around the `icon` slot. Hidden entirely while empty. |\n| `label` | Wrapper around the default slot. |\n| `remove-button` | The remove (×) affordance, only rendered while `removable`. |\n| `toggle-button` | The real toggle control, rendered over the non-interactive label when toggle mode is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-chip-accent` (default: `var(--lr-color-text)`) — Text/icon color of the pill. Each `tone` sets it to that tone's loud color.\n- `--lr-chip-bg` (default: `var(--lr-color-surface)`) — Background of the pill. Each `tone` sets it to that tone's `-quiet` tint.\n- `--lr-chip-border` (default: `var(--lr-color-border)`) — Border color of the pill. Every non-neutral `tone` sets it to `transparent`.\n- `--lr-chip-font-size` (default: `var(--lr-font-size-sm)`) — Label font size. Each `size` sets it to that step's font size.\n- `--lr-chip-gap` (default: `var(--lr-space-xs)`) — Gap between the icon, label, and remove button. Each `size` sets it to that step's gap.\n- `--lr-chip-radius` (default: `var(--lr-radius-pill)`) — Corner radius of the pill and of the remove button, kept in sync so retuning one retunes both. Does not vary by `size` tier.\n- `--lr-chip-icon-size` (default: `var(--lr-font-size-sm)`) — Font size of the `icon` slot wrapper. Each `size` sets it to that step's icon size.\n- `--lr-chip-padding-block` (default: `var(--lr-size-0-25rem)`) — Block padding of the pill. Each `size` sets it to that step's block padding.\n- `--lr-chip-padding-inline` (default: `var(--lr-space-s)`) — Inline padding of the pill. Each `size` sets it to that step's inline padding.\n- `--lr-chip-min-height` (default: `var(--lr-size-1-5rem)`) — Component density floor for an interactive chip. The real toggle/remove controls also enforce the shared `--lr-icon-button-size` target floor.\n- `--lr-chip-height` — Exact block size of the chip. Undeclared by default, so the chip grows to fit its content (floored by `--lr-chip-min-height` when interactive). Set it to pin a fixed height. A value below the shared interactive target is for non-interactive chips only.\n- `--lr-chip-pressed-bg` (default: `var(--lr-chip-bg)`) — Background while a toggleable chip is selected, independently themeable from its resting background.\n- `--lr-chip-pressed-border` (default: `var(--lr-chip-accent)`) — Border color while a toggleable chip is selected, independently themeable from the label/icon color."
2784
2833
  },
2785
2834
  "attributes": [
2786
2835
  {
@@ -2801,7 +2850,7 @@
2801
2850
  "name": "selected",
2802
2851
  "description": {
2803
2852
  "kind": "markdown",
2804
- "value": "Opt-in toggle/pressed mode -- the current pressed value. Setting `selected` (to `true`, the\ncommon way to start a chip already pressed) opts the chip into toggle mode automatically, so\n`<lr-chip selected>` alone is enough: `[part='base']` becomes focusable and\nkeyboard-activatable (Enter/Space, mirroring native `<button>` behavior), reflects\n`aria-pressed`, and toggles on click/activation, emitting `lr-chip-select`. That opt-in\n(tracked by `toggleable`, see below) persists once made, so toggling `selected` back to\n`false` never strips the chip's interactivity -- a chip a user has clicked \"off\" must stay\nclickable to turn it back \"on\". Has no effect (no interactive semantics added to\n`[part='base']`) when combined with `removable`, since the remove button already nests inside\n`[part='base']` -- axe-core's `nested-interactive` rule forbids a focusable descendant of a\n`role=\"button\"` ancestor, and this component's two real use cases (a chart-series visibility\ntoggle, a category filter chip) never need both at once. `false` (the default, with\n`toggleable` also left at its default) reproduces today's exact passive-label-pill output.\n\nType: `boolean` \nDefault: `false`"
2853
+ "value": "Opt-in toggle/pressed mode -- the current pressed value. Setting `selected` (to `true`, the\ncommon way to start a chip already pressed) opts the chip into toggle mode automatically, so\n`<lr-chip selected>` alone is enough: `[part='toggle-button']` renders as a native,\nkeyboard-activatable button and reflects\n`aria-pressed`, and toggles on click/activation, emitting `lr-chip-select`. That opt-in\n(tracked by `toggleable`, see below) persists once made, so toggling `selected` back to\n`false` never strips the chip's interactivity -- a chip a user has clicked \"off\" must stay\nclickable to turn it back \"on\". Has no effect when combined with `removable`, since that\nmode already owns the chip's one native action. The label slot is inert in toggle mode, so\nunrestricted slotted descendants can never nest inside or double-activate the real button.\nThis component's two real use cases (a chart-series visibility\ntoggle, a category filter chip) never need both at once. `false` (the default, with\n`toggleable` also left at its default) reproduces today's exact passive-label-pill output.\n\nType: `boolean` \nDefault: `false`"
2805
2854
  }
2806
2855
  },
2807
2856
  {
@@ -2967,6 +3016,36 @@
2967
3016
  }
2968
3017
  ]
2969
3018
  },
3019
+ {
3020
+ "name": "lr-claim-evidence",
3021
+ "description": {
3022
+ "kind": "markdown",
3023
+ "value": "`<lr-claim-evidence>` — a controlled claim-by-claim grounding audit. It relates generated\nclaims to complete citation records, exposes assessment status/confidence, and tolerates\nmissing citation ids without fabricating evidence.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The named claim-evidence region. |\n| `claim` | One claim. |\n| `claim-selected` | The selected claim. |\n| `claim-text` | The claim text. |\n| `claim-trigger` | A claim's selection button. |\n| `confidence` | The optional localized confidence. |\n| `empty` | The empty state. |\n| `evidence` | Resolved evidence citations for one claim. |\n| `explanation` | Caller-supplied assessment explanation. |\n| `list` | The claim list. |\n| `status` | The support-status badge. |"
3024
+ },
3025
+ "attributes": [
3026
+ {
3027
+ "name": "label",
3028
+ "description": {
3029
+ "kind": "markdown",
3030
+ "value": "Type: `string` \nDefault: `''`"
3031
+ }
3032
+ },
3033
+ {
3034
+ "name": "locale",
3035
+ "description": {
3036
+ "kind": "markdown",
3037
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
3038
+ }
3039
+ },
3040
+ {
3041
+ "name": "selected-claim-id",
3042
+ "description": {
3043
+ "kind": "markdown",
3044
+ "value": "Type: `string` \nDefault: `''`"
3045
+ }
3046
+ }
3047
+ ]
3048
+ },
2970
3049
  {
2971
3050
  "name": "lr-code-block",
2972
3051
  "description": {
@@ -3178,7 +3257,7 @@
3178
3257
  "name": "lr-code-editor",
3179
3258
  "description": {
3180
3259
  "kind": "markdown",
3181
- "value": "`<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.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Validation message. |\n| `hint` | Supporting text. |\n| `label` | Visible label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `editor` | Editor frame. |\n| `error` | Validation message. |\n| `form-control` | Outer wrapper. |\n| `gutter` | Line-number gutter. |\n| `hint` | Supporting text. |\n| `label` | Label. |\n| `textarea` | Native textarea. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-code-editor-min-block-size` (default: `var(--lr-size-8rem)`) — Minimum block size of the editor frame and its textarea.\n- `--lr-code-editor-line-height` (default: `1.5`) — Line height shared by the gutter and the textarea, so line numbers stay aligned with their lines.\n- `--lr-code-editor-tab-size` (default: `2`) — The textarea's `tab-size`. The single channel for tab width — the class writes this token rather than setting `tab-size` directly."
3260
+ "value": "`<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.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Validation message. |\n| `hint` | Supporting text. |\n| `label` | Visible label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `editor` | Editor frame. |\n| `error` | Validation message. |\n| `form-control` | Outer wrapper. |\n| `form-control-label` | Label. Also carries the `label` part token for compatibility. |\n| `gutter` | Line-number gutter. |\n| `hint` | Supporting text. |\n| `label` | Alias of `form-control-label`. |\n| `textarea` | Native textarea. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-code-editor-min-block-size` (default: `var(--lr-size-8rem)`) — Minimum block size of the editor frame and its textarea.\n- `--lr-code-editor-line-height` (default: `1.5`) — Line height shared by the gutter and the textarea, so line numbers stay aligned with their lines.\n- `--lr-code-editor-tab-size` (default: `2`) — The textarea's `tab-size`. The single channel for tab width — the class writes this token rather than setting `tab-size` directly."
3182
3261
  },
3183
3262
  "attributes": [
3184
3263
  {
@@ -3338,7 +3417,7 @@
3338
3417
  "name": "lr-color-picker",
3339
3418
  "description": {
3340
3419
  "kind": "markdown",
3341
- "value": "`<lr-color-picker>` — a form-associated native color picker with label, hint and error chrome.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Custom validation-error content. |\n| `hint` | Supporting text. |\n| `label` | Custom label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `error` | The validation message. |\n| `form-control` | The field wrapper. |\n| `form-control-label` | The label. Also carries the `label` part token for back-compat. |\n| `hint` | Supporting text. |\n| `input` | The native color input. |\n| `label` | Alias of `form-control-label`, kept for back-compat. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-color-picker-swatch-size` — The swatch's inline and block size, scaled by `size`."
3420
+ "value": "`<lr-color-picker>` — a form-associated native color picker with label, hint and error chrome.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Custom validation-error content. |\n| `hint` | Supporting text. |\n| `label` | Custom label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `error` | The validation message. |\n| `form-control` | The field wrapper. |\n| `form-control-label` | The label. Also carries the `label` part token for back-compat. |\n| `hint` | Supporting text. |\n| `input` | The native color input. |\n| `label` | Alias of `form-control-label`, kept for back-compat. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-color-picker-swatch-size` — The swatch's inline and block size, scaled by `size`.\n- `--lr-color-picker-gap` (default: `var(--lr-space-xs)`) — Gap between field chrome.\n- `--lr-color-picker-radius` (default: `var(--lr-radius)`) — Swatch corner radius.\n- `--lr-color-picker-hover-border-color` (default: `var(--lr-color-brand)`) — Hover border color."
3342
3421
  },
3343
3422
  "attributes": [
3344
3423
  {
@@ -3410,7 +3489,7 @@
3410
3489
  "name": "lr-combobox",
3411
3490
  "description": {
3412
3491
  "kind": "markdown",
3413
- "value": "`<lr-combobox>` — a filterable single/multi select that combines a text\ninput with a listbox. Mirrors the core `<wa-combobox>` API under `lr-`.\n\nOptions are `<lr-option value>` children. Emits native-style `change`/`input`\n(like Web Awesome) plus `lr-show`/`lr-hide`/`lr-clear`.\nStandard size tiers share their outer control height with sibling Lyra controls; the decorative\nexpand icon scales inside that allocation without creating an independent action target.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | `<lr-option>` elements. |\n| `end` | Adornment after the filter input and the built-in clear action, and before the expand icon — so consumer content never sits outboard of the dropdown chevron. |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n| `start` | Adornment at the inline-start of the trigger row, before the selected-value tags and the filter input. Slotted content is decorative chrome, not an option: `collectOptions()` only ever collects `<lr-option>` elements from the default slot. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `clear-button` | The clear button. |\n| `combobox` | The input container (positioning anchor). |\n| `combobox-input` | The text input. |\n| `end` | Wrapper around the `end` adornment slot; `hidden` while nothing is slotted. |\n| `error` | The error message. |\n| `expand-icon` | The dropdown indicator. |\n| `form-control` | The outer wrapper around label, combobox, listbox, error and hint. |\n| `form-control-label` | The `<label>` element. |\n| `hint` | The hint message. |\n| `listbox` | The options popover. |\n| `option` | An option row. |\n| `option-badge` | An async option row's optional trailing metadata badge. |\n| `option-dot` | An option row's leading status dot (when `dot-color` is set). |\n| `option-icon` | An async option row's optional decorative leading visual. |\n| `option-label` | An option row's label/sub wrapper. |\n| `option-overflow` | The \"+N more\" indicator shown when rows are capped by `maxRender`. |\n| `option-sub` | An option row's secondary line (when `sub` is set). |\n| `start` | Wrapper around the `start` adornment slot; `hidden` while nothing is slotted. |\n| `tag` | An individual selected tag. |\n| `tag__remove-button` | A tag's remove button. |\n| `tags` | The multi-select tag container. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-combobox-trigger-padding` — Padding inside the input container.\n- `--lr-combobox-trigger-min-height` — Minimum input-container block size, scaled by `size`.\n- `--lr-combobox-trigger-height` — Exact input-container height. Unset by default, which leaves `--lr-combobox-trigger-min-height` as a floor only; set it to a length to both floor and cap the row (e.g. to pixel-match `<lr-input>`/`<lr-select>` in the same toolbar). Because it is never declared by the component itself, it can be set from an ancestor or an outer-tree rule as well as inline on the element. Intended for a single-row combobox: in `multiple` mode a tag row long enough to wrap overflows the pinned box visibly (nothing is clipped or made unreachable), so leave it unset there.\n- `--lr-combobox-font-size` — Input text size.\n- `--lr-combobox-tag-padding` — Selected-tag padding.\n- `--lr-combobox-tag-font-size` — Selected-tag text size.\n- `--lr-combobox-expand-size` — Decorative expand-icon box size, scaled by `size`.\n- `--lr-combobox-gap` (default: `var(--lr-space-xs)`) — Gap between the start/end adornments, tags, and filter input inside the trigger row. Unlike the size knobs above it does not vary by `size` tier. Override it to retune without a `::part(combobox)` rule.\n- `--lr-combobox-radius` (default: `var(--lr-radius)`) — Corner radius of the trigger row (`[part='combobox']`). Does not vary by `size` tier.\n- `--lr-combobox-option-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a hovered or keyboard-active option row.\n- `--lr-combobox-option-selected-bg` (default: `transparent`) — Background of the currently-selected option row. Not declared on `:host`; retheme without hijacking `--lr-color-brand`.\n- `--lr-combobox-option-selected-border` (default: `var(--lr-color-brand)`) — Border color of the selected option row.\n- `--lr-combobox-option-selected-color` (default: `var(--lr-color-brand)`) — Text color of the selected option row.\n- `--lr-combobox-option-selected-font-weight` (default: `var(--lr-font-weight-semibold)`) — Font weight of the selected option row."
3492
+ "value": "`<lr-combobox>` — a filterable single/multi select that combines a text\ninput with a listbox. Mirrors the core `<wa-combobox>` API under `lr-`.\n\nOptions are `<lr-option value>` children. Emits native-style `change`/`input`\n(like Web Awesome) plus `lr-show`/`lr-hide`/`lr-clear`.\nStandard size tiers share their outer control height with sibling Lyra controls; the decorative\nexpand icon scales inside that allocation without creating an independent action target.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | `<lr-option>` elements. |\n| `end` | Adornment after the filter input and the built-in clear action, and before the expand icon — so consumer content never sits outboard of the dropdown chevron. |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n| `start` | Adornment at the inline-start of the trigger row, before the selected-value tags and the filter input. Slotted content is decorative chrome, not an option: `collectOptions()` only ever collects `<lr-option>` elements from the default slot. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `clear-button` | The clear button. |\n| `combobox` | The input container (positioning anchor). |\n| `combobox-input` | The text input. |\n| `end` | Wrapper around the `end` adornment slot; `hidden` while nothing is slotted. |\n| `error` | The error message. |\n| `expand-icon` | The dropdown indicator. |\n| `form-control` | The outer wrapper around label, combobox, listbox, error and hint. |\n| `form-control-label` | The `<label>` element. |\n| `hint` | The hint message. |\n| `listbox` | The options popover. |\n| `option` | An option row. |\n| `option-badge` | An async option row's optional trailing metadata badge. |\n| `option-dot` | An option row's leading status dot (when `dot-color` is set). |\n| `option-icon` | An async option row's optional decorative leading visual. |\n| `option-label` | An option row's label/sub wrapper. |\n| `option-overflow` | The \"+N more\" indicator shown when rows are capped by `maxRender`. |\n| `option-sub` | An option row's secondary line (when `sub` is set). |\n| `start` | Wrapper around the `start` adornment slot; `hidden` while nothing is slotted. |\n| `tag` | An individual selected tag. |\n| `tag-label` | The wrapping/ellipsis-safe selected-tag label. |\n| `tag__remove-button` | A tag's remove button. |\n| `tags` | The multi-select tag container. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-combobox-trigger-padding` — Padding inside the input container.\n- `--lr-combobox-trigger-min-height` — Minimum input-container block size, scaled by `size`.\n- `--lr-combobox-trigger-height` — Exact input-container height. Unset by default, which leaves `--lr-combobox-trigger-min-height` as a floor only; set it to a length to both floor and cap the row (e.g. to pixel-match `<lr-input>`/`<lr-select>` in the same toolbar). Because it is never declared by the component itself, it can be set from an ancestor or an outer-tree rule as well as inline on the element. Intended for a single-row combobox: in `multiple` mode a tag row long enough to wrap overflows the pinned box visibly (nothing is clipped or made unreachable), so leave it unset there.\n- `--lr-combobox-font-size` — Input text size.\n- `--lr-combobox-tag-padding` — Selected-tag padding.\n- `--lr-combobox-tag-font-size` — Selected-tag text size.\n- `--lr-combobox-expand-size` — Decorative expand-icon box size, scaled by `size`.\n- `--lr-combobox-gap` (default: `var(--lr-space-xs)`) — Gap between the start/end adornments, tags, and filter input inside the trigger row. Unlike the size knobs above it does not vary by `size` tier. Override it to retune without a `::part(combobox)` rule.\n- `--lr-combobox-radius` (default: `var(--lr-radius)`) — Corner radius of the trigger row (`[part='combobox']`). Does not vary by `size` tier.\n- `--lr-combobox-option-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a hovered or keyboard-active option row.\n- `--lr-combobox-option-selected-bg` (default: `transparent`) — Background of the currently-selected option row. Not declared on `:host`; retheme without hijacking `--lr-color-brand`.\n- `--lr-combobox-option-selected-border` (default: `var(--lr-color-brand)`) — Border color of the selected option row.\n- `--lr-combobox-option-selected-color` (default: `var(--lr-color-brand)`) — Text color of the selected option row.\n- `--lr-combobox-option-selected-font-weight` (default: `var(--lr-font-weight-semibold)`) — Font weight of the selected option row."
3414
3493
  },
3415
3494
  "attributes": [
3416
3495
  {
@@ -3601,14 +3680,14 @@
3601
3680
  "name": "lr-command-palette",
3602
3681
  "description": {
3603
3682
  "kind": "markdown",
3604
- "value": "`<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.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `backdrop` | Modal backdrop. |\n| `command` | A command button. |\n| `description` | A command's secondary description text. Rendered for every command; empty when the command has no `description`. |\n| `dialog` | Palette dialog. |\n| `empty` | The \"no results\" message. Only rendered when the filter matches no command. |\n| `group` | A group heading, rendered before the first command of each `group`. |\n| `icon` | A command's leading icon glyph. Only rendered when the command has an `icon`. |\n| `input` | Search input. |\n| `list` | Command list. |\n| `search` | The search row wrapping the leading icon and the `input`. |\n| `shortcut` | A command's trailing shortcut hint. Only rendered when the command has a `shortcut`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-command-palette-z-index` (default: `var(--lr-overlay-stack-index, var(--lr-layer-modal))`) — Stacking index of the backdrop.\n- `--lr-command-palette-max-inline-size` (default: `var(--lr-size-48rem)`) — Maximum dialog width.\n- `--lr-command-palette-max-block-size` (default: `70vh`) — Maximum dialog height.\n- `--lr-command-palette-list-max-block-size` (default: `50vh`) — Maximum height of the scrolling command list.\n- `--lr-command-palette-offset-block-start` (default: `12vh`) — Gap between the viewport top and the dialog.\n- `--lr-command-palette-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the active (keyboard-highlighted, `data-active=\"true\"`) command row. Declared as an inline `var()` fallback (never on `:host`), so setting it on the element or an ancestor recolors only the active row without hijacking the library-wide `--lr-color-brand-quiet` token."
3683
+ "value": "`<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.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `backdrop` | Modal backdrop. |\n| `command` | A command button. |\n| `command-group` | A labeled ARIA group containing visible command options. |\n| `description` | A command's secondary description text. Rendered for every command; empty when the command has no `description`. |\n| `dialog` | Palette dialog. |\n| `empty` | The \"no results\" message. Only rendered when the filter matches no command. |\n| `group` | A group heading, rendered before the first command of each `group`. |\n| `icon` | A command's leading icon glyph. Only rendered when the command has an `icon`. |\n| `input` | Search input. |\n| `label` | A command's visible label. |\n| `list` | Command list. |\n| `list-spacer` | Virtual result extent inside the scrolling list. |\n| `search` | The search row wrapping the leading icon and the `input`. |\n| `shortcut` | A command's trailing shortcut hint. Only rendered when the command has a `shortcut`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-command-palette-z-index` (default: `var(--lr-overlay-stack-index, var(--lr-layer-modal))`) — Stacking index of the backdrop.\n- `--lr-command-palette-max-inline-size` (default: `var(--lr-size-48rem)`) — Maximum dialog width.\n- `--lr-command-palette-max-block-size` (default: `70vh`) — Maximum dialog height.\n- `--lr-command-palette-list-max-block-size` (default: `50vh`) — Maximum height of the scrolling command list.\n- `--lr-command-palette-offset-block-start` (default: `12vh`) — Gap between the viewport top and the dialog.\n- `--lr-command-palette-row-height` (default: `var(--lr-size-3rem)`) — Virtual command-row height.\n- `--lr-command-palette-group-height` (default: `var(--lr-size-2rem)`) — Virtual group-heading height.\n- `--lr-command-palette-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the active (keyboard-highlighted, `data-active=\"true\"`) command row. Declared as an inline `var()` fallback (never on `:host`), so setting it on the element or an ancestor recolors only the active row without hijacking the library-wide `--lr-color-brand-quiet` token."
3605
3684
  },
3606
3685
  "attributes": [
3607
3686
  {
3608
3687
  "name": "aria-label",
3609
3688
  "description": {
3610
3689
  "kind": "markdown",
3611
- "value": "Type: `string` \nDefault: `''`"
3690
+ "value": "Type: `string` \nDefault: `\"\"`"
3612
3691
  }
3613
3692
  },
3614
3693
  {
@@ -3629,7 +3708,7 @@
3629
3708
  "name": "shortcut",
3630
3709
  "description": {
3631
3710
  "kind": "markdown",
3632
- "value": "Type: `string` \nDefault: `'mod+k'`"
3711
+ "value": "Type: `string` \nDefault: `\"mod+k\"`"
3633
3712
  }
3634
3713
  }
3635
3714
  ]
@@ -3891,7 +3970,7 @@
3891
3970
  "name": "name",
3892
3971
  "description": {
3893
3972
  "kind": "markdown",
3894
- "value": "Optional display name for the source document. Used as the accessible\nname of `[part='base']`, falling back to a host `aria-label` and then\nthe localized `contactViewerLabel` default, matching the\n`csvViewerLabel`-style sibling document viewers.\n\nType: `string` \nDefault: `''`"
3973
+ "value": "Optional display name for the source document. Used as the accessible\nname of `[part='base']` after a host `aria-label`, and before\nthe localized `contactViewerLabel` default, matching the\n`csvViewerLabel`-style sibling document viewers.\n\nType: `string` \nDefault: `''`"
3895
3974
  }
3896
3975
  },
3897
3976
  {
@@ -3944,7 +4023,7 @@
3944
4023
  "name": "lr-context-meter",
3945
4024
  "description": {
3946
4025
  "kind": "markdown",
3947
- "value": "`<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.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The component's root wrapper (a `<div>` for `bar`, an `<svg>` for `ring`). |\n| `label` | The visible caption, when `label` is set. |\n| `segment` | One occupied segment. Carries `data-tone` for styling and `--lr-context-meter-segment-color` when `color` is set. |\n| `track` | The unfilled/empty capacity track. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-context-meter-segment-color` — 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."
4026
+ "value": "`<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.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The component's root wrapper (a `<div>` for `bar`, an `<svg>` for `ring`). |\n| `label` | The visible caption, when `label` is set. |\n| `segment` | One occupied segment. Carries `data-tone` for styling and `--lr-context-meter-segment-color` when `color` is set. |\n| `segment-item` | One visually-hidden segment label/count pair. |\n| `segment-list` | The visually-hidden list exposing the segment breakdown. |\n| `semantic` | The visually-hidden meter/group carrying aggregate range semantics. |\n| `track` | The unfilled/empty capacity track. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-context-meter-segment-color` — 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."
3948
4027
  },
3949
4028
  "attributes": [
3950
4029
  {
@@ -4127,7 +4206,7 @@
4127
4206
  "name": "lr-csv-viewer",
4128
4207
  "description": {
4129
4208
  "kind": "markdown",
4130
- "value": "Fetches CSV text, parses quoted fields with PapaParse, and virtualizes its rows.\n\nAdopts `DocumentAnchorTarget`: a `cell-range` anchor addresses the raw file grid, 1-based, with\nthe header row included whenever `has-header-row` is set (matching how a spreadsheet app itself\nlabels `A1`) -- `scrollToAnchor()` scrolls the addressed row into view via the virtualized list's\n`active-id`, then scrolls the first addressed column horizontally into view. A `sheet`-qualified\nanchor never resolves here -- this viewer has no sheets. `highlights` paint as a focusable\n`part=\"cell-highlight\"` on membership, recomputed per row inside `renderRow()` so a row scrolled\nout and back in reconstructs its highlight for free, with no persistent DOM to keep in sync.\n`search()` is a case-insensitive substring match over the same stringified cell values `cell()`\nalready renders, ordered row then column.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `body` | The scrollable wrapper around the fetched-state content, capped by `max-height`. |\n| `cell` | One rendered cell. |\n| `cell-highlight` | A cell covered by a `highlights` entry -- focusable, emits `lr-highlight-activate` on click or Enter/Space. |\n| `data-row` | One virtualized data row. |\n| `error` | The error message region. |\n| `header-row` | The sticky header row, rendered while `has-header-row` is set. |\n| `rows` | The virtualized row list. |\n| `sheet` | The wrapper around the header row and virtualized body. |\n| `spinner` | The loading status region. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-csv-viewer-highlight-color` (default: `var(--lr-color-brand)`) — Outline color of a highlighted cell. The active highlight sets it inline to `var(--lr-color-warning, var(--lr-color-brand))`.\n- `--lr-csv-viewer-max-height` (default: `none`) — Maximum block size of `[part=\"body\"]` before it scrolls internally. The `maxHeight` property sets this token inline on `[part=\"base\"]`."
4209
+ "value": "Fetches CSV text, parses quoted fields with PapaParse, and virtualizes its rows.\n\nAdopts `DocumentAnchorTarget`: a `cell-range` anchor addresses the raw file grid, 1-based, with\nthe header row included whenever `has-header-row` is set (matching how a spreadsheet app itself\nlabels `A1`) -- `scrollToAnchor()` scrolls the addressed row into view via the virtualized list's\n`active-id`, then scrolls the first addressed column horizontally into view. A `sheet`-qualified\nanchor never resolves here -- this viewer has no sheets. `highlights` paint as a\n`part=\"cell-highlight\"` structural cell wrapping a native `part=\"cell-highlight-action\"` button\non membership, recomputed per row inside `renderRow()` so a row scrolled out and back in\nreconstructs its highlight for free, with no persistent DOM to keep in sync.\n`search()` is a locale-aware case-insensitive substring match over the same stringified cell\nvalues `cell()` already renders, ordered row then column.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `body` | The scrollable wrapper around the fetched-state content, capped by `max-height`. |\n| `cell` | One rendered cell. |\n| `cell-highlight` | A structural cell covered by a `highlights` entry. |\n| `cell-highlight-action` | The native button filling a highlighted cell; emits `lr-highlight-activate` when activated. |\n| `data-row` | One virtualized data row. |\n| `error` | The error message region. |\n| `header-row` | The sticky header row, rendered while `has-header-row` is set. |\n| `rows` | The virtualized row list. |\n| `sheet` | The wrapper around the header row and virtualized body. |\n| `spinner` | The loading status region. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-csv-viewer-highlight-color` (default: `var(--lr-color-brand)`) — Outline color of a highlighted cell. The active highlight sets it inline to `var(--lr-color-warning, var(--lr-color-brand))`.\n- `--lr-csv-viewer-max-height` (default: `none`) — Maximum block size of `[part=\"body\"]` before it scrolls internally. The `maxHeight` property sets this token inline on `[part=\"base\"]`."
4131
4210
  },
4132
4211
  "attributes": [
4133
4212
  {
@@ -4171,7 +4250,7 @@
4171
4250
  "name": "lr-dashboard-grid",
4172
4251
  "description": {
4173
4252
  "kind": "markdown",
4174
- "value": "`<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.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `cell-{id}` | A `layout` entry's cell content; auto-populated by a default composed `<lr-widget>`/`<lr-widget-renderer>` pair unless a light-DOM `[cell-id=\"{id}\"]` child is authored instead. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The grid root. |\n| `cell` | A single cell's positioned wrapper. |\n| `empty` | The `lr-empty` shown when `layout` is empty. |\n| `live-region` | The current move/resize/collision announcement. |\n| `resize-handle` | The pointer resize grip in a cell's trailing/bottom corner (only rendered while `cells-resizable`); the Ctrl/Cmd+Shift+Arrow keyboard path is the resize handle's full accessible equivalent, so the handle itself is `aria-hidden`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-dashboard-grid-columns` (default: `12`) — 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.\n- `--lr-dashboard-grid-row-height` (default: `var(--lr-size-5rem)`) — Row track height. Written inline on `[part=\"base\"]` from the `rowHeight` property (in px) on every render.\n- `--lr-dashboard-grid-gap` (default: `var(--lr-space-m)`) — Gap between cells on both axes. Written inline on `[part=\"base\"]` from the `gap` property (in px) on every render.\n- `--lr-dashboard-grid-cell-hover-outline-color` (default: `var(--lr-color-border-strong)`) — Outline color of a cell's mouse-hover preview of its own `:focus-visible` ring (shown because every cell is a real focusable, draggable/resizable target). Set to `transparent` to opt out."
4253
+ "value": "`<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.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `cell-{id}` | A `layout` entry's cell content; auto-populated by a default composed `<lr-widget>`/`<lr-widget-renderer>` pair unless a light-DOM `[cell-id=\"{id}\"]` child is authored instead. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The grid root. |\n| `cell` | A single cell's positioned wrapper. |\n| `empty` | The `lr-empty` shown when `layout` is empty. |\n| `live-region` | The current move/resize/collision announcement. |\n| `resize-handle` | The pointer resize grip in a cell's trailing/bottom corner (only rendered while `cells-resizable`); the Ctrl/Cmd+Shift+Arrow keyboard path is the resize handle's full accessible equivalent, so the handle itself is `aria-hidden`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-dashboard-grid-columns` (default: `12`) — 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.\n- `--lr-dashboard-grid-row-height` (default: `var(--lr-size-5rem)`) — Row track height. Written inline on `[part=\"base\"]` from the `rowHeight` property (in px) on every render.\n- `--lr-dashboard-grid-gap` (default: `var(--lr-space-m)`) — Gap between cells on both axes. Written inline on `[part=\"base\"]` from the `gap` property (in px) on every render.\n- `--lr-dashboard-grid-cell-hover-outline-color` (default: `var(--lr-color-border-strong)`) — Outline color of a cell's mouse-hover preview of its own `:focus-visible` ring (shown because every cell is a real focusable, draggable/resizable target). Set to `transparent` to opt out.\n- `--lr-dashboard-grid-collision-outline-color` (default: `var(--lr-color-danger)`) — Outline color of a cell whose current drag/resize preview collides with another cell."
4175
4254
  },
4176
4255
  "attributes": [
4177
4256
  {
@@ -4199,7 +4278,7 @@
4199
4278
  "name": "collision",
4200
4279
  "description": {
4201
4280
  "kind": "markdown",
4202
- "value": "How a move/resize that would overlap another cell is resolved -- see the class doc.\n\nType: `DashboardCollisionPolicy` \nDefault: `'reject'`"
4281
+ "value": "How a move/resize that would overlap another cell is resolved -- see the class doc.\n\nType: `DashboardCollisionPolicy` \nDefault: `\"reject\"`"
4203
4282
  }
4204
4283
  },
4205
4284
  {
@@ -4243,7 +4322,7 @@
4243
4322
  "name": "lr-dataset-viewer",
4244
4323
  "description": {
4245
4324
  "kind": "markdown",
4246
- "value": "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.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `body` | The scrollable body wrapper. |\n| `cell` | One rendered cell (`role=\"cell\"`). |\n| `cell-highlight` | A cell (`role=\"cell\"`) covered by a `highlights` entry; wraps the `cell-highlight-action` button. |\n| `cell-highlight-action` | The native button filling a highlighted cell -- focusable, emits `lr-highlight-activate` on click or Enter/Space. |\n| `data-row` | One virtualized data row. |\n| `error` | The error message region. |\n| `header-cell` | A header cell (`role=\"columnheader\"`). |\n| `header-row` | The sticky header row (`role=\"row\"`). |\n| `spinner` | The loading status region. |\n| `table` | The `role=\"table\"` container. Its accessible name is `name` when set, otherwise a host `aria-label`, otherwise a localized row-count caption. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-dataset-viewer-max-height` (default: `none`) — Maximum block size of `[part=\"body\"]` before it scrolls internally. The `maxHeight` property sets this token inline on `[part=\"base\"]`.\n- `--lr-dataset-viewer-highlight-color` (default: `var(--lr-color-brand)`) — Outline color of a highlighted cell. The active highlight sets it inline to `var(--lr-color-warning, var(--lr-color-brand))`."
4325
+ "value": "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\nlocale-aware case-insensitive substring match over the header followed by every body cell's raw\nstring value, ordered row then column.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `body` | The scrollable body wrapper. |\n| `cell` | One rendered cell (`role=\"cell\"`). |\n| `cell-highlight` | A cell (`role=\"cell\"`) covered by a `highlights` entry; wraps the `cell-highlight-action` button. |\n| `cell-highlight-action` | The native button filling a highlighted cell -- focusable, emits `lr-highlight-activate` on click or Enter/Space. |\n| `data-row` | One virtualized data row. |\n| `error` | The error message region. |\n| `header-cell` | A header cell (`role=\"columnheader\"`). |\n| `header-row` | The sticky header row (`role=\"row\"`). |\n| `spinner` | The loading status region. |\n| `table` | The `role=\"table\"` container. Its accessible name is a host `aria-label` when set, otherwise `name`, otherwise a localized row-count caption. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-dataset-viewer-max-height` (default: `none`) — Maximum block size of `[part=\"body\"]` before it scrolls internally. The `maxHeight` property sets this token inline on `[part=\"base\"]`.\n- `--lr-dataset-viewer-highlight-color` (default: `var(--lr-color-brand)`) — Outline color of a highlighted cell. The active highlight sets it inline to `var(--lr-color-warning, var(--lr-color-brand))`."
4247
4326
  },
4248
4327
  "attributes": [
4249
4328
  {
@@ -4264,7 +4343,7 @@
4264
4343
  "name": "name",
4265
4344
  "description": {
4266
4345
  "kind": "markdown",
4267
- "value": "Display name used for the table's accessible name, taking precedence over a host\n`aria-label`.\n\nType: `string` \nDefault: `''`"
4346
+ "value": "Display name used for the table's accessible name after an explicit host `aria-label`.\n\nType: `string` \nDefault: `''`"
4268
4347
  }
4269
4348
  },
4270
4349
  {
@@ -4280,7 +4359,7 @@
4280
4359
  "name": "lr-date-input",
4281
4360
  "description": {
4282
4361
  "kind": "markdown",
4283
- "value": "`<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.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `end` | Adornment after the text field and the built-in clear action, and before the calendar toggle — so consumer content never sits outboard of the calendar button. |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n| `start` | Adornment at the inline-start of the input row, before the text field. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `clear-button` | The clear control. |\n| `date-picker` | The nested date picker. |\n| `end` | Wrapper around the `end` adornment slot; `hidden` while nothing is slotted. |\n| `error` | The validation message. |\n| `expand-button` | The calendar popup toggle. |\n| `expand-icon` | The calendar icon. |\n| `form-control` | The outer form-control wrapper. |\n| `form-control-label` | The label wrapper. |\n| `hint` | The hint message. |\n| `input` | The text input. |\n| `input-wrapper` | The input and button wrapper. |\n| `popup` | The positioned calendar popup. |\n| `start` | Wrapper around the `start` adornment slot; `hidden` while nothing is slotted. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-date-input-padding-block` (default: `var(--lr-space-xs)`) — Block padding of the input row, scaled by `size`.\n- `--lr-date-input-padding-inline` (default: `var(--lr-space-s)`) — Inline padding of the input row, scaled by `size`.\n- `--lr-date-input-font-size` (default: `inherit`) — Font size of the text input, scaled by `size`.\n- `--lr-date-input-control-min-height` (default: `var(--lr-size-2-5rem)`) — Minimum block size of the input row, scaled by `size` to mirror `lr-input`'s own min-height scale. Each default sits below the row's transitively-pinned height, so it is dead until a consumer raises it -- the unset render is unchanged.\n- `--lr-date-input-control-height` — Exact block size of the input row. Undeclared by default, so the row grows to fit its content (floored by `--lr-date-input-control-min-height`). Set it to pin a fixed height; the calendar toggle keeps its own 24x24 touch target even when this pins a shorter row."
4362
+ "value": "`<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.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `end` | Adornment after the text field and the built-in clear action, and before the calendar toggle — so consumer content never sits outboard of the calendar button. |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n| `start` | Adornment at the inline-start of the input row, before the text field. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `clear-button` | The clear control. |\n| `date-picker` | The nested date picker. |\n| `end` | Wrapper around the `end` adornment slot; `hidden` while nothing is slotted. |\n| `error` | The validation message. |\n| `expand-button` | The calendar popup toggle. |\n| `expand-icon` | The calendar icon. |\n| `form-control` | The outer form-control wrapper. |\n| `form-control-label` | The label wrapper. |\n| `hint` | The hint message. |\n| `input` | The text input. |\n| `input-wrapper` | The input and button wrapper. |\n| `popup` | The positioned calendar popup. |\n| `start` | Wrapper around the `start` adornment slot; `hidden` while nothing is slotted. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-date-input-padding-block` (default: `var(--lr-space-xs)`) — Block padding of the input row, scaled by `size`.\n- `--lr-date-input-padding-inline` (default: `var(--lr-space-s)`) — Inline padding of the input row, scaled by `size`.\n- `--lr-date-input-font-size` (default: `inherit`) — Font size of the text input, scaled by `size`.\n- `--lr-date-input-placeholder-color` (default: `var(--lr-color-text-quiet)`) — Placeholder text color.\n- `--lr-date-input-gap` (default: `var(--lr-space-xs)`) — Gap between input-row children.\n- `--lr-date-input-radius` (default: `var(--lr-radius)`) — Input-row corner radius.\n- `--lr-date-input-focus-border-color` (default: `var(--lr-color-brand)`) — Focused row border color.\n- `--lr-date-input-control-min-height` (default: `var(--lr-size-2-5rem)`) — Minimum block size of the input row, scaled by `size` to mirror `lr-input`'s own min-height scale. Each default sits below the row's transitively-pinned height, so it is dead until a consumer raises it -- the unset render is unchanged.\n- `--lr-date-input-control-height` — Exact block size of the input row. Undeclared by default, so the row grows to fit its content (floored by `--lr-date-input-control-min-height`). Set it to pin a fixed height; the calendar toggle keeps its own 24x24 touch target even when this pins a shorter row."
4284
4363
  },
4285
4364
  "attributes": [
4286
4365
  {
@@ -4522,7 +4601,7 @@
4522
4601
  "name": "lr-date-picker",
4523
4602
  "description": {
4524
4603
  "kind": "markdown",
4525
- "value": "`<lr-date-picker>` — an inline month-grid calendar for picking a single date\nor a date range. Mirrors the core `<wa-date-picker>` API under `lr-`.\n\nValue is ISO 8601: `YYYY-MM-DD` (single) or `YYYY-MM-DD/YYYY-MM-DD` (range).\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The date-picker wrapper. |\n| `day` | A calendar day button. |\n| `day-outside` | A day outside the active month. |\n| `day-placeholder` | A non-day grid placeholder. |\n| `day-range-end` | The end of a selected range. |\n| `day-range-inner` | An interior day in a selected range. |\n| `day-range-start` | The start of a selected range. |\n| `day-selected` | A selected day. |\n| `day-today` | A day representing today. |\n| `grid` | A month date grid. |\n| `header` | The month header. |\n| `month` | A visible month wrapper. |\n| `next` | The next-month button. |\n| `previous` | The previous-month button. |\n| `title` | The month title. |\n| `week` | A calendar week row. |\n| `weekday` | A weekday label. |\n| `weekdays` | The weekday header row. |"
4604
+ "value": "`<lr-date-picker>` — an inline month-grid calendar for picking a single date\nor a date range. Mirrors the core `<wa-date-picker>` API under `lr-`.\n\nValue is ISO 8601: `YYYY-MM-DD` (single) or `YYYY-MM-DD/YYYY-MM-DD` (range).\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The date-picker wrapper. |\n| `day` | A calendar day button. |\n| `day-outside` | A day outside the active month. |\n| `day-placeholder` | A non-day grid placeholder. |\n| `day-range-end` | The end of a selected range. |\n| `day-range-inner` | An interior day in a selected range. |\n| `day-range-start` | The start of a selected range. |\n| `day-selected` | A selected day. |\n| `day-today` | A day representing today. |\n| `grid` | A month date grid. |\n| `header` | The month header. |\n| `month` | A visible month wrapper. |\n| `next` | The next-month button. |\n| `previous` | The previous-month button. |\n| `title` | The month title. |\n| `week` | A calendar week row. |\n| `weekday` | A weekday label. |\n| `weekdays` | The weekday header row. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-date-picker-month-gap` (default: `var(--lr-space-l)`) — Gap between visible months.\n- `--lr-date-picker-header-gap` (default: `var(--lr-space-s)`) — Month-header child gap.\n- `--lr-date-picker-radius` (default: `var(--lr-radius)`) — Calendar and control corner radius."
4526
4605
  },
4527
4606
  "attributes": [
4528
4607
  {
@@ -4746,7 +4825,7 @@
4746
4825
  "name": "lr-diff-view",
4747
4826
  "description": {
4748
4827
  "kind": "markdown",
4749
- "value": "`<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).\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `copy-button` | The copy affordance, only rendered while `copyable`. |\n| `line` | A single line. Carries `data-type=\"equal\"\\|\"add\"\\|\"remove\"\\|\"empty\"\\|\"fold\"` (`\"empty\"` is an unbalanced-replace placeholder cell in `layout=\"split\"` and never carries a `+`/`-` prefix; `\"fold\"` is the collapsed-unchanged-lines marker `contextLines` produces). |\n| `side` | One column in `layout=\"split\"` (`data-side=\"old\"\\|\"new\"`). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-diff-view-font` (default: `var(--lr-font-mono)`) — Font family used for the diff lines."
4828
+ "value": "`<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).\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `copy-button` | The copy affordance, only rendered while `copyable`. |\n| `limit` | The localized fallback rendered when either input exceeds `maxLines`. |\n| `line` | A single line. Carries `data-type=\"equal\"\\|\"add\"\\|\"remove\"\\|\"empty\"\\|\"fold\"` (`\"empty\"` is an unbalanced-replace placeholder cell in `layout=\"split\"` and never carries a `+`/`-` prefix; `\"fold\"` is the collapsed-unchanged-lines marker `contextLines` produces). |\n| `side` | One column in `layout=\"split\"` (`data-side=\"old\"\\|\"new\"`). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-diff-view-font` (default: `var(--lr-font-mono)`) — Font family used for the diff lines.\n- `--lr-diff-view-add-background` (default: `var(--lr-color-success-quiet)`) — Added-line background.\n- `--lr-diff-view-add-color` (default: `var(--lr-color-success)`) — Added-line text color.\n- `--lr-diff-view-remove-background` (default: `var(--lr-color-danger-quiet)`) — Removed-line background.\n- `--lr-diff-view-remove-color` (default: `var(--lr-color-danger)`) — Removed-line text color.\n- `--lr-diff-view-fold-background` (default: `var(--lr-color-surface-raised)`) — Fold-marker background.\n- `--lr-diff-view-fold-color` (default: `var(--lr-color-text-quiet)`) — Fold-marker text color."
4750
4829
  },
4751
4830
  "attributes": [
4752
4831
  {
@@ -4783,6 +4862,13 @@
4783
4862
  "kind": "markdown",
4784
4863
  "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
4785
4864
  }
4865
+ },
4866
+ {
4867
+ "name": "max-lines",
4868
+ "description": {
4869
+ "kind": "markdown",
4870
+ "value": "Maximum lines accepted on either input side before rendering a bounded fallback. Defaults\nto `5000`. Set to `Infinity` explicitly to opt back into unbounded diffing.\n\nType: `number` \nDefault: `5000`"
4871
+ }
4786
4872
  }
4787
4873
  ]
4788
4874
  },
@@ -4834,7 +4920,7 @@
4834
4920
  "name": "edge",
4835
4921
  "description": {
4836
4922
  "kind": "markdown",
4837
- "value": "Type: `DockPanelEdge` \nDefault: `'end'`"
4923
+ "value": "Type: `DockPanelEdge` \nDefault: `\"end\"`"
4838
4924
  }
4839
4925
  },
4840
4926
  {
@@ -4848,14 +4934,14 @@
4848
4934
  "name": "max-size",
4849
4935
  "description": {
4850
4936
  "kind": "markdown",
4851
- "value": "Maximum resize bound, as a CSS length. Empty means \"no explicit cap\" -- the live extent of\nthe containing element is used instead, so the panel still can't be dragged wider/taller than\nits container.\n\nType: `string` \nDefault: `''`"
4937
+ "value": "Maximum resize bound, as a CSS length. Empty means \"no explicit cap\" -- the live extent of\nthe containing element is used instead, so the panel still can't be dragged wider/taller than\nits container.\n\nType: `string` \nDefault: `\"\"`"
4852
4938
  }
4853
4939
  },
4854
4940
  {
4855
4941
  "name": "min-size",
4856
4942
  "description": {
4857
4943
  "kind": "markdown",
4858
- "value": "Minimum resize bound, as a CSS length.\n\nType: `string` \nDefault: `'160px'`"
4944
+ "value": "Minimum resize bound, as a CSS length.\n\nType: `string` \nDefault: `\"160px\"`"
4859
4945
  }
4860
4946
  },
4861
4947
  {
@@ -4869,7 +4955,7 @@
4869
4955
  "name": "size",
4870
4956
  "description": {
4871
4957
  "kind": "markdown",
4872
- "value": "The current docked size along the resize axis, as a CSS length (e.g. `\"320px\"`).\n\nType: `string` \nDefault: `'280px'`"
4958
+ "value": "The current docked size along the resize axis, as a CSS length (e.g. `\"320px\"`).\n\nType: `string` \nDefault: `\"280px\"`"
4873
4959
  }
4874
4960
  }
4875
4961
  ]
@@ -4973,7 +5059,7 @@
4973
5059
  "name": "lr-document-preview",
4974
5060
  "description": {
4975
5061
  "kind": "markdown",
4976
- "value": "`<lr-document-preview>` — a format-dispatching viewer for one document/\nattachment, plus the visual state machine for an async server-side\nconversion a host app runs in front of it.\n\nFormat dispatch is intentionally minimal (see this family's scope\nguidance): only `text/*`/`application/json` (plain, scrollable `<pre>` —\nno syntax highlighting; compose `<lr-code-block>` yourself via the\n`unsupported` slot for that) and `image/*` (a contained `<img>`) render\ninline. Everything else — PDF, office documents, video, audio, or any\nunrecognized MIME type — falls back to a generic \"can't preview this\"\nstate: a file glyph, a short message, and (when `src` is set) a native\n`<a download>` link. This is a deliberate ceiling, not a gap: this\ncomponent ships a dispatch *shell*, not a format registry. The\n`unsupported` slot is the escape hatch for every format left out of the\nbuilt-in three — plug in a PDF.js viewer, an office-doc renderer, a\n`<lr-code-block>`, or anything else keyed off `mime-type` yourself.\n\n`status=\"converting\"` is a second, independent axis from format dispatch.\nThis component does not know your backend's conversion API shape and\ntherefore owns none of the actual polling/fetch — a host that's converting\na non-natively-previewable format server-side (e.g. .docx → .pdf) polls\nits own backend and updates `status`/`progress`/`src` here as that\nproceeds. This component only *visualizes* that state: an indeterminate\nspinner, or a determinate one once `progress` is supplied. Once the host\nflips `status` to `\"ready\"` (typically alongside a new `src`/`mime-type`\npointing at the converted artifact), normal format dispatch resumes.\n\nThe one piece of async work this component *does* own is fetching a\n`text/*`/`application/json` `src` itself (there's no other way to get a\n`<pre>`'s text content from a URL) — gated behind the same generation-\ncounter guard `<lr-tool-result-view>`'s `resolve()` uses, plus an\n`AbortController`, so a `src` reassigned mid-fetch cancels the obsolete\nrequest and can't have a stale response clobber a newer one. A\nfailure here (network error, non-2xx response) renders inline via\n`[part=\"error\"]` and fires `lr-render-error`, independently of the\nhost-owned `status` prop — mirrors `<lr-markdown>`'s identical stance\nthat a *rendering* failure and a host's own state machine are different\nconcerns.\n\nEvery `src` is validated for the DOM/API sink that consumes it. Text\nfetches and image sources allow relative URLs plus `http:`, `https:`,\n`blob:`, and `data:`. Download links deliberately exclude `data:` because\nfollowing a `data:text/html` URL can create an active document. Unsafe or\nmalformed URLs never reach `fetch()`, an image `src`, or an anchor `href`;\nthey render a non-interactive fallback/error instead.\n\nAccessibility: the `\"converting\"` state (no numeric `progress`) is a\n`role=\"status\"` region wrapping a visually-hidden \"Converting document…\"\nstring. This is a *plain* static region, not routed through\n`<lr-live-region>`/`Announcer` — like `<lr-typing-indicator>`'s\nidentical judgement call (see that component's class doc), this only ever\nhas one thing to announce (entering the state), not a rapidly-repeating\nstream of updates, so the coalescing machinery a high-frequency component\nneeds would be pure overhead here. Once real `progress` is available, the\nregion becomes a standard `role=\"progressbar\"` instead, which is\nself-describing via `aria-valuenow` with no extra live-region wiring\nneeded. `status=\"error\"` renders `[part=\"error\"]` as `role=\"alert\"` — an\nassertive, one-shot failure notice, the same native-role shortcut\n`<lr-live-region>`'s own `mode=\"assertive\"` maps to, without requiring\nthe announcer machinery here either.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `unsupported` | Escape hatch: when populated, its content renders *instead of* the generic download fallback for any `mime-type` this component doesn't natively support (i.e. whenever format dispatch would otherwise fall through to \"generic\"). Ignored while `mime-type` resolves to `text`/`image` dispatch, or while `status` is `\"converting\"`/`\"error\"`. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root container. |\n| `body` | The wrapper around whichever content is currently showing (text/image preview, the generic fallback, the spinner, or the error message). |\n| `download-link` | The `<a download>` affordance in the generic fallback. Only rendered when `src` is set and safe for link navigation. |\n| `error` | The error message region (`role=\"alert\"`) — used both for `status=\"error\"` and for a failed text fetch. |\n| `filename` | The filename text. |\n| `frame-content` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable` (image format only). |\n| `frame-controls` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable` (image format only). |\n| `frame-reset` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable` (image format only). |\n| `frame-viewport` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable` (image format only). |\n| `frame-zoom-in` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable` (image format only). |\n| `frame-zoom-out` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable` (image format only). |\n| `header` | The row above the body, holding `filename`. Hidden entirely when `filename` is unset. |\n| `highlight-layer` | The wrapper around every rendered region highlight (image format only). |\n| `region-highlight` | One region highlight (`data-tone`, `data-active`) (image format only). |\n| `spinner` | The converting/loading indicator — indeterminate (`role=\"status\"`) or, once numeric progress is known, a determinate `role=\"progressbar\"`. Used both for `status=\"converting\"` and for this component's own in-flight text fetch. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-document-preview-max-height` (default: `none`) — Maximum body block size before the preview scrolls internally.\n- `--lr-document-preview-font` (default: `var(--lr-font-mono)`) — Font used for plain-text previews.\n- `--lr-document-preview-spin-duration` (default: `0.8s`) — Duration of one indeterminate loading-indicator rotation.\n- `--lr-document-preview-progress` (default: `0`) — 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.\n- `--lr-document-preview-active-border` (default: `var(--lr-color-warning, var(--lr-color-brand))`) — Border color of the `[part=\"region-highlight\"]` matching `activeHighlightId` (image format only). Distinct from the resting highlight border."
5062
+ "value": "`<lr-document-preview>` — a format-dispatching viewer for one document/\nattachment, plus the visual state machine for an async server-side\nconversion a host app runs in front of it.\n\nFormat dispatch is intentionally minimal (see this family's scope\nguidance): only `text/*`/`application/json` (plain, scrollable `<pre>` —\nno syntax highlighting; compose `<lr-code-block>` yourself via the\n`unsupported` slot for that) and `image/*` (a contained `<img>`) render\ninline. Everything else — PDF, office documents, video, audio, or any\nunrecognized MIME type — falls back to a generic \"can't preview this\"\nstate: a file glyph, a short message, and (when `src` is set) a native\n`<a download>` link. This is a deliberate ceiling, not a gap: this\ncomponent ships a dispatch *shell*, not a format registry. The\n`unsupported` slot is the escape hatch for every format left out of the\nbuilt-in three — plug in a PDF.js viewer, an office-doc renderer, a\n`<lr-code-block>`, or anything else keyed off `mime-type` yourself.\n\n`status=\"converting\"` is a second, independent axis from format dispatch.\nThis component does not know your backend's conversion API shape and\ntherefore owns none of the actual polling/fetch — a host that's converting\na non-natively-previewable format server-side (e.g. .docx → .pdf) polls\nits own backend and updates `status`/`progress`/`src` here as that\nproceeds. This component only *visualizes* that state: an indeterminate\nspinner, or a determinate one once `progress` is supplied. Once the host\nflips `status` to `\"ready\"` (typically alongside a new `src`/`mime-type`\npointing at the converted artifact), normal format dispatch resumes.\n\nThe one piece of async work this component *does* own is fetching a\n`text/*`/`application/json` `src` itself (there's no other way to get a\n`<pre>`'s text content from a URL) — gated behind the same generation-\ncounter guard `<lr-tool-result-view>`'s `resolve()` uses, plus an\n`AbortController`, so a `src` reassigned mid-fetch cancels the obsolete\nrequest and can't have a stale response clobber a newer one. A\nfailure here (network error, non-2xx response) renders inline via\n`[part=\"error\"]` and fires `lr-render-error`, independently of the\nhost-owned `status` prop — mirrors `<lr-markdown>`'s identical stance\nthat a *rendering* failure and a host's own state machine are different\nconcerns.\n\nEvery `src` is validated for the DOM/API sink that consumes it. Text\nfetches and image sources allow relative URLs plus `http:`, `https:`,\n`blob:`, and `data:`. Download links deliberately exclude `data:` because\nfollowing a `data:text/html` URL can create an active document. Unsafe or\nmalformed URLs never reach `fetch()`, an image `src`, or an anchor `href`;\nthey render a non-interactive fallback/error instead.\n\nAccessibility: the `\"converting\"` state (no numeric `progress`) is a\n`role=\"status\"` region wrapping a visually-hidden \"Converting document…\"\nstring. This is a *plain* static region, not routed through\n`<lr-live-region>`/`Announcer` — like `<lr-typing-indicator>`'s\nidentical judgement call (see that component's class doc), this only ever\nhas one thing to announce (entering the state), not a rapidly-repeating\nstream of updates, so the coalescing machinery a high-frequency component\nneeds would be pure overhead here. Once real `progress` is available, the\nregion becomes a standard `role=\"progressbar\"` instead, which is\nself-describing via `aria-valuenow` with no extra live-region wiring\nneeded. `status=\"error\"` renders `[part=\"error\"]` as `role=\"alert\"` — an\nassertive, one-shot failure notice, the same native-role shortcut\n`<lr-live-region>`'s own `mode=\"assertive\"` maps to, without requiring\nthe announcer machinery here either.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `unsupported` | Escape hatch: when populated, its content renders *instead of* the generic download fallback for any `mime-type` this component doesn't natively support (i.e. whenever format dispatch would otherwise fall through to \"generic\"). Ignored while `mime-type` resolves to `text`/`image` dispatch, or while `status` is `\"converting\"`/`\"error\"`. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root container. |\n| `body` | The wrapper around whichever content is currently showing (text/image preview, the generic fallback, the spinner, or the error message). |\n| `download-link` | The `<a download>` affordance in the generic fallback. Only rendered when `src` is set and safe for link navigation. |\n| `error` | The error message region (`role=\"alert\"`) — used both for `status=\"error\"` and for a failed text fetch. |\n| `filename` | The filename text. |\n| `frame-content` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable` (image format only). |\n| `frame-controls` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable` (image format only). |\n| `frame-reset` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable` (image format only). |\n| `frame-viewport` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable` (image format only). |\n| `frame-zoom-in` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable` (image format only). |\n| `frame-zoom-out` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable` (image format only). |\n| `header` | The row above the body, holding `filename`. Hidden entirely when `filename` is unset. |\n| `highlight-actions` | Non-overlapping actions used when multiple region highlights would otherwise create overlapping minimum hit areas (image format only). |\n| `highlight-layer` | The wrapper around every rendered region highlight (image format only). |\n| `region-highlight` | One region highlight (`data-tone`, `data-active`) (image format only). |\n| `region-highlight-action` | One action in the non-overlapping highlight action list. |\n| `region-highlight-target` | Transparent activation geometry around a region highlight, with a minimum pointer/focus area independent of the visual rectangle (image format only). |\n| `spinner` | The converting/loading indicator — indeterminate (`role=\"status\"`) or, once numeric progress is known, a determinate `role=\"progressbar\"`. Used both for `status=\"converting\"` and for this component's own in-flight text fetch. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-document-preview-max-height` (default: `none`) — Maximum body block size before the preview scrolls internally.\n- `--lr-document-preview-font` (default: `var(--lr-font-mono)`) — Font used for plain-text previews.\n- `--lr-document-preview-spin-duration` (default: `var(--lr-transition-ambient)`) — Timing of one indeterminate loading-indicator rotation.\n- `--lr-document-preview-progress` (default: `0`) — 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.\n- `--lr-document-preview-active-border` (default: `var(--lr-color-warning, var(--lr-color-brand))`) — Border color of the `[part=\"region-highlight\"]` matching `activeHighlightId` (image format only). Distinct from the resting highlight border.\n- `--lr-document-preview-highlight-accent-color` (default: `var(--lr-color-brand)`) — Accent highlight border and hover tint.\n- `--lr-document-preview-highlight-success-color` (default: `var(--lr-color-success)`) — Success highlight border and hover tint.\n- `--lr-document-preview-highlight-warning-color` (default: `var(--lr-color-warning)`) — Warning highlight border and hover tint.\n- `--lr-document-preview-highlight-danger-color` (default: `var(--lr-color-danger)`) — Danger highlight border and hover tint.\n- `--lr-document-preview-highlight-neutral-color` (default: `var(--lr-color-neutral)`) — Neutral highlight border and hover tint."
4977
5063
  },
4978
5064
  "attributes": [
4979
5065
  {
@@ -5110,7 +5196,7 @@
5110
5196
  "name": "lr-docx-viewer",
5111
5197
  "description": {
5112
5198
  "kind": "markdown",
5113
- "value": "Renders a DOCX document as sanitized semantic HTML using the optional\n`mammoth` converter and `dompurify` sanitizer peers. DOCX content is always\nsanitized; there is no unsanitized rendering mode for uploaded documents.\n\nEvery rendered heading's slug (computed via the shared GitHub-slugger-style `Slugger` -- the same\nalgorithm and shared class `<lr-markdown>` uses, so identical heading text slugs identically\nacross both viewers) is stamped as its `id` and cached into `getHeadingTree()`'s document-ordered\noutline -- unconditional, unlike `<lr-markdown>`'s opt-in `heading-anchors`, since this\ncomponent's rendered HTML is always internal (mammoth's own conversion output), never a raw string\na consumer might serialize verbatim. Adopts `DocumentAnchorTarget`: `fragment` anchors resolve\nagainst that outline, `text-quote` anchors via `internal/text-quote.ts`'s shared scope/resolve\nhelpers; `highlights` re-resolve by quote after every render (never by node identity), so a\nhighlight painted before its quote is in the rendered markup yet simply paints once a later load\ncontains it. Highlight painting uses `internal/text-highlights.ts`'s `acquireHighlightHandle()` --\nthe CSS Custom Highlight API where the browser supports it (no DOM mutation at all), a `<mark>`-wrap\nfallback otherwise. `search()`/`searchNext()`/`searchPrevious()`/`clearSearch()` do a\ncase-insensitive substring search over the rendered content's text and paint every match as a\n`<mark part=\"search-match\">` (the active one also carrying `search-match-active`) -- a separate,\nalways-real-DOM-element mechanism from the tone-based highlight painting above, since search needs\nmany simultaneously-visible matches rather than one set of themed spans.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root container. |\n| `body` | The scrollable document body. |\n| `content` | The semantic document content. |\n| `error` | The error message region. |\n| `highlight` | A painted `text-quote` highlight (`<mark>`, `<mark>`-wrap fallback path only). |\n| `search-match` | A painted in-document search match. |\n| `search-match-active` | The currently active search match (also carries `search-match`). |\n| `spinner` | The loading status region. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-docx-viewer-max-height` (default: `none`) — Maximum block size of the scrollable document body before it scrolls internally. Also settable via the `max-height` property."
5199
+ "value": "Renders a DOCX document as sanitized semantic HTML using the optional\n`mammoth` converter and `dompurify` sanitizer peers. DOCX content is always\nsanitized; there is no unsanitized rendering mode for uploaded documents.\n\nEvery rendered heading's slug (computed via the shared GitHub-slugger-style `Slugger` -- the same\nalgorithm and shared class `<lr-markdown>` uses, so identical heading text slugs identically\nacross both viewers) is stamped as its `id` and cached into `getHeadingTree()`'s document-ordered\noutline -- unconditional, unlike `<lr-markdown>`'s opt-in `heading-anchors`, since this\ncomponent's rendered HTML is always internal (mammoth's own conversion output), never a raw string\na consumer might serialize verbatim. Adopts `DocumentAnchorTarget`: `fragment` anchors resolve\nagainst that outline, `text-quote` anchors via `internal/text-quote.ts`'s shared scope/resolve\nhelpers; `highlights` re-resolve by quote after every render (never by node identity), so a\nhighlight painted before its quote is in the rendered markup yet simply paints once a later load\ncontains it. Highlight painting uses `internal/text-highlights.ts`'s `acquireHighlightHandle()` --\nthe CSS Custom Highlight API where the browser supports it (no DOM mutation at all), a `<mark>`-wrap\nfallback otherwise. `search()`/`searchNext()`/`searchPrevious()`/`clearSearch()` do a\ncase-insensitive substring search over the rendered content's text and paint every match as a\n`<mark part=\"search-match\">` (the active one also carrying `search-match-active`) -- a separate,\nalways-real-DOM-element mechanism from the tone-based highlight painting above, since search needs\nmany simultaneously-visible matches rather than one set of themed spans.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root container. |\n| `body` | The scrollable document body. |\n| `content` | The semantic document content. |\n| `error` | The error message region. |\n| `highlight` | A painted `text-quote` highlight (`<mark>`, `<mark>`-wrap fallback path only). |\n| `search-match` | A painted in-document search match. |\n| `search-match-active` | The currently active search match (also carries `search-match`). |\n| `spinner` | The loading status region. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-docx-viewer-max-height` (default: `none`) — Maximum block size of the scrollable document body before it scrolls internally. Also settable via the `max-height` property.\n- `--lr-docx-viewer-highlight-accent-background` — Accent highlight background.\n- `--lr-docx-viewer-highlight-success-background` — Success highlight background.\n- `--lr-docx-viewer-highlight-warning-background` — Warning highlight background.\n- `--lr-docx-viewer-highlight-danger-background` — Danger highlight background.\n- `--lr-docx-viewer-highlight-neutral-background` — Neutral highlight background.\n- `--lr-docx-viewer-highlight-active-background` — Active highlight background.\n- `--lr-docx-viewer-highlight-active-outline` — Active fallback-highlight outline.\n- `--lr-docx-viewer-search-match-background` — Search-match background.\n- `--lr-docx-viewer-search-match-active-background` — Active search-match background.\n- `--lr-docx-viewer-search-match-active-foreground` — Active search-match foreground."
5114
5200
  },
5115
5201
  "attributes": [
5116
5202
  {
@@ -5182,7 +5268,7 @@
5182
5268
  "name": "data-labels",
5183
5269
  "description": {
5184
5270
  "kind": "markdown",
5185
- "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
5271
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
5186
5272
  }
5187
5273
  },
5188
5274
  {
@@ -5412,7 +5498,7 @@
5412
5498
  "name": "open",
5413
5499
  "description": {
5414
5500
  "kind": "markdown",
5415
- "value": "Type: `boolean` \nDefault: `false`"
5501
+ "value": "Type: `boolean`"
5416
5502
  }
5417
5503
  },
5418
5504
  {
@@ -5574,7 +5660,7 @@
5574
5660
  "name": "lr-embedding-explorer",
5575
5661
  "description": {
5576
5662
  "kind": "markdown",
5577
- "value": "`<lr-embedding-explorer>` — a dependency-free, accessible 2D embedding projection viewer. It\nnormalizes host-provided coordinates into an SVG plot, colors optional clusters, and exposes\nclick/keyboard selection. It does not run PCA/UMAP/t-SNE, fetch chunks, or mutate points.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `empty` | The empty state. |\n| `plot` | The SVG projection plot. |\n| `point` | One focusable embedding point. |"
5663
+ "value": "`<lr-embedding-explorer>` — a dependency-free, accessible 2D embedding projection viewer. It\nnormalizes host-provided coordinates into an SVG plot, colors optional clusters, and exposes\nclick/keyboard selection. It does not run PCA/UMAP/t-SNE, fetch chunks, or mutate points.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `empty` | The empty state. |\n| `plot` | The SVG projection plot. |\n| `point` | One focusable embedding point. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-embedding-explorer-selected-stroke` (default: `var(--lr-color-brand)`) — Stroke color of the selected point."
5578
5664
  },
5579
5665
  "attributes": [
5580
5666
  {
@@ -5611,7 +5697,7 @@
5611
5697
  "name": "lr-emoji-picker",
5612
5698
  "description": {
5613
5699
  "kind": "markdown",
5614
- "value": "`<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.\n\nShips the same opt-in `label`/`hint`/`errorText` form-control chrome as `<lr-select>`/\n`<lr-color-picker>` (props + matching named slots + `form-control`/`form-control-label`/`hint`/\n`error` parts) — left unset, the chrome stays hidden. When `label` (or the `label` slot) is set\nand `aria-label`/`accessibleLabel` is not, the grid's accessible name switches from the\nlocalized default to `aria-labelledby` pointing at the visible label, mirroring\n`<lr-checkbox-group>`'s identical `accessibleLabel`-wins-over-`aria-labelledby` precedence.\n\n`disabled` (from the `FormAssociated` mixin) gates every self-rendered interactive\nsub-control — the search input and every emoji button — not just one of them.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The wrapper around the search input and grid. |\n| `emoji` | Each emoji's own `<button>`; its box and glyph both scale with the `size` property (`--lr-emoji-picker-item-size`/`-glyph-size`), with the hit area floored at a flat 24px (WCAG 2.5.8) rather than the shared `--lr-icon-button-size`. |\n| `empty` | The empty-state message, shown when the search matches nothing. |\n| `error` | The error message. |\n| `form-control` | The outer wrapper around label, base, error and hint. |\n| `form-control-label` | The visible label. |\n| `grid` | The keyboard-navigable emoji grid. |\n| `group-label` | Each group's heading, rendered above its emojis. |\n| `hint` | The hint message. |\n| `search` | The search/filter `<input>` (`role=\"combobox\"` over the grid). |\n| `virtual-items` | The flex row holding one windowed row's emoji buttons. |\n| `virtual-label` | 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. |\n| `virtual-row` | One windowed row, absolutely positioned at the `--lr-emoji-picker-row-height` pitch. Rendered on the windowed path only. |\n| `virtual-spacer` | 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. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-emoji-picker-item-size` (default: `var(--lr-icon-button-size)`) — Each emoji button's box. Clamped up to `--lr-icon-button-size`: a smaller value does not shrink the button.\n- `--lr-emoji-picker-glyph-size` (default: `var(--lr-font-size-lg)`) — Font size of the emoji glyph, scaled by the `size` property to keep the glyph proportional to the item box.\n- `--lr-emoji-picker-gap` (default: `var(--lr-space-2xs)`) — Gap between emoji within a windowed row.\n- `--lr-emoji-picker-row-height` (default: `calc(var(--lr-emoji-picker-item-size) + var(--lr-space-l))`) — One windowed row's height. Must stay at or above the item size plus the group-label band, or consecutive absolutely-positioned rows overlap.\n- `--lr-emoji-picker-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the keyboard-active (`data-active`) **and** hovered emoji button — the two share a single rule, so this one hook retints both consistently. Declared as an inline `var()` fallback (never on `:host`), so setting it on the element or an ancestor recolors only the emoji highlight without hijacking the library-wide `--lr-color-brand-quiet` token."
5700
+ "value": "`<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.\n\nShips the same opt-in `label`/`hint`/`errorText` form-control chrome as `<lr-select>`/\n`<lr-color-picker>` (props + matching named slots + `form-control`/`form-control-label`/`hint`/\n`error` parts) — left unset, the chrome stays hidden. When `label` (or the `label` slot) is set\nand `aria-label`/`accessibleLabel` is not, the grid's accessible name switches from the\nlocalized default to `aria-labelledby` pointing at the visible label, mirroring\n`<lr-checkbox-group>`'s identical `accessibleLabel`-wins-over-`aria-labelledby` precedence.\n\n`disabled` (from the `FormAssociated` mixin) gates every self-rendered interactive\nsub-control — the search input and every emoji button — not just one of them.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The wrapper around the search input and grid. |\n| `emoji` | Each emoji's own `<button>`; its box and glyph both scale with the `size` property (`--lr-emoji-picker-item-size`/`-glyph-size`), with the hit area floored at a flat 24px (WCAG 2.5.8) rather than the shared `--lr-icon-button-size`. |\n| `empty` | The empty-state message, shown when the search matches nothing. |\n| `error` | The error message. |\n| `form-control` | The outer wrapper around label, base, error and hint. |\n| `form-control-label` | The visible label. |\n| `grid` | The keyboard-navigable emoji grid. |\n| `group-label` | Each group's heading, rendered above its emojis. |\n| `hint` | The hint message. |\n| `search` | The search/filter `<input>` (`role=\"combobox\"` over the grid). |\n| `virtual-items` | The flex row holding one windowed row's emoji buttons. |\n| `virtual-label` | 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. |\n| `virtual-row` | One windowed row, absolutely positioned at the `--lr-emoji-picker-row-height` pitch. Rendered on the windowed path only. |\n| `virtual-spacer` | 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. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-emoji-picker-item-size` (default: `var(--lr-icon-button-size)`) — Each emoji button's box. Floored at 24px; the small size tiers can stay denser than the shared 40px icon-button size.\n- `--lr-emoji-picker-glyph-size` (default: `var(--lr-font-size-lg)`) — Font size of the emoji glyph, scaled by the `size` property to keep the glyph proportional to the item box.\n- `--lr-emoji-picker-gap` (default: `var(--lr-space-2xs)`) — Gap between emoji within a windowed row.\n- `--lr-emoji-picker-control-gap` (default: `var(--lr-space-xs)`) — Gap between field sections.\n- `--lr-emoji-picker-radius` (default: `var(--lr-radius)`) — Outer picker corner radius.\n- `--lr-emoji-picker-item-radius` (default: `var(--lr-radius-xs)`) — Search and emoji corner radius.\n- `--lr-emoji-picker-search-hover-border-color` (default: `var(--lr-color-brand)`) — Search hover border.\n- `--lr-emoji-picker-row-height` (default: `calc(var(--lr-emoji-picker-item-size) + var(--lr-space-l))`) — One windowed row's height. Must stay at or above the item size plus the group-label band, or consecutive absolutely-positioned rows overlap.\n- `--lr-emoji-picker-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the keyboard-active (`data-active`) **and** hovered emoji button — the two share a single rule, so this one hook retints both consistently. Declared as an inline `var()` fallback (never on `:host`), so setting it on the element or an ancestor recolors only the emoji highlight without hijacking the library-wide `--lr-color-brand-quiet` token."
5615
5701
  },
5616
5702
  "attributes": [
5617
5703
  {
@@ -5683,7 +5769,7 @@
5683
5769
  "name": "lr-empty",
5684
5770
  "description": {
5685
5771
  "kind": "markdown",
5686
- "value": "`<lr-empty>` — a generic empty/no-data state. First-party invention (no\nWeb Awesome equivalent); fills a gap common to dashboard-style apps.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Custom icon or illustration (defaults to none). |\n| `actions` | Buttons/links shown below the description. |\n| `description` | Rich description content (overrides the `description` attribute). |\n| `heading` | Rich heading content (overrides the `heading` attribute). |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | The wrapper around the `actions`-slotted content. |\n| `base` | The outer container. |\n| `description` | The description paragraph. |\n| `heading` | The heading paragraph. |\n| `icon` | The wrapper around the default-slotted icon/illustration. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-empty-compact-align` — Cross-axis and text alignment used in compact mode; set to `center` for dense but centered empty states.\n- `--lr-empty-compact-padding` (default: `var(--lr-space-xs)`) — Padding used in compact mode; accepts any padding shorthand (e.g. `8px 2px`).\n- `--lr-empty-compact-gap` (default: `var(--lr-space-2xs)`) — Gap between the icon, title, and description in compact mode.\n- `--lr-empty-compact-font-size` — Heading font size used in compact mode. Unset by default (no fallback), so the heading keeps its ordinary inherited font size until a consumer opts in."
5772
+ "value": "`<lr-empty>` — a generic empty/no-data state. First-party invention (no\nWeb Awesome equivalent); fills a gap common to dashboard-style apps.\nInitial content is not announced as a new live update; later heading,\ndescription, or slotted-content changes activate polite announcements.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Custom icon or illustration (defaults to none). |\n| `actions` | Buttons/links shown below the description. |\n| `description` | Rich description content (overrides the `description` attribute). |\n| `heading` | Rich heading content (overrides the `heading` attribute). |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | The wrapper around the `actions`-slotted content. |\n| `base` | The outer container. |\n| `description` | The description paragraph. |\n| `heading` | The heading paragraph. |\n| `icon` | The wrapper around the default-slotted icon/illustration. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-empty-compact-align` — Cross-axis and text alignment used in compact mode; set to `center` for dense but centered empty states.\n- `--lr-empty-compact-padding` (default: `var(--lr-space-xs)`) — Padding used in compact mode; accepts any padding shorthand (e.g. `8px 2px`).\n- `--lr-empty-compact-gap` (default: `var(--lr-space-2xs)`) — Gap between the icon, title, and description in compact mode.\n- `--lr-empty-compact-font-size` — Heading font size used in compact mode. Unset by default (no fallback), so the heading keeps its ordinary inherited font size until a consumer opts in."
5687
5773
  },
5688
5774
  "attributes": [
5689
5775
  {
@@ -6267,7 +6353,7 @@
6267
6353
  "name": "label",
6268
6354
  "description": {
6269
6355
  "kind": "markdown",
6270
- "value": "Accessible name for the root `role=\"group\"` wrapper. A plain `aria-label` attribute on the\nhost itself is honored as a fallback when this is left unset, matching `<lr-control-group>`.\n\nType: `string` \nDefault: `''`"
6356
+ "value": "Accessible name for the root `role=\"group\"` wrapper. A plain `aria-label` attribute on the\nhost itself is honored as a fallback when this is left unset, matching `<lr-control-group>`.\n\nType: `string` \nDefault: `\"\"`"
6271
6357
  }
6272
6358
  },
6273
6359
  {
@@ -6290,7 +6376,7 @@
6290
6376
  "name": "lr-flag",
6291
6377
  "description": {
6292
6378
  "kind": "markdown",
6293
- "value": "`<lr-flag>` — a country/language flag.\n\nFlag images are shipped by the optional peer package `@aceshooting/lyra-flags`,\nnot bundled into lyra-ui itself, so importing the core library pulls zero flag\nweight. Give it a `country` (ISO 3166-1 alpha-2) or a `language` tag (mapped to\na representative country). While that peer package's `flagUrl()` resolves (or\nif it isn't installed), the host carries `aria-busy=\"true\"` and a skeleton\nplaceholder renders in its place.\n\n**Bundle-size note:** `country`/`language` resolve through the peer package's\n`flagUrl(code)`, which lazily fetches one requested flag at runtime. A\nbundler may still emit the complete reachable lazy-chunk graph; use a\nliteral asset subpath import when the deployment artifact must be pruned.\nIf you already\nhave a flag's URL at build time (e.g. from your own literal\n`import frUrl from '@aceshooting/lyra-flags/flags/fr.svg?url'`), pass it as\n`src` instead to skip the peer-package round trip (and its loading-skeleton\nflash) entirely.\n\nThe ~65 flags whose design includes a detailed coat of arms/seal/emblem (e.g. `es`, `pt`) ship\nthree fidelity tiers; choose one with `variant`: `\"compact\"` (a tiny WebP raster for icon-scale\nuse — menu items, language selectors, dense lists), the default `\"standard\"` (icon-optimized\nvector for card/row sizes), or `\"detailed\"` (the pristine full-detail vector for hero-scale\ndisplay). A no-op for every other code — all tiers resolve to the same file. See `variant`'s own\ndoc.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `image` | The underlying <img>. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-flag-aspect-ratio` (default: `4 / 3`) — Rectangular flag aspect ratio.\n- `--lr-flag-object-fit` (default: `cover`) — How the image fits its flag frame.\n- `--lr-flag-radius` — Rectangular flag corner radius."
6379
+ "value": "`<lr-flag>` — a country/language flag.\n\nFlag images are shipped by the optional peer package `@aceshooting/lyra-flags`,\nnot bundled into lyra-ui itself, so importing the core library pulls zero flag\nweight. Give it a `country` (ISO 3166-1 alpha-2) or a `language` tag (mapped to\na representative country). While that peer package's `flagUrl()` resolves,\nthe host carries `aria-busy=\"true\"` and a skeleton placeholder renders in its\nplace. A missing or failed peer resolver fails closed with a localized alert;\nan installed resolver returning no URL for an unknown code remains a valid\nempty result.\n\n**Bundle-size note:** `country`/`language` resolve through the peer package's\n`flagUrl(code)`, which lazily fetches one requested flag at runtime. A\nbundler may still emit the complete reachable lazy-chunk graph; use a\nliteral asset subpath import when the deployment artifact must be pruned.\nIf you already\nhave a flag's URL at build time (e.g. from your own literal\n`import frUrl from '@aceshooting/lyra-flags/flags/fr.svg?url'`), pass it as\n`src` instead to skip the peer-package round trip (and its loading-skeleton\nflash) entirely.\n\nThe ~65 flags whose design includes a detailed coat of arms/seal/emblem (e.g. `es`, `pt`) ship\nthree fidelity tiers; choose one with `variant`: `\"compact\"` (a tiny WebP raster for icon-scale\nuse — menu items, language selectors, dense lists), the default `\"standard\"` (icon-optimized\nvector for card/row sizes), or `\"detailed\"` (the pristine full-detail vector for hero-scale\ndisplay). A no-op for every other code — all tiers resolve to the same file. See `variant`'s own\ndoc.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `error` | Localized alert rendered when the optional peer resolver is unavailable or fails. |\n| `image` | The underlying <img>. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-flag-aspect-ratio` (default: `4 / 3`) — Rectangular flag aspect ratio.\n- `--lr-flag-object-fit` (default: `cover`) — How the image fits its flag frame.\n- `--lr-flag-radius` — Rectangular flag corner radius."
6294
6380
  },
6295
6381
  "attributes": [
6296
6382
  {
@@ -6362,7 +6448,7 @@
6362
6448
  "name": "lr-flow-canvas",
6363
6449
  "description": {
6364
6450
  "kind": "markdown",
6365
- "value": "`<lr-flow-canvas>` — a pannable/zoomable DAG workflow canvas: positions HTML node cards, draws\nSVG edges between their handles, runs a shared layered auto-layout for unpositioned nodes, and owns\nall selection/drag/connect interaction as controlled events. Readonly (viewer) by default; opt into\neditor gestures individually via `nodes-draggable`, `connectable`, `droppable`. Never mutates `nodes`\nor `edges` itself every edit intent is an event the host applies, mirroring `lr-stepper`/\n`lr-table`'s controlled-component contract.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | `lr-flow-node` children to adopt by `node-id`; non-matching children are ignored with a console warning. |\n| `bottom-end` | Floating corner overlay (e.g. `lr-flow-minimap`). |\n| `bottom-start` | Floating corner overlay (e.g. `lr-flow-controls`). |\n| `top-end` | Floating corner overlay. |\n| `top-start` | Floating corner overlay (e.g. `lr-flow-run-overlay`). |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `arrowhead` | The shared directed-edge arrowhead marker. |\n| `background` | The dotted background grid. |\n| `base` | The root wrapper. |\n| `connection-line` | The in-progress connect-gesture path. |\n| `edge` | A single edge path. |\n| `edge-label` | An edge's drawn label. |\n| `edge-list` | A visually hidden list of every edge. |\n| `edges` | The edges SVG. |\n| `empty` | The `lr-empty` shown when `nodes` is empty. |\n| `live-region` | The current item/gesture announcement. |\n| `node` | A node's positioned wrapper. |\n| `stub` | A dangling-edge stub line. |\n| `viewport` | The focusable pan/zoom surface. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-flow-canvas-grid-size` (default: `var(--lr-size-0-5rem)`) — 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.\n- `--lr-flow-canvas-march-duration` (default: `var(--lr-transition-ambient)`) — Running-edge march animation duration.\n- `--lr-flow-canvas-node-current-outline-color` (default: `var(--lr-color-brand)`) — Outline color of the current (`aria-current`) node. Shadow Parts forbids an attribute selector after `::part()`, so the current node could otherwise only be restyled by hijacking the library-wide `--lr-color-brand` token.\n- `--lr-flow-canvas-node-connect-invalid-outline-color` (default: `var(--lr-color-danger)`) — Outline color of a node that is an invalid connect-gesture drop target. Same `::part()` attribute-selector restriction as `--lr-flow-canvas-node-current-outline-color` above.\n- `--lr-flow-canvas-node-connect-target-outline-color` (default: `var(--lr-color-brand)`) — Outline color of a node that is a valid connect-gesture drop target.\n- `--lr-flow-canvas-drop-active-outline-color` (default: `var(--lr-color-brand)`) — Outline color of the viewport while a palette item is dragged over it (`droppable`).\n- `--lr-flow-canvas-node-hover-outline-color` (default: `var(--lr-color-border-strong)`) — Outline color of a node's mouse-hover preview of its own `:focus-visible` ring. Unlike the four state-scoped colors above this one is `:hover`-gated rather than attribute-gated, so a `::part(node):hover` override would lose to this rule's own higher internal specificity rather than to the `::part()[attr]` restriction those four work around. Set to `transparent` to opt out."
6451
+ "value": "`<lr-flow-canvas>` — a pannable/zoomable DAG workflow canvas: positions HTML node cards, draws\nSVG edges between their handles, runs a shared layered auto-layout for unpositioned nodes, and owns\nall selection/drag/connect interaction. Readonly (viewer) by default; opt into editor gestures\nindividually via `nodes-draggable`, `connectable`, `droppable`. `nodes` and `edges` remain\ncontrolled and are never mutated internally. Selection is an internally applied interaction\nstate: `selectedNodeIds`/`selectedEdgeIds` can seed or replace it, and node/edge activation\nupdates those arrays before emitting `lr-selection-change`.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | `lr-flow-node` children to adopt by `node-id`; non-matching children are ignored with a console warning. |\n| `bottom-end` | Floating corner overlay (e.g. `lr-flow-minimap`). |\n| `bottom-start` | Floating corner overlay (e.g. `lr-flow-controls`). |\n| `top-end` | Floating corner overlay. |\n| `top-start` | Floating corner overlay (e.g. `lr-flow-run-overlay`). |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `arrowhead` | The shared directed-edge arrowhead marker. |\n| `background` | The dotted background grid. |\n| `base` | The root wrapper. |\n| `connection-line` | The in-progress connect-gesture path. |\n| `edge` | A single edge path. |\n| `edge-hit-area` | The transparent wide pointer target behind an edge. |\n| `edge-label` | An edge's drawn label. |\n| `edge-list` | A visually hidden list of every edge. |\n| `edges` | The edges SVG. |\n| `empty` | The `lr-empty` shown when `nodes` is empty. |\n| `live-region` | The current item/gesture announcement. |\n| `node` | A node's positioned wrapper. |\n| `node-control` | The visually hidden, roving selection button for a node. |\n| `stub` | A dangling-edge stub line. |\n| `viewport` | The focusable pan/zoom surface. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-flow-canvas-grid-size` (default: `var(--lr-size-0-5rem)`) — 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.\n- `--lr-flow-canvas-march-duration` (default: `var(--lr-transition-ambient)`) — Running-edge march animation duration.\n- `--lr-flow-canvas-node-selected-outline-color` (default: `var(--lr-flow-canvas-node-current-outline-color,var(--lr-color-brand))`) — Outline color of a selected node.\n- `--lr-flow-canvas-node-current-outline-color` (default: `var(--lr-color-brand)`) Deprecated fallback token for the selected-node outline; retained for compatibility.\n- `--lr-flow-canvas-node-connect-invalid-outline-color` (default: `var(--lr-color-danger)`) — Outline color of a node that is an invalid connect-gesture drop target. Same `::part()` attribute-selector restriction as `--lr-flow-canvas-node-current-outline-color` above.\n- `--lr-flow-canvas-node-connect-target-outline-color` (default: `var(--lr-color-brand)`) — Outline color of a node that is a valid connect-gesture drop target.\n- `--lr-flow-canvas-drop-active-outline-color` (default: `var(--lr-color-brand)`) — Outline color of the viewport while a palette item is dragged over it (`droppable`).\n- `--lr-flow-canvas-node-hover-outline-color` (default: `var(--lr-color-border-strong)`) — Outline color of a node's mouse-hover preview of its own `:focus-visible` ring. Unlike the four state-scoped colors above this one is `:hover`-gated rather than attribute-gated, so a `::part(node):hover` override would lose to this rule's own higher internal specificity rather than to the `::part()[attr]` restriction those four work around. Set to `transparent` to opt out."
6366
6452
  },
6367
6453
  "attributes": [
6368
6454
  {
@@ -6515,7 +6601,7 @@
6515
6601
  "name": "lr-flow-minimap",
6516
6602
  "description": {
6517
6603
  "kind": "markdown",
6518
- "value": "`<lr-flow-minimap>` — a corner overview map of a `lr-flow-canvas`: scaled node rectangles plus\na draggable viewport rectangle, for orientation and fast navigation on canvases larger than the\nscreen. Draws no edges (nodes only, matching the React Flow/n8n minimap convention) and never\nreads `nodes` itself — geometry always comes from the canvas's `registerCompanion()` snapshots, so\nthe two can never disagree.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `map` | The scaled SVG. |\n| `node` | One rect per node. |\n| `viewport` | The draggable, focusable view rectangle. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-flow-minimap-inline-size` (default: `var(--lr-size-12rem)`) — Map inline size.\n- `--lr-flow-minimap-block-size` (default: `var(--lr-size-8rem)`) — Map block size."
6604
+ "value": "`<lr-flow-minimap>` — a corner overview map of a `lr-flow-canvas`: scaled node rectangles plus\na draggable viewport rectangle, for orientation and fast navigation on canvases larger than the\nscreen. Draws no edges (nodes only, matching the React Flow/n8n minimap convention) and never\nreads `nodes` itself — geometry always comes from the canvas's `registerCompanion()` snapshots, so\nthe two can never disagree.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `instructions` | Visually hidden keyboard instructions for the viewport. |\n| `live-region` | Visually hidden viewport-change announcements. |\n| `map` | The scaled SVG. |\n| `node` | One rect per node. |\n| `viewport` | The draggable, focusable view rectangle. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-flow-minimap-inline-size` (default: `var(--lr-size-12rem)`) — Map inline size.\n- `--lr-flow-minimap-block-size` (default: `var(--lr-size-8rem)`) — Map block size."
6519
6605
  },
6520
6606
  "attributes": [
6521
6607
  {
@@ -7119,7 +7205,7 @@
7119
7205
  "name": "lr-graph-query-builder",
7120
7206
  "description": {
7121
7207
  "kind": "markdown",
7122
- "value": "`<lr-graph-query-builder>` — an editor for a single typed relationship/path filter\n(`GraphQuery`) over a knowledge graph: start/end entity anchors, relationship-type and\nnode-type pickers with a removable active-filter chip display, a traversal direction, a\nmin/max hop range, validation, and a host-persisted saved-query list -- a serializable query\nmodel for GraphRAG workflows (feed the `value`/`lr-query-run` payload straight to a retrieval\nor traversal backend).\n\nComposes `<lr-select>` for every closed-choice picker (relationship type, node type,\ndirection, hop counts) and `<lr-input>` for the free-text entity ids -- the relationship/\nnode-type pickers are \"add\" selects: choosing an option appends it to the corresponding\narray and the picker itself resets to its placeholder, so the *current* selection is shown\nseparately as a row of removable `<lr-chip>`s inside an `<lr-chip-group>` (click a chip's\nremove button to drop that one type). A type value present in `value` but missing from\n`relationshipTypeOptions`/`nodeTypeOptions` (e.g. a saved query referencing a type that was\nsince renamed/removed from the picker's own option list) still renders as a chip, labeled with\nits raw value, rather than being silently dropped.\n\n**Query model placement:** `GraphQuery` is kept local to this component rather than promoted\nto the shared `src/ai/types.ts` surface. Unlike that module's types (`ChatMessage`,\n`Citation`, `RetrievalQuery`, etc.), which each mirror a shape multiple existing primitives\nalready consume, `GraphQuery` is specific to this component's own editable-filter-set shape\n(its `minHops`/`maxHops` selects, its \"add picker + chip list\" editing idiom) -- no other\ncomponent reads or produces this exact shape today. This mirrors `<lr-rubric-form>`'s\n`RubricValue`/`RubricKey` and `<lr-tool-param-form>`'s `ToolParamFormSchema`, both also kept\nlocal to their own component for the identical reason.\n\n**Form association:** every other \"structured, non-string value\" editor in this package that\nlooks like this one -- `<lr-rubric-form>`, `<lr-tool-param-form>`, `<lr-time-range>` -- attaches\n`ElementInternals` directly (the `FormAssociated` mixin only fits a plain string value) and\ntreats native `<form>` participation as a nice-to-have layered on top of its primary\n`value`/`lr-input`/`lr-validity-change` integration contract, not a requirement. This component\nfollows that same established convention: `value` round-trips through `JSON.stringify()` as the\nsubmitted form value, and a consumer that never places this inside a `<form>` loses nothing.\n\n**Accessible name:** the region (`role=\"group\"`) is named by, in order, a host-level\n`aria-label` attribute, the `label` property, or the localized `graphQueryBuilderLabel` default\n-- mirroring `<lr-query-builder>`'s identical `role=\"group\"` region, whose own `aria-label`\nattribute similarly wins over its internal default.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `actions` | Extra host controls rendered in the footer beside the Run button. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The outer wrapper around every section. |\n| `direction` | The traversal-direction `<lr-select>`. |\n| `end-input` | The end-entity `<lr-input>`. |\n| `filter-group` | One type-filter section (relationship or node type); rendered twice. |\n| `footer` | The row containing the actions slot and the Run button. |\n| `max-hops` | The maximum-hops `<lr-select>`. |\n| `min-hops` | The minimum-hops `<lr-select>`. |\n| `node-type-chips` | The `<lr-chip-group>` listing currently active node types. |\n| `node-type-picker` | The \"add a node type\" `<lr-select>`. |\n| `path-fields` | The row wrapping the start/end entity inputs and hop-count selects. |\n| `relationship-chips` | The `<lr-chip-group>` listing currently active relationship types. |\n| `relationship-picker` | The \"add a relationship type\" `<lr-select>`. |\n| `run-button` | The Run button. |\n| `save-button` | The Save button. |\n| `save-name-input` | The new-saved-query name `<lr-input>`. |\n| `save-row` | The row containing the save-name input and Save button. |\n| `saved-delete-button` | A saved query row's delete button. |\n| `saved-empty` | The message shown when `savedQueries` has no entries. |\n| `saved-item` | One saved query's row. |\n| `saved-list` | The list of saved queries. |\n| `saved-load-button` | A saved query row's Load button. |\n| `saved-queries` | The wrapper around the save row and the saved-query list. |\n| `saved-queries-label` | The saved-queries section heading. |\n| `start-input` | The start-entity `<lr-input>`. |"
7208
+ "value": "`<lr-graph-query-builder>` — an editor for a single typed relationship/path filter\n(`GraphQuery`) over a knowledge graph: start/end entity anchors, relationship-type and\nnode-type pickers with a removable active-filter chip display, a traversal direction, a\nmin/max hop range, validation, and a host-persisted saved-query list -- a serializable query\nmodel for GraphRAG workflows (feed the `value`/`lr-query-run` payload straight to a retrieval\nor traversal backend).\n\nComposes `<lr-select>` for every closed-choice picker (relationship type, node type,\ndirection, hop counts) and `<lr-input>` for the free-text entity ids -- the relationship/\nnode-type pickers are \"add\" selects: choosing an option appends it to the corresponding\narray and the picker itself resets to its placeholder, so the *current* selection is shown\nseparately as a row of removable `<lr-chip>`s inside an `<lr-chip-group>` (click a chip's\nremove button to drop that one type). A type value present in `value` but missing from\n`relationshipTypeOptions`/`nodeTypeOptions` (e.g. a saved query referencing a type that was\nsince renamed/removed from the picker's own option list) still renders as a chip, labeled with\nits raw value, rather than being silently dropped.\n\n**Query model placement:** `GraphQuery` is kept local to this component rather than promoted\nto the shared `src/ai/types.ts` surface. Unlike that module's types (`ChatMessage`,\n`Citation`, `RetrievalQuery`, etc.), which each mirror a shape multiple existing primitives\nalready consume, `GraphQuery` is specific to this component's own editable-filter-set shape\n(its `minHops`/`maxHops` selects, its \"add picker + chip list\" editing idiom) -- no other\ncomponent reads or produces this exact shape today. This mirrors `<lr-rubric-form>`'s\n`RubricValue`/`RubricKey` and `<lr-tool-param-form>`'s `ToolParamFormSchema`, both also kept\nlocal to their own component for the identical reason.\n\n**Form association:** every other \"structured, non-string value\" editor in this package that\nlooks like this one -- `<lr-rubric-form>`, `<lr-tool-param-form>`, `<lr-time-range>` -- attaches\n`ElementInternals` directly (the `FormAssociated` mixin only fits a plain string value) and\ntreats native `<form>` participation as a nice-to-have layered on top of its primary\n`value`/`lr-input`/`lr-validity-change` integration contract, not a requirement. This component\nfollows that same established convention: `value` round-trips through `JSON.stringify()` as the\nsubmitted form value, and a consumer that never places this inside a `<form>` loses nothing.\n\n**Accessible name:** the region (`role=\"group\"`) is named by, in order, a host-level\n`aria-label` attribute, the `label` property, or the localized `graphQueryBuilderLabel` default\n-- mirroring `<lr-query-builder>`'s identical `role=\"group\"` region, whose own `aria-label`\nattribute similarly wins over its internal default.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `actions` | Extra host controls rendered in the footer beside the Run button. |\n| `error` | Error text for the complete form control. |\n| `hint` | Supporting text for the complete form control. |\n| `label` | Visible label for the complete form control. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The outer wrapper around every section. |\n| `direction` | The traversal-direction `<lr-select>`. |\n| `end-input` | The end-entity `<lr-input>`. |\n| `error` | Error text for the complete form control. |\n| `filter-group` | One type-filter section (relationship or node type); rendered twice. |\n| `footer` | The row containing the actions slot and the Run button. |\n| `hint` | Supporting text for the complete form control. |\n| `label` | Visible label for the complete form control. |\n| `max-hops` | The maximum-hops `<lr-select>`. |\n| `min-hops` | The minimum-hops `<lr-select>`. |\n| `node-type-chips` | The `<lr-chip-group>` listing currently active node types. |\n| `node-type-picker` | The \"add a node type\" `<lr-select>`. |\n| `path-fields` | The row wrapping the start/end entity inputs and hop-count selects. |\n| `relationship-chips` | The `<lr-chip-group>` listing currently active relationship types. |\n| `relationship-picker` | The \"add a relationship type\" `<lr-select>`. |\n| `run-button` | The Run button. |\n| `save-button` | The Save button. |\n| `save-name-input` | The new-saved-query name `<lr-input>`. |\n| `save-row` | The row containing the save-name input and Save button. |\n| `saved-delete-button` | A saved query row's delete button. |\n| `saved-empty` | The message shown when `savedQueries` has no entries. |\n| `saved-item` | One saved query's row. |\n| `saved-list` | The list of saved queries. |\n| `saved-load-button` | A saved query row's Load button. |\n| `saved-queries` | The wrapper around the save row and the saved-query list. |\n| `saved-queries-label` | The saved-queries section heading. |\n| `start-input` | The start-entity `<lr-input>`. |"
7123
7209
  },
7124
7210
  "attributes": [
7125
7211
  {
@@ -7129,6 +7215,20 @@
7129
7215
  "value": "Type: `boolean`"
7130
7216
  }
7131
7217
  },
7218
+ {
7219
+ "name": "error-text",
7220
+ "description": {
7221
+ "kind": "markdown",
7222
+ "value": "Caller-supplied outer error text. Field-level validation remains on the affected controls.\n\nType: `string` \nDefault: `''`"
7223
+ }
7224
+ },
7225
+ {
7226
+ "name": "hint",
7227
+ "description": {
7228
+ "kind": "markdown",
7229
+ "value": "Supporting text rendered below the outer label.\n\nType: `string` \nDefault: `''`"
7230
+ }
7231
+ },
7132
7232
  {
7133
7233
  "name": "hop-limit",
7134
7234
  "description": {
@@ -7163,7 +7263,7 @@
7163
7263
  "name": "lr-grounding-summary",
7164
7264
  "description": {
7165
7265
  "kind": "markdown",
7166
- "value": "`<lr-grounding-summary>` -- the claim-level scorecard for one generated answer: supported/\nunsupported claim counts, citation coverage, an optional confidence score, any warnings, and\n(when `citations` is supplied) a list of evidence citations linking back to their exact spans.\nConsumes `GroundingAssessment` from `src/ai/types.ts` directly as its primary input. Pure\nprojection + event conduit: never fetches or computes an assessment itself.\n\nComposes `<lr-stat>` for every numeric display (claim counts, coverage, confidence) and\n`<lr-citation-badge>` for each evidence entry -- this component defines no numeric-badge or\ncitation-link markup of its own.\n\n`<lr-citation-badge>`'s own `lr-citation-activate` event (`detail: { sourceId, index }`) still\nbubbles through unmodified, same as every other Lyra component composing a child that emits its\nown events. This component additionally listens for it and re-emits the richer\n`lr-citation-select` (`detail: { citation }`, `CitationSelectEventDetail` from `src/ai/types.ts`)\ncarrying the full `Citation` -- including its `span` -- since a bare `sourceId`/`index` pair\ncan't by itself tell a host which exact evidence span to jump to.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The `role=\"group\"` root wrapper. |\n| `empty` | The empty-state message, shown when `assessment` is `null`. |\n| `evidence` | Wrapper for the evidence section. Omitted when `citations` is empty. |\n| `evidence-count` | The evidence count. |\n| `evidence-heading` | The \"Evidence\" heading text. |\n| `evidence-item` | One citation's row (badge + always-visible label/span text). |\n| `evidence-label` | A citation's `label`, shown next to its badge (omitted when unset). |\n| `evidence-span` | A citation's formatted `span` range, shown next to its badge (omitted when `span` is unset). |\n| `stats` | Container for the claim-count/coverage/confidence `<lr-stat>` row. |\n| `warning` | One warning `<li>`. |\n| `warnings` | Wrapper for the warnings section. Omitted when there are no warnings. |\n| `warnings-count` | The warnings count. |\n| `warnings-heading` | The \"Warnings\" heading text. |\n| `warnings-list` | The `<ul>` of warning messages. |"
7266
+ "value": "`<lr-grounding-summary>` -- the claim-level scorecard for one generated answer: supported/\nunsupported claim counts, citation coverage, an optional confidence score, any warnings, and\n(when `citations` is supplied) a list of evidence citations linking back to their exact spans.\nConsumes `GroundingAssessment` from `src/ai/types.ts` directly as its primary input. Pure\nprojection + event conduit: never fetches or computes an assessment itself.\n\nComposes `<lr-stat>` for every numeric display (claim counts, coverage, confidence) and\n`<lr-citation-badge>` for each evidence entry -- this component defines no numeric-badge or\ncitation-link markup of its own.\n\n`<lr-citation-badge>`'s own `lr-citation-activate` event (`detail: { sourceId, index }`) still\nbubbles through unmodified, same as every other Lyra component composing a child that emits its\nown events. This component additionally listens for it and re-emits the richer\n`lr-citation-select` (`detail: { citation }`, `CitationSelectEventDetail` from `src/ai/types.ts`)\ncarrying the full `Citation` -- including its `span` -- since a bare `sourceId`/`index` pair\ncan't by itself tell a host which exact evidence span to jump to.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The `role=\"group\"` root wrapper. |\n| `claims` | Claim-level evidence, when present and enabled. |\n| `empty` | The empty-state message, shown when `assessment` is `null`. |\n| `evidence` | Wrapper for the evidence section. Omitted when `citations` is empty. |\n| `evidence-count` | The evidence count. |\n| `evidence-heading` | The \"Evidence\" heading text. |\n| `evidence-item` | One citation's row (badge + always-visible label/span text). |\n| `evidence-label` | A citation's `label`, shown next to its badge (omitted when unset). |\n| `evidence-span` | A citation's formatted `span` range, shown next to its badge (omitted when `span` is unset). |\n| `stats` | Container for the claim-count/coverage/confidence `<lr-stat>` row. |\n| `warning` | One warning `<li>`. |\n| `warnings` | Wrapper for the warnings section. Omitted when there are no warnings. |\n| `warnings-count` | The warnings count. |\n| `warnings-heading` | The \"Warnings\" heading text. |\n| `warnings-list` | The `<ul>` of warning messages. |"
7167
7267
  },
7168
7268
  "attributes": [
7169
7269
  {
@@ -7179,6 +7279,13 @@
7179
7279
  "kind": "markdown",
7180
7280
  "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
7181
7281
  }
7282
+ },
7283
+ {
7284
+ "name": "show-claims",
7285
+ "description": {
7286
+ "kind": "markdown",
7287
+ "value": "Renders `assessment.claims` through `<lr-claim-evidence>` when available.\n\nType: `boolean` \nDefault: `true`"
7288
+ }
7182
7289
  }
7183
7290
  ]
7184
7291
  },
@@ -7309,7 +7416,7 @@
7309
7416
  "name": "lr-highlight-layer",
7310
7417
  "description": {
7311
7418
  "kind": "markdown",
7312
- "value": "`<lr-highlight-layer>` — a presentational overlay that paints highlight rectangles\n(percent-of-box coordinates) over positioned content and owns their activation, active/flash\nstyling, and keyboard access. `items` order is the caller's own reading order; the layer does not\nre-sort geometrically. Fills its nearest positioned ancestor.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The absolutely-positioned overlay (inset 0). |\n| `rect` | One highlight rectangle (`data-tone`/`data-active`/`data-flash` state attributes). |"
7419
+ "value": "`<lr-highlight-layer>` — a presentational overlay that paints highlight rectangles\n(percent-of-box coordinates) over positioned content and owns their activation, active/flash\nstyling, and keyboard access. `items` order is the caller's own reading order; the layer does not\nre-sort geometrically. Fills its nearest positioned ancestor.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The absolutely-positioned overlay (inset 0). |\n| `highlight-action` | One action in the non-overlapping highlight action list. |\n| `highlight-actions` | Non-overlapping actions used when more than one logical highlight would otherwise create ambiguous minimum hit areas. |\n| `rect` | One highlight rectangle (`data-tone`/`data-active`/`data-flash` state attributes). |\n| `rect-target` | Transparent activation geometry around a rectangle, with a minimum pointer/focus area independent of the caller-supplied visual coordinates. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-highlight-layer-accent-background` — Accent highlight background.\n- `--lr-highlight-layer-accent-outline` — Accent highlight outline.\n- `--lr-highlight-layer-success-background` — Success highlight background.\n- `--lr-highlight-layer-success-outline` — Success highlight outline.\n- `--lr-highlight-layer-warning-background` — Warning highlight background.\n- `--lr-highlight-layer-warning-outline` — Warning highlight outline.\n- `--lr-highlight-layer-danger-background` — Danger highlight background.\n- `--lr-highlight-layer-danger-outline` — Danger highlight outline.\n- `--lr-highlight-layer-neutral-background` — Neutral highlight background.\n- `--lr-highlight-layer-neutral-outline` — Neutral highlight outline.\n- `--lr-highlight-layer-flash-background` — Flash-state background."
7313
7420
  },
7314
7421
  "attributes": [
7315
7422
  {
@@ -7381,7 +7488,7 @@
7381
7488
  "name": "data-labels",
7382
7489
  "description": {
7383
7490
  "kind": "markdown",
7384
- "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
7491
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
7385
7492
  }
7386
7493
  },
7387
7494
  {
@@ -7562,9 +7669,30 @@
7562
7669
  "name": "lr-icon-button",
7563
7670
  "description": {
7564
7671
  "kind": "markdown",
7565
- "value": "`<lr-icon-button>` — an accessible icon-only action button.\n\nSet `icon` for one of `<lr-icon>`'s named glyphs, or slot your own content instead. Slotted\ncontent is a **sibling** of the built-in glyph rather than being piped through `<lr-icon>`, so\nany complete element — an `<svg>`, an `<img>`, an `<lr-flag>` — renders at its own natural\naspect ratio instead of being forced into a 1:1 box. Bare SVG geometry (`<path>`, `<circle>`,\nand a handful of other raw primitives) with no enclosing `<svg>` of its own is detected and\ncloned into a real, internal SVG-namespaced element so it still paints — the same fallback\n`<lr-icon>`'s own custom-content slot uses, but narrowly scoped so a custom element (e.g. a\nslotted `<lr-flag>`) is never run through it.\n\nForm-associated (mirroring `<lr-button>`'s identical shape): discoverable through\n`form.elements`, and `type=\"submit\"`/`type=\"reset\"` are handled by this component itself via\nthe host's own `closest('form')` — a shadow-internal native `<button type=\"submit\">` does not\nparticipate in an ancestor light-DOM form's submission on its own, since form-submitter\nsemantics don't cross the shadow boundary.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Optional custom icon content, rendered beside (not inside) the `icon` glyph. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `button` | Native button. |\n| `fallback` | The internal SVG-namespaced clone target for slotted bare geometry. Carries the same `fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\"` defaults `<lr-icon>`'s own wrapper svg does, so bare stroke-style geometry (no fill/stroke of its own) renders outlined instead of as a solid shape; an explicit `fill`/`stroke`/etc. already present on the slotted node still wins for that node. Only present in the DOM while at least one top-level slotted element needs it; a complete `<svg>`, `<img>`, or custom element never mounts it. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-icon-button-size` (default: `2.5rem`) — Minimum tappable inline and block size of the native button — a **floor**, not a fixed size: content larger than it grows the button and keeps its own aspect ratio, while a small glyph pads out to it. 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.\n- `--lr-icon-button-radius` (default: `var(--lr-radius)`) — Corner radius of the native button.\n- `--lr-icon-button-background` (default: `transparent`) — Background fill of the native button.\n- `--lr-icon-button-background-hover` (default: `var(--lr-color-surface)`) — Background fill on hover.\n- `--lr-icon-button-color` (default: `inherit`) — Icon/text color of the native button."
7672
+ "value": "`<lr-icon-button>` — an accessible icon-only action button.\n\nSet `icon` for one of `<lr-icon>`'s named glyphs, or slot your own content instead. Slotted\ncontent is a **sibling** of the built-in glyph rather than being piped through `<lr-icon>`, so\nany complete element — an `<svg>`, an `<img>`, an `<lr-flag>` — renders at its own natural\naspect ratio instead of being forced into a 1:1 box. Bare SVG geometry (`<path>`, `<circle>`,\nand a handful of other raw primitives) with no enclosing `<svg>` of its own is detected and\ncloned into a real, internal SVG-namespaced element so it still paints — the same fallback\n`<lr-icon>`'s own custom-content slot uses, but narrowly scoped so a custom element (e.g. a\nslotted `<lr-flag>`) is never run through it.\n\nHost `aria-haspopup` and `aria-expanded` values are forwarded reactively to the shadow-internal\nnative button. When host `aria-controls` names elements in the host's own root, the controls\nrelationship is resolved onto that focused control through the reflected element-reference API\nso it remains valid across this component's shadow boundary; browsers without that API retain\nthe forwarded string attribute as a best-effort fallback.\n\nForm-associated (mirroring `<lr-button>`'s identical shape): discoverable through\n`form.elements`, and `type=\"submit\"`/`type=\"reset\"` are handled by this component itself via\nthe host's own `closest('form')` — a shadow-internal native `<button type=\"submit\">` does not\nparticipate in an ancestor light-DOM form's submission on its own, since form-submitter\nsemantics don't cross the shadow boundary.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Optional custom icon content, rendered beside (not inside) the `icon` glyph. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `button` | Native button. |\n| `fallback` | The internal SVG-namespaced clone target for slotted bare geometry. Carries the same `fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\"` defaults `<lr-icon>`'s own wrapper svg does, so bare stroke-style geometry (no fill/stroke of its own) renders outlined instead of as a solid shape; an explicit `fill`/`stroke`/etc. already present on the slotted node still wins for that node. Only present in the DOM while at least one top-level slotted element needs it; a complete `<svg>`, `<img>`, or custom element never mounts it. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-icon-button-size` (default: `2.5rem`) — Minimum tappable inline and block size of the native button — a **floor**, not a fixed size: content larger than it grows the button and keeps its own aspect ratio, while a small glyph pads out to it. 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.\n- `--lr-icon-button-radius` (default: `var(--lr-radius)`) — Corner radius of the native button.\n- `--lr-icon-button-background` (default: `transparent`) — Background fill of the native button.\n- `--lr-icon-button-background-hover` (default: `var(--lr-color-surface)`) — Background fill on hover.\n- `--lr-icon-button-color` (default: `inherit`) — Icon/text color of the native button.\n- `--lr-icon-button-color-hover` (default: `var(--lr-icon-button-color, inherit)`) — Icon/text color on hover.\n- `--lr-icon-button-border` (default: `0`) — Complete border shorthand of the native button."
7566
7673
  },
7567
7674
  "attributes": [
7675
+ {
7676
+ "name": "aria-controls",
7677
+ "description": {
7678
+ "kind": "markdown",
7679
+ "value": "Type: `string | null` \nDefault: `null`"
7680
+ }
7681
+ },
7682
+ {
7683
+ "name": "aria-expanded",
7684
+ "description": {
7685
+ "kind": "markdown",
7686
+ "value": "Type: `string | null` \nDefault: `null`"
7687
+ }
7688
+ },
7689
+ {
7690
+ "name": "aria-haspopup",
7691
+ "description": {
7692
+ "kind": "markdown",
7693
+ "value": "Type: `string | null` \nDefault: `null`"
7694
+ }
7695
+ },
7568
7696
  {
7569
7697
  "name": "aria-label",
7570
7698
  "description": {
@@ -7675,7 +7803,7 @@
7675
7803
  "name": "lr-image-viewer",
7676
7804
  "description": {
7677
7805
  "kind": "markdown",
7678
- "value": "`<lr-image-viewer>` — full pan/zoom raster-image viewer with labeled region highlights and\nopt-in region annotation, the landing surface for `region`-anchored citations. Distinct from\n`<lr-svg-viewer>` (rendered SVG documents) and `<lr-image-comparer>` (before/after slotted\nsurfaces) — this component owns raster grounding/citation display, not comparison or vector\nrendering.\n\nAdopts `DocumentAnchorTarget` with `anchorKinds: ['region']` only — no text selection is bound\n(a raster image has no selectable text), so `lr-text-select` is never emitted by this viewer.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | None. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `annotate-toggle` | The annotation-mode toggle button. |\n| `annotation-box` | The in-progress draft rectangle. |\n| `base` | The root wrapper. |\n| `error` | The error region. |\n| `fit-control` | The fit-mode select. |\n| `frame` | The embedded `lr-zoomable-frame`. |\n| `highlight` | One highlight box (`data-tone`, `data-active`). |\n| `highlight-label` | A highlight's visible label. |\n| `highlight-layer` | The overlay hosting highlight boxes. |\n| `image` | The `<img>` element. |\n| `image-wrapper` | The rotated wrapper around the image and its overlays. |\n| `rotate-button` | The rotate-90-clockwise button. |\n| `toolbar` | The fit/rotate/annotate controls row. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-image-viewer-annotate-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of `[part=\"annotate-toggle\"]` while annotation mode is on. The toggle carries its own glyph in `--lr-color-text`, so keep a 4.5:1 ratio against it.\n- `--lr-image-viewer-annotate-active-border` (default: `var(--lr-color-brand)`) — Border color of `[part=\"annotate-toggle\"]` while annotation mode is on.\n- `--lr-image-viewer-highlight-active-color` (default: `var(--lr-color-brand)`) — Outline color of the `[part=\"highlight\"]` matching `activeHighlightId`, independent of the per-tone border colors."
7806
+ "value": "`<lr-image-viewer>` — full pan/zoom raster-image viewer with labeled region highlights and\nopt-in region annotation, the landing surface for `region`-anchored citations. Distinct from\n`<lr-svg-viewer>` (rendered SVG documents) and `<lr-image-comparer>` (before/after slotted\nsurfaces) — this component owns raster grounding/citation display, not comparison or vector\nrendering.\n\nAdopts `DocumentAnchorTarget` with `anchorKinds: ['region']` only — no text selection is bound\n(a raster image has no selectable text), so `lr-text-select` is never emitted by this viewer.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | None. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `annotate-toggle` | The annotation-mode toggle button. |\n| `annotation-box` | The in-progress draft rectangle. |\n| `base` | The root wrapper. |\n| `error` | The error region. |\n| `fit-control` | The fit-mode select. |\n| `frame` | The embedded `lr-zoomable-frame`. |\n| `highlight` | One highlight box (`data-tone`, `data-active`). |\n| `highlight-label` | A highlight's visible label. |\n| `highlight-layer` | The overlay hosting highlight boxes. |\n| `image` | The `<img>` element. |\n| `image-wrapper` | The rotated wrapper around the image and its overlays. |\n| `rotate-button` | The rotate-90-clockwise button. |\n| `toolbar` | The fit/rotate/annotate controls row. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-image-viewer-annotate-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of `[part=\"annotate-toggle\"]` while annotation mode is on. The toggle carries its own glyph in `--lr-color-text`, so keep a 4.5:1 ratio against it.\n- `--lr-image-viewer-annotate-active-border` (default: `var(--lr-color-brand)`) — Border color of `[part=\"annotate-toggle\"]` while annotation mode is on.\n- `--lr-image-viewer-highlight-active-color` (default: `var(--lr-color-brand)`) — Outline color of the `[part=\"highlight\"]` matching `activeHighlightId`, independent of the per-tone border colors.\n- `--lr-image-viewer-highlight-border` (default: `var(--lr-color-brand)`) — Default highlight border.\n- `--lr-image-viewer-highlight-bg` (default: `color-mix(in srgb, var(--lr-color-brand) 20%, transparent)`) — Default highlight fill.\n- `--lr-image-viewer-highlight-success-border` — Success-tone highlight border.\n- `--lr-image-viewer-highlight-success-bg` — Success-tone highlight fill.\n- `--lr-image-viewer-highlight-warning-border` — Warning-tone highlight border.\n- `--lr-image-viewer-highlight-warning-bg` — Warning-tone highlight fill.\n- `--lr-image-viewer-highlight-danger-border` — Danger-tone highlight border.\n- `--lr-image-viewer-highlight-danger-bg` — Danger-tone highlight fill.\n- `--lr-image-viewer-highlight-neutral-border` — Neutral-tone highlight border.\n- `--lr-image-viewer-highlight-neutral-bg` — Neutral-tone highlight fill."
7679
7807
  },
7680
7808
  "attributes": [
7681
7809
  {
@@ -7791,7 +7919,7 @@
7791
7919
  "name": "lr-ingestion-queue",
7792
7920
  "description": {
7793
7921
  "kind": "markdown",
7794
- "value": "`<lr-ingestion-queue>` — a controlled list of documents moving through an ingestion pipeline\n(upload → text extraction → chunking → embedding → indexing), each row showing its stage,\nprogress, chunk/embedding counts, and a retry or cancel affordance. Presentation only: this\ncomponent runs no ingestion itself, persists nothing, and never mutates `items` -- retrying or\ncancelling a row fires a controlled `lr-retry`/`lr-cancel` request event and waits for the host\nto supply an updated `items` array, the same request/response convention `<lr-thread-list>`'s\n`lr-thread-pin`/`-archive`/`-delete` events already establish.\n\nAt or above `virtualizeThreshold` items, the list renders through an internal\n`<lr-virtual-list>` instead of a plain keyed list (same precedent as `<lr-thread-list>`'s data\nmode and `<lr-activity-feed>`'s `virtualizeThreshold`) -- identical row markup and behavior\neither way, keyed by `id`.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root region. |\n| `cancel-button` | Fires `lr-cancel`. Only rendered for non-terminal rows. |\n| `empty` | The `<lr-empty>` zero-items state. |\n| `item` | One queue item row; carries `data-stage`. When virtualized, reached from this component's own stylesheet via `lr-virtual-list::part(item)` (renders inside the internal `<lr-virtual-list>`'s own shadow root, not this component's). |\n| `item-actions` | Wrapper around the retry/cancel buttons. |\n| `item-attempts` | The attempt count, only rendered once `attempts` is greater than 0. |\n| `item-chunk-count` | The chunk count, only rendered once `chunkCount` is set. |\n| `item-embedding-status` | The \"N of M chunks embedded\" text, only rendered once both `chunkCount` and `embeddedChunkCount` are set. |\n| `item-error` | The failure message, only rendered for `stage=\"failed\"` with `error` set. |\n| `item-header` | The row's name/stage-badge line. |\n| `item-meta` | Wrapper around the chunk-count/embedding-status/attempt-count text. |\n| `item-name` | The document's `name`. |\n| `item-progress` | The row's `<lr-progress-bar>`, only rendered for an active (uploading through indexing) stage. |\n| `item-stage` | The row's `<lr-badge>` showing the localized stage label; its `variant` tracks `stage`. |\n| `list` | The row container in non-virtualized mode (`role=\"list\"`). |\n| `retry-button` | Fires `lr-retry`. Only rendered for `stage=\"failed\"` rows. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-ingestion-queue-max-height` (default: `none`) — Non-virtualized mode only: caps how tall the list grows before it scrolls internally. Has no effect once virtualized -- the internal `<lr-virtual-list>`'s own viewport keeps its independent, fixed default height (retheme it directly via `<lr-ingestion-queue>`'s own `lr-virtual-list { --lr-virtual-list-height: ... }` if needed)."
7922
+ "value": "`<lr-ingestion-queue>` — a controlled list of documents moving through an ingestion pipeline\n(upload → text extraction → chunking → embedding → indexing), each row showing its stage,\nprogress, chunk/embedding counts, and a retry or cancel affordance. Presentation only: this\ncomponent runs no ingestion itself, persists nothing, and never mutates `items` -- retrying or\ncancelling a row fires a controlled `lr-retry`/`lr-cancel` request event and waits for the host\nto supply an updated `items` array, the same request/response convention `<lr-thread-list>`'s\n`lr-thread-pin`/`-archive`/`-delete` events already establish.\n\nAt or above `virtualizeThreshold` items, the list renders through an internal\n`<lr-virtual-list>` instead of a plain keyed list (same precedent as `<lr-thread-list>`'s data\nmode and `<lr-activity-feed>`'s `virtualizeThreshold`) -- identical row markup and behavior\neither way, keyed by `id`.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root region. |\n| `cancel-button` | Fires `lr-cancel`. Only rendered for non-terminal rows. |\n| `empty` | The `<lr-empty>` zero-items state. |\n| `failure-live` | The visually hidden assertive region that announces only failures that transition or are added after mount; historical failed rows remain visible but are not re-announced as fresh failures. |\n| `item` | One queue item row; carries `data-stage`. When virtualized, reached from this component's own stylesheet via `lr-virtual-list::part(item)` (renders inside the internal `<lr-virtual-list>`'s own shadow root, not this component's). |\n| `item-actions` | Wrapper around the retry/cancel buttons. |\n| `item-attempts` | The attempt count, only rendered once `attempts` is greater than 0. |\n| `item-chunk-count` | The chunk count, only rendered once `chunkCount` is set. |\n| `item-embedding-status` | The \"N of M chunks embedded\" text, only rendered once both `chunkCount` and `embeddedChunkCount` are set. |\n| `item-error` | The failure message, only rendered for `stage=\"failed\"` with `error` set. |\n| `item-header` | The row's name/stage-badge line. |\n| `item-meta` | Wrapper around the chunk-count/embedding-status/attempt-count text. |\n| `item-name` | The document's `name`. |\n| `item-progress` | The row's `<lr-progress-bar>`, only rendered for an active (uploading through indexing) stage. |\n| `item-stage` | The row's `<lr-badge>` showing the localized stage label; its `variant` tracks `stage`. |\n| `list` | The row container in non-virtualized mode (`role=\"list\"`). |\n| `retry-button` | Fires `lr-retry`. Only rendered for `stage=\"failed\"` rows. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-ingestion-queue-max-height` (default: `none`) — Non-virtualized mode only: caps how tall the list grows before it scrolls internally. Has no effect once virtualized -- the internal `<lr-virtual-list>`'s own viewport keeps its independent, fixed default height (retheme it directly via `<lr-ingestion-queue>`'s own `lr-virtual-list { --lr-virtual-list-height: ... }` if needed)."
7795
7923
  },
7796
7924
  "attributes": [
7797
7925
  {
@@ -8042,7 +8170,7 @@
8042
8170
  "name": "lr-json-viewer",
8043
8171
  "description": {
8044
8172
  "kind": "markdown",
8045
- "value": "`<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.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root scroll container; respects `max-height`. |\n| `bracket` | A `{`, `}`, `[`, or `]` delimiter. |\n| `copy-button` | A copy-to-clipboard button -- the top-level one (in `toolbar`, labelled \"Copy JSON to clipboard\") or a per-node one (only rendered when `copyable`; labelled with its own key/type, e.g. \"Copy age\", so assistive tech can tell rows apart). |\n| `key` | An object property key or array index label. |\n| `toggle` | A container node's expand/collapse button (hidden, but present for row alignment, on leaf/empty nodes). |\n| `toolbar` | The wrapper around the top-level copy button (only rendered when `copyable`). |\n| `tree` | The wrapper around the rendered node tree. |\n| `value` | A primitive value's text -- carries `data-type` (`string`/`number`/`boolean`/`null`/`undefined`, or `circular` for a self-reference marker in place of a re-visited container's subtree) for per-type coloring, `data-match` while it matches `search`, and `data-active` while it is the current `searchNext()`/`searchPrevious()` cursor position. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-json-viewer-max-height` (default: `none`) — Cap on `[part=\"base\"]`'s block size, past which the viewer scrolls internally. The `maxHeight` property sets this token inline on `[part=\"base\"]`.\n- `--lr-json-viewer-font` (default: `var(--lr-font-mono)`) — Font family used for the rendered tree.\n- `--lr-json-viewer-match-bg` (default: `var(--lr-color-warning-quiet)`) — Background (and surrounding box-shadow) of a key/value that currently matches `search`."
8173
+ "value": "`<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.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root scroll container; respects `max-height`. |\n| `bracket` | A `{`, `}`, `[`, or `]` delimiter. |\n| `copy-button` | A copy-to-clipboard button -- the top-level one (in `toolbar`, labelled \"Copy JSON to clipboard\") or a per-node one (only rendered when `copyable`; labelled with its own key/type, e.g. \"Copy age\", so assistive tech can tell rows apart). |\n| `key` | An object property key or array index label. |\n| `limit` | Localized notice shown when the depth/node traversal budget truncates rendering or search. |\n| `toggle` | A container node's expand/collapse button (hidden, but present for row alignment, on leaf/empty nodes). |\n| `toolbar` | The wrapper around the top-level copy button (only rendered when `copyable`). |\n| `tree` | The wrapper around the rendered node tree. |\n| `value` | A primitive value's text -- carries `data-type` (`string`/`number`/`boolean`/`null`/`undefined`, or `circular` for a self-reference marker in place of a re-visited container's subtree) for per-type coloring, `data-match` while it matches `search`, and `data-active` while it is the current `searchNext()`/`searchPrevious()` cursor position. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-json-viewer-max-height` (default: `none`) — Cap on `[part=\"base\"]`'s block size, past which the viewer scrolls internally. The `maxHeight` property sets this token inline on `[part=\"base\"]`.\n- `--lr-json-viewer-font` (default: `var(--lr-font-mono)`) — Font family used for the rendered tree.\n- `--lr-json-viewer-match-bg` (default: `var(--lr-color-warning-quiet)`) — Background (and surrounding box-shadow) of a key/value that currently matches `search`.\n- `--lr-json-viewer-active-outline` (default: `var(--lr-focus-ring-color)`) — Outline color for the current imperative search match.\n- `--lr-json-viewer-string-color` (default: `var(--lr-color-success)`) — String value color.\n- `--lr-json-viewer-number-color` (default: `var(--lr-color-brand)`) — Number value color.\n- `--lr-json-viewer-boolean-color` (default: `var(--lr-color-warning)`) — Boolean value color.\n- `--lr-json-viewer-null-color` (default: `var(--lr-color-text-quiet)`) — Null, undefined, and circular-reference marker color."
8046
8174
  },
8047
8175
  "attributes": [
8048
8176
  {
@@ -8241,7 +8369,7 @@
8241
8369
  "name": "lr-known-date",
8242
8370
  "description": {
8243
8371
  "kind": "markdown",
8244
- "value": "`<lr-known-date>` — a date a user already knows (a birthdate, a passport\nissue/expiry date) collected as three plain, labeled day/month/year number\nfields in the locale's natural field order, rather than a calendar popup.\nForm-associated; the submitted form value is always canonical ISO 8601\n(`YYYY-MM-DD`), or `''` while any field is blank or the combination isn't a\nreal calendar date. Mirrors Web Awesome's `wa-known-date` API surface under\n`lr-`, 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.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Custom error content, alongside the `errorText` attribute. |\n| `hint` | Custom hint content, alongside the `hint` attribute. |\n| `label` | Custom label/legend content, alongside the `label` attribute. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `error` | The validation message. |\n| `field` | Each field block (label + input), repeated three times; distinguished by `data-field=\"day\"\\|\"month\"\\|\"year\"`. |\n| `field-input` | The native per-field `<input type=\"text\" inputmode=\"numeric\">`, repeated three times; distinguished by `data-field=\"day\"\\|\"month\"\\|\"year\"`. |\n| `field-label` | The small visible per-field text label (\"Day\"/\"Month\"/\"Year\"). |\n| `fields` | The row wrapping the three field blocks. |\n| `fieldset` | The `<fieldset>` grouping the three fields. |\n| `form-control` | The outer wrapper around legend, fieldset, hint, and error. |\n| `hint` | The hint message. |\n| `legend` | The `<legend>` element. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-known-date-field-padding-block` (default: `var(--lr-space-s)`) — Block padding of each `field-input`, auto-swapped per `size`.\n- `--lr-known-date-field-padding-inline` (default: `var(--lr-space-s)`) — Inline padding of each `field-input`, auto-swapped per `size`.\n- `--lr-known-date-field-font-size` (default: `var(--lr-font-size-md-sm)`) — Font size of each `field-input`, auto-swapped per `size`.\n- `--lr-known-date-field-min-height` (default: `var(--lr-size-2-5rem)`) — Minimum block size of each `field-input`, auto-swapped per `size` (`xs`→`1.5rem`, `s`→`1.875rem`, `l`→`3rem`, `xl`→`3.5rem`) -- matches `lr-input`'s/`lr-date-input`'s own min-height scale, so a birthdate field sitting in a form row next to those controls renders at the same height. At `xs`/`s`/`m` the floor now exceeds the field's own content height and actively pins the rendered box; at `l`/`xl` the content height already exceeds the floor, so those two tiers are unaffected.\n- `--lr-known-date-field-height` — Exact block size of each `field-input`. Undeclared by default, so the field grows to fit its content, floored by `--lr-known-date-field-min-height`. Set it to pin a fixed height.\n- `--lr-known-date-field-gap` (default: `var(--lr-space-s)`) — Gap between the three field blocks.\n- `--lr-known-date-day-field-width` (default: `var(--lr-size-3-5em)`) — Inline size of the day field.\n- `--lr-known-date-month-field-width` (default: `var(--lr-size-3-5em)`) — Inline size of the month field.\n- `--lr-known-date-year-field-width` (default: `var(--lr-size-5em)`) — Inline size of the year field.\n- `--lr-known-date-invalid-border-color` (default: `var(--lr-color-danger)`) — Border color of each `field-input` while `:host([data-invalid])` is set."
8372
+ "value": "`<lr-known-date>` — a date a user already knows (a birthdate, a passport\nissue/expiry date) collected as three plain, labeled day/month/year number\nfields in the locale's natural field order, rather than a calendar popup.\nForm-associated; the submitted form value is always canonical ISO 8601\n(`YYYY-MM-DD`), or `''` while any field is blank or the combination isn't a\nreal calendar date. Mirrors Web Awesome's `wa-known-date` API surface under\n`lr-`, 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. Locale digits such as\nArabic-Indic and Persian numerals are accepted and normalized to the\ncanonical ASCII digits used by the ISO form value.\n\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.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Custom error content, alongside the `errorText` attribute. |\n| `hint` | Custom hint content, alongside the `hint` attribute. |\n| `label` | Custom label/legend content, alongside the `label` attribute. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `error` | The validation message. |\n| `field` | Each field block (label + input), repeated three times; distinguished by `data-field=\"day\"\\|\"month\"\\|\"year\"`. |\n| `field-input` | The native per-field `<input type=\"text\" inputmode=\"numeric\">`, repeated three times; distinguished by `data-field=\"day\"\\|\"month\"\\|\"year\"`. |\n| `field-label` | The small visible per-field text label (\"Day\"/\"Month\"/\"Year\"). |\n| `fields` | The row wrapping the three field blocks. |\n| `fieldset` | The `<fieldset>` grouping the three fields. |\n| `form-control` | The outer wrapper around legend, fieldset, hint, and error. |\n| `hint` | The hint message. |\n| `legend` | The `<legend>` element. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-known-date-field-padding-block` (default: `var(--lr-space-s)`) — Block padding of each `field-input`, auto-swapped per `size`.\n- `--lr-known-date-field-padding-inline` (default: `var(--lr-space-s)`) — Inline padding of each `field-input`, auto-swapped per `size`.\n- `--lr-known-date-field-font-size` (default: `var(--lr-font-size-md-sm)`) — Font size of each `field-input`, auto-swapped per `size`.\n- `--lr-known-date-field-min-height` (default: `var(--lr-size-2-5rem)`) — Minimum block size of each `field-input`, auto-swapped per `size` (`xs`→`1.5rem`, `s`→`1.875rem`, `l`→`3rem`, `xl`→`3.5rem`) -- matches `lr-input`'s/`lr-date-input`'s own min-height scale, so a birthdate field sitting in a form row next to those controls renders at the same height. At `xs`/`s`/`m` the floor now exceeds the field's own content height and actively pins the rendered box; at `l`/`xl` the content height already exceeds the floor, so those two tiers are unaffected.\n- `--lr-known-date-field-height` — Exact block size of each `field-input`. Undeclared by default, so the field grows to fit its content, floored by `--lr-known-date-field-min-height`. Set it to pin a fixed height.\n- `--lr-known-date-field-gap` (default: `var(--lr-space-s)`) — Gap between the three field blocks.\n- `--lr-known-date-day-field-width` (default: `var(--lr-size-3-5em)`) — Inline size of the day field.\n- `--lr-known-date-month-field-width` (default: `var(--lr-size-3-5em)`) — Inline size of the month field.\n- `--lr-known-date-year-field-width` (default: `var(--lr-size-5em)`) — Inline size of the year field.\n- `--lr-known-date-invalid-border-color` (default: `var(--lr-color-danger)`) — Border color of each `field-input` while `:host([data-invalid])` is set."
8245
8373
  },
8246
8374
  "attributes": [
8247
8375
  {
@@ -8476,7 +8604,7 @@
8476
8604
  "name": "data-labels",
8477
8605
  "description": {
8478
8606
  "kind": "markdown",
8479
- "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
8607
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
8480
8608
  }
8481
8609
  },
8482
8610
  {
@@ -8576,7 +8704,7 @@
8576
8704
  "name": "lr-lite-chart",
8577
8705
  "description": {
8578
8706
  "kind": "markdown",
8579
- "value": "`<lr-lite-chart>` — a dependency-free bar/line chart, plain SVG/DOM\nrendering with zero peer dependencies (unlike `lr-chart`, which wraps\n`chart.js`). For a project whose architecture forbids a charting\ndependency outright, this covers the common bar/line case: grouped or\nstacked bars, multi-series lines, per-point click, and hover tooltips\n(native SVG `<title>`, no positioning JS needed) — not a full `lr-chart`\nreplacement (no zoom/pan, no pie/doughnut/radar/scatter/bubble types, no\nhorizontal/dual-y-axis, no raw-config passthrough).\n\nBecause this renders real DOM (not canvas), it reuses `lr-chart`'s\n`--lr-chart-*` theme tokens directly via CSS `var()` — no\n`getComputedStyle()`-based re-theming step is needed the way `chart.ts`\nneeds one for its canvas.\n\nBy default (`layout=\"fit\"`) the plot always squeezes to the measured host\nwidth. Three independent, opt-in escape hatches for dense/aligned data:\n`layout=\"scroll\"` (+ `barWidth`) gives every bar a fixed pixel width and\nlets the plot overflow the host horizontally (scrollable) instead of\nsqueezing; `maxLabels` decimates which x-axis text labels render (bars\nalways still render) once there are more categories than that; and\n`barX` lets a consumer hand in its own per-category x-coordinate function\n— e.g. to pixel-align this chart's bars with a sibling `lr-heatmap`'s\ncalendar columns — overriding the internal slot math for both bars and\ntheir labels. All three are additive and no-ops when left unset.\n\nSeven further additive, opt-in properties: `pointText` overrides the\nper-bar/per-point `<title>`/`aria-label` tooltip text (mirrors\n`lr-heatmap`'s `cellText` hook), falling back to the built-in raw-value\ntemplate when unset; `roundedBars` draws bars as a rounded-top path\ninstead of a square-cornered rect; `skipZero` omits a bar entirely (not\njust zero-height) for an exactly-`0` value; `padLeft`/`barGapRatio`\noverride the internal `PAD_LEFT`/`BAR_GROUP_GAP` layout constants; `scale`\n(`type=\"bar\"` only) switches the bar-height mapping from the default\nlinear `niceDomain` fraction to a `Math.sqrt(value / domainMax)`\ncompression (mirroring `lr-heatmap`'s matrix-mode `sqrt` scale) so a\nskewed dataset's smaller bars don't get washed out by one dominant value\n— gridlines/tick labels stay on the linear domain regardless, only the bar\nmarks' own height changes, and `type=\"line\"` ignores `scale` entirely; and\n`hideAxis` suppresses `renderGrid()`'s gridlines/tick labels altogether\n(x-axis category labels, rendered separately, are unaffected). An eighth,\n`legendText`, appends a formatter-supplied string after each series' label in the\nbuilt-in legend row (e.g. a value or share) — no-op while `legend` is unset, matching the same\nfallback-to-unchanged convention as every other hook here;\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `axis-label` | Each axis tick label. |\n| `axis-title` | The x/y axis title text, when set. |\n| `bar` | Each bar rect (type=\"bar\"). Carries `data-selected` when its category index is in `selectedIndex`. |\n| `base` | The host's flex layout wrapper. |\n| `data-list` | A visually hidden list of all plotted data points (single-series only). |\n| `data-table` | A visually hidden category×series data table, rendered instead of `data-list` when there is more than one dataset so a screen-reader user hears series grouping rather than one flattened N×M sequence. |\n| `grid-line` | Each horizontal gridline. |\n| `legend` | The legend row, when `legend` is set. |\n| `legend-item` | Each legend entry. |\n| `legend-swatch` | Each legend entry's color swatch. |\n| `legend-text` | Extra per-item text after the series label, rendered only when `legendText` is set. |\n| `line` | Each series' stroked line path (type=\"line\"). |\n| `live-region` | The current mark announcement for keyboard users. |\n| `point` | Each series' per-point hit target (type=\"line\"). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-lite-chart-selected-outline-color` (default: `var(--lr-color-brand)`) — Stroke for a bar/point whose category index is in `selectedIndex`."
8707
+ "value": "`<lr-lite-chart>` — a dependency-free bar/line chart, plain SVG/DOM\nrendering with zero peer dependencies (unlike `lr-chart`, which wraps\n`chart.js`). For a project whose architecture forbids a charting\ndependency outright, this covers the common bar/line case: grouped or\nstacked bars, multi-series lines, per-point click, and hover tooltips\n(native SVG `<title>`, no positioning JS needed) — not a full `lr-chart`\nreplacement (no zoom/pan, no pie/doughnut/radar/scatter/bubble types, no\nhorizontal/dual-y-axis, no raw-config passthrough).\n\nBecause this renders real DOM (not canvas), it reuses `lr-chart`'s\n`--lr-chart-*` theme tokens directly via CSS `var()` — no\n`getComputedStyle()`-based re-theming step is needed the way `chart.ts`\nneeds one for its canvas.\n\nBy default (`layout=\"fit\"`) the plot always squeezes to the measured host\nwidth. Three independent, opt-in escape hatches for dense/aligned data:\n`layout=\"scroll\"` (+ `barWidth`) gives every bar a fixed pixel width and\nlets the plot overflow the host horizontally (scrollable) instead of\nsqueezing; `maxLabels` decimates which x-axis text labels render (bars\nalways still render) once there are more categories than that; and\n`barX` lets a consumer hand in its own per-category x-coordinate function\n— e.g. to pixel-align this chart's bars with a sibling `lr-heatmap`'s\ncalendar columns — overriding the internal slot math for both bars and\ntheir labels. All three are additive and no-ops when left unset.\n\nSeven further additive, opt-in properties: `pointText` overrides the\nper-bar/per-point `<title>`/`aria-label` tooltip text (mirrors\n`lr-heatmap`'s `cellText` hook), falling back to the built-in raw-value\ntemplate when unset; `roundedBars` draws bars as a rounded-top path\ninstead of a square-cornered rect; `skipZero` omits a bar entirely (not\njust zero-height) for an exactly-`0` value; `padLeft`/`barGapRatio`\noverride the internal `PAD_LEFT`/`BAR_GROUP_GAP` layout constants; `scale`\n(`type=\"bar\"` only) switches the bar-height mapping from the default\nlinear `niceDomain` fraction to a `Math.sqrt(value / domainMax)`\ncompression (mirroring `lr-heatmap`'s matrix-mode `sqrt` scale) so a\nskewed dataset's smaller bars don't get washed out by one dominant value\n— gridlines/tick labels stay on the linear domain regardless, only the bar\nmarks' own height changes, and `type=\"line\"` ignores `scale` entirely; and\n`hideAxis` suppresses `renderGrid()`'s gridlines/tick labels altogether\n(x-axis category labels, rendered separately, are unaffected). An eighth,\n`legendText`, appends a formatter-supplied string after each series' label in the\nbuilt-in legend row (e.g. a value or share) — no-op while `legend` is unset, matching the same\nfallback-to-unchanged convention as every other hook here;\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `axis-label` | Each axis tick label. |\n| `axis-title` | The x/y axis title text, when set. |\n| `bar` | Each bar rect (type=\"bar\"). Carries `data-selected` and `aria-pressed=\"true\"` when its category index is in `selectedIndex`. |\n| `base` | The host's flex layout wrapper. |\n| `data-list` | A visually hidden list of all plotted data points (single-series only). |\n| `data-table` | A visually hidden category×series data table, rendered instead of `data-list` when there is more than one dataset so a screen-reader user hears series grouping rather than one flattened N×M sequence. |\n| `grid-line` | Each horizontal gridline. |\n| `legend` | The legend row, when `legend` is set. |\n| `legend-item` | Each legend entry. |\n| `legend-swatch` | Each legend entry's color swatch. |\n| `legend-text` | Extra per-item text after the series label, rendered only when `legendText` is set. |\n| `line` | Each series' stroked line path (type=\"line\"). |\n| `live-region` | The current mark announcement for keyboard users. |\n| `point` | Each series' per-point keyboard target (type=\"line\"). Carries `data-selected` and explicit `aria-pressed` state. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-lite-chart-selected-outline-color` (default: `var(--lr-color-brand)`) — Stroke for a bar/point whose category index is in `selectedIndex`."
8580
8708
  },
8581
8709
  "attributes": [
8582
8710
  {
@@ -8748,7 +8876,7 @@
8748
8876
  "name": "lr-locale-picker",
8749
8877
  "description": {
8750
8878
  "kind": "markdown",
8751
- "value": "`<lr-locale-picker>` — a closed-list locale switcher over the library's own locale registry.\n\nWith `locales` left unset (the default), the offered rows are exactly\n`getRegisteredLyraLocales()` — every locale with strings registered via `registerLyraLocale()`,\nplus `'en'` (always available through the library's built-in English fallback) — kept live via\n`subscribeLyraLocaleRegistry()` so a locale registered after mount (e.g. a lazily-loaded\ntranslation pack) appears without a manual refresh. Passing an explicit `locales` array\noverrides the auto-discovered list entirely: a curated subset, a custom order, custom labels,\nor a locale the host wants to offer before its strings are registered.\n\n`value` is the *committed* selection (form-submitted, drives `lr-change`) and starts `''`.\nWhile unset, the trigger displays `effectiveLocale` (the same ancestor-`lang`/registry\nresolution every other component already uses) as a live preview — but that preview is never a\ncommitment: `checkValidity()`/`required` are governed by the real `value`, which stays `''`\nuntil the host sets it or the user actually picks a row. This mirrors a native `<select>`\nrendering its first option's text without that being a committed selection.\n\nBuilt directly on the shared trigger-button/`aria-activedescendant` listbox technique\n`<lr-select>` uses (not composed from it) — a plain closed list, no filter/free-text mode; a\nlocale catalog is realistically dozens of rows, not thousands, so `<lr-combobox>`'s filterable\nmodel would be more surface than the job needs.\n\nSelecting a row sets `value` and emits a cancelable `lr-change` — if a listener doesn't call\n`event.preventDefault()`, the component applies the pick itself via `setLyraLocale()`. A host\nthat wants to intercept the pick (e.g. persist it to a profile first) calls\n`event.preventDefault()`; `value` still updates so the trigger reflects the pick, but the\npage-level locale is untouched until the host calls `setLyraLocale()` itself.\n\nDoes not touch `document.documentElement.lang`/`dir` — applying a picked locale's writing\ndirection to the page is left to the host, which already has everything it needs from\n`lr-change`'s `value` to do that itself.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `error` | The error message. |\n| `expand-icon` | The dropdown indicator. |\n| `form-control` | The outer wrapper around label, trigger, listbox, error and hint. |\n| `form-control-label` | The `<label>` element (only rendered — and only contributes to the accessible name — once `label` is non-empty). |\n| `hint` | The hint message. |\n| `listbox` | The options popover. |\n| `option` | An option row. |\n| `option-flag` | The row's leading `<lr-flag>` (present only while `showFlags` is on). |\n| `option-label` | An option row's label wrapper (native name + tag). |\n| `option-tag` | An option row's secondary line — the raw BCP-47 tag. |\n| `trigger` | The trigger button (positioning anchor). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-locale-picker-trigger-padding` — Trigger padding shorthand, scaled by `size`.\n- `--lr-locale-picker-trigger-min-height` — Trigger block-size floor, scaled by `size`.\n- `--lr-locale-picker-trigger-height` — Exact trigger height. Unset by default (a floor only via `-trigger-min-height`); set a length to both floor and cap the trigger, e.g. to pixel-match a sibling field in the same toolbar row.\n- `--lr-locale-picker-font-size` — Trigger font size, scaled by `size`.\n- `--lr-locale-picker-expand-size` — Decorative expand-icon box size, scaled by `size`.\n- `--lr-locale-picker-option-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a hovered or keyboard-active option row."
8879
+ "value": "`<lr-locale-picker>` — a closed-list locale switcher over the library's own locale registry.\n\nWith `locales` left unset (the default), the offered rows are exactly\n`getRegisteredLyraLocales()` — every locale with strings registered via `registerLyraLocale()`,\nplus `'en'` (always available through the library's built-in English fallback) — kept live via\n`subscribeLyraLocaleRegistry()` so a locale registered after mount (e.g. a lazily-loaded\ntranslation pack) appears without a manual refresh. Passing an explicit `locales` array\noverrides the auto-discovered list entirely: a curated subset, a custom order, custom labels,\nor a locale the host wants to offer before its strings are registered.\n\n`value` is the *committed* selection (form-submitted, drives `lr-change`) and starts `''`.\nWhile unset, the trigger displays `effectiveLocale` (the same ancestor-`lang`/registry\nresolution every other component already uses) as a live preview — but that preview is never a\ncommitment: `checkValidity()`/`required` are governed by the real `value`, which stays `''`\nuntil the host sets it or the user actually picks a row. This mirrors a native `<select>`\nrendering its first option's text without that being a committed selection.\n\nBuilt directly on the shared trigger-button/`aria-activedescendant` listbox technique\n`<lr-select>` uses (not composed from it) — a plain closed list, no filter/free-text mode; a\nlocale catalog is realistically dozens of rows, not thousands, so `<lr-combobox>`'s filterable\nmodel would be more surface than the job needs.\n\nSelecting a row sets `value` and emits a cancelable `lr-change` — if a listener doesn't call\n`event.preventDefault()`, the component applies the pick itself via `setLyraLocale()`. A host\nthat wants to intercept the pick (e.g. persist it to a profile first) calls\n`event.preventDefault()`; `value` still updates so the trigger reflects the pick, but the\npage-level locale is untouched until the host calls `setLyraLocale()` itself.\n\nDoes not touch `document.documentElement.lang`/`dir` — applying a picked locale's writing\ndirection to the page is left to the host, which already has everything it needs from\n`lr-change`'s `value` to do that itself.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `error` | The error message. |\n| `expand-icon` | The dropdown indicator. |\n| `form-control` | The outer wrapper around label, trigger, listbox, error and hint. |\n| `form-control-label` | The `<label>` element (only rendered — and only contributes to the accessible name — once `label` is non-empty). |\n| `hint` | The hint message. |\n| `listbox` | The options popover. |\n| `option` | An option row. |\n| `option-flag` | The row's leading `<lr-flag>` (present only while `showFlags` is on). |\n| `option-label` | An option row's label wrapper (native name + tag). |\n| `option-tag` | An option row's secondary line — the raw BCP-47 tag. |\n| `trigger` | The trigger button (positioning anchor). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-locale-picker-trigger-padding` — Trigger padding shorthand, scaled by `size`.\n- `--lr-locale-picker-trigger-min-height` — Trigger block-size floor, scaled by `size`.\n- `--lr-locale-picker-trigger-height` — Exact trigger height. Unset by default (a floor only via `-trigger-min-height`); set a length to both floor and cap the trigger, e.g. to pixel-match a sibling field in the same toolbar row.\n- `--lr-locale-picker-font-size` — Trigger font size, scaled by `size`.\n- `--lr-locale-picker-expand-size` — Decorative expand-icon box size, scaled by `size`.\n- `--lr-locale-picker-gap` (default: `var(--lr-space-xs)`) — Trigger and option child gap.\n- `--lr-locale-picker-radius` (default: `var(--lr-radius)`) — Trigger/listbox/option corner radius.\n- `--lr-locale-picker-trigger-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Trigger hover background.\n- `--lr-locale-picker-open-border-color` (default: `var(--lr-color-brand)`) — Open trigger border color.\n- `--lr-locale-picker-option-selected-border-color` (default: `var(--lr-color-brand)`) — Selected option border.\n- `--lr-locale-picker-option-selected-color` (default: `var(--lr-color-brand)`) — Selected option text.\n- `--lr-locale-picker-option-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a hovered or keyboard-active option row."
8752
8880
  },
8753
8881
  "attributes": [
8754
8882
  {
@@ -8834,7 +8962,7 @@
8834
8962
  "name": "lr-map",
8835
8963
  "description": {
8836
8964
  "kind": "markdown",
8837
- "value": "`<lr-map>` — a maplibre-gl wrapper with a declarative legend, choropleth\nGeoJSON layer, markers, and additive `dataLayers` GeoJSON overlays\n(arbitrary shapes rendered as a source plus fill/line/circle layers,\nindependent of `choropleth`'s field/stops color-interpolation), plus a raw\n`map` escape hatch. Requires the optional peer dep `maplibre-gl`\n(consumers also import its CSS once).\n\nThe underlying `maplibregl.Map` — and the WebGL context it opens — isn't\nconstructed until this element is first visible in the viewport (tracked\nvia `IntersectionObserver`), even once the `maplibre-gl` peer dependency\nhas finished loading. Browsers hard-cap concurrent WebGL contexts per\npage, so a grid/dashboard of many `<lr-map>` instances only constructs\nthe ones actually on-screen instead of racing to exhaust that budget the\ninstant each one mounts. `map` stays `undefined` (and `lr-map-load`\ndoesn't fire) until construction actually happens.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The map wrapper. |\n| `container` | The maplibre container. |\n| `error` | `role=\"alert\"` message shown instead of `container` if the optional `maplibre-gl` peer dependency fails to load (e.g. not installed). ⚠️ The default `mapStyle` (when unset) uses OpenStreetMap's demo tile server, which is not suitable for production traffic — see the `DEFAULT_STYLE` doc comment above. Always pass an explicit `mapStyle` in production. |\n| `legend` | The map legend. |\n| `legend-swatch` | A legend color swatch. |"
8965
+ "value": "`<lr-map>` — a maplibre-gl wrapper with a declarative legend, choropleth\nGeoJSON layer, markers, and additive `dataLayers` GeoJSON overlays\n(arbitrary shapes rendered as a source plus fill/line/circle layers,\nindependent of `choropleth`'s field/stops color-interpolation), plus a raw\n`map` escape hatch. Requires the optional peer dep `maplibre-gl`\n(consumers also import its CSS and configure its module-worker URL once).\nMapLibre v6 is ESM-only and requires WebGL2.\n\nThe underlying `maplibregl.Map` — and the WebGL context it opens — isn't\nconstructed until this element is first visible in the viewport (tracked\nvia `IntersectionObserver`), even once the `maplibre-gl` peer dependency\nhas finished loading. Browsers hard-cap concurrent WebGL contexts per\npage, so a grid/dashboard of many `<lr-map>` instances only constructs\nthe ones actually on-screen instead of racing to exhaust that budget the\ninstant each one mounts. `map` stays `undefined` (and `lr-map-load`\ndoesn't fire) until construction actually happens.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The map wrapper. |\n| `container` | The maplibre container. |\n| `error` | `role=\"alert\"` message shown instead of `container` if the optional `maplibre-gl` peer dependency fails to load (e.g. not installed). ⚠️ The default `mapStyle` (when unset) uses OpenStreetMap's demo tile server, which is not suitable for production traffic — see the `DEFAULT_STYLE` doc comment above. Always pass an explicit `mapStyle` in production. |\n| `legend` | The map legend. |\n| `legend-swatch` | A legend color swatch. |"
8838
8966
  },
8839
8967
  "attributes": [
8840
8968
  {
@@ -8871,7 +8999,7 @@
8871
8999
  "name": "lr-markdown",
8872
9000
  "description": {
8873
9001
  "kind": "markdown",
8874
- "value": "`<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`.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `blockquote` | Every rendered `<blockquote>`. |\n| `code-block` | Every rendered fenced/indented `<pre>`. |\n| `content` | The wrapper around the rendered (or plain-text fallback) output. |\n| `heading` | Every rendered `<h1>`–`<h6>` (shifted by `heading-offset`). |\n| `img` | Every rendered `<img>`. |\n| `inline-code` | Every rendered inline `<code>` span (backtick spans, not fenced blocks). |\n| `link` | Every rendered `<a>`. |\n| `list` | Every rendered `<ul>`/`<ol>`. |\n| `math` | A rendered inline or block math span (`data-display=\"inline\"\\|\"block\"`). |\n| `paragraph` | Every rendered `<p>`. |\n| `table` | Every rendered `<table>`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-markdown-font-mono` (default: `var(--lr-font-mono)`) — Monospace family for rendered `<code>` inside `content`.\n- `--lr-code-block-tab-size` (default: `2`) — Tab width for a rendered fenced/indented `code-block`. Deliberately the same token (and default) `lr-code-block` and `lr-code-editor` use, so a consumer sets one tab width for every code surface — it is declared here rather than inherited because `lr-code-block` is a sibling element, not an ancestor. A markdown code block wraps (`white-space: pre-wrap`) while `lr-code-block` does not, so the same value can render differently on a wrapped line, where tab stops restart."
9002
+ "value": "`<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`.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `blockquote` | Every rendered `<blockquote>`. |\n| `code-block` | Every rendered fenced/indented `<pre>`. |\n| `content` | The wrapper around the rendered (or plain-text fallback) output. |\n| `heading` | Every rendered `<h1>`–`<h6>` (shifted by `heading-offset`). |\n| `img` | Every rendered `<img>`. |\n| `inline-code` | Every rendered inline `<code>` span (backtick spans, not fenced blocks). |\n| `link` | Every rendered `<a>`. |\n| `list` | Every rendered `<ul>`/`<ol>`. |\n| `math` | A rendered inline or block math span (`data-display=\"inline\"\\|\"block\"`). |\n| `paragraph` | Every rendered `<p>`. |\n| `table` | Every rendered `<table>`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-markdown-font-mono` (default: `var(--lr-font-mono)`) — Monospace family for rendered `<code>` inside `content`.\n- `--lr-markdown-highlight-accent-bg` (default: `var(--lr-color-brand-quiet)`) — Accent highlight fill.\n- `--lr-markdown-highlight-success-bg` (default: `var(--lr-color-success-quiet)`) — Success highlight fill.\n- `--lr-markdown-highlight-warning-bg` (default: `var(--lr-color-warning-quiet)`) — Warning highlight fill.\n- `--lr-markdown-highlight-danger-bg` (default: `var(--lr-color-danger-quiet)`) — Danger highlight fill.\n- `--lr-markdown-highlight-neutral-bg` (default: `var(--lr-color-surface)`) — Neutral highlight fill.\n- `--lr-markdown-highlight-active-bg` (default: `var(--lr-color-brand-quiet)`) — Active highlight fill.\n- `--lr-markdown-highlight-active-outline-color` (default: `var(--lr-color-brand)`) — Active highlight outline.\n- `--lr-code-block-tab-size` (default: `2`) — Tab width for a rendered fenced/indented `code-block`. Deliberately the same token (and default) `lr-code-block` and `lr-code-editor` use, so a consumer sets one tab width for every code surface — it is declared here rather than inherited because `lr-code-block` is a sibling element, not an ancestor. A markdown code block wraps (`white-space: pre-wrap`) while `lr-code-block` does not, so the same value can render differently on a wrapped line, where tab stops restart."
8875
9003
  },
8876
9004
  "attributes": [
8877
9005
  {
@@ -8978,7 +9106,7 @@
8978
9106
  "name": "lr-markdown-core",
8979
9107
  "description": {
8980
9108
  "kind": "markdown",
8981
- "value": "`<lr-markdown-core>` — a build-lean variant of `<lr-markdown>` for a consumer whose\n`languages` map already covers every language it will ever render. Every other capability (GFM\ntables, fenced code blocks, links, blockquotes, heading anchors, text-quote highlights, math) is\nidentical to `<lr-markdown>` -- only fenced-code-block highlighting differs: this component's\nown module never textually contains a call to (or import of) `loadShikiHighlighter` (the\n~200-language default dynamic-import table `<lr-markdown>` calls unconditionally unless its\n*runtime* `languagesOnly` flag is `true` -- a flag on that same module a bundler can't prove\nalways-true, so the unconditional call stays in the build output regardless). A consumer\nimporting this entry point instead of `markdown.js` gets a genuinely shiki-full-table-free\nbuild. A fenced block whose language isn't a key in `languages` always renders the plain-text\nfallback -- there is no default/full-table highlighter here to fall back to, mirroring\n`<lr-code-block-core>`'s identical contract for the sibling component.\n\nBuilt on the optional peer dependencies `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 fine-grained `shiki/core` recipe\n`<lr-code-block-core>` uses (`highlightCode`, default `true` — gated by whether a fenced\nblock's language is a key in `languages`, since there is no default highlighter here to gate on\n\"is shiki installed at all\"). The very first render of any content is always plain (identical to\n`<lr-markdown>`'s own output); highlighting arrives as an asynchronous upgrade one render\nlater, once the fine-grained highlighter resolves. No highlighting is attempted while\n`streaming` is `true` — it applies once a stream settles, so there is no added per-chunk cost\nwhile 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`.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `blockquote` | Every rendered `<blockquote>`. |\n| `code-block` | Every rendered fenced/indented `<pre>`. |\n| `content` | The wrapper around the rendered (or plain-text fallback) output. |\n| `heading` | Every rendered `<h1>`–`<h6>` (shifted by `heading-offset`). |\n| `img` | Every rendered `<img>`. |\n| `inline-code` | Every rendered inline `<code>` span (backtick spans, not fenced blocks). |\n| `link` | Every rendered `<a>`. |\n| `list` | Every rendered `<ul>`/`<ol>`. |\n| `math` | A rendered inline or block math span (`data-display=\"inline\"\\|\"block\"`). |\n| `paragraph` | Every rendered `<p>`. |\n| `table` | Every rendered `<table>`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-code-block-tab-size` (default: `2`) — Tab width for a rendered fenced/indented `code-block`. Deliberately the same token (and default) `lr-code-block` and `lr-code-editor` use, so a consumer sets one tab width for every code surface — it is declared here rather than inherited because `lr-code-block` is a sibling element, not an ancestor. A markdown code block wraps (`white-space: pre-wrap`) while `lr-code-block` does not, so the same value can render differently on a wrapped line, where tab stops restart."
9109
+ "value": "`<lr-markdown-core>` — a build-lean variant of `<lr-markdown>` for a consumer whose\n`languages` map already covers every language it will ever render. Every other capability (GFM\ntables, fenced code blocks, links, blockquotes, heading anchors, text-quote highlights, math) is\nidentical to `<lr-markdown>` -- only fenced-code-block highlighting differs: this component's\nown module never textually contains a call to (or import of) `loadShikiHighlighter` (the\n~200-language default dynamic-import table `<lr-markdown>` calls unconditionally unless its\n*runtime* `languagesOnly` flag is `true` -- a flag on that same module a bundler can't prove\nalways-true, so the unconditional call stays in the build output regardless). A consumer\nimporting this entry point instead of `markdown.js` gets a genuinely shiki-full-table-free\nbuild. A fenced block whose language isn't a key in `languages` always renders the plain-text\nfallback -- there is no default/full-table highlighter here to fall back to, mirroring\n`<lr-code-block-core>`'s identical contract for the sibling component.\n\nBuilt on the optional peer dependencies `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 fine-grained `shiki/core` recipe\n`<lr-code-block-core>` uses (`highlightCode`, default `true` — gated by whether a fenced\nblock's language is a key in `languages`, since there is no default highlighter here to gate on\n\"is shiki installed at all\"). The very first render of any content is always plain (identical to\n`<lr-markdown>`'s own output); highlighting arrives as an asynchronous upgrade one render\nlater, once the fine-grained highlighter resolves. No highlighting is attempted while\n`streaming` is `true` — it applies once a stream settles, so there is no added per-chunk cost\nwhile 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`.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `blockquote` | Every rendered `<blockquote>`. |\n| `code-block` | Every rendered fenced/indented `<pre>`. |\n| `content` | The wrapper around the rendered (or plain-text fallback) output. |\n| `heading` | Every rendered `<h1>`–`<h6>` (shifted by `heading-offset`). |\n| `img` | Every rendered `<img>`. |\n| `inline-code` | Every rendered inline `<code>` span (backtick spans, not fenced blocks). |\n| `link` | Every rendered `<a>`. |\n| `list` | Every rendered `<ul>`/`<ol>`. |\n| `math` | A rendered inline or block math span (`data-display=\"inline\"\\|\"block\"`). |\n| `paragraph` | Every rendered `<p>`. |\n| `table` | Every rendered `<table>`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-markdown-highlight-accent-bg` (default: `var(--lr-color-brand-quiet)`) — Accent highlight fill.\n- `--lr-markdown-highlight-success-bg` (default: `var(--lr-color-success-quiet)`) — Success highlight fill.\n- `--lr-markdown-highlight-warning-bg` (default: `var(--lr-color-warning-quiet)`) — Warning highlight fill.\n- `--lr-markdown-highlight-danger-bg` (default: `var(--lr-color-danger-quiet)`) — Danger highlight fill.\n- `--lr-markdown-highlight-neutral-bg` (default: `var(--lr-color-surface)`) — Neutral highlight fill.\n- `--lr-markdown-highlight-active-bg` (default: `var(--lr-color-brand-quiet)`) — Active highlight fill.\n- `--lr-markdown-highlight-active-outline-color` (default: `var(--lr-color-brand)`) — Active highlight outline.\n- `--lr-code-block-tab-size` (default: `2`) — Tab width for a rendered fenced/indented `code-block`. Deliberately the same token (and default) `lr-code-block` and `lr-code-editor` use, so a consumer sets one tab width for every code surface — it is declared here rather than inherited because `lr-code-block` is a sibling element, not an ancestor. A markdown code block wraps (`white-space: pre-wrap`) while `lr-code-block` does not, so the same value can render differently on a wrapped line, where tab stops restart."
8982
9110
  },
8983
9111
  "attributes": [
8984
9112
  {
@@ -9074,6 +9202,50 @@
9074
9202
  }
9075
9203
  ]
9076
9204
  },
9205
+ {
9206
+ "name": "lr-mcp-app",
9207
+ "description": {
9208
+ "kind": "markdown",
9209
+ "value": "`<lr-mcp-app>` — hosts an MCP App-style executable UI resource in a uniquely-origin sandbox.\nThe frame can request tools, messages, links, logs, and resizing only through typed events;\nthe component never performs those external actions itself.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The sandbox frame wrapper. |\n| `error` | The invalid-resource error. |\n| `frame` | The sandboxed iframe. |\n| `loading` | The pre-load status. |"
9210
+ },
9211
+ "attributes": [
9212
+ {
9213
+ "name": "aria-label",
9214
+ "description": {
9215
+ "kind": "markdown",
9216
+ "value": "Type: `string | null` \nDefault: `null`"
9217
+ }
9218
+ },
9219
+ {
9220
+ "name": "height",
9221
+ "description": {
9222
+ "kind": "markdown",
9223
+ "value": "Type: `number` \nDefault: `320`"
9224
+ }
9225
+ },
9226
+ {
9227
+ "name": "label",
9228
+ "description": {
9229
+ "kind": "markdown",
9230
+ "value": "Type: `string` \nDefault: `''`"
9231
+ }
9232
+ },
9233
+ {
9234
+ "name": "locale",
9235
+ "description": {
9236
+ "kind": "markdown",
9237
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
9238
+ }
9239
+ },
9240
+ {
9241
+ "name": "max-height",
9242
+ "description": {
9243
+ "kind": "markdown",
9244
+ "value": "Type: `number` \nDefault: `800`"
9245
+ }
9246
+ }
9247
+ ]
9248
+ },
9077
9249
  {
9078
9250
  "name": "lr-media-card",
9079
9251
  "description": {
@@ -9173,7 +9345,7 @@
9173
9345
  "name": "lr-mention-popover",
9174
9346
  "description": {
9175
9347
  "kind": "markdown",
9176
- "value": "`<lr-mention-popover>` — a caret-anchored, keyboard-navigable popover for\n`@`-mention and `/`-slash-command autocomplete inside a plain-text\n`<textarea>`/`<input>` the host owns (e.g. `<lr-chat-composer>`'s own\ntextarea, though this component has no dependency on that or any other\nspecific input). It never takes DOM focus itself the same \"focus stays\nput, `aria-activedescendant` conveys the active row\" pattern\n`<lr-select>`/`<lr-combobox>` use for their own listbox so a host\nmust apply `aria-activedescendant` to its *own* input element, pointing at\nwhatever `activeDescendantId` currently returns.\n\nIntegration contract (entirely the host's responsibility — this component\nnever inspects the text control's value or listens to it directly):\n1. Detect a mention/command trigger (e.g. `@`/`/` at the start of a word)\n in the host's own `input` handling.\n2. Set `anchor` (the `<textarea>`/`<input>` itself, or any element for\n plain whole-element anchoring — see \"Positioning\" below), `items`, and\n `query` (the text typed since the trigger character), then flip\n `open = true`.\n3. Forward every `keydown` the input receives, while `open`, through\n `handleKeyDown()` — it returns `true` when it consumed the key (so the\n host's own handler should stop, e.g. skip submitting the message on an\n Enter that actually picked a mention) and `false` otherwise.\n4. Set `open = false` whenever the query stops looking like an active\n mention context (a space typed, the trigger character deleted, the\n input blurred, ) — `lr-mention-close` fires automatically from that\n (see below), there is no separate \"tell it to close\" call needed.\n5. Keep the host's own input's `aria-activedescendant` (and, optionally,\n `aria-controls`, via `listboxId`) in sync with `activeDescendantId` —\n this component has no DOM of the host's to attach that to itself.\n\nPositioning: when `anchor` is a plain `<textarea>` or single-line text\n`<input>`, this component measures exactly where the caret currently\npaints (`caretClientRect()`, the standard hidden-mirror-element technique\n— see that function's own doc) and positions against that single point\nwith `internal/positioner.js`'s `place()`, so the popup tracks the caret\nrather than sitting under the whole textarea. Any other `anchor` element\n(or a text control this component fails to measure, e.g. one with\n`display: none`) falls back to `place(anchor, popup)` against the whole\nelement — the same whole-element anchoring `<lr-combobox>`/\n`<lr-select>` use for their own popups. Re-measures on every `anchor`/\n`query` change while open (a keystroke moves the caret, so a fresh `query`\nis the proxy for \"the caret may have moved\"); a caret that moves for a\nreason other than typing (e.g. a mouse click elsewhere in the text while\nthe popover happens to still be open) is not separately tracked — the\nhost can force a re-measure by toggling `open` or reassigning `anchor`.\n\nFiltering happens internally against `items` (mirroring `<lr-combobox>`'s\nfilter-predicate convention via `filter`, rather than requiring the host to\npre-filter): the default predicate is a case-insensitive substring match\nagainst `label`/`description`, overridable via `filter`.\n\nThere is no persisted \"selection\" the way a real listbox has one — a\nmention is either committed (closing the popover) or the popover is\ndismissed with nothing chosen — so `aria-selected=\"true\"` marks whichever\nrow is currently *active* (what Enter/Tab would commit right now), per the\nWAI-ARIA combobox-with-list-autocomplete pattern, rather than tracking a\nseparate persisted value the way `<lr-combobox>`'s own `aria-selected`\ndoes.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `empty` | The \"no matches\" message, shown when `items`/`query` produce zero rows. |\n| `listbox` | The popover's root element (`role=\"listbox\"`). |\n| `option` | A candidate row (`role=\"option\"`). |\n| `option-description` | A row's optional secondary line, when `description` is set. |\n| `option-icon` | A row's leading icon glyph, when `icon` is set. |\n| `option-label` | Wrapper around a row's label/description. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-mention-popover-option-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the hovered or `[data-active]` (keyboard-highlighted) suggestion row."
9348
+ "value": "`<lr-mention-popover>` — a caret-anchored, keyboard-navigable popover for\n`@`-mention and `/`-slash-command autocomplete inside a plain-text\n`<textarea>`/`<input>` the host owns (e.g. `<lr-chat-composer>`'s own\ntextarea, though this component has no dependency on that or any other\nspecific input). On platforms that support cross-root ARIA element\nreflection, focus stays in the host input while\n`ariaActiveDescendantElement` conveys the active row. Where the platform\nrejects that reference, the explicit `focusActiveOption()` fallback moves\nreal focus into this component's shadow listbox so focus ownership and\noptions share one tree scope. A string `aria-activedescendant` cannot\nresolve from the host document into this component's shadow root.\n\nIntegration contract (entirely the host's responsibility — this component\nnever inspects the text control's value or listens to it directly):\n1. Detect a mention/command trigger (e.g. `@`/`/` at the start of a word)\n in the host's own `input` handling.\n2. Set `anchor` (the `<textarea>`/`<input>` itself, or any element for\n plain whole-element anchoring — see \"Positioning\" below), `items`, and\n `query` (the text typed since the trigger character), then flip\n `open = true`.\n3. Forward every `keydown` the input receives, while `open`, through\n `handleKeyDown()` — it returns `true` when it consumed the key (so the\n host's own handler should stop, e.g. skip submitting the message on an\n Enter that actually picked a mention) and `false` otherwise.\n4. Set `open = false` whenever the query stops looking like an active\n mention context (a space typed, the trigger character deleted, or focus\n leaving both the input and this popover) — `lr-mention-close` fires\n automatically from that (see below), there is no separate \"tell it to\n close\" call needed.\n5. Call `syncActiveDescendant()` after opening and after every consumed\n navigation key. It uses cross-root ARIA element reflection where the\n platform supports it and never installs a broken string IDREF. When it\n returns `false`, call `focusActiveOption()` after the first consumed\n navigation key. That fallback moves real focus into the shadow listbox,\n where each option and its focus owner share one tree scope; a host blur\n handler must therefore keep the popover open when `relatedTarget` is this\n component. Subsequent navigation is handled by the popover and focus\n returns to `anchor` when it closes.\n\nPositioning: when `anchor` is a plain `<textarea>` or single-line text\n`<input>`, this component measures exactly where the caret currently\npaints (`caretClientRect()`, the standard hidden-mirror-element technique\n— see that function's own doc) and positions against that single point\nwith `internal/positioner.js`'s `place()`, so the popup tracks the caret\nrather than sitting under the whole textarea. Any other `anchor` element\n(or a text control this component fails to measure, e.g. one with\n`display: none`) falls back to `place(anchor, popup)` against the whole\nelement — the same whole-element anchoring `<lr-combobox>`/\n`<lr-select>` use for their own popups. Re-measures on every `anchor`/\n`query` change while open (a keystroke moves the caret, so a fresh `query`\nis the proxy for \"the caret may have moved\"); a caret that moves for a\nreason other than typing (e.g. a mouse click elsewhere in the text while\nthe popover happens to still be open) is not separately tracked — the\nhost can force a re-measure by toggling `open` or reassigning `anchor`.\n\nFiltering happens internally against `items` (mirroring `<lr-combobox>`'s\nfilter-predicate convention via `filter`, rather than requiring the host to\npre-filter): the default predicate is a case-insensitive substring match\nagainst `label`/`description`, overridable via `filter`.\n\nThere is no persisted \"selection\" the way a real listbox has one — a\nmention is either committed (closing the popover) or the popover is\ndismissed with nothing chosen — so `aria-selected=\"true\"` marks whichever\nrow is currently *active* (what Enter/Tab would commit right now), per the\nWAI-ARIA combobox-with-list-autocomplete pattern, rather than tracking a\nseparate persisted value the way `<lr-combobox>`'s own `aria-selected`\ndoes.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `empty` | The \"no matches\" message, shown when `items`/`query` produce zero rows. |\n| `listbox` | The popover's root element (`role=\"listbox\"`). |\n| `option` | A candidate row (`role=\"option\"`). |\n| `option-description` | A row's optional secondary line, when `description` is set. |\n| `option-icon` | A row's leading icon glyph, when `icon` is set. |\n| `option-label` | Wrapper around a row's label/description. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-mention-popover-option-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the hovered or `[data-active]` (keyboard-highlighted) suggestion row."
9177
9349
  },
9178
9350
  "attributes": [
9179
9351
  {
@@ -9217,7 +9389,7 @@
9217
9389
  "name": "lr-menu",
9218
9390
  "description": {
9219
9391
  "kind": "markdown",
9220
- "value": "`<lr-menu>` — an anchored dropdown of `<lr-menu-item>` actions, opened\nfrom a consumer-supplied trigger (typically an icon button). A close, drop-\nin-shaped replacement for reaching outside this library for a third-party\ndropdown to build a gear menu, an avatar menu, or a history row's overflow\nmenu: click the trigger, a positioned menu appears, clicking an item both\nperforms the action *and* closes the menu.\n\n**ARIA pattern — `role=\"menu\"`/`role=\"menuitem\"` with real roving DOM\nfocus, not a listbox.** Two coherent, mutually-exclusive shapes were\navailable here: (a) `role=\"listbox\"`/`role=\"option\"` with\n`aria-activedescendant`, the pattern `<lr-select>`'s trigger-button +\npopup listbox uses, where DOM focus never leaves the trigger; or (b)\n`role=\"menu\"`/`role=\"menuitem\"` with real focus moving between actual\nfocusable rows, the WAI-ARIA \"menu button\" pattern. This picks (b):\n`<lr-menu-item>` rows are real, independently-focusable elements (see\nthat class's own doc), which is the more natural fit for a menu\nspecifically — unlike a listbox's rows, a menu's rows are conventionally\nbutton-/link-shaped, and every well-known native/OS menu (and this\nfamily's own `<lr-tree>`/`<lr-tree-node>` pair, which this component's\nroving-tabindex plumbing directly mirrors) already moves real focus rather\nthan merely a virtual `aria-activedescendant` pointer. `role`/`tabIndex`\nare consistently the menu-button shape throughout — never mixed with\nlistbox/option.\n\nInteraction contract (mirrors the WAI-ARIA APG \"menu button\" pattern):\n- Click the trigger (or Enter/Space on it, via the trigger's own native\n `click` activation) toggles the menu, moving focus to the first\n non-disabled item on open.\n- ArrowDown/ArrowUp on the trigger while closed also open it, focusing the\n first/last non-disabled item respectively.\n- Once open, ArrowDown/ArrowUp move the roving focus among non-disabled\n items (wrapping past either end — the recommended, and more common,\n menu-widget behavior, unlike `<lr-select>`'s clamped listbox nav).\n Home/End jump to the first/last non-disabled item. Enter/Space activate\n the focused item. Escape closes and returns focus to the trigger. A\n printable keypress runs type-ahead: roving focus jumps to the next\n non-disabled item whose text starts with the accumulated buffer, cycling\n from just after the active item (mirrors `<lr-select>`'s identical\n listbox type-ahead). All of the above (except Escape and Tab) only\n respond to keydowns from a real `<lr-menu-item>` target, so a slotted\n non-item control (e.g. a date input) keeps its own full default keyboard\n behavior.\n- Tab never traps focus and never calls `preventDefault()` — the browser's\n own Tab navigation always proceeds untouched. It closes the menu only\n when focus is on its way *out* of the popup: with a focusable in the\n `header`/`footer` region on the far side of the keypress, the menu stays\n open so native Tab can carry focus there instead. With neither region\n filled, Tab closes exactly as it always has. Tabbing past the popup's\n last focusable in either direction closes it too, including from slotted\n non-item content — which previously left the menu open while focus\n walked away.\n- Escape from `header`/`footer` content closes the menu and refocuses the\n trigger unconditionally, mirroring `<lr-popover>`'s handling of arbitrary\n popup content. `closeOnEscapeAnywhere` governs only the *legacy* shape —\n non-item content slotted into the **default** slot — and defaults to\n `false`, so existing consumers keep today's behavior unchanged.\n- A click outside both the trigger and the open popup closes it (mirrors\n `<lr-select>`'s `onDocPointer` exactly) — this does *not* refocus the\n trigger, since the outside click itself already moved focus somewhere\n the user chose; Escape and a committed selection *do* refocus the\n trigger, since those are dismissals with nowhere else for focus to go.\n\n`show(focus?)` and `hide(options?)` are the public imperative pair, for the cases the trigger\ncan't express: a slotted \"Apply\"/\"Done\" button inside the menu, a keyboard shortcut, a parent\nrestoring UI state. `hide({ focusTrigger: true })` is the one that also returns DOM focus to the\ntrigger — use it whenever the interaction that closed the menu hasn't already put focus\nsomewhere the user chose. Writing `open` directly still works and is fully equivalent apart from\nthe focus moves: the roving-tabindex reset is centralized in `updated()`, so `el.open = false`\nnever leaves a stale `tabindex=\"0\"` tab stop on the last active item.\n\nThe trigger element itself is read from the `trigger` slot's assigned\nelement (first one, if several are assigned) and enhanced imperatively\nwith `aria-haspopup=\"menu\"`/`aria-expanded`/`aria-controls` — the same\n\"reach into a consumer-owned light-DOM element to complete its a11y\nwiring\" approach `<lr-dialog>` documents for its own heading detection,\nnecessary here because those attributes belong on the actual interactive\ntrigger, which lives outside this component's own shadow root.\n\nThe popup is always rendered (never `display:none`) so `.focus()` calls on\nits content work synchronously the instant it opens — visually hidden via\n`visibility`/`opacity` instead (identical to `<lr-select>`'s own\n`[part=\"listbox\"]`). `visibility` is an inherited CSS property that\npierces the `<slot>` projection boundary, so every closed-state\n`<lr-menu-item>` is automatically excluded from sequential (Tab-key)\nnavigation with no separate JS bookkeeping.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | `<lr-menu-item>` elements, plus optionally plain `<hr>` dividers between groups (native `<hr>` already carries an implicit `separator` role, matching what `role=\"menu\"` expects between item groups). Arbitrary non-item content still renders here for backward compatibility, but the `header`/`footer` slots below are the supported place for it. |\n| `footer` | Same as `header`, rendered below the items — an \"Apply\"/\"Done\" button, a link to a fuller settings page, a count. |\n| `header` | Composed content rendered above the items and *outside* the `role=\"menu\"` list — a filter/search field, a section title, a summary row. Keeps its own full default keyboard behavior, is reachable with Tab from the items, and is ARIA-valid (arbitrary content inside `role=\"menu\"` is not). Collapses to no box at all while unfilled. |\n| `trigger` | The consumer's own trigger element (typically an icon button). Clicking it toggles the menu; it's positioned against via `internal/positioner.js`'s `place()`. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `footer` | The wrapper around the `footer` slot, below the list and outside `role=\"menu\"`. `display: none` while the slot is unfilled. |\n| `header` | The wrapper around the `header` slot, above the list and outside `role=\"menu\"`. `display: none` while the slot is unfilled. |\n| `list` | The `role=\"menu\"` container wrapping the default slot. |\n| `popup` | The positioned floating panel. |\n| `trigger` | The wrapper around the `trigger` slot (the positioning anchor). |"
9392
+ "value": "`<lr-menu>` — an anchored dropdown of `<lr-menu-item>` actions, opened\nfrom a consumer-supplied trigger (typically an icon button). A close, drop-\nin-shaped replacement for reaching outside this library for a third-party\ndropdown to build a gear menu, an avatar menu, or a history row's overflow\nmenu: click the trigger, a positioned menu appears, clicking an item both\nperforms the action *and* closes the menu.\n\n**ARIA pattern — `role=\"menu\"`/`role=\"menuitem\"` with real roving DOM\nfocus, not a listbox.** Two coherent, mutually-exclusive shapes were\navailable here: (a) `role=\"listbox\"`/`role=\"option\"` with\n`aria-activedescendant`, the pattern `<lr-select>`'s trigger-button +\npopup listbox uses, where DOM focus never leaves the trigger; or (b)\n`role=\"menu\"`/`role=\"menuitem\"` with real focus moving between actual\nfocusable rows, the WAI-ARIA \"menu button\" pattern. This picks (b):\n`<lr-menu-item>` rows are real, independently-focusable elements (see\nthat class's own doc), which is the more natural fit for a menu\nspecifically — unlike a listbox's rows, a menu's rows are conventionally\nbutton-/link-shaped, and every well-known native/OS menu (and this\nfamily's own `<lr-tree>`/`<lr-tree-node>` pair, which this component's\nroving-tabindex plumbing directly mirrors) already moves real focus rather\nthan merely a virtual `aria-activedescendant` pointer. `role`/`tabIndex`\nare consistently the menu-button shape throughout — never mixed with\nlistbox/option.\n\nInteraction contract (mirrors the WAI-ARIA APG \"menu button\" pattern):\n- Click the trigger (or Enter/Space on it, via the trigger's own native\n `click` activation) toggles the menu, moving focus to the first\n non-disabled item on open.\n- ArrowDown/ArrowUp on the trigger while closed also open it, focusing the\n first/last non-disabled item respectively.\n- Once open, ArrowDown/ArrowUp move the roving focus among non-disabled\n items (wrapping past either end — the recommended, and more common,\n menu-widget behavior, unlike `<lr-select>`'s clamped listbox nav).\n Home/End jump to the first/last non-disabled item. Enter/Space activate\n the focused item. Escape closes and returns focus to the trigger. A\n printable keypress runs type-ahead: roving focus jumps to the next\n non-disabled item whose text starts with the accumulated buffer, cycling\n from just after the active item (mirrors `<lr-select>`'s identical\n listbox type-ahead). All of the above (except Escape and Tab) only\n respond to keydowns from a real `<lr-menu-item>` target, so a slotted\n non-item control (e.g. a date input) keeps its own full default keyboard\n behavior.\n- Tab never traps focus and never calls `preventDefault()` — the browser's\n own Tab navigation always proceeds untouched. It closes the menu only\n when focus is on its way *out* of the popup: with a focusable in the\n `header`/`footer` region on the far side of the keypress, the menu stays\n open so native Tab can carry focus there instead. With neither region\n filled, Tab closes exactly as it always has. Tabbing past the popup's\n last focusable in either direction closes it too, including from slotted\n non-item content — which previously left the menu open while focus\n walked away.\n- Escape from `header`/`footer` content closes the menu and refocuses the\n trigger unconditionally, mirroring `<lr-popover>`'s handling of arbitrary\n popup content. `closeOnEscapeAnywhere` governs only the *legacy* shape —\n non-item content slotted into the **default** slot — and defaults to\n `false`, so existing consumers keep today's behavior unchanged.\n- A click outside both the trigger and the open popup closes it (mirrors\n `<lr-select>`'s `onDocPointer` exactly) — this does *not* refocus the\n trigger, since the outside click itself already moved focus somewhere\n the user chose; Escape and a committed selection *do* refocus the\n trigger, since those are dismissals with nowhere else for focus to go.\n\n`show(focus?)` and `hide(options?)` are the public imperative pair, for the cases the trigger\ncan't express: a slotted \"Apply\"/\"Done\" button inside the menu, a keyboard shortcut, a parent\nrestoring UI state. `hide({ focusTrigger: true })` is the one that also returns DOM focus to the\ntrigger — use it whenever the interaction that closed the menu hasn't already put focus\nsomewhere the user chose. Writing `open` directly still works and is fully equivalent apart from\nthe focus moves: the roving-tabindex reset is centralized in `updated()`, so `el.open = false`\nnever leaves a stale `tabindex=\"0\"` tab stop on the last active item.\n\nThe trigger element itself is read from the `trigger` slot's assigned element (first one, if\nseveral are assigned) and enhanced imperatively with\n`aria-haspopup=\"menu\"`/`aria-expanded`/`aria-controls` — the same \"reach into a consumer-owned\nlight-DOM element to complete its a11y wiring\" approach `<lr-dialog>` documents for its own\nheading detection. `aria-controls` targets this menu host (which receives a stable generated\n`id` only when the consumer did not supply one), rather than a shadow-private popup id, so the\nrelationship is resolvable from the trigger's root. `<lr-button>` and `<lr-icon-button>` observe\nthose attributes, forward the popup/expanded values to their shadow-internal native controls,\nand resolve the controls element-reference onto that focused control.\n\nThe popup is always rendered (never `display:none`) so `.focus()` calls on\nits content work synchronously the instant it opens — visually hidden via\n`visibility`/`opacity` instead (identical to `<lr-select>`'s own\n`[part=\"listbox\"]`). `visibility` is an inherited CSS property that\npierces the `<slot>` projection boundary, so every closed-state\n`<lr-menu-item>` is automatically excluded from sequential (Tab-key)\nnavigation with no separate JS bookkeeping.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | `<lr-menu-item>` elements, plus optionally plain `<hr>` dividers between groups (native `<hr>` already carries an implicit `separator` role, matching what `role=\"menu\"` expects between item groups). Arbitrary non-item content still renders here for backward compatibility, but the `header`/`footer` slots below are the supported place for it. |\n| `footer` | Same as `header`, rendered below the items — an \"Apply\"/\"Done\" button, a link to a fuller settings page, a count. |\n| `header` | Composed content rendered above the items and *outside* the `role=\"menu\"` list — a filter/search field, a section title, a summary row. Keeps its own full default keyboard behavior, is reachable with Tab from the items, and is ARIA-valid (arbitrary content inside `role=\"menu\"` is not). Collapses to no box at all while unfilled. |\n| `trigger` | The consumer's own trigger element (typically an icon button). Clicking it toggles the menu; it's positioned against via `internal/positioner.js`'s `place()`. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `footer` | The wrapper around the `footer` slot, below the list and outside `role=\"menu\"`. `display: none` while the slot is unfilled. |\n| `header` | The wrapper around the `header` slot, above the list and outside `role=\"menu\"`. `display: none` while the slot is unfilled. |\n| `list` | The `role=\"menu\"` container wrapping the default slot. |\n| `popup` | The positioned floating panel. |\n| `trigger` | The wrapper around the `trigger` slot (the positioning anchor). |"
9221
9393
  },
9222
9394
  "attributes": [
9223
9395
  {
@@ -9231,7 +9403,7 @@
9231
9403
  "name": "label",
9232
9404
  "description": {
9233
9405
  "kind": "markdown",
9234
- "value": "Accessible name for the `role=\"menu\"` popup — override with something\nspecific (e.g. \"Row actions\") when a page has more than one menu.\nLocalized (`menuLabel`) when left at its default. A host-level\n`aria-label` attribute takes precedence over both this prop and the\nlocalized default, matching `lr-select`/`lr-model-select`'s\nestablished `this.getAttribute('aria-label') || <computed default>`\nprecedence (see `effectiveLabel`).\n\nType: `string` \nDefault: `'Menu'`"
9406
+ "value": "Accessible name for the `role=\"menu\"` popup — override with something\nspecific (e.g. \"Row actions\") when a page has more than one menu.\nLocalized (`menuLabel`) when left at its default. A host-level\n`aria-label` attribute takes precedence over both this prop and the\nlocalized default, matching `lr-select`/`lr-model-select`'s\nestablished `this.getAttribute('aria-label') || <computed default>`\nprecedence (see `effectiveLabel`).\n\nType: `string` \nDefault: `\"Menu\"`"
9235
9407
  }
9236
9408
  },
9237
9409
  {
@@ -9419,6 +9591,50 @@
9419
9591
  }
9420
9592
  ]
9421
9593
  },
9594
+ {
9595
+ "name": "lr-message-parts",
9596
+ "description": {
9597
+ "kind": "markdown",
9598
+ "value": "`<lr-message-parts>` — renders ordered, interleavable provider-neutral AI message parts. It\ncomposes Lyra's existing Markdown, reasoning, tool, citation, attachment, widget, JSON, and\nmedia primitives while keeping streaming order stable by part id.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `attachment` | An attachment part. |\n| `audio` | An audio part. |\n| `audio-transcript` | An audio part's transcript. |\n| `base` | The ordered message-part list. |\n| `citation` | A citation part. |\n| `data` | A data or widget part. |\n| `error` | An error part. |\n| `part` | Every rendered part wrapper. |\n| `part-streaming` | Additional part name on a streaming part. |\n| `reasoning` | A reasoning part. |\n| `retry` | A retryable error part's action. |\n| `text` | A text part. |\n| `tool-call` | A tool-call part. |\n| `tool-result` | A tool-result part. |"
9599
+ },
9600
+ "attributes": [
9601
+ {
9602
+ "name": "aria-label",
9603
+ "description": {
9604
+ "kind": "markdown",
9605
+ "value": "Type: `string | null` \nDefault: `null`"
9606
+ }
9607
+ },
9608
+ {
9609
+ "name": "label",
9610
+ "description": {
9611
+ "kind": "markdown",
9612
+ "value": "Type: `string` \nDefault: `''`"
9613
+ }
9614
+ },
9615
+ {
9616
+ "name": "locale",
9617
+ "description": {
9618
+ "kind": "markdown",
9619
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
9620
+ }
9621
+ },
9622
+ {
9623
+ "name": "render-markdown",
9624
+ "description": {
9625
+ "kind": "markdown",
9626
+ "value": "Render text parts as sanitized Markdown; `false` renders plain text.\n\nType: `boolean` \nDefault: `true`"
9627
+ }
9628
+ },
9629
+ {
9630
+ "name": "show-reasoning",
9631
+ "description": {
9632
+ "kind": "markdown",
9633
+ "value": "Include reasoning parts.\n\nType: `boolean` \nDefault: `true`"
9634
+ }
9635
+ }
9636
+ ]
9637
+ },
9422
9638
  {
9423
9639
  "name": "lr-mind-map",
9424
9640
  "description": {
@@ -9799,7 +10015,7 @@
9799
10015
  "name": "lr-notebook-viewer",
9800
10016
  "description": {
9801
10017
  "kind": "markdown",
9802
- "value": "`<lr-notebook-viewer>` — read-only Jupyter notebook (nbformat 4.x) renderer, composing existing\ncomponents per cell. Execution is a hard non-goal.\n\nMarkdown cells render through `<lr-markdown>`, code cells through `<lr-code-block>` (using the\nnotebook's kernel language for syntax highlighting), and raw cells as plain preformatted text. A\ncode cell's `execute_result`/`display_data` outputs prefer, in order, `image/png`, `image/jpeg`,\n`image/svg+xml` (sanitized), `text/html` (sanitized), `application/json` (via `<lr-json-viewer>`),\nthen `text/plain`. Stream/error outputs (tinted `danger` for stderr/tracebacks) interpret embedded\nANSI SGR color/style escapes via the shared `internal/ansi.ts` parser, same as `<lr-terminal>`.\nSanitizing raw HTML/SVG\noutput markup lazy-loads the optional peer dependency `dompurify` via `dompurify-loader.ts`; when\nthat peer isn't installed, the output renders a localized notice instead of raw markup.\n\nCells are virtualized through `<lr-virtual-list>` so a notebook with many cells stays cheap to\nscroll. `node-path` anchors resolve `path[0]` as a cell index; `fragment` anchors resolve a cell's\nown `id`.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root scroll container. |\n| `cell` | One cell row (`data-cell-type`, `data-active`). |\n| `cell-active` | Added alongside `cell` on the cell an anchor currently targets. A second part name rather than an attribute selector, because Shadow Parts forbids an attribute selector after `::part()`. |\n| `cell-gutter` | The `In [n]`/`Out [n]` label column. |\n| `cell-source` | A cell's source content. |\n| `error` | The error region. |\n| `error-output-label` | The label introducing an error output's traceback. |\n| `output` | One output (`data-output-type`, `data-stream`). |\n| `output-error` | Added alongside `output` on a stderr stream or an error output. |\n| `output-toggle` | Expands/collapses a long text output. |\n| `outputs` | The wrapper around a code cell's outputs. |\n| `spinner` | The loading status region. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-notebook-viewer-max-height` (default: `none`) — Maximum block size of the scrollable body before it scrolls internally. Also settable via the `max-height` property.\n- `--lr-notebook-viewer-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the `[part=\"cell\"]` currently targeted by an anchor."
10018
+ "value": "`<lr-notebook-viewer>` — read-only Jupyter notebook (nbformat 4.x) renderer, composing existing\ncomponents per cell. Execution is a hard non-goal.\n\nMarkdown cells render through `<lr-markdown>`, code cells through `<lr-code-block>` (using the\nnotebook's kernel language for syntax highlighting), and raw cells as plain preformatted text. A\ncode cell's `execute_result`/`display_data` outputs prefer, in order, `image/png`, `image/jpeg`,\n`image/svg+xml` (sanitized), `text/html` (sanitized), `application/json` (via `<lr-json-viewer>`),\nthen `text/plain`. Stream/error outputs (tinted `danger` for stderr/tracebacks) interpret embedded\nANSI SGR color/style escapes via the shared `internal/ansi.ts` parser, same as `<lr-terminal>`.\nSanitizing raw HTML/SVG\noutput markup lazy-loads the optional peer dependency `dompurify` via `dompurify-loader.ts`; when\nthat peer isn't installed, the output renders a localized notice instead of raw markup.\n\nCells are virtualized through `<lr-virtual-list>` so a notebook with many cells stays cheap to\nscroll. `node-path` anchors resolve `path[0]` as a cell index; `fragment` anchors resolve a cell's\nown `id`.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root scroll container. |\n| `cell` | One cell row (`data-cell-type`, `data-active`). |\n| `cell-active` | Added alongside `cell` on the cell currently targeted by an anchor or the active search match. A second part name rather than an attribute selector, because Shadow Parts forbids an attribute selector after `::part()`. |\n| `cell-gutter` | The `In [n]`/`Out [n]` label column. |\n| `cell-source` | A cell's source content. |\n| `error` | The error region. |\n| `error-output-label` | The label introducing an error output's traceback. |\n| `output` | One output (`data-output-type`, `data-stream`). |\n| `output-error` | Added alongside `output` on a stderr stream or an error output. |\n| `output-toggle` | Expands/collapses a long text output. |\n| `outputs` | The wrapper around a code cell's outputs. |\n| `raw-source` | A horizontally scrollable raw-cell source surface. |\n| `spinner` | The loading status region. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-notebook-viewer-max-height` (default: `none`) — Maximum block size of the scrollable body before it scrolls internally. Also settable via the `max-height` property.\n- `--lr-notebook-viewer-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the `[part=\"cell\"]` currently targeted by an anchor or the active search match."
9803
10019
  },
9804
10020
  "attributes": [
9805
10021
  {
@@ -10129,7 +10345,7 @@
10129
10345
  "name": "lr-pagination",
10130
10346
  "description": {
10131
10347
  "kind": "markdown",
10132
- "value": "`<lr-pagination>` — controlled, server-friendly page navigation with an\neditable page jump and optional item-range summary.\n\nThe component never mutates `page`. Activating a control emits\n`lr-page-change`; the consumer applies the requested page after its own\nrouting or data-fetch decision. Once the `page` property changes, a polite\nlive region announces the applied page.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The navigation wrapper. |\n| `controls` | The previous/page/next control group. |\n| `live-region` | The visually hidden applied-page announcement. |\n| `next-button` | The next-page button. |\n| `next-icon` | The next-page directional icon. |\n| `page-count` | The total page count shown after the input. |\n| `page-field` | The current-page input and page-count wrapper. |\n| `page-input` | The validated numeric page-jump input. |\n| `previous-button` | The previous-page button. |\n| `previous-icon` | The previous-page directional icon. |\n| `summary` | The item-range summary. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-pagination-control-size` — Control inline/block size; defaults from the `size` variant.\n- `--lr-pagination-font-size` — Control font size; defaults from the `size` variant.\n- `--lr-pagination-control-padding` (default: `var(--lr-space-xs)`) — Inner padding of the nav buttons and the page input. Uniform across every `size` (the control footprint is fixed by `--lr-pagination-control-size`, so this only adjusts the icon/digit inset)."
10348
+ "value": "`<lr-pagination>` — controlled, server-friendly page navigation with an\neditable page jump and optional item-range summary.\n\nThe component never mutates `page`. Activating a control emits\n`lr-page-change`; the consumer applies the requested page after its own\nrouting or data-fetch decision. Once the `page` property changes, a polite\nlive region announces the applied page.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The navigation wrapper. |\n| `controls` | The previous/page/next control group. |\n| `live-region` | The visually hidden applied-page announcement. |\n| `next-button` | The next-page button. |\n| `next-icon` | The next-page directional icon. |\n| `page-count` | The total page count shown after the input. |\n| `page-field` | The current-page input and page-count wrapper. |\n| `page-input` | The validated numeric page-jump input. |\n| `previous-button` | The previous-page button. |\n| `previous-icon` | The previous-page directional icon. |\n| `summary` | The item-range summary. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-pagination-control-size` — Control inline/block size; defaults from the `size` variant.\n- `--lr-pagination-font-size` — Control font size; defaults from the `size` variant.\n- `--lr-pagination-control-radius` (default: `var(--lr-radius)`) — Border radius of navigation buttons and the page input.\n- `--lr-pagination-control-padding` (default: `var(--lr-space-xs)`) — Inner padding of the nav buttons and the page input. Uniform across every `size` (the control footprint is fixed by `--lr-pagination-control-size`, so this only adjusts the icon/digit inset)."
10133
10349
  },
10134
10350
  "attributes": [
10135
10351
  {
@@ -10310,7 +10526,7 @@
10310
10526
  "name": "lr-phone-input",
10311
10527
  "description": {
10312
10528
  "kind": "markdown",
10313
- "value": "`<lr-phone-input>` — a country-aware telephone field whose form value is\ncanonical E.164. National formatting and numbering-plan validation are\nsupplied through `adapter`; without one, already-international E.164 input\nremains useful and national input stays editable with `incomplete` validity.\n\nUser edits emit native-style `input` and `change` events. Event detail\nexposes both the canonical `value` and editable `inputValue`; programmatic\nproperty changes are silent. Phone-number text is deliberately LTR while\nthe form chrome and country selector follow the inherited direction. A host\n`aria-label` names the internal telephone input and wins over every derived\nor component-specific fallback.\n\nThe country selector keeps the real, fully accessible native `<select>`\n(full country names in its popup, native mobile pickers, type-ahead) but\nrenders it invisibly over a compact visual trigger — selected alpha-2 code\nplus a design-system chevron — so long localized country names never clip\nthe closed control and the calling code isn't shown twice. With `flags`\nset, the trigger also shows the selected country's `<lr-flag>`; actual flag\nartwork still comes from the optional `@aceshooting/lyra-flags` peer,\nregistered by the consumer via `components/media/flag/flag-peer.js`\nexactly as for a standalone `<lr-flag>` (without that registration the\ntrigger simply omits the image). Native `<option>`s cannot contain\nelements, so the open popup remains text-only by platform design.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `country-prefix` | Optional visual displayed before the country selector, such as a flag. |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `calling-code` | The selected country's calling code. |\n| `country` | The country selector region (invisible native select over the visual trigger). |\n| `country-code` | The selected alpha-2 code (or placeholder text) inside the trigger. |\n| `country-prefix` | Optional country adornment slot wrapper. |\n| `country-select` | The native country selector, stretched invisibly over the trigger. |\n| `country-trigger` | The visible, decorative closed-state trigger. |\n| `error` | The error or validation message. |\n| `expand-icon` | The dropdown indicator inside the trigger. |\n| `flag` | The selected country's `<lr-flag>` inside the trigger (only with `flags`). |\n| `form-control` | The outer form-control wrapper. |\n| `form-control-label` | The visible label. |\n| `hint` | The hint message. |\n| `input` | The native telephone input. |\n| `input-wrapper` | The country selector and telephone input wrapper. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-phone-input-padding-block` — Input block-padding, scaled by `size`.\n- `--lr-phone-input-font-size` — Input/flag/country-code/calling-code font size, scaled by `size`.\n- `--lr-phone-input-control-min-height` — Input-wrapper block-size floor, scaled by `size`.\n- `--lr-phone-input-control-height` — Exact input-wrapper height. Unset by default, which leaves `--lr-phone-input-control-min-height` as a floor only; set it to a length to both floor and cap the row (e.g. to pixel-match a sibling field in the same toolbar row). Because it is never declared by the component itself, it can be set from an ancestor or an outer-tree rule as well as inline on the element."
10529
+ "value": "`<lr-phone-input>` — a country-aware telephone field whose form value is\ncanonical E.164. National formatting and numbering-plan validation are\nsupplied through `adapter`; without one, already-international E.164 input\nremains useful and national input stays editable with `incomplete` validity.\n\nUser edits emit native-style `input` and `change` events. Event detail\nexposes both the canonical `value` and editable `inputValue`; programmatic\nproperty changes are silent. Phone-number text is deliberately LTR while\nthe form chrome and country selector follow the inherited direction. A host\n`aria-label` names the internal telephone input and wins over every derived\nor component-specific fallback.\n\nThe country selector keeps the real, fully accessible native `<select>`\n(full country names in its popup, native mobile pickers, type-ahead) but\nrenders it invisibly over a compact visual trigger — selected alpha-2 code\nplus a design-system chevron — so long localized country names never clip\nthe closed control and the calling code isn't shown twice. With `flags`\nset, the trigger also shows the selected country's `<lr-flag>`; actual flag\nartwork still comes from the optional `@aceshooting/lyra-flags` peer,\nregistered by the consumer via `components/media/flag/flag-peer.js`\nexactly as for a standalone `<lr-flag>` (without that registration the\ntrigger simply omits the image). Native `<option>`s cannot contain\nelements, so the open popup remains text-only by platform design.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `country-prefix` | Optional visual displayed before the country selector, such as a flag. |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `calling-code` | The selected country's calling code. |\n| `country` | The country selector region (invisible native select over the visual trigger). |\n| `country-code` | The selected alpha-2 code (or placeholder text) inside the trigger. |\n| `country-prefix` | Optional country adornment slot wrapper. |\n| `country-select` | The native country selector, stretched invisibly over the trigger. |\n| `country-trigger` | The visible, decorative closed-state trigger. |\n| `error` | The error or validation message. |\n| `expand-icon` | The dropdown indicator inside the trigger. |\n| `flag` | The selected country's `<lr-flag>` inside the trigger (only with `flags`). |\n| `form-control` | The outer form-control wrapper. |\n| `form-control-label` | The visible label. |\n| `hint` | The hint message. |\n| `input` | The native telephone input. |\n| `input-wrapper` | The country selector and telephone input wrapper. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-phone-input-padding-block` — Input block-padding, scaled by `size`.\n- `--lr-phone-input-font-size` — Input/flag/country-code/calling-code font size, scaled by `size`.\n- `--lr-phone-input-flag-size` — Selected flag size, scaled by `size`.\n- `--lr-phone-input-glyph-size` — Country selector glyph size, scaled by `size`.\n- `--lr-phone-input-gap` (default: `var(--lr-space-xs)`) — Country-trigger child gap.\n- `--lr-phone-input-radius` (default: `var(--lr-radius)`) — Input-wrapper corner radius.\n- `--lr-phone-input-focus-border-color` (default: `var(--lr-color-brand)`) — Focused row border color.\n- `--lr-phone-input-invalid-border-color` (default: `var(--lr-color-danger)`) — Invalid row border color.\n- `--lr-phone-input-country-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Country trigger hover background.\n- `--lr-phone-input-control-min-height` — Input-wrapper block-size floor, scaled by `size`.\n- `--lr-phone-input-control-height` — Exact input-wrapper height. Unset by default, which leaves `--lr-phone-input-control-min-height` as a floor only; set it to a length to both floor and cap the row (e.g. to pixel-match a sibling field in the same toolbar row). Because it is never declared by the component itself, it can be set from an ancestor or an outer-tree rule as well as inline on the element."
10314
10530
  },
10315
10531
  "attributes": [
10316
10532
  {
@@ -10526,7 +10742,7 @@
10526
10742
  "name": "data-labels",
10527
10743
  "description": {
10528
10744
  "kind": "markdown",
10529
- "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
10745
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
10530
10746
  }
10531
10747
  },
10532
10748
  {
@@ -10668,7 +10884,7 @@
10668
10884
  "name": "loop",
10669
10885
  "description": {
10670
10886
  "kind": "markdown",
10671
- "value": "Whether playback wraps back to index 0 after the last step instead of pausing there. Defaults\n`true`; uses `trueDefaultBooleanConverter` (declared via `static properties` above) so plain\nHTML `loop=\"false\"` actually clears it -- Lit's default presence-based `type: Boolean`\nconverter cannot distinguish an absent attribute from the literal string `\"false\"`.\n\nType: `boolean` \nDefault: `true`"
10887
+ "value": "Type: `boolean` \nDefault: `true`"
10672
10888
  }
10673
10889
  },
10674
10890
  {
@@ -10719,7 +10935,7 @@
10719
10935
  "name": "data-labels",
10720
10936
  "description": {
10721
10937
  "kind": "markdown",
10722
- "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
10938
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
10723
10939
  }
10724
10940
  },
10725
10941
  {
@@ -10819,7 +11035,7 @@
10819
11035
  "name": "lr-policy-summary",
10820
11036
  "description": {
10821
11037
  "kind": "markdown",
10822
- "value": "`<lr-policy-summary>` — a read-only list of guardrail, permission, privacy, and tool-policy\ndecisions, each carrying an `allow` / `deny` / `needs-review` state and an always-visible,\naccessible explanation of why that decision was made -- never conveyed by color alone.\n\nComposes `<lr-badge>` for the compact per-decision state indicator and `<lr-callout inline>`\nfor the explanation text: the callout's own `role=\"alert\"`/`role=\"status\"` semantics already\ncarry the right urgency per state (`deny` renders as an alert, `allow`/`needs-review` as\nstatus), so this component only needs to pick the matching `variant` rather than re-implement\nthat wiring. `<lr-details>` renders a decision's optional richer `detail` (matched rule text,\npolicy id, cited evidence) behind progressive disclosure, collapsed by default, instead of\nalways showing it alongside the shorter `explanation`.\n\n`decisions` is controlled and never mutated by this component -- pass a new array (e.g. as a\nguardrail pipeline resolves) to update it. This is a summary surface, not an approval gate:\nthere is no per-decision action here, and a decision's `state` is fixed data, not something a\nviewer can change from this component.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper, only rendered while `decisions` is non-empty. |\n| `category` | The decision's localized category text. |\n| `count` | One state's localized count text; carries `data-state`. |\n| `decision` | One decision row (`role=\"listitem\"`); carries `data-state` and `data-category`. |\n| `decision-header` | The row's category/label/state-badge line. |\n| `detail` | The `<lr-details>` progressive-disclosure panel for `detail`, only rendered when a decision defines one. |\n| `empty` | The `<lr-empty>` shown when `decisions` is empty. |\n| `explanation` | The `<lr-callout inline>` wrapping the always-visible `explanation` text. |\n| `label` | The decision's `label` text. |\n| `list` | The `role=\"list\"` wrapper around every decision row. Its accessible name defaults to the localized `policySummaryLabel`, but a host-level `aria-label` on `<lr-policy-summary>` wins over that default. |\n| `state-badge` | The resolved `<lr-badge>` state indicator. |\n| `summary` | The always-visible allow/deny/needs-review count row. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-policy-summary-count-allow-color` (default: `var(--lr-color-success)`) — Text color of the `allow` count.\n- `--lr-policy-summary-count-deny-color` (default: `var(--lr-color-danger)`) — Text color of the `deny` count.\n- `--lr-policy-summary-count-needs-review-color` (default: `var(--lr-color-warning)`) — Text color of the `needs-review` count. Restyling a state count otherwise requires overriding the library-wide status tokens, since `::part(count)[data-state]` is invalid CSS."
11038
+ "value": "`<lr-policy-summary>` — a read-only list of guardrail, permission, privacy, and tool-policy\ndecisions, each carrying an `allow` / `deny` / `needs-review` state and an always-visible,\naccessible explanation of why that decision was made -- never conveyed by color alone.\n\nComposes `<lr-badge>` for the compact per-decision state indicator and renders the historical\nexplanation as ordinary text, so mounting an existing policy record does not announce it as a\nfresh alert or status change. `<lr-details>` renders a decision's optional richer `detail` (matched rule text,\npolicy id, cited evidence) behind progressive disclosure, collapsed by default, instead of\nalways showing it alongside the shorter `explanation`.\n\n`decisions` is controlled and never mutated by this component -- pass a new array (e.g. as a\nguardrail pipeline resolves) to update it. This is a summary surface, not an approval gate:\nthere is no per-decision action here, and a decision's `state` is fixed data, not something a\nviewer can change from this component.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper, only rendered while `decisions` is non-empty. |\n| `category` | The decision's localized category text. |\n| `count` | One state's localized count text; carries `data-state`. |\n| `decision` | One decision row (`role=\"listitem\"`); carries `data-state` and `data-category`. |\n| `decision-header` | The row's category/label/state-badge line. |\n| `detail` | The `<lr-details>` progressive-disclosure panel for `detail`, only rendered when a decision defines one. |\n| `empty` | The `<lr-empty>` shown when `decisions` is empty. |\n| `explanation` | The always-visible historical `explanation` text. |\n| `label` | The decision's `label` text. |\n| `list` | The `role=\"list\"` wrapper around every decision row. Its accessible name defaults to the localized `policySummaryLabel`, but a host-level `aria-label` on `<lr-policy-summary>` wins over that default. |\n| `state-badge` | The resolved `<lr-badge>` state indicator. |\n| `summary` | The always-visible allow/deny/needs-review count row. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-policy-summary-count-allow-color` (default: `var(--lr-color-success)`) — Text color of the `allow` count.\n- `--lr-policy-summary-count-deny-color` (default: `var(--lr-color-danger)`) — Text color of the `deny` count.\n- `--lr-policy-summary-count-needs-review-color` (default: `var(--lr-color-warning)`) — Text color of the `needs-review` count. Restyling a state count otherwise requires overriding the library-wide status tokens, since `::part(count)[data-state]` is invalid CSS."
10823
11039
  },
10824
11040
  "attributes": [
10825
11041
  {
@@ -10835,14 +11051,14 @@
10835
11051
  "name": "lr-poll-status",
10836
11052
  "description": {
10837
11053
  "kind": "markdown",
10838
- "value": "`<lr-poll-status>` — a \"next scheduled refresh\" countdown with a built-in pause control: a\nticking `M:SS` display counting down to the next scheduled action, a \"Refreshing…\" state at\nzero, a \"Paused\" state while `paused` (instead of freezing on a stale value), and a\npause/resume toggle. First-party invention (no Web Awesome equivalent); the\nclosest existing component, `lr-stream-status`, is scoped to transport/connection-health\nphases, a different concern from a scheduled-interval countdown -- this mirrors its internal\n`<lr-live-region>` composition for accessible phase-transition announcements.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `countdown` | The `M:SS` text (or \"Refreshing…\" once due, or \"Paused\" while `paused`). |\n| `indicator` | The pulsing status dot. |\n| `pause-button` | The built-in pause/resume toggle. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-poll-status-due-bg` (default: `var(--lr-color-success)`) — Background of `indicator` while `data-due` is set, without repainting every other component that reuses the shared success token."
11054
+ "value": "`<lr-poll-status>` — a \"next scheduled refresh\" countdown with a built-in pause control: a\nticking `M:SS` display counting down to the next scheduled action, a \"Refreshing…\" state at\nzero, a localized inactive state while `active` is false, a \"Paused\" state\nwhile `paused` (instead of freezing on a stale value), and a pause/resume\ntoggle. First-party invention (no Web Awesome equivalent); the\nclosest existing component, `lr-stream-status`, is scoped to transport/connection-health\nphases, a different concern from a scheduled-interval countdown -- this mirrors its internal\n`<lr-live-region>` composition for accessible phase-transition announcements.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `countdown` | The localized `M:SS` text, or the refreshing, paused, or inactive state. |\n| `indicator` | The pulsing status dot. |\n| `pause-button` | The built-in pause/resume toggle. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-poll-status-due-bg` (default: `var(--lr-color-success)`) — Background of `indicator` while `data-due` is set, without repainting every other component that reuses the shared success token."
10839
11055
  },
10840
11056
  "attributes": [
10841
11057
  {
10842
11058
  "name": "active",
10843
11059
  "description": {
10844
11060
  "kind": "markdown",
10845
- "value": "Whether the poll cycle is running at all. `true` (the default).\n\nType: `boolean` \nDefault: `true`"
11061
+ "value": "Whether the poll cycle is running at all. While false, the component\nclears due/countdown semantics and disables its pause action.\n\nType: `boolean` \nDefault: `true`"
10846
11062
  }
10847
11063
  },
10848
11064
  {
@@ -10900,7 +11116,7 @@
10900
11116
  "name": "open",
10901
11117
  "description": {
10902
11118
  "kind": "markdown",
10903
- "value": "Type: `boolean` \nDefault: `false`"
11119
+ "value": "Type: `boolean`"
10904
11120
  }
10905
11121
  },
10906
11122
  {
@@ -10960,7 +11176,7 @@
10960
11176
  "name": "lr-progress-bar",
10961
11177
  "description": {
10962
11178
  "kind": "markdown",
10963
- "value": "`<lr-progress-bar>` — a determinate or indeterminate progress indicator.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `label` | Optional label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The progress wrapper. |\n| `indicator` | The filled progress indicator. |\n| `label` | The label row. |\n| `track` | The track. |"
11179
+ "value": "`<lr-progress-bar>` — a determinate or indeterminate progress indicator.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `label` | Optional label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The progress wrapper. |\n| `indicator` | The filled progress indicator. |\n| `label` | The label row. |\n| `track` | The track. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-progress-height` (default: `var(--lr-size-0-5rem)`) — Block size of the progress track.\n- `--lr-progress-duration` (default: `var(--lr-transition-ambient)`) — Indeterminate sweep timing."
10964
11180
  },
10965
11181
  "attributes": [
10966
11182
  {
@@ -11018,7 +11234,7 @@
11018
11234
  "name": "lr-progress-ring",
11019
11235
  "description": {
11020
11236
  "kind": "markdown",
11021
- "value": "`<lr-progress-ring>` — a circular determinate or indeterminate progress indicator.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Optional center label. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The progress wrapper. |\n| `indicator` | The SVG indicator. |\n| `label` | The center label. |\n| `track` | The SVG track. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-progress-ring-size` (default: `var(--lr-size-2-5rem)`) — Outer diameter of the ring."
11237
+ "value": "`<lr-progress-ring>` — a circular determinate or indeterminate progress indicator.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Optional center label. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The progress wrapper. |\n| `indicator` | The SVG indicator. |\n| `label` | The center label. |\n| `track` | The SVG track. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-progress-ring-size` (default: `var(--lr-size-2-5rem)`) — Outer diameter of the ring.\n- `--lr-progress-duration` (default: `var(--lr-transition-ambient)`) — Indeterminate rotation timing."
11022
11238
  },
11023
11239
  "attributes": [
11024
11240
  {
@@ -11059,40 +11275,17 @@
11059
11275
  ]
11060
11276
  },
11061
11277
  {
11062
- "name": "lr-provenance-panel",
11063
- "description": {
11064
- "kind": "markdown",
11065
- "value": "`<lr-provenance-panel>` — the grounding breakdown for one answer: a sectioned disclosure\npanel (Entities / Relationships / Communities / Text chunks) composing this family's own pieces.\nThe chat <-> graph <-> document glue component. Pure projection + event conduit: no fetching, no\ngraph/viewer imports, no persistence.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `body` | A section's content wrapper, `hidden` while collapsed. |\n| `count` | A section's item-count badge. |\n| `empty` | The empty state, shown when every section is empty. |\n| `header` | A section's disclosure `<button>`. |\n| `section` | One section's wrapper. |"
11066
- },
11067
- "attributes": [
11068
- {
11069
- "name": "label",
11070
- "description": {
11071
- "kind": "markdown",
11072
- "value": "Type: `string` \nDefault: `''`"
11073
- }
11074
- },
11075
- {
11076
- "name": "locale",
11077
- "description": {
11078
- "kind": "markdown",
11079
- "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
11080
- }
11081
- }
11082
- ]
11083
- },
11084
- {
11085
- "name": "lr-push-to-talk",
11278
+ "name": "lr-prompt-input",
11086
11279
  "description": {
11087
11280
  "kind": "markdown",
11088
- "value": "`<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.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `icon` | Replaces the default mic glyph. |\n| `recording-icon` | Replaces the default recording-state pulse glyph. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `icon` | Wrapper around the `icon` slot / default mic glyph. |\n| `pulse` | Wrapper around the `recording-icon` slot / default pulse glyph, rendered only while recording. |\n| `status` | Visible status text for the `requesting`/`denied`/`error`/unsupported states. |\n| `timer` | The `M:SS` elapsed-time readout, rendered only while recording and `show-timer`. |\n| `trigger` | The capture button. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-push-to-talk-size` (default: `var(--lr-size-3rem)`) Inline and block size of the circular `trigger` button.\n- `--lr-push-to-talk-recording-color` (default: `var(--lr-color-danger)`) Border and text color of `[part=\"trigger\"]` while `state` is `recording`. Recolors only the recording treatment, leaving every other danger-toned surface on the page untouched."
11281
+ "value": "`<lr-prompt-input>` — a composed AI prompt surface combining the chat composer with attachments,\nmodel and voice selection, retrieval sources, mentions, slash commands, and a queued-turn list.\nIt performs no upload, model call, retrieval, or persistence.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `chips` | Replaces the data-driven attachment chips. |\n| `controls` | Replaces the data-driven model, voice, and source controls. |\n| `footer` | Content below the composer. |\n| `leading` | Replaces the default attachment trigger. |\n| `trailing` | Replaces the composer's send/stop action. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The prompt surface. |\n| `chips` | The attachment-chip tray. |\n| `composer` | The composed chat composer. |\n| `controls` | Model, voice, and source controls. |\n| `footer` | The footer slot. |\n| `leading` | The composer's leading attachment control. |\n| `queue` | The composed prompt queue. |\n| `source-picker` | The composed source picker. |\n| `sources` | The collapsible source-picker region. |\n| `sources-summary` | The source-picker disclosure. |"
11089
11282
  },
11090
11283
  "attributes": [
11091
11284
  {
11092
- "name": "device-id",
11285
+ "name": "aria-label",
11093
11286
  "description": {
11094
11287
  "kind": "markdown",
11095
- "value": "Type: `string` \nDefault: `''`"
11288
+ "value": "Type: `string | null` \nDefault: `null`"
11096
11289
  }
11097
11290
  },
11098
11291
  {
@@ -11103,10 +11296,10 @@
11103
11296
  }
11104
11297
  },
11105
11298
  {
11106
- "name": "level-events",
11299
+ "name": "label",
11107
11300
  "description": {
11108
11301
  "kind": "markdown",
11109
- "value": "Type: `boolean` \nDefault: `false`"
11302
+ "value": "Type: `string` \nDefault: `''`"
11110
11303
  }
11111
11304
  },
11112
11305
  {
@@ -11117,44 +11310,234 @@
11117
11310
  }
11118
11311
  },
11119
11312
  {
11120
- "name": "max-duration-ms",
11313
+ "name": "model",
11121
11314
  "description": {
11122
11315
  "kind": "markdown",
11123
- "value": "`> 0` auto-stops the take at this many milliseconds (a stuck-key guard); `0` (the default)\nnever auto-stops. Clamped to `[1, MAX_TIMEOUT_MS]` at the point it's handed to `setTimeout()`\n-- see `start()` -- the browser timer ceiling, matching `lr-playback`'s `interval-ms`\nhandling of its own duration-like property.\n\nType: `number` \nDefault: `0`"
11316
+ "value": "Type: `string` \nDefault: `''`"
11124
11317
  }
11125
11318
  },
11126
11319
  {
11127
- "name": "mime-type",
11320
+ "name": "placeholder",
11128
11321
  "description": {
11129
11322
  "kind": "markdown",
11130
11323
  "value": "Type: `string` \nDefault: `''`"
11131
11324
  }
11132
11325
  },
11133
11326
  {
11134
- "name": "mode",
11327
+ "name": "status",
11135
11328
  "description": {
11136
11329
  "kind": "markdown",
11137
- "value": "Type: `PushToTalkMode` \nDefault: `'hold'`"
11330
+ "value": "Type: `ChatComposerStatus` \nDefault: `'idle'`"
11138
11331
  }
11139
11332
  },
11140
11333
  {
11141
- "name": "show-timer",
11334
+ "name": "submit-on-enter",
11142
11335
  "description": {
11143
11336
  "kind": "markdown",
11144
11337
  "value": "Type: `boolean` \nDefault: `true`"
11145
11338
  }
11146
11339
  },
11147
11340
  {
11148
- "name": "timeslice-ms",
11341
+ "name": "value",
11149
11342
  "description": {
11150
11343
  "kind": "markdown",
11151
- "value": "`> 0` requests periodic `lr-record-chunk` slices from `MediaRecorder` every this-many\nmilliseconds; `0` (the default) requests one slice at stop. Clamped to\n`[1, MAX_TIMEOUT_MS]` at the point it's handed to `MediaRecorder.start()` -- see `start()` --\nso a non-finite/oversized value can't reach that native API unsanitized.\n\nType: `number` \nDefault: `0`"
11344
+ "value": "Type: `string` \nDefault: `''`"
11345
+ }
11346
+ },
11347
+ {
11348
+ "name": "voice",
11349
+ "description": {
11350
+ "kind": "markdown",
11351
+ "value": "Type: `string` \nDefault: `''`"
11152
11352
  }
11153
11353
  }
11154
11354
  ]
11155
11355
  },
11156
11356
  {
11157
- "name": "lr-qr-code",
11357
+ "name": "lr-prompt-queue",
11358
+ "description": {
11359
+ "kind": "markdown",
11360
+ "value": "`<lr-prompt-queue>` — a controlled queue of follow-up prompts that can be edited, reordered,\nremoved, or sent immediately while another agent turn is active.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `action` | Every item action. |\n| `actions` | One item's action row. |\n| `base` | The queue wrapper. |\n| `editor` | A queued prompt editor. |\n| `empty` | The empty state. |\n| `heading` | The queue heading. |\n| `item` | One queued prompt. |\n| `list` | The ordered queue list. |\n| `value` | Read-only prompt text when `editable` is false. |"
11361
+ },
11362
+ "attributes": [
11363
+ {
11364
+ "name": "aria-label",
11365
+ "description": {
11366
+ "kind": "markdown",
11367
+ "value": "Type: `string | null` \nDefault: `null`"
11368
+ }
11369
+ },
11370
+ {
11371
+ "name": "disabled",
11372
+ "description": {
11373
+ "kind": "markdown",
11374
+ "value": "Type: `boolean` \nDefault: `false`"
11375
+ }
11376
+ },
11377
+ {
11378
+ "name": "editable",
11379
+ "description": {
11380
+ "kind": "markdown",
11381
+ "value": "Type: `boolean` \nDefault: `true`"
11382
+ }
11383
+ },
11384
+ {
11385
+ "name": "label",
11386
+ "description": {
11387
+ "kind": "markdown",
11388
+ "value": "Type: `string` \nDefault: `''`"
11389
+ }
11390
+ },
11391
+ {
11392
+ "name": "locale",
11393
+ "description": {
11394
+ "kind": "markdown",
11395
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
11396
+ }
11397
+ }
11398
+ ]
11399
+ },
11400
+ {
11401
+ "name": "lr-prompt-studio",
11402
+ "description": {
11403
+ "kind": "markdown",
11404
+ "value": "`<lr-prompt-studio>` — a provider-neutral prompt-development workbench for ordered role\nmessages, `{{variable}}` substitution, version selection, preview, save, and run intents.\nThe host owns persistence and model execution.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `add-message` | The add-message action. |\n| `base` | The named studio region. |\n| `editor` | Messages and variables workspace. |\n| `message` | One prompt message. |\n| `message-content` | A message textarea. |\n| `message-role` | A message role selector. |\n| `messages` | Ordered prompt-message editor. |\n| `preview` | Resolved read-only preview. |\n| `remove-message` | A message removal action. |\n| `run` | The run action. |\n| `save` | The save action. |\n| `toolbar` | Save/run controls. |\n| `variable` | One variable row. |\n| `variables` | Variable editor. |\n| `version` | One saved version. |\n| `versions` | Saved-version controls. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-prompt-studio-field-hover-border` (default: `var(--lr-color-brand)`) — Enabled field hover border.\n- `--lr-prompt-studio-version-selected-border` (default: `var(--lr-color-brand)`) — Selected version border.\n- `--lr-prompt-studio-version-selected-bg` (default: `var(--lr-color-brand-quiet)`) — Selected version background.\n- `--lr-prompt-studio-version-selected-color` (default: `var(--lr-color-text)`) — Selected version foreground.\n- `--lr-prompt-studio-version-selected-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Selected version hover background."
11405
+ },
11406
+ "attributes": [
11407
+ {
11408
+ "name": "disabled",
11409
+ "description": {
11410
+ "kind": "markdown",
11411
+ "value": "Type: `boolean` \nDefault: `false`"
11412
+ }
11413
+ },
11414
+ {
11415
+ "name": "label",
11416
+ "description": {
11417
+ "kind": "markdown",
11418
+ "value": "Type: `string` \nDefault: `''`"
11419
+ }
11420
+ },
11421
+ {
11422
+ "name": "locale",
11423
+ "description": {
11424
+ "kind": "markdown",
11425
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
11426
+ }
11427
+ },
11428
+ {
11429
+ "name": "running",
11430
+ "description": {
11431
+ "kind": "markdown",
11432
+ "value": "Type: `boolean` \nDefault: `false`"
11433
+ }
11434
+ },
11435
+ {
11436
+ "name": "selected-version-id",
11437
+ "description": {
11438
+ "kind": "markdown",
11439
+ "value": "Type: `string` \nDefault: `''`"
11440
+ }
11441
+ }
11442
+ ]
11443
+ },
11444
+ {
11445
+ "name": "lr-provenance-panel",
11446
+ "description": {
11447
+ "kind": "markdown",
11448
+ "value": "`<lr-provenance-panel>` — the grounding breakdown for one answer: a sectioned disclosure\npanel (Entities / Relationships / Communities / Text chunks) composing this family's own pieces.\nThe chat <-> graph <-> document glue component. Pure projection + event conduit: no fetching, no\ngraph/viewer imports, no persistence.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `body` | A section's content wrapper, `hidden` while collapsed. |\n| `count` | A section's item-count badge. |\n| `empty` | The empty state, shown when every section is empty. |\n| `header` | A section's disclosure `<button>`. |\n| `section` | One section's wrapper. |"
11449
+ },
11450
+ "attributes": [
11451
+ {
11452
+ "name": "label",
11453
+ "description": {
11454
+ "kind": "markdown",
11455
+ "value": "Type: `string` \nDefault: `''`"
11456
+ }
11457
+ },
11458
+ {
11459
+ "name": "locale",
11460
+ "description": {
11461
+ "kind": "markdown",
11462
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
11463
+ }
11464
+ }
11465
+ ]
11466
+ },
11467
+ {
11468
+ "name": "lr-push-to-talk",
11469
+ "description": {
11470
+ "kind": "markdown",
11471
+ "value": "`<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.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `icon` | Replaces the default mic glyph. |\n| `recording-icon` | Replaces the default recording-state pulse glyph. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `icon` | Wrapper around the `icon` slot / default mic glyph. |\n| `pulse` | Wrapper around the `recording-icon` slot / default pulse glyph, rendered only while recording. |\n| `status` | Visible status text for the `requesting`/`denied`/`error`/unsupported states. |\n| `timer` | The `M:SS` elapsed-time readout, rendered only while recording and `show-timer`. |\n| `trigger` | The capture button. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-push-to-talk-size` (default: `var(--lr-size-3rem)`) — Inline and block size of the circular `trigger` button.\n- `--lr-push-to-talk-recording-color` (default: `var(--lr-color-danger)`) — Border and text color of `[part=\"trigger\"]` while `state` is `recording`. Recolors only the recording treatment, leaving every other danger-toned surface on the page untouched."
11472
+ },
11473
+ "attributes": [
11474
+ {
11475
+ "name": "device-id",
11476
+ "description": {
11477
+ "kind": "markdown",
11478
+ "value": "Type: `string` \nDefault: `''`"
11479
+ }
11480
+ },
11481
+ {
11482
+ "name": "disabled",
11483
+ "description": {
11484
+ "kind": "markdown",
11485
+ "value": "Type: `boolean` \nDefault: `false`"
11486
+ }
11487
+ },
11488
+ {
11489
+ "name": "level-events",
11490
+ "description": {
11491
+ "kind": "markdown",
11492
+ "value": "Type: `boolean` \nDefault: `false`"
11493
+ }
11494
+ },
11495
+ {
11496
+ "name": "locale",
11497
+ "description": {
11498
+ "kind": "markdown",
11499
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
11500
+ }
11501
+ },
11502
+ {
11503
+ "name": "max-duration-ms",
11504
+ "description": {
11505
+ "kind": "markdown",
11506
+ "value": "`> 0` auto-stops the take at this many milliseconds (a stuck-key guard); `0` (the default)\nnever auto-stops. Clamped to `[1, MAX_TIMEOUT_MS]` at the point it's handed to `setTimeout()`\n-- see `start()` -- the browser timer ceiling, matching `lr-playback`'s `interval-ms`\nhandling of its own duration-like property.\n\nType: `number` \nDefault: `0`"
11507
+ }
11508
+ },
11509
+ {
11510
+ "name": "mime-type",
11511
+ "description": {
11512
+ "kind": "markdown",
11513
+ "value": "Type: `string` \nDefault: `''`"
11514
+ }
11515
+ },
11516
+ {
11517
+ "name": "mode",
11518
+ "description": {
11519
+ "kind": "markdown",
11520
+ "value": "Type: `PushToTalkMode` \nDefault: `'hold'`"
11521
+ }
11522
+ },
11523
+ {
11524
+ "name": "show-timer",
11525
+ "description": {
11526
+ "kind": "markdown",
11527
+ "value": "Type: `boolean` \nDefault: `true`"
11528
+ }
11529
+ },
11530
+ {
11531
+ "name": "timeslice-ms",
11532
+ "description": {
11533
+ "kind": "markdown",
11534
+ "value": "`> 0` requests periodic `lr-record-chunk` slices from `MediaRecorder` every this-many\nmilliseconds; `0` (the default) requests one slice at stop. Clamped to\n`[1, MAX_TIMEOUT_MS]` at the point it's handed to `MediaRecorder.start()` -- see `start()` --\nso a non-finite/oversized value can't reach that native API unsanitized.\n\nType: `number` \nDefault: `0`"
11535
+ }
11536
+ }
11537
+ ]
11538
+ },
11539
+ {
11540
+ "name": "lr-qr-code",
11158
11541
  "description": {
11159
11542
  "kind": "markdown",
11160
11543
  "value": "`<lr-qr-code>` -- encodes `value` as a QR symbol with the optional\n`qrcode` peer dependency (Reed-Solomon error correction and every other\nalgorithmic step of the QR spec is delegated to that library, never\nhand-rolled) and draws the resulting module matrix onto a canvas itself,\none square (optionally rounded) cell per module, with a light quiet-zone\nmargin baked in around the symbol so it stays scannable out of the box\nwith zero consumer configuration. Extra host CSS `padding` around the\nelement adds further breathing room on top of that baked-in margin, but is\nnot required for baseline scannability.\n\nThe canvas -- not the host -- owns `role=\"img\"` and the accessible name,\nsince it is the one meaningful descendant here (mirrors\n`lr-file-icon`'s single-image pattern rather than the composite-group\npattern used by `lr-heatmap`/`lr-word-cloud`). The accessible name\nresolves, in order: `label`, then a host `aria-label` attribute (forwarded\nonto the canvas), then `value` itself. An empty `value` renders\n`[part=\"empty\"]` instead of an `img`-role element -- there is nothing to\nencode or name.\n\n`--lr-qr-code-fill`/`--lr-qr-code-background` (dark/light modules)\ndefault to `--lr-color-text`/`--lr-color-surface`, which -- like every\nsemantic token in this library -- flip under a dark theme. That means the\n*default* rendering under a dark theme is a polarity-inverted QR code\n(light modules on a dark background) rather than the conventional\ndark-on-light. Contrast itself stays strong in both themes (these are the\napp's own high-contrast text/surface pair), so human legibility is\nunaffected -- only third-party barcode *scanner* robustness across\nless-tolerant scanning apps is the residual, consumer-overridable risk. A\nconsumer needing guaranteed cross-scanner compatibility regardless of page\ntheme should pin `--lr-qr-code-fill: #000` / `--lr-qr-code-background:\n#fff` explicitly at the point of use.\n\nDeliberately out of scope for this component, not oversights: logo/image\nembedding; a finder-pattern-corner accent color; auto-shrinking to fit a\nnarrow container (this component's `size` is a direct request for a\nspecific rendered pixel density, like `<img width height>` -- the consumer\npicks a size that fits their layout, this component never second-guesses\nit, though it still renders correctly at its default size inside a narrow\nallocation); form association (`value` is caller-supplied display data the\nuser doesn't edit through this component -- no `FormAssociated` mixin, no\nlabel/hint/error chrome, no `ElementInternals`); and any\nmotion/`prefers-reduced-motion` branch (nothing here animates). Keyboard\nfocus is likewise intentionally absent -- the canvas is a static image\nstanding in for `value`, structurally like `<img>`, not an interactive\ngrid.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The outer wrapper, sized to `size`×`size` CSS px in every state. |\n| `canvas` | The rendered QR code canvas. |\n| `empty` | Shown when `value` is empty. |\n| `error` | Shown when the peer is missing, or `value` failed to encode. |\n| `loading` | Shown while the optional `qrcode` peer is loading, the first time it's needed. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-qr-code-fill` (default: `var(--lr-color-text)`) — Dark/foreground module color.\n- `--lr-qr-code-background` (default: `var(--lr-color-surface)`) — Light/background module color, including the quiet zone."
@@ -11266,7 +11649,7 @@
11266
11649
  "name": "data-labels",
11267
11650
  "description": {
11268
11651
  "kind": "markdown",
11269
- "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
11652
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
11270
11653
  }
11271
11654
  },
11272
11655
  {
@@ -11527,6 +11910,13 @@
11527
11910
  "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
11528
11911
  }
11529
11912
  },
11913
+ {
11914
+ "name": "show-claims",
11915
+ "description": {
11916
+ "kind": "markdown",
11917
+ "value": "Type: `boolean` \nDefault: `true`"
11918
+ }
11919
+ },
11530
11920
  {
11531
11921
  "name": "show-sources",
11532
11922
  "description": {
@@ -11536,11 +11926,62 @@
11536
11926
  }
11537
11927
  ]
11538
11928
  },
11929
+ {
11930
+ "name": "lr-rag-eval-dashboard",
11931
+ "description": {
11932
+ "kind": "markdown",
11933
+ "value": "`<lr-rag-eval-dashboard>` — a controlled RAG quality overview with current metric cards,\nper-metric trends, evaluation slices, and run history. It displays host-computed metrics and\nnever executes datasets, retrieval, judges, or model calls.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The named dashboard region. |\n| `chart` | The active metric trend. |\n| `empty` | The empty state. |\n| `heading` | The visible dashboard heading. |\n| `metric` | One metric control. |\n| `metric-selected` | The controlled active metric. |\n| `metrics` | Metric-card controls. |\n| `run` | One evaluation run. |\n| `runs` | Evaluation run history. |\n| `runs-heading` | Run-history heading. |\n| `slice` | One slice filter. |\n| `slice-selected` | The controlled active slice. |\n| `slices` | Slice filter controls. |"
11934
+ },
11935
+ "attributes": [
11936
+ {
11937
+ "name": "chart-height",
11938
+ "description": {
11939
+ "kind": "markdown",
11940
+ "value": "Type: `string` \nDefault: `'220px'`"
11941
+ }
11942
+ },
11943
+ {
11944
+ "name": "label",
11945
+ "description": {
11946
+ "kind": "markdown",
11947
+ "value": "Type: `string` \nDefault: `''`"
11948
+ }
11949
+ },
11950
+ {
11951
+ "name": "locale",
11952
+ "description": {
11953
+ "kind": "markdown",
11954
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
11955
+ }
11956
+ },
11957
+ {
11958
+ "name": "metric-id",
11959
+ "description": {
11960
+ "kind": "markdown",
11961
+ "value": "Type: `string` \nDefault: `''`"
11962
+ }
11963
+ },
11964
+ {
11965
+ "name": "show-chart",
11966
+ "description": {
11967
+ "kind": "markdown",
11968
+ "value": "Type: `boolean` \nDefault: `true`"
11969
+ }
11970
+ },
11971
+ {
11972
+ "name": "slice",
11973
+ "description": {
11974
+ "kind": "markdown",
11975
+ "value": "Type: `string` \nDefault: `''`"
11976
+ }
11977
+ }
11978
+ ]
11979
+ },
11539
11980
  {
11540
11981
  "name": "lr-random-content",
11541
11982
  "description": {
11542
11983
  "kind": "markdown",
11543
- "value": "`<lr-random-content>` — displays a randomly (or sequentially) chosen\nsubset of its slotted children and hides the rest, for A/B copy testing,\ntestimonial/quote rotation, or varying marketing copy on each render or\ninterval without any custom JS beyond slotting the candidates.\n\nNot a form-associated control and has no textual chrome of its own — a\npure content-rotation primitive over caller-supplied children, so the\nlabel/hint/error frame doesn't apply.\n\nThe host renders `display: block` by default, like the rest of this\nfamily. A consumer needing an inline text-fragment swap inside a sentence\ncan override `lr-random-content { display: inline; }` from outside —\nthat isn't baked in here, since `display: contents` on the host risks\naccessibility-tree inconsistencies across engines.\n\nThere is no built-in trigger UI (no next/previous/shuffle button):\nselection is driven only by `autoplay`/`autoplayInterval` and the public\n`randomize()` method. Consequently there is no keyboard interaction and no\nRTL-aware arrow-key handling to implement here that guarantee only\napplies to components with roving/arrow-key navigation, which this one\nstructurally lacks.\n\n`fade-left`/`fade-right` are physical-direction transforms (matching the\nupstream naming this component mirrors), not \"previous/next\" navigational\nsemantics like a carousel chevron, so they are deliberately **not**\nmirrored under `:host(:dir(rtl))`.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The pool of candidate children. Only direct element children are eligible. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The wrapping element around the default slot. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-random-content-animation-duration` (default: `300ms`) — Duration of the entrance animation.\n- `--lr-random-content-animation-easing` (default: `ease`) — Easing function for the entrance animation.\n- `--lr-random-content-animation-translate` (default: `var(--lr-size-0-5em)`) — Translation distance for directional animations."
11984
+ "value": "`<lr-random-content>` — displays a randomly (or sequentially) chosen\nsubset of its slotted children and hides the rest, for A/B copy testing,\ntestimonial/quote rotation, or varying marketing copy on each render or\ninterval without any custom JS beyond slotting the candidates.\n\nNot a form-associated control: it is a content-rotation primitive over\ncaller-supplied children, so the label/hint/error frame doesn't apply.\nIts only built-in action is the autoplay pause/resume control.\n\nThe host renders `display: block` by default, like the rest of this\nfamily. A consumer needing an inline text-fragment swap inside a sentence\ncan override `lr-random-content { display: inline; }` from outside —\nthat isn't baked in here, since `display: contents` on the host risks\naccessibility-tree inconsistencies across engines.\n\nSelection is driven by `autoplay`/`autoplayInterval` and the public\n`randomize()` method. When autoplay is enabled, a built-in localized\npause/resume action exposes the reflected `paused` state. Rotation also\nsuspends while focus is anywhere inside the component and never hides a\nsubtree that currently owns focus.\n\n`fade-left`/`fade-right` are physical-direction transforms (matching the\nupstream naming this component mirrors), not \"previous/next\" navigational\nsemantics like a carousel chevron, so they are deliberately **not**\nmirrored under `:host(:dir(rtl))`.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The pool of candidate children. Only direct element children are eligible. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The wrapping element around the default slot. |\n| `pause-button` | The autoplay pause/resume action. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-random-content-animation-duration` (default: `300ms`) — Duration of the entrance animation.\n- `--lr-random-content-animation-easing` (default: `ease`) — Easing function for the entrance animation.\n- `--lr-random-content-animation-translate` (default: `var(--lr-size-0-5em)`) — Translation distance for directional animations."
11544
11985
  },
11545
11986
  "attributes": [
11546
11987
  {
@@ -11584,6 +12025,13 @@
11584
12025
  "kind": "markdown",
11585
12026
  "value": "Selection algorithm — see `randomize()`.\n\nType: `LyraRandomContentMode` \nDefault: `'unique'`"
11586
12027
  }
12028
+ },
12029
+ {
12030
+ "name": "paused",
12031
+ "description": {
12032
+ "kind": "markdown",
12033
+ "value": "Whether autoplay is user-paused. Reflected for external state styling.\n\nType: `boolean` \nDefault: `false`"
12034
+ }
11587
12035
  }
11588
12036
  ]
11589
12037
  },
@@ -11645,6 +12093,71 @@
11645
12093
  }
11646
12094
  ]
11647
12095
  },
12096
+ {
12097
+ "name": "lr-realtime-session",
12098
+ "description": {
12099
+ "kind": "markdown",
12100
+ "value": "`<lr-realtime-session>` — a provider-neutral voice-session shell composing connection status,\nlive activity, transcript, native capture, mute, interruption, and connect/disconnect intents.\nTransport, authentication, audio playback, and SDK ownership remain with the host.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `controls` | Additional provider-specific controls. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `activity` | Voice activity visualization. |\n| `base` | The named session region. |\n| `capture` | Native push-to-talk capture. |\n| `connect` | Connect action. |\n| `controls` | Built-in and slotted controls. |\n| `disconnect` | Disconnect action. |\n| `error` | Localized connection error. |\n| `header` | Status and session controls. |\n| `interrupt` | Response interruption action. |\n| `mute` | Controlled mute action. |\n| `status` | Connection status badge. |\n| `transcript` | Live transcript. |"
12101
+ },
12102
+ "attributes": [
12103
+ {
12104
+ "name": "error-code",
12105
+ "description": {
12106
+ "kind": "markdown",
12107
+ "value": "Type: `string` \nDefault: `''`"
12108
+ }
12109
+ },
12110
+ {
12111
+ "name": "label",
12112
+ "description": {
12113
+ "kind": "markdown",
12114
+ "value": "Type: `string` \nDefault: `''`"
12115
+ }
12116
+ },
12117
+ {
12118
+ "name": "level",
12119
+ "description": {
12120
+ "kind": "markdown",
12121
+ "value": "Type: `number | null` \nDefault: `null`"
12122
+ }
12123
+ },
12124
+ {
12125
+ "name": "locale",
12126
+ "description": {
12127
+ "kind": "markdown",
12128
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
12129
+ }
12130
+ },
12131
+ {
12132
+ "name": "muted",
12133
+ "description": {
12134
+ "kind": "markdown",
12135
+ "value": "Type: `boolean` \nDefault: `false`"
12136
+ }
12137
+ },
12138
+ {
12139
+ "name": "show-capture",
12140
+ "description": {
12141
+ "kind": "markdown",
12142
+ "value": "Type: `boolean` \nDefault: `true`"
12143
+ }
12144
+ },
12145
+ {
12146
+ "name": "state",
12147
+ "description": {
12148
+ "kind": "markdown",
12149
+ "value": "Type: `RealtimeConnectionState` \nDefault: `'disconnected'`"
12150
+ }
12151
+ },
12152
+ {
12153
+ "name": "voice-state",
12154
+ "description": {
12155
+ "kind": "markdown",
12156
+ "value": "Type: `AudioVisualizerState` \nDefault: `'idle'`"
12157
+ }
12158
+ }
12159
+ ]
12160
+ },
11648
12161
  {
11649
12162
  "name": "lr-relative-time",
11650
12163
  "description": {
@@ -11752,7 +12265,7 @@
11752
12265
  "name": "label",
11753
12266
  "description": {
11754
12267
  "kind": "markdown",
11755
- "value": "Accessible name for the list, set as `aria-label` on the internal `role=\"list\"` element. A\nplain `aria-label` attribute on the host itself is honored as a fallback when this is left\nunset, matching `<lr-control-group>`. Native lists don't require an accessible name, so this\nhas no forced fallback string when both are left unset.\n\nType: `string` \nDefault: `''`"
12268
+ "value": "Accessible name for the list, set as `aria-label` on the internal `role=\"list\"` element. A\nplain `aria-label` attribute on the host itself is honored as a fallback when this is left\nunset, matching `<lr-control-group>`. Native lists don't require an accessible name, so this\nhas no forced fallback string when both are left unset.\n\nType: `string` \nDefault: `\"\"`"
11756
12269
  }
11757
12270
  },
11758
12271
  {
@@ -11805,14 +12318,14 @@
11805
12318
  "name": "aria-label",
11806
12319
  "description": {
11807
12320
  "kind": "markdown",
11808
- "value": "Host-level `aria-label` override for the overlay presentation's accessible name -- wins over\nevery other source (`label`, the header-slot fallback), matching `<lr-dialog>`'s\n`accessibleLabel` pattern. See the class doc for the full precedence order. Set as a plain\n`aria-label` attribute on `<lr-responsive-panel>` itself, not a public JS property.\n\nType: `string | null` \nDefault: `null`"
12321
+ "value": "Host-level `aria-label` override for the overlay presentation's accessible name -- wins over\nevery other source (`label`, the header-slot fallback), matching `<lr-dialog>`'s\n`accessibleLabel` pattern. See the class doc for the full precedence order. Set as a plain\n`aria-label` attribute on `<lr-responsive-panel>` itself, not a public JS property.\n\nType: `| string\n | null` \nDefault: `null`"
11809
12322
  }
11810
12323
  },
11811
12324
  {
11812
12325
  "name": "label",
11813
12326
  "description": {
11814
12327
  "kind": "markdown",
11815
- "value": "Accessible name for the overlay presentation's `role=\"dialog\"`. Unused in the inline\npresentation, which has no dialog semantics to name. When empty, falls back to the `header`\nslot's content -- see the class doc for the full fallback order.\n\nType: `string` \nDefault: `''`"
12328
+ "value": "Accessible name for the overlay presentation's `role=\"dialog\"`. Unused in the inline\npresentation, which has no dialog semantics to name. When empty, falls back to the `header`\nslot's content -- see the class doc for the full fallback order.\n\nType: `string` \nDefault: `\"\"`"
11816
12329
  }
11817
12330
  },
11818
12331
  {
@@ -11826,14 +12339,14 @@
11826
12339
  "name": "mobile-breakpoint",
11827
12340
  "description": {
11828
12341
  "kind": "markdown",
11829
- "value": "CSS length passed to `matchMedia` as `(max-width: <this>)` to decide, in `mode=\"auto\"`,\nwhether the effective presentation is `'overlay'` (below/at this width) or `'inline'`\n(above it).\n\nType: `string` \nDefault: `'768px'`"
12342
+ "value": "CSS length passed to `matchMedia` as `(max-width: <this>)` to decide, in `mode=\"auto\"`,\nwhether the effective presentation is `'overlay'` (below/at this width) or `'inline'`\n(above it).\n\nType: `string` \nDefault: `\"768px\"`"
11830
12343
  }
11831
12344
  },
11832
12345
  {
11833
12346
  "name": "mode",
11834
12347
  "description": {
11835
12348
  "kind": "markdown",
11836
- "value": "`'auto'` (default) tracks `mobile-breakpoint` live; `'inline'`/`'overlay'` force that\npresentation regardless of viewport width.\n\nType: `ResponsivePanelMode` \nDefault: `'auto'`"
12349
+ "value": "`'auto'` (default) tracks `mobile-breakpoint` live; `'inline'`/`'overlay'` force that\npresentation regardless of viewport width.\n\nType: `ResponsivePanelMode` \nDefault: `\"auto\"`"
11837
12350
  }
11838
12351
  },
11839
12352
  {
@@ -11847,7 +12360,7 @@
11847
12360
  "name": "variant",
11848
12361
  "description": {
11849
12362
  "kind": "markdown",
11850
- "value": "Only affects the overlay presentation's visual treatment -- `'fullscreen'` (default) covers\nthe whole viewport; `'bottom-sheet'` slides up from the bottom and doesn't cover the full\nheight.\n\nType: `ResponsivePanelVariant` \nDefault: `'fullscreen'`"
12363
+ "value": "Only affects the overlay presentation's visual treatment -- `'fullscreen'` (default) covers\nthe whole viewport; `'bottom-sheet'` slides up from the bottom and doesn't cover the full\nheight.\n\nType: `ResponsivePanelVariant` \nDefault: `\"fullscreen\"`"
11851
12364
  }
11852
12365
  }
11853
12366
  ]
@@ -11919,6 +12432,43 @@
11919
12432
  }
11920
12433
  ]
11921
12434
  },
12435
+ {
12436
+ "name": "lr-retrieval-compare",
12437
+ "description": {
12438
+ "kind": "markdown",
12439
+ "value": "`<lr-retrieval-compare>` — a side-by-side retrieval/reranking workbench that makes rank,\noverlap, and dense/sparse/rerank/final score changes inspectable. It never performs retrieval.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The named comparison region. |\n| `chunk` | A selectable chunk row. |\n| `chunk-rank` | The effective rank. |\n| `chunk-selected` | The selected chunk row. |\n| `chunk-text` | Retrieved text. |\n| `chunk-title` | The source title. |\n| `chunks` | One ranked list. |\n| `empty` | The empty state. |\n| `overlap` | The pairwise top-k Jaccard overlap summary. |\n| `score` | One named score. |\n| `scores` | Score-breakdown list. |\n| `set` | One result-set column. |\n| `set-heading` | A caller-supplied result-set label. |\n| `sets` | Horizontally scrollable set grid. |"
12440
+ },
12441
+ "attributes": [
12442
+ {
12443
+ "name": "label",
12444
+ "description": {
12445
+ "kind": "markdown",
12446
+ "value": "Type: `string` \nDefault: `''`"
12447
+ }
12448
+ },
12449
+ {
12450
+ "name": "locale",
12451
+ "description": {
12452
+ "kind": "markdown",
12453
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
12454
+ }
12455
+ },
12456
+ {
12457
+ "name": "selected-chunk-id",
12458
+ "description": {
12459
+ "kind": "markdown",
12460
+ "value": "Type: `string` \nDefault: `''`"
12461
+ }
12462
+ },
12463
+ {
12464
+ "name": "top-k",
12465
+ "description": {
12466
+ "kind": "markdown",
12467
+ "value": "Type: `number` \nDefault: `10`"
12468
+ }
12469
+ }
12470
+ ]
12471
+ },
11922
12472
  {
11923
12473
  "name": "lr-retrieval-results",
11924
12474
  "description": {
@@ -12110,7 +12660,7 @@
12110
12660
  "name": "label",
12111
12661
  "description": {
12112
12662
  "kind": "markdown",
12113
- "value": "Accessible name for the internal timeline. Falls back to a host `aria-label`, then the timeline's own localized default.\n\nType: `string` \nDefault: `''`"
12663
+ "value": "Accessible name for the internal timeline. A host `aria-label` wins; otherwise this value\nfalls back to the timeline's own localized default.\n\nType: `string` \nDefault: `''`"
12114
12664
  }
12115
12665
  },
12116
12666
  {
@@ -12212,7 +12762,7 @@
12212
12762
  "name": "data-labels",
12213
12763
  "description": {
12214
12764
  "kind": "markdown",
12215
- "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
12765
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis chart; the peer is attached only to instances that opt in, and\n`buildConfig()` keeps its per-chart options disabled until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
12216
12766
  }
12217
12767
  },
12218
12768
  {
@@ -12308,6 +12858,43 @@
12308
12858
  }
12309
12859
  ]
12310
12860
  },
12861
+ {
12862
+ "name": "lr-schema-viewer",
12863
+ "description": {
12864
+ "kind": "markdown",
12865
+ "value": "`<lr-schema-viewer>` — a recursive, selectable JSON Schema inspector with required-state,\nconstraints, composition branches, `$ref` display, validation issues, cycle protection, and a\nconfigurable depth ceiling. It does not resolve remote references or validate values.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The named schema region. |\n| `constraints` | Recognized schema constraints. |\n| `description` | Caller-supplied schema description. |\n| `empty` | The empty state. |\n| `issue` | One caller-supplied validation issue. |\n| `limit` | Resource-ceiling status shown when additional nodes are omitted. |\n| `name` | Property/branch name. |\n| `node` | One schema node. |\n| `node-selected` | The selected schema node. |\n| `node-trigger` | A schema-node activation button. |\n| `required` | Required badge. |\n| `tree` | The recursive schema tree. |\n| `type` | Schema type badge. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-schema-viewer-selected-border` (default: `var(--lr-color-brand)`) — Selected node branch.\n- `--lr-schema-viewer-error-border` (default: `var(--lr-color-danger)`) — Error issue border.\n- `--lr-schema-viewer-error-bg` (default: `var(--lr-color-danger-quiet)`) — Error issue background.\n- `--lr-schema-viewer-warning-border` (default: `var(--lr-color-warning)`) — Warning issue border.\n- `--lr-schema-viewer-warning-bg` (default: `var(--lr-color-warning-quiet)`) — Warning issue background."
12866
+ },
12867
+ "attributes": [
12868
+ {
12869
+ "name": "label",
12870
+ "description": {
12871
+ "kind": "markdown",
12872
+ "value": "Type: `string` \nDefault: `''`"
12873
+ }
12874
+ },
12875
+ {
12876
+ "name": "locale",
12877
+ "description": {
12878
+ "kind": "markdown",
12879
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
12880
+ }
12881
+ },
12882
+ {
12883
+ "name": "max-depth",
12884
+ "description": {
12885
+ "kind": "markdown",
12886
+ "value": "Requested nesting depth, clamped to 100 to keep recursive template construction stack-safe.\n\nType: `number` \nDefault: `20`"
12887
+ }
12888
+ },
12889
+ {
12890
+ "name": "selected-path",
12891
+ "description": {
12892
+ "kind": "markdown",
12893
+ "value": "Type: `string` \nDefault: `''`"
12894
+ }
12895
+ }
12896
+ ]
12897
+ },
12311
12898
  {
12312
12899
  "name": "lr-scroller",
12313
12900
  "description": {
@@ -12333,7 +12920,7 @@
12333
12920
  "name": "label",
12334
12921
  "description": {
12335
12922
  "kind": "markdown",
12336
- "value": "Type: `string` \nDefault: `''`"
12923
+ "value": "Type: `string` \nDefault: `\"\"`"
12337
12924
  }
12338
12925
  },
12339
12926
  {
@@ -12347,7 +12934,7 @@
12347
12934
  "name": "orientation",
12348
12935
  "description": {
12349
12936
  "kind": "markdown",
12350
- "value": "Type: `ScrollerOrientation` \nDefault: `'horizontal'`"
12937
+ "value": "Type: `ScrollerOrientation` \nDefault: `\"horizontal\"`"
12351
12938
  }
12352
12939
  },
12353
12940
  {
@@ -12363,14 +12950,14 @@
12363
12950
  "name": "lr-segmented",
12364
12951
  "description": {
12365
12952
  "kind": "markdown",
12366
- "value": "`<lr-segmented>` — a single-select button row with the WAI-ARIA APG `radiogroup` contract\nbuilt in: `role=\"radiogroup\"`/`role=\"radio\"`, roving tabindex, automatic activation (click or\narrow-key move both select immediately, like a native radio group), cyclic Arrow/Home/End\nnavigation among non-disabled items. First-party invention --\n\"choose exactly one of N labeled options, rendered as a button row\" is ubiquitous\nsettings/filter-panel UI. Supports the same `2xs`-`xl` compact-form-control `size` scale as\n`<lr-select>`/`<lr-combobox>`/`<lr-input>`, so it can sit flush beside those controls in a\ntoolbar at a matching height.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The `role=\"radiogroup\"` root. |\n| `segment` | A single `role=\"radio\"` button. |\n| `segment-icon` | Optional leading visual supplied by the item's `icon` field; content may have a natural aspect ratio and is not restricted to a square icon. |\n| `segment-label` | The segment's label text. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-scroll-fade-size` (default: `2rem`) — Width of the static fade at each horizontal scroll edge.\n- `--lr-segmented-track-min-height` (default: `var(--lr-size-2-5rem)`) — Minimum height of the `base` track. Re-set per `size` (`2xs` through `xl`); the `2.5rem` (40px) default applies at the unset/`m` size, matching `<lr-input>`/`<lr-select>`/`<lr-combobox>`'s own shared default-tier floor. Because it is declared on `:host` per tier, override it on the element itself, not on an ancestor.\n- `--lr-segmented-track-height` — Exact height of the `base` track, pinning it at every `size` tier (sets both `block-size` and `min-block-size`) so the row can sit flush beside a hard-sized toolbar control. **Genuinely unset by default** — while unset each tier keeps its own `--lr-segmented-track-min-height` floor and the track grows with its content.\n- `--lr-segmented-selected-bg` (default: `var(--lr-color-surface)`) — Background of the checked segment. Scoped to `[aria-checked='true']` only, so it never repaints a hovered unselected segment (which is what hijacking `--lr-color-surface` library-wide used to do).\n- `--lr-segmented-selected-color` (default: `var(--lr-color-text)`) — Text color of the checked segment.\n- `--lr-segmented-selected-font-weight` (default: `var(--lr-font-weight-semibold)`) — Font weight of the checked segment.\n- `--lr-segmented-selected-shadow` (default: `var(--lr-shadow)`) — Box shadow lifting the checked segment off the track.\n- `--lr-segmented-hover-color` (default: `var(--lr-color-text)`) — Text color of a hovered segment that is neither checked nor disabled. Independent of the selected-state props above — recoloring the checked pill leaves this untouched.\n- `--lr-segmented-segment-padding` (default: `var(--lr-size-0-125rem) var(--lr-space-s)`) — Each segment's padding. Re-set per `size`; this default applies at the unset/`m` size.\n- `--lr-segmented-font-size` (default: `var(--lr-font-size-sm)`) — Each segment's font size. Re-set per `size`; this default applies at the unset/`m` size."
12953
+ "value": "`<lr-segmented>` — a single-select button row with the WAI-ARIA APG `radiogroup` contract\nbuilt in: `role=\"radiogroup\"`/`role=\"radio\"`, roving tabindex, automatic activation (click or\narrow-key move both select immediately, like a native radio group), cyclic Arrow/Home/End\nnavigation among non-disabled items. First-party invention --\n\"choose exactly one of N labeled options, rendered as a button row\" is ubiquitous\nsettings/filter-panel UI. Supports the same `2xs`-`xl` compact-form-control `size` scale as\n`<lr-select>`/`<lr-combobox>`/`<lr-input>`, so it can sit flush beside those controls in a\ntoolbar at a matching height.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The `role=\"radiogroup\"` root. |\n| `segment` | A single `role=\"radio\"` button. |\n| `segment-icon` | Optional leading visual supplied by the item's `icon` field; content may have a natural aspect ratio and is not restricted to a square icon. |\n| `segment-label` | The segment's label text. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-scroll-fade-size` (default: `2rem`) — Width of the static fade at each horizontal scroll edge.\n- `--lr-segmented-track-min-height` (default: `var(--lr-size-2-5rem)`) — Minimum height of the `base` track. Re-set per `size` (`2xs` through `xl`); the `2.5rem` (40px) default applies at the unset/`m` size, matching `<lr-input>`/`<lr-select>`/`<lr-combobox>`'s own shared default-tier floor. Because it is declared on `:host` per tier, override it on the element itself, not on an ancestor.\n- `--lr-segmented-track-height` — Exact height of the `base` track, pinning it at every `size` tier (sets both `block-size` and `min-block-size`) so the row can sit flush beside a hard-sized toolbar control. **Genuinely unset by default** — while unset each tier keeps its own `--lr-segmented-track-min-height` floor and the track grows with its content.\n- `--lr-segmented-selected-bg` (default: `var(--lr-color-surface)`) — Background of the checked segment. Scoped to `[aria-checked='true']` only, so it never repaints a hovered unselected segment (which is what hijacking `--lr-color-surface` library-wide used to do).\n- `--lr-segmented-selected-color` (default: `var(--lr-color-text)`) — Text color of the checked segment.\n- `--lr-segmented-selected-font-weight` (default: `var(--lr-font-weight-semibold)`) — Font weight of the checked segment.\n- `--lr-segmented-selected-shadow` (default: `var(--lr-shadow)`) — Box shadow lifting the checked segment off the track.\n- `--lr-segmented-hover-color` (default: `var(--lr-color-text)`) — Text color of a hovered segment that is neither checked nor disabled. Independent of the selected-state props above — recoloring the checked pill leaves this untouched.\n- `--lr-segmented-segment-padding` (default: `var(--lr-size-0-125rem) var(--lr-space-s)`) — Each segment's padding. Re-set per `size`; this default applies at the unset/`m` size.\n- `--lr-segmented-font-size` (default: `var(--lr-font-size-sm)`) — Each segment's font size. Re-set per `size`; this default applies at the unset/`m` size.\n- `--lr-segmented-track-gap` (default: `var(--lr-size-0-125rem)`) — Gap between segments.\n- `--lr-segmented-track-radius` (default: `var(--lr-radius)`) — Track corner radius.\n- `--lr-segmented-track-padding` (default: `var(--lr-size-0-125rem)`) — Track inset padding."
12367
12954
  },
12368
12955
  "attributes": [
12369
12956
  {
12370
12957
  "name": "label",
12371
12958
  "description": {
12372
12959
  "kind": "markdown",
12373
- "value": "Accessible name for the radiogroup, used when no visible label context\nexists around it (e.g. no wrapping `<label>` or adjacent heading). Set\nas `aria-label` on the `role=\"radiogroup\"` element. A plain `aria-label`\nattribute on the host itself is honored as a fallback when this is left\nunset, matching `<lr-slider>`.\n\nType: `string` \nDefault: `''`"
12960
+ "value": "Accessible name for the radiogroup, used when no visible label context\nexists around it (e.g. no wrapping `<label>` or adjacent heading). Set\nas `aria-label` on the `role=\"radiogroup\"` element. A plain `aria-label`\nattribute on the host itself is honored as a fallback when this is left\nunset, matching `<lr-slider>`.\n\nType: `string` \nDefault: `\"\"`"
12374
12961
  }
12375
12962
  },
12376
12963
  {
@@ -12384,14 +12971,14 @@
12384
12971
  "name": "size",
12385
12972
  "description": {
12386
12973
  "kind": "markdown",
12387
- "value": "Visual size — same `2xs`-`xl` scale as `<lr-select>`/`<lr-combobox>` (`s` through `xl`)\nand `<lr-input>` (`2xs`). Reflects as the `size` attribute. The default `m` tier is\nidentical to this component's pre-`size` rendering, so leaving it unset never changes\noutput.\n\nType: `LyraSegmentedSize` \nDefault: `'m'`"
12974
+ "value": "Visual size — same `2xs`-`xl` scale as `<lr-select>`/`<lr-combobox>` (`s` through `xl`)\nand `<lr-input>` (`2xs`). Reflects as the `size` attribute. The default `m` tier is\nidentical to this component's pre-`size` rendering, so leaving it unset never changes\noutput.\n\nType: `LyraSegmentedSize` \nDefault: `\"m\"`"
12388
12975
  }
12389
12976
  },
12390
12977
  {
12391
12978
  "name": "value",
12392
12979
  "description": {
12393
12980
  "kind": "markdown",
12394
- "value": "The currently selected item's `value`.\n\nType: `string` \nDefault: `''`"
12981
+ "value": "The currently selected item's `value`.\n\nType: `string` \nDefault: `\"\"`"
12395
12982
  }
12396
12983
  }
12397
12984
  ]
@@ -12489,11 +13076,55 @@
12489
13076
  }
12490
13077
  ]
12491
13078
  },
13079
+ {
13080
+ "name": "lr-selection-toolbar",
13081
+ "description": {
13082
+ "kind": "markdown",
13083
+ "value": "`<lr-selection-toolbar>` — a nonmodal action toolbar positioned above selected text. It carries\nthe selected text and a format-neutral document anchor into ask, quote, cite, or copy actions.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `action` | Every action button. |\n| `action-ask` | The ask action. |\n| `action-cite` | The cite action. |\n| `action-copy` | The copy action. |\n| `action-quote` | The quote action. |\n| `toolbar` | The floating `role=\"toolbar\"` surface. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-selection-toolbar-inline-start` — Computed logical inline anchor position.\n- `--lr-selection-toolbar-block-start` — Computed logical block anchor position.\n- `--lr-selection-toolbar-inline-shift` — Computed inline collision-avoidance offset.\n- `--lr-selection-toolbar-block-shift` — Computed block collision-avoidance offset."
13084
+ },
13085
+ "attributes": [
13086
+ {
13087
+ "name": "aria-label",
13088
+ "description": {
13089
+ "kind": "markdown",
13090
+ "value": "Type: `string | null` \nDefault: `null`"
13091
+ }
13092
+ },
13093
+ {
13094
+ "name": "label",
13095
+ "description": {
13096
+ "kind": "markdown",
13097
+ "value": "Type: `string` \nDefault: `''`"
13098
+ }
13099
+ },
13100
+ {
13101
+ "name": "locale",
13102
+ "description": {
13103
+ "kind": "markdown",
13104
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
13105
+ }
13106
+ },
13107
+ {
13108
+ "name": "open",
13109
+ "description": {
13110
+ "kind": "markdown",
13111
+ "value": "Type: `boolean` \nDefault: `false`"
13112
+ }
13113
+ },
13114
+ {
13115
+ "name": "text",
13116
+ "description": {
13117
+ "kind": "markdown",
13118
+ "value": "Type: `string` \nDefault: `''`"
13119
+ }
13120
+ }
13121
+ ]
13122
+ },
12492
13123
  {
12493
13124
  "name": "lr-sequence-strip",
12494
13125
  "description": {
12495
13126
  "kind": "markdown",
12496
- "value": "`<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.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root strip wrapper (`role=\"img\"`). |\n| `cell` | Each item's cell, background-colored by its category. |\n| `legend` | The static category key rendered below the strip when `showLegend` is set (`aria-hidden` — it repeats the strip's own `aria-label` visually). |\n| `legend-item` | One swatch + label pair in the legend, one per `categories` entry (plus one trailing marker row when `markerLabel` is set). |\n| `legend-label` | The text of a legend item (the category's `label`, or its `key`). |\n| `legend-marker-swatch` | The chip of the `markerLabel` legend row: a neutral chip carrying the same bottom bar a `marker: true` cell paints, in the same `--lr-sequence-strip-marker-color`. |\n| `legend-swatch` | The color chip of a legend item, matching that category's cell color. |\n| `marker` | The small bottom marker on a cell whose item sets `marker: true`. |\n| `tooltip` | The hover tooltip showing the hovered item's label. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-sequence-strip-height` (default: `var(--lr-size-1-5rem)`) — Block size of the strip.\n- `--lr-sequence-strip-marker-color` (default: `var(--lr-color-text)`) — Color of the bottom marker on a `marker: true` cell, and of the marker legend row's bar.\n- `--lr-sequence-strip-legend-swatch-size` (default: `var(--lr-size-0-625rem)`) — Inline and block size of a legend swatch (category and marker rows alike).\n- `--lr-sequence-strip-legend-marker-bg` (default: `var(--lr-color-surface-raised)`) — Neutral chip background behind the marker legend row's bar; it stands in for \"any cell\", so it deliberately matches no category color."
13127
+ "value": "`<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. The strip is a labeled `role=\"list\"` and each cell is a named list item.\nExactly one cell is tabbable; Left/Right and Home/End rove through the items and show the same\ndetail tooltip as pointer hover. Cells are inspectable rather than actionable, so they do not\nemit an activation event.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root strip wrapper (`role=\"list\"`). |\n| `cell` | Each named, roving-focus item cell, background-colored by its category. |\n| `legend` | The static category key rendered below the strip when `showLegend` is set (`aria-hidden` — it repeats the strip's own `aria-label` visually). |\n| `legend-item` | One swatch + label pair in the legend, one per `categories` entry (plus one trailing marker row when `markerLabel` is set). |\n| `legend-label` | The text of a legend item (the category's `label`, or its `key`). |\n| `legend-marker-swatch` | The chip of the `markerLabel` legend row: a neutral chip carrying the same bottom bar a `marker: true` cell paints, in the same `--lr-sequence-strip-marker-color`. |\n| `legend-swatch` | The color chip of a legend item, matching that category's cell color. |\n| `marker` | The small bottom marker on a cell whose item sets `marker: true`. |\n| `tooltip` | The hover/focus tooltip showing the active item's label. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-sequence-strip-height` (default: `var(--lr-size-1-5rem)`) — Block size of the strip.\n- `--lr-sequence-strip-marker-color` (default: `var(--lr-color-text)`) — Color of the bottom marker on a `marker: true` cell, and of the marker legend row's bar.\n- `--lr-sequence-strip-legend-swatch-size` (default: `var(--lr-size-0-625rem)`) — Inline and block size of a legend swatch (category and marker rows alike).\n- `--lr-sequence-strip-legend-marker-bg` (default: `var(--lr-color-surface-raised)`) — Neutral chip background behind the marker legend row's bar; it stands in for \"any cell\", so it deliberately matches no category color."
12497
13128
  },
12498
13129
  "attributes": [
12499
13130
  {
@@ -12656,7 +13287,7 @@
12656
13287
  "name": "show-value",
12657
13288
  "description": {
12658
13289
  "kind": "markdown",
12659
- "value": "Whether to render the current numeric value as visible text next to the track. Defaults to\n`true`; uses `trueDefaultBooleanConverter` (like `<lr-agent-run>`'s `show-cancel`/\n`show-retry`) rather than Lit's default presence-based `type: Boolean` converter, so a plain\nHTML `show-value=\"false\"` content attribute actually turns it off, not just a\n`.showValue=${false}` property binding.\n\nType: `boolean` \nDefault: `true`"
13290
+ "value": "Type: `boolean` \nDefault: `true`"
12660
13291
  }
12661
13292
  },
12662
13293
  {
@@ -12767,7 +13398,7 @@
12767
13398
  "name": "lr-source-picker",
12768
13399
  "description": {
12769
13400
  "kind": "markdown",
12770
- "value": "`<lr-source-picker>` — a checkbox tree/list scoping which sources ground the next answer:\ntri-state folders, select-all, type icons, search. **Not `FormAssociated`, deliberately**: this\nis a scoping panel, not a form control — the selection is immediate app state consumed by the\nnext retrieval call, exactly the stance `lr-tool-select-dialog` already takes.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `checkbox` | The tri-state checkbox glyph. |\n| `empty` | The empty state (`noData` when `sources` is empty, `noMatches` when a filter empties the tree). |\n| `icon` | The `lr-file-icon` type badge. |\n| `item` | One `role=\"treeitem\"` row. |\n| `label` | The entry's label text. |\n| `search` | The built-in filter `lr-input`, only rendered when `searchable`. |\n| `select-all` | The header select-all row, only rendered when `showSelectAll`. |\n| `summary` | The \"{selected} of {total} selected\" text. |\n| `tree` | The `role=\"tree\"` container. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-source-picker-checked-bg` — Background of a fully-checked selection control: the `select-all` pill (defaults to `var(--lr-color-brand-quiet)`) and a fully-selected entry's `[part=\"checkbox\"]` (defaults to `var(--lr-color-brand)`). The two keep their distinct resting defaults; setting this prop unifies both.\n- `--lr-source-picker-checked-border` (default: `var(--lr-color-brand)`) — Border color of every checked or mixed selection control.\n- `--lr-source-picker-mixed-bg` (default: `color-mix(in srgb, var(--lr-color-brand) 50%, var(--lr-color-surface))`) — Background of a partially-selected entry's `[part=\"checkbox\"]`."
13401
+ "value": "`<lr-source-picker>` — a checkbox tree/list scoping which sources ground the next answer:\ntri-state folders, select-all, type icons, search. **Not `FormAssociated`, deliberately**: this\nis a scoping panel, not a form control — the selection is immediate app state consumed by the\nnext retrieval call, exactly the stance `lr-tool-select-dialog` already takes.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `checkbox` | The tri-state checkbox glyph. |\n| `disclosure` | A folder row's expand/collapse button. |\n| `empty` | The empty state (`noData` when `sources` is empty, `noMatches` when a filter empties the tree). |\n| `icon` | The `lr-file-icon` type badge. |\n| `item` | One `role=\"treeitem\"` row. |\n| `label` | The entry's label text. |\n| `search` | The built-in filter `lr-input`, only rendered when `searchable`. |\n| `select-all` | The header select-all row, only rendered when `showSelectAll`. |\n| `summary` | The \"{selected} of {total} selected\" text. |\n| `tree` | The `role=\"tree\"` container. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-source-picker-checked-bg` — Background of a fully-checked selection control: the `select-all` pill (defaults to `var(--lr-color-brand-quiet)`) and a fully-selected entry's `[part=\"checkbox\"]` (defaults to `var(--lr-color-brand)`). The two keep their distinct resting defaults; setting this prop unifies both.\n- `--lr-source-picker-checked-border` (default: `var(--lr-color-brand)`) — Border color of every checked or mixed selection control.\n- `--lr-source-picker-mixed-bg` (default: `color-mix(in srgb, var(--lr-color-brand) 50%, var(--lr-color-surface))`) — Background of a partially-selected entry's `[part=\"checkbox\"]`."
12771
13402
  },
12772
13403
  "attributes": [
12773
13404
  {
@@ -12924,7 +13555,7 @@
12924
13555
  "name": "lr-spinner",
12925
13556
  "description": {
12926
13557
  "kind": "markdown",
12927
- "value": "`<lr-spinner>` — an indeterminate busy indicator.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Optional visible label. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The wrapper. |\n| `label` | The accessible/visible label wrapper. |\n| `spinner` | The animated indicator. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-spinner-size` (default: `var(--lr-size-1-25rem)`) — Outer diameter of the indicator.\n- `--lr-spinner-track-width` (default: `var(--lr-border-width-medium)`) — Thickness of the ring track.\n- `--lr-spinner-duration` (default: `800ms`) — Duration of one rotation. Not read under `prefers-reduced-motion: reduce`, where the animation is disabled entirely."
13558
+ "value": "`<lr-spinner>` — an indeterminate busy indicator.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Optional visible label. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The wrapper. |\n| `label` | The accessible/visible label wrapper. |\n| `spinner` | The animated indicator. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-spinner-size` (default: `var(--lr-size-1-25rem)`) — Outer diameter of the indicator.\n- `--lr-spinner-track-width` (default: `var(--lr-border-width-medium)`) — Thickness of the ring track.\n- `--lr-spinner-duration` (default: `var(--lr-transition-ambient)`) — Duration/easing of one rotation. Not read under `prefers-reduced-motion: reduce`, where the animation is disabled entirely."
12928
13559
  },
12929
13560
  "attributes": [
12930
13561
  {
@@ -12961,14 +13592,14 @@
12961
13592
  "name": "collapse",
12962
13593
  "description": {
12963
13594
  "kind": "markdown",
12964
- "value": "Opts a pane in to responsive collapse: `'start'` is the first light-DOM\npanel (index 0), `'end'` is the last. Both are LOGICAL positions, same\nas CSS `inset-inline-start`/`-end` — see the `collapsingIndex` getter\nfor why that already resolves to the same physical index under RTL for\nthis component (panels are never re-`order`ed for RTL, only the drag\ndelta sign mirrors). Default `'none'`: none of the collapse behavior\nbelow applies, and rendering/behavior is identical to before this\nproperty existed.\n\nType: `SplitCollapseMode` \nDefault: `'none'`"
13595
+ "value": "Opts a pane in to responsive collapse: `'start'` is the first light-DOM\npanel (index 0), `'end'` is the last. Both are LOGICAL positions, same\nas CSS `inset-inline-start`/`-end` — see the `collapsingIndex` getter\nfor why that already resolves to the same physical index under RTL for\nthis component (panels are never re-`order`ed for RTL, only the drag\ndelta sign mirrors). Default `'none'`: none of the collapse behavior\nbelow applies, and rendering/behavior is identical to before this\nproperty existed.\n\nType: `SplitCollapseMode` \nDefault: `\"none\"`"
12965
13596
  }
12966
13597
  },
12967
13598
  {
12968
13599
  "name": "collapse-breakpoint-basis",
12969
13600
  "description": {
12970
13601
  "kind": "markdown",
12971
- "value": "Which box `railBreakpoint`/`floatBreakpoint` measure. `'container'` (the default) observes\nthis component's own `[part=\"base\"]` inline size via `ResizeObserver`, comparing strictly `<`.\n`'viewport'` instead evaluates `matchMedia('(max-width: <breakpoint>)')` for each of the two\nthresholds, which is inclusive (`<=`) — native `max-width` semantics, deliberately, so the\ncrossing point matches a CSS `@media` rule authored with the same length exactly. Switching\nbasis therefore shifts each crossing point by 1px (the same trade-off\n`orientationBreakpointBasis` already makes).\n\nUse `'viewport'` to collapse in step with a page-level responsive layout — e.g. a shell whose\nown `@media` rules restack at the same width — rather than with this split's own allocation.\n`'viewport'` also lets the browser resolve a `rem` breakpoint with real `@media` semantics\n(against the *initial* font size, ignoring an `html { font-size }` override), keeping it in\nstep with such a rule.\n\nBoth bands are classified from both queries together on every change, so a fast resize that\ncrosses both thresholds at once still lands on one correct state and fires\n`lr-split-collapse-change` once. Under `'viewport'` basis the first paint is already correct —\nno `ResizeObserver` round-trip — and the initial state is not announced as a transition.\n\nDefault: `'container'`.\n\nType: `BreakpointBasis` \nDefault: `'container'`"
13602
+ "value": "Which box `railBreakpoint`/`floatBreakpoint` measure. `'container'` (the default) observes\nthis component's own `[part=\"base\"]` inline size via `ResizeObserver`, comparing strictly `<`.\n`'viewport'` instead evaluates `matchMedia('(max-width: <breakpoint>)')` for each of the two\nthresholds, which is inclusive (`<=`) — native `max-width` semantics, deliberately, so the\ncrossing point matches a CSS `@media` rule authored with the same length exactly. Switching\nbasis therefore shifts each crossing point by 1px (the same trade-off\n`orientationBreakpointBasis` already makes).\n\nUse `'viewport'` to collapse in step with a page-level responsive layout — e.g. a shell whose\nown `@media` rules restack at the same width — rather than with this split's own allocation.\n`'viewport'` also lets the browser resolve a `rem` breakpoint with real `@media` semantics\n(against the *initial* font size, ignoring an `html { font-size }` override), keeping it in\nstep with such a rule.\n\nBoth bands are classified from both queries together on every change, so a fast resize that\ncrosses both thresholds at once still lands on one correct state and fires\n`lr-split-collapse-change` once. Under `'viewport'` basis the first paint is already correct —\nno `ResizeObserver` round-trip — and the initial state is not announced as a transition.\n\nDefault: `'container'`.\n\nType: `BreakpointBasis` \nDefault: `\"container\"`"
12972
13603
  }
12973
13604
  },
12974
13605
  {
@@ -12982,7 +13613,7 @@
12982
13613
  "name": "float-breakpoint",
12983
13614
  "description": {
12984
13615
  "kind": "markdown",
12985
- "value": "Width below which the collapsing pane instead becomes an absolutely-positioned overlay above\nthe other pane (`'floating'` state). Same accepted forms, basis, and sanitization as\n`railBreakpoint`; an unparseable value falls back to the `400` default.\n\nDefault: `400`.\n\nType: `number | string` \nDefault: `400`"
13616
+ "value": "Width below which the collapsing pane instead becomes an absolutely-positioned overlay above\nthe other pane (`'floating'` state). Same accepted forms, basis, and sanitization as\n`railBreakpoint`; an unparseable value falls back to the `400` default.\n\nDefault: `400`.\n\nType: `| number\n | string` \nDefault: `400`"
12986
13617
  }
12987
13618
  },
12988
13619
  {
@@ -13003,7 +13634,7 @@
13003
13634
  "name": "narrow-orientation",
13004
13635
  "description": {
13005
13636
  "kind": "markdown",
13006
- "value": "Layout/resize axis used below `orientationBreakpoint`.\n\nType: `SplitOrientation` \nDefault: `'vertical'`"
13637
+ "value": "Layout/resize axis used below `orientationBreakpoint`.\n\nType: `SplitOrientation` \nDefault: `\"vertical\"`"
13007
13638
  }
13008
13639
  },
13009
13640
  {
@@ -13017,35 +13648,35 @@
13017
13648
  "name": "orientation",
13018
13649
  "description": {
13019
13650
  "kind": "markdown",
13020
- "value": "Type: `SplitOrientation` \nDefault: `'horizontal'`"
13651
+ "value": "Type: `SplitOrientation` \nDefault: `\"horizontal\"`"
13021
13652
  }
13022
13653
  },
13023
13654
  {
13024
13655
  "name": "orientation-breakpoint",
13025
13656
  "description": {
13026
13657
  "kind": "markdown",
13027
- "value": "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.\n\nType: `number | string | undefined`"
13658
+ "value": "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.\n\nType: `| number\n | string | undefined`"
13028
13659
  }
13029
13660
  },
13030
13661
  {
13031
13662
  "name": "orientation-breakpoint-basis",
13032
13663
  "description": {
13033
13664
  "kind": "markdown",
13034
- "value": "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.\n\nType: `OrientationBreakpointBasis` \nDefault: `'container'`"
13665
+ "value": "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.\n\nType: `OrientationBreakpointBasis` \nDefault: `\"container\"`"
13035
13666
  }
13036
13667
  },
13037
13668
  {
13038
13669
  "name": "rail-breakpoint",
13039
13670
  "description": {
13040
13671
  "kind": "markdown",
13041
- "value": "Width below which the collapsing pane switches from its normal percent width to the fixed\n`railWidth` (`'rail'` state). Must stay above `floatBreakpoint` — an inverted pair is\nsanitized by raising this one to match, which collapses the `'rail'` band away rather than\nleaving a wide container reported as collapsed.\n\nAccepts a bare pixel number (`640`, `rail-breakpoint=\"640\"` — the original form) or a CSS\nlength string: `'640px'`, `'68.75rem'`, `'3em'`. Under the default\n`collapseBreakpointBasis=\"container\"` this is compared against this component's own measured\n`[part=\"base\"]` inline size, strictly `<`, and `rem` resolves against the *document root*'s\ncomputed font size (a `@container` query's rule, not a `@media` query's) while `em` resolves\nagainst this element's own. The length is re-resolved on every measurement, never cached, so\na root font-size change moves the crossing width with no invalidation step.\n\nAnything the grammar rejects — `''`, `'auto'`, garbage, a non-finite number, and deliberately\n`%`/`vw`/`vh`/`calc()`/`var()` — falls back to the `640` default rather than switching the\nfeature off (unlike `orientationBreakpoint`, this breakpoint has a documented default to fall\nback to). A negative length is floored at `0`, i.e. never crossed.\n\nDefault: `640`.\n\nType: `number | string` \nDefault: `640`"
13672
+ "value": "Width below which the collapsing pane switches from its normal percent width to the fixed\n`railWidth` (`'rail'` state). Must stay above `floatBreakpoint` — an inverted pair is\nsanitized by raising this one to match, which collapses the `'rail'` band away rather than\nleaving a wide container reported as collapsed.\n\nAccepts a bare pixel number (`640`, `rail-breakpoint=\"640\"` — the original form) or a CSS\nlength string: `'640px'`, `'68.75rem'`, `'3em'`. Under the default\n`collapseBreakpointBasis=\"container\"` this is compared against this component's own measured\n`[part=\"base\"]` inline size, strictly `<`, and `rem` resolves against the *document root*'s\ncomputed font size (a `@container` query's rule, not a `@media` query's) while `em` resolves\nagainst this element's own. The length is re-resolved on every measurement, never cached, so\na root font-size change moves the crossing width with no invalidation step.\n\nAnything the grammar rejects — `''`, `'auto'`, garbage, a non-finite number, and deliberately\n`%`/`vw`/`vh`/`calc()`/`var()` — falls back to the `640` default rather than switching the\nfeature off (unlike `orientationBreakpoint`, this breakpoint has a documented default to fall\nback to). A negative length is floored at `0`, i.e. never crossed.\n\nDefault: `640`.\n\nType: `| number\n | string` \nDefault: `640`"
13042
13673
  }
13043
13674
  },
13044
13675
  {
13045
13676
  "name": "rail-width",
13046
13677
  "description": {
13047
13678
  "kind": "markdown",
13048
- "value": "Fixed CSS length the collapsing pane clamps to in the `'rail'` state.\n\nType: `string` \nDefault: `'3.5rem'`"
13679
+ "value": "Fixed CSS length the collapsing pane clamps to in the `'rail'` state.\n\nType: `string` \nDefault: `\"3.5rem\"`"
13049
13680
  }
13050
13681
  },
13051
13682
  {
@@ -13061,7 +13692,7 @@
13061
13692
  "name": "lr-spreadsheet-viewer",
13062
13693
  "description": {
13063
13694
  "kind": "markdown",
13064
- "value": "Fetches and renders `.xlsx` and legacy `.xls` workbooks with virtualized rows and sheet tabs.\n\nAdopts `DocumentAnchorTarget`: a `cell-range` anchor addresses one sheet's raw grid, 1-based, with\nits (always-present) header row included -- matching how a spreadsheet app itself labels `A1`.\nThe target sheet resolves from the anchor's own `sheet` field (falling back to a `Sheet!`-prefixed\n`range`, then the currently active sheet when neither is set); `scrollToAnchor()` switches\n`<lr-tabs>`'s `active` tab first when the resolved sheet isn't already active, then scrolls the\naddressed row into view via the virtualized list's `active-id`, then scrolls the first addressed\ncolumn horizontally into view. `highlights` paint as a focusable `part=\"cell-highlight\"` on\nmembership, recomputed per row inside `renderRow()` so a row scrolled out and back in reconstructs\nits highlight for free, with no persistent DOM to keep in sync. `search()` is a case-insensitive\nsubstring match over every sheet's stringified cell values (the same stringification `cell()`\nalready renders), ordered sheet then row then column, switching tabs as navigation crosses sheets.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `cell` | One rendered cell. |\n| `cell-highlight` | A cell covered by a `highlights` entry -- focusable, emits `lr-highlight-activate` on click or Enter/Space. |\n| `data-row` | One virtualized data row. |\n| `error` | The error message region. |\n| `header-row` | A sheet's header row. |\n| `rows` | The virtualized row list. |\n| `sheet` | The wrapper around one sheet's header row and virtualized body. |\n| `spinner` | The loading status region. |\n| `tabs` | The sheet-switching `<lr-tabs>`, rendered only for a multi-sheet workbook. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-spreadsheet-viewer-highlight-color` (default: `var(--lr-color-brand)`) — Outline color of a highlighted cell. The active highlight sets it inline to `var(--lr-color-warning, var(--lr-color-brand))`."
13695
+ "value": "Fetches and renders `.xlsx` and legacy `.xls` workbooks with virtualized rows and sheet tabs.\n\nAdopts `DocumentAnchorTarget`: a `cell-range` anchor addresses one sheet's raw grid, 1-based, with\nits (always-present) header row included -- matching how a spreadsheet app itself labels `A1`.\nThe target sheet resolves from the anchor's own `sheet` field (falling back to a `Sheet!`-prefixed\n`range`, then the currently active sheet when neither is set); `scrollToAnchor()` switches\n`<lr-tabs>`'s `active` tab first when the resolved sheet isn't already active, then scrolls the\naddressed row into view via the virtualized list's `active-id`, then scrolls the first addressed\ncolumn horizontally into view. `highlights` paint a structural `part=\"cell-highlight\"` cell\nwrapping a focusable native `part=\"cell-highlight-action\"` button, recomputed per row inside\n`renderRow()` so a row scrolled out and back in reconstructs its highlight for free, with no\npersistent DOM to keep in sync. `search()` is a case-insensitive\nsubstring match over every sheet's stringified cell values (the same stringification `cell()`\nalready renders), ordered sheet then row then column, switching tabs as navigation crosses sheets.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `cell` | One rendered cell. |\n| `cell-highlight` | A structural cell covered by a `highlights` entry. |\n| `cell-highlight-action` | The native button filling a highlighted cell -- focusable, emits `lr-highlight-activate` on click or Enter/Space. |\n| `data-row` | One virtualized data row. |\n| `error` | The error message region. |\n| `header-row` | A sheet's header row. |\n| `rows` | The virtualized row list. |\n| `sheet` | The wrapper around one sheet's header row and virtualized body. |\n| `spinner` | The loading status region. |\n| `tabs` | The sheet-switching `<lr-tabs>`, rendered only for a multi-sheet workbook. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-spreadsheet-viewer-highlight-color` (default: `var(--lr-color-brand)`) — Outline color of a highlighted cell. The active highlight sets it inline to `var(--lr-color-warning, var(--lr-color-brand))`."
13065
13696
  },
13066
13697
  "attributes": [
13067
13698
  {
@@ -13270,14 +13901,14 @@
13270
13901
  "name": "lr-stepper",
13271
13902
  "description": {
13272
13903
  "kind": "markdown",
13273
- "value": "`<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`.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `step` | A single step button. |\n| `step-check` | The completed-checkmark glyph, shown for `completed` steps instead of `step-index`. |\n| `step-icon` | Optional leading topic glyph supplied by the item's `icon` field; content may have a natural aspect ratio and is not restricted to a square icon. Rendered additionally to, never instead of, `step-index`/`step-check`. |\n| `step-index` | The numbered index chip, shown for `pending`/`current`/`error` steps. |\n| `step-label` | The step's label text. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-stepper-current-color` (default: `var(--lr-color-text)`) — Text color of the `current` step. Declared as an inline `var()` fallback (never on `:host`), so setting it on the element or an ancestor recolors only the current step without hijacking the library-wide `--lr-color-text` token.\n- `--lr-stepper-current-font-weight` (default: `var(--lr-font-weight-semibold)`) — Font weight of the `current` step's label. `::part(step)[data-state='current']` is invalid CSS (an attribute selector cannot follow `::part`), so this is the only way to change just the current step's boldness without hijacking the library-wide `--lr-font-weight-semibold` token.\n- `--lr-stepper-error-color` (default: `var(--lr-color-danger)`) — Text color of an `error` step.\n- `--lr-stepper-current-index-bg` (default: `var(--lr-color-brand)`) — Background of the `current` step's numbered index chip (`step-index`).\n- `--lr-stepper-current-index-color` (default: `var(--lr-color-surface)`) — Text color of the `current` step's numbered index chip."
13904
+ "value": "`<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 non-cancelable\n`lr-step-select`, and the host decides whether/how `steps` changes in response.\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`.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `step` | A single step button. |\n| `step-check` | The completed-checkmark glyph, shown for `completed` steps instead of `step-index`. |\n| `step-icon` | Optional leading topic glyph supplied by the item's `icon` field; content may have a natural aspect ratio and is not restricted to a square icon. Rendered additionally to, never instead of, `step-index`/`step-check`. |\n| `step-index` | The numbered index chip, shown for `pending`/`current`/`error` steps. |\n| `step-item` | The `role=\"listitem\"` wrapper for one step. |\n| `step-label` | The step's label text. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-stepper-current-color` (default: `var(--lr-color-text)`) — Text color of the `current` step. Declared as an inline `var()` fallback (never on `:host`), so setting it on the element or an ancestor recolors only the current step without hijacking the library-wide `--lr-color-text` token.\n- `--lr-stepper-current-font-weight` (default: `var(--lr-font-weight-semibold)`) — Font weight of the `current` step's label. `::part(step)[data-state='current']` is invalid CSS (an attribute selector cannot follow `::part`), so this is the only way to change just the current step's boldness without hijacking the library-wide `--lr-font-weight-semibold` token.\n- `--lr-stepper-error-color` (default: `var(--lr-color-danger)`) — Text color of an `error` step.\n- `--lr-stepper-current-index-bg` (default: `var(--lr-color-brand)`) — Background of the `current` step's numbered index chip (`step-index`).\n- `--lr-stepper-current-index-color` (default: `var(--lr-color-on-brand)`) — Text color of the `current` step's numbered index chip."
13274
13905
  },
13275
13906
  "attributes": [
13276
13907
  {
13277
13908
  "name": "aria-label",
13278
13909
  "description": {
13279
13910
  "kind": "markdown",
13280
- "value": "Accessible name for the `role=\"tablist\"` step strip. Attribute-reflects from a host-level\n`aria-label` so a plain-markup consumer gets ARIA-name forwarding without setting a JS\nproperty. Unset, the tablist renders without an `aria-label` (the role carries no localized\ndefault name).\n\nType: `string | null` \nDefault: `null`"
13911
+ "value": "Accessible name for the `role=\"list\"` step strip. Attribute-reflects from a host-level\n`aria-label` so a plain-markup consumer gets ARIA-name forwarding without setting a JS\nproperty. Unset, the list renders without an `aria-label` (the role carries no localized\ndefault name).\n\nType: `string | null` \nDefault: `null`"
13281
13912
  }
13282
13913
  },
13283
13914
  {
@@ -13291,28 +13922,28 @@
13291
13922
  "name": "narrow-orientation",
13292
13923
  "description": {
13293
13924
  "kind": "markdown",
13294
- "value": "Layout/navigation axis used below `orientationBreakpoint`.\n\nType: `StepperOrientation` \nDefault: `'vertical'`"
13925
+ "value": "Layout/navigation axis used below `orientationBreakpoint`.\n\nType: `StepperOrientation` \nDefault: `\"vertical\"`"
13295
13926
  }
13296
13927
  },
13297
13928
  {
13298
13929
  "name": "orientation",
13299
13930
  "description": {
13300
13931
  "kind": "markdown",
13301
- "value": "`'horizontal'` (the default) lays steps out in a row (Left/Right, RTL-aware, to navigate);\n`'vertical'` stacks them (Up/Down navigate instead, no RTL swap needed). The *authored* axis\nused at/above `orientationBreakpoint` (or always, when that's unset) -- see\n`effectiveOrientation` for the live axis actually in effect.\n\nType: `StepperOrientation` \nDefault: `'horizontal'`"
13932
+ "value": "`'horizontal'` (the default) lays steps out in a row (Left/Right, RTL-aware, to navigate);\n`'vertical'` stacks them (Up/Down navigate instead, no RTL swap needed). The *authored* axis\nused at/above `orientationBreakpoint` (or always, when that's unset) -- see\n`effectiveOrientation` for the live axis actually in effect.\n\nType: `StepperOrientation` \nDefault: `\"horizontal\"`"
13302
13933
  }
13303
13934
  },
13304
13935
  {
13305
13936
  "name": "orientation-breakpoint",
13306
13937
  "description": {
13307
13938
  "kind": "markdown",
13308
- "value": "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.\n\nType: `number | string | undefined`"
13939
+ "value": "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.\n\nType: `| number\n | string | undefined`"
13309
13940
  }
13310
13941
  },
13311
13942
  {
13312
13943
  "name": "orientation-breakpoint-basis",
13313
13944
  "description": {
13314
13945
  "kind": "markdown",
13315
- "value": "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.\n\nType: `OrientationBreakpointBasis` \nDefault: `'container'`"
13946
+ "value": "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.\n\nType: `OrientationBreakpointBasis` \nDefault: `\"container\"`"
13316
13947
  }
13317
13948
  }
13318
13949
  ]
@@ -13391,6 +14022,36 @@
13391
14022
  }
13392
14023
  ]
13393
14024
  },
14025
+ {
14026
+ "name": "lr-subagent-panel",
14027
+ "description": {
14028
+ "kind": "markdown",
14029
+ "value": "`<lr-subagent-panel>` — a controlled hierarchy of nested agent runs with lifecycle status,\ntask/model context, progress, selection, cancellation, and retry intents.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | Run actions. |\n| `base` | The named subagent region. |\n| `cancel` | Cancellation action. |\n| `empty` | The empty state. |\n| `label` | Run label. |\n| `limit` | Resource-ceiling status shown when additional runs are omitted. |\n| `list` | Hierarchical run list. |\n| `model` | Caller-supplied model id. |\n| `progress` | Progress indicator. |\n| `retry` | Retry action. |\n| `run` | One run. |\n| `run-row` | Run content and actions. |\n| `run-selected` | The selected run. |\n| `run-trigger` | Run selection action. |\n| `status` | Lifecycle status badge. |\n| `task` | Caller-supplied task text. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-subagent-panel-selected-border` (default: `var(--lr-color-brand)`) — Selected run border.\n- `--lr-subagent-panel-progress-track` (default: `var(--lr-color-border)`) — Progress track.\n- `--lr-subagent-panel-progress-fill` (default: `var(--lr-color-brand)`) — Progress fill."
14030
+ },
14031
+ "attributes": [
14032
+ {
14033
+ "name": "label",
14034
+ "description": {
14035
+ "kind": "markdown",
14036
+ "value": "Type: `string` \nDefault: `''`"
14037
+ }
14038
+ },
14039
+ {
14040
+ "name": "locale",
14041
+ "description": {
14042
+ "kind": "markdown",
14043
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
14044
+ }
14045
+ },
14046
+ {
14047
+ "name": "selected-run-id",
14048
+ "description": {
14049
+ "kind": "markdown",
14050
+ "value": "Type: `string` \nDefault: `''`"
14051
+ }
14052
+ }
14053
+ ]
14054
+ },
13394
14055
  {
13395
14056
  "name": "lr-suggestion-chips",
13396
14057
  "description": {
@@ -13425,7 +14086,7 @@
13425
14086
  "name": "lr-svg-viewer",
13426
14087
  "description": {
13427
14088
  "kind": "markdown",
13428
- "value": "Fetches and safely renders an inline SVG document.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root container. |\n| `body` | The wrapper around the fetched-state content. |\n| `error` | The error region. |\n| `frame-content` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable`. |\n| `frame-controls` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable`. |\n| `frame-reset` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable`. |\n| `frame-viewport` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable`. |\n| `frame-zoom-in` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable`. |\n| `frame-zoom-out` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable`. |\n| `highlight-layer` | The wrapper around every rendered region highlight. |\n| `region-highlight` | One region highlight (`data-tone`, `data-active`). |\n| `spinner` | The loading region. |\n| `svg` | The sanitized SVG document, once loaded. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-svg-viewer-max-height` (default: `none`) — Maximum block size of the scrollable body before it scrolls internally. Also settable via the `max-height` property.\n- `--lr-svg-viewer-active-border` (default: `var(--lr-color-warning, var(--lr-color-brand))`) — Border color of the `[part=\"region-highlight\"]` matching `activeHighlightId`. Distinct from the resting highlight border, so the active region can be recolored without touching the rest."
14089
+ "value": "Fetches and safely renders an inline SVG document.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root container. |\n| `body` | The wrapper around the fetched-state content. |\n| `error` | The error region. |\n| `frame-content` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable`. |\n| `frame-controls` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable`. |\n| `frame-reset` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable`. |\n| `frame-viewport` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable`. |\n| `frame-zoom-in` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable`. |\n| `frame-zoom-out` | Forwarded from the internal `<lr-zoomable-frame>` when `zoomable`. |\n| `highlight-actions` | Non-overlapping actions used for multiple region highlights. |\n| `highlight-layer` | The wrapper around every rendered region highlight. |\n| `region-highlight` | One region highlight (`data-tone`, `data-active`). |\n| `region-highlight-action` | One non-overlapping highlight action. |\n| `region-highlight-target` | Transparent activation geometry around a region highlight, with a minimum pointer/focus area independent of the visual rectangle. |\n| `spinner` | The loading region. |\n| `svg` | The sanitized SVG document, once loaded. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-svg-viewer-max-height` (default: `none`) — Maximum block size of the scrollable body before it scrolls internally. Also settable via the `max-height` property.\n- `--lr-svg-viewer-active-border` (default: `var(--lr-color-warning, var(--lr-color-brand))`) — Border color of the `[part=\"region-highlight\"]` matching `activeHighlightId`. Distinct from the resting highlight border, so the active region can be recolored without touching the rest.\n- `--lr-svg-viewer-highlight-accent-color` (default: `var(--lr-color-brand)`) — Accent highlight border and hover tint.\n- `--lr-svg-viewer-highlight-success-color` (default: `var(--lr-color-success)`) — Success highlight border and hover tint.\n- `--lr-svg-viewer-highlight-warning-color` (default: `var(--lr-color-warning)`) — Warning highlight border and hover tint.\n- `--lr-svg-viewer-highlight-danger-color` (default: `var(--lr-color-danger)`) — Danger highlight border and hover tint.\n- `--lr-svg-viewer-highlight-neutral-color` (default: `var(--lr-color-neutral)`) — Neutral highlight border and hover tint."
13429
14090
  },
13430
14091
  "attributes": [
13431
14092
  {
@@ -13476,7 +14137,7 @@
13476
14137
  "name": "lr-swatch-picker",
13477
14138
  "description": {
13478
14139
  "kind": "markdown",
13479
- "value": "`<lr-swatch-picker>` -- a single-select picker over a small, fixed set of color swatches with\nthe WAI-ARIA APG `radiogroup` contract built in: `role=\"radiogroup\"`/`role=\"radio\"`, roving\ntabindex, automatic activation (click or arrow-key move both select immediately, like a native\nradio group), cyclic Arrow/Home/End navigation. Distinct from `<lr-color-picker>`'s freeform\nnative color input -- this picks exactly one of N designer-chosen named colors, the shape apps\notherwise hand-roll as a row of round accent-color buttons.\n\n`mode=\"gemstone\"` uses the shared faceted gemstone glyph for options carrying a `gemstone`\nkey and opts into the gemstone glow/shine defaults. The `options` array still controls display\norder and `value` still controls the initial selection.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The `role=\"radiogroup\"` root. |\n| `swatch` | A single `role=\"radio\"` color swatch's interactive hit target; sized via `--lr-swatch-picker-hit-size` (defaults to `--lr-size-2-5rem`, swapped per `size` tier and floored at 24px), independent of the smaller visible fill/icon rendered inside it. The selected one is `[part='swatch'][aria-checked='true']`. |\n| `swatch-fill` | The compact filled circle rendered when the option has no custom `icon`. |\n| `swatch-icon` | Optional custom shape supplied by the option's `icon` field; when present it replaces `swatch-fill` and the swatch renders unfilled/unbordered behind it. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-swatch-picker-selected-color` (default: `var(--lr-color-brand)`) — Ring color drawn around the selected swatch, themeable independently of the focus ring and every other ring color.\n- `--lr-swatch-picker-selected-blur` (default: `0`) — Blur radius of that same ring. 0 by default (a crisp ring); set a real length (e.g. 0.4rem) for a soft glow instead.\n- `--lr-swatch-picker-shine-duration` (default: `0s`) — Duration of a rhythmic brighten-and-settle \"shine\" on the selected swatch. `0s` (the default) is a no-op -- today's static look for every existing consumer. Set a real duration (e.g. 1.6s) for a pulsing shine; disabled outright under `prefers-reduced-motion: reduce`. Independent of `--lr-swatch-picker-selected-blur` (a separate `filter: brightness()` animation, not `box-shadow`), so the two compose freely, and works identically for a plain color circle and an icon swatch alike.\n- `--lr-swatch-picker-gemstone-selected-blur` (default: `var(--lr-size-0-5rem)`) — Selected glow blur used by `mode=\"gemstone\"` when `--lr-swatch-picker-selected-blur` is not overridden.\n- `--lr-swatch-picker-gemstone-shine-duration` (default: `1.8s`) — Selected shine duration used by `mode=\"gemstone\"` when `--lr-swatch-picker-shine-duration` is not overridden.\n- `--lr-swatch-picker-hit-size` (default: `var(--lr-size-2-5rem)`) — Hit-area size (both min-inline-size and min-block-size) for the swatch button, swapped per tier and floored at 24px.\n- `--lr-swatch-picker-fill-size` (default: `var(--lr-size-1-5rem)`) — Visible fill/icon diameter for the swatch, swapped per tier."
14140
+ "value": "`<lr-swatch-picker>` -- a single-select picker over a small, fixed set of color swatches with\nthe WAI-ARIA APG `radiogroup` contract built in: `role=\"radiogroup\"`/`role=\"radio\"`, roving\ntabindex, automatic activation (click or arrow-key move both select immediately, like a native\nradio group), cyclic Arrow/Home/End navigation. Distinct from `<lr-color-picker>`'s freeform\nnative color input -- this picks exactly one of N designer-chosen named colors, the shape apps\notherwise hand-roll as a row of round accent-color buttons.\n\n`mode=\"gemstone\"` uses the shared faceted gemstone glyph for options carrying a `gemstone`\nkey and opts into the gemstone glow/shine defaults. The `options` array still controls display\norder and `value` still controls the initial selection.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The `role=\"radiogroup\"` root. |\n| `swatch` | A single `role=\"radio\"` color swatch's interactive hit target; sized via `--lr-swatch-picker-hit-size` (defaults to `--lr-size-2-5rem`, swapped per `size` tier and floored at 24px), independent of the smaller visible fill/icon rendered inside it. The selected one is `[part='swatch'][aria-checked='true']`. |\n| `swatch-fill` | The compact filled circle rendered when the option has no custom `icon`. |\n| `swatch-icon` | Optional custom shape supplied by the option's `icon` field; when present it replaces `swatch-fill` and the swatch renders unfilled/unbordered behind it. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-swatch-picker-selected-color` (default: `var(--lr-color-brand)`) — Ring color drawn around the selected swatch, themeable independently of the focus ring and every other ring color.\n- `--lr-swatch-picker-selected-blur` (default: `0`) — Blur radius of that same ring. 0 by default (a crisp ring); set a real length (e.g. 0.4rem) for a soft glow instead.\n- `--lr-swatch-picker-shine-duration` (default: `0s`) — Duration of a rhythmic brighten-and-settle \"shine\" on the selected swatch. `0s` (the default) is a no-op -- today's static look for every existing consumer. Set a real duration (e.g. 1.6s) for a pulsing shine; disabled outright under `prefers-reduced-motion: reduce`. Independent of `--lr-swatch-picker-selected-blur` (a separate `filter: brightness()` animation, not `box-shadow`), so the two compose freely, and works identically for a plain color circle and an icon swatch alike.\n- `--lr-swatch-picker-gemstone-selected-blur` (default: `var(--lr-size-0-5rem)`) — Selected glow blur used by `mode=\"gemstone\"` when `--lr-swatch-picker-selected-blur` is not overridden.\n- `--lr-swatch-picker-gemstone-shine-duration` (default: `var(--lr-transition-ambient)`) — Selected shine timing used by `mode=\"gemstone\"` when `--lr-swatch-picker-shine-duration` is not overridden.\n- `--lr-swatch-picker-hit-size` (default: `var(--lr-size-2-5rem)`) — Hit-area size (both min-inline-size and min-block-size) for the swatch button, swapped per tier and floored at 24px.\n- `--lr-swatch-picker-fill-size` (default: `var(--lr-size-1-5rem)`) — Visible fill/icon diameter for the swatch, swapped per tier.\n- `--lr-swatch-picker-gap` (default: `var(--lr-space-xs)`) — Gap between swatches."
13480
14141
  },
13481
14142
  "attributes": [
13482
14143
  {
@@ -13585,7 +14246,7 @@
13585
14246
  "name": "lr-table",
13586
14247
  "description": {
13587
14248
  "kind": "markdown",
13588
- "value": "`<lr-table>` — a presentational, sort/select-aware data table.\n\nHeader/row activation is delegated: one `click` and one `keydown`\nlistener on `<table>` resolve the target via `closest('[data-col-key]'\n| '[data-row-key]')` and a key→object lookup map, instead of allocating\nfresh per-column/per-row closures on every render. Both listeners guard\nagainst nested interactive `cell()` content first (see\n`INTERACTIVE_SELECTOR`) so a button/link/input inside a cell owns its own\nactivation instead of triggering `lr-row-click`.\n\nKeyboard focus follows a roving-tabindex pattern (one `tabindex=\"0\"` stop\namong the header cells, one among the body rows — see `focusedColKey()` /\n`focusedRowKey()`), matching this repo's other `role=\"grid\"`/composite\nwidgets. Left/Right/Home/End move within the header row; Up/Down/Home/End\nmove within the body; Down from the header enters the body's roving stop,\nand Up from the body's first row returns to the header's roving stop.\nEnter/Space still only sort/activate (see `activateColumn()` /\n`activateRow()`).\n\nSet `aria-label` on the host to give the `role=\"grid\"` element an\naccessible name; it's forwarded into the shadow DOM's `<table>`.\n\n`columns[].priority` ('medium' | 'low') hides that column under\n`[part='base']`'s `@container` breakpoints; `[part='reveal-columns-button']`\nforces them all back into view. Rather than a *static* check of whether any\ncolumn merely declares a `priority`, the button (and the public\n`columnsHidden` property, see below) reflects whether a `priority` column\nis *actually* hidden right now — measured via `ResizeObserver` on\n`[part='base']` plus a post-render DOM check — or the public `showAllColumns`\nforce-visible mode is currently active (so there's still a way to toggle\nit back off). `showAllColumns` defaults to `false` and toggles itself on\n`[part='reveal-columns-button']` activation with no external wiring\nrequired, but is also settable up front (property or the reflected\n`show-all-columns` attribute) to restore a previously-persisted\npreference, and readable back — directly or via the `lr-columns-revealed`\nevent — to persist the current one. `columns[].sticky` pins a column's\nheader/cells to the inline-start (default/`true`) or inline-end (`'end'`)\nedge while the table scrolls horizontally.\n\n`expandedContent` (a table-level `(row: T) => unknown`, not a per-column\nhook, since the resulting panel spans every column via `colspan`) makes\nevery row render a leading chevron-toggle cell before its data columns.\n`canExpand` optionally gates which rows actually get an interactive\ntoggle — a row that fails it still gets a blank leading cell for column\nalignment. Which rows are currently open is fully consumer-owned via\n`expandedKeys` (a `Set<string | number>` of row keys, per `rowKey`/\n`keyOf()`) — the table only reads it and emits `lr-row-expand-toggle`\non activation, mirroring `sortKey`/`selectedKey`'s existing\npresentational-only convention.\n\nSelection is opt-in through the `selectionMode` property. Use `single` or\n`multiple` to self-manage row selection; the default `none` remains\npresentational. `selectedKeys` contains the raw keys selected in multiple\nmode.\n\n`filterable` adds a compact search field above the grid. `filterText` is\ncontrolled and emits `lr-filter-change`; `filter` can provide a typed\npredicate, otherwise the row is matched against its JSON representation.\n`pageSize` enables controlled pagination through the existing\n`<lr-pagination>` primitive. Client mode slices `rows`; server mode\nrenders the supplied page unchanged while using `totalItems` for the\nnavigation summary. `loading` keeps the table shell busy; `loadingAppearance`\nchooses how — the default `'spinner'` replaces the grid with an indeterminate\nspinner, while `'skeleton'` keeps the real `<colgroup>`/`<thead>` (and the\nfilter/pagination chrome) and fills the body with `skeletonRows` placeholder\nrows, so column geometry survives the load instead of collapsing and\nreflowing. Either way exactly one `role=\"status\"` live region announces the\nstate — every placeholder opts out of `<lr-skeleton>`'s own announcement.\nColumns with `editable: true` open a native text/number editor on\ndouble-click and emit `lr-cell-edit`; row mutation remains consumer-owned.\n`editable: 'always'` instead renders that editor in every body cell of the\ncolumn from first paint — a settings/rate-style column meant to be typed\nstraight into. Persistent editors are plain tab stops (no `tabindex` of their\nown, exactly like the row-expand toggle) outside the header/row roving model,\nso arrow keys still navigate the grid from a row's own tab stop and act as\ncaret movement once focus is inside a field. Enter commits and keeps focus;\nEscape has nothing to cancel back to, so it is left uncancelled for an\nancestor dialog/popover. Their value binds as a content attribute, so once\nthe user has typed into one an out-of-band `rows` update to that same cell no\nlonger replaces the draft; an untouched editor still picks up a new value.\nFocus is restored across a re-sort that moves the editor's node, and dropped\n(never re-aimed at an unrelated row) when its row leaves the rendered page.\n`spellcheck`/`autocapitalize`/`autoCorrect` forward to the filter input and, for a `'text'`\n(the default) `editType`, the inline cell editor -- no effect on a `'number'` cell editor.\n`groupBy` inserts non-focusable group header rows before each group; use\n`groupLabel` when the raw group key needs custom content.\n\n`columns[].heatValue` opts a column into heat-tint mode: its numeric return value is normalized\nagainst a shared scale spanning every `heatValue`-defining column across every currently-rendered\nrow (auto-derived, or overridden via `heatTintScale`) and painted as a `color-mix()` background via\nthe retheme-able `--lr-table-heat-tint-lo`/`-hi` custom properties (matching `lr-heatmap`'s own\nramp-token convention). `rowTotal`/`grandTotal` add a trailing column mirroring `expandedContent`'s\nleading one: `rowTotal(row)` renders per-row, `grandTotal(rows)` renders at its intersection with\nthe footer row (only when a column also defines `footer`) — both share `footer`'s own\n\"consumer computes/renders\" contract rather than assuming addition.\n\nThe built-in empty state is addressable rather than fixed: every `<lr-empty>` the table renders\ncarries `part=\"empty\"` and re-exports its own inner parts as `empty-heading`/`empty-description`/\n`empty-icon`/`empty-actions`/`empty-base`, the two *data*-empty branches (no rows at all, and\nfiltered/paginated down to zero) render it as the fallback content of a named `empty` slot so a\nconsumer can replace it wholesale, and `emptyCompact` overrides each branch's built-in `compact`\ndefault. The no-columns branch is deliberately **not** slot-replaceable — it reports a\nconfiguration problem (`noColumnsHeading`), not \"this query returned nothing\", and a single slot\ncovering all three would collapse that distinction.\n\n`layout` sets a floor on the `<table>`'s `table-layout`: `'fixed'` forces it even with no column\nwidths, while the default `'auto'` still resolves to `fixed` whenever a column declares a `width`\nor a drag-resize is in flight (column resizing does not work under `table-layout: auto`).\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `empty` | Replaces the built-in empty state on the two *data*-empty branches (no rows at all, and filtered/paginated down to zero). Left unfilled, the built-in `[part='empty']` `<lr-empty>` renders as this slot's fallback content. The no-columns branch renders its own `noColumnsHeading` state and is not slot-replaceable. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper around the `<table>` and its footer controls. |\n| `caption` | The `<caption>` element, rendered only when `caption` is set. |\n| `cell` | Each body `<td>`. |\n| `cell-editor` | The native inline cell editor: shown after a double-click on an `editable: true` cell, and rendered persistently in every body cell of an `editable: 'always'` column. |\n| `empty` | The built-in `<lr-empty>` host, in all three empty states (no columns configured, no rows at all, and filtered/paginated down to zero rows). The two data-empty states render it as the `empty` slot's fallback, so it disappears once that slot is filled. Note that the no-columns and no-rows states return the empty element as the shadow root's own root, with no `[part='base']` wrapper around it — `::part(base)` does not apply in those two states, only in the filtered-to-zero one. |\n| `empty-actions` | Exported from the built-in `<lr-empty>`'s `actions` part. |\n| `empty-base` | Exported from the built-in `<lr-empty>`'s own `base` part. |\n| `empty-description` | Exported from the built-in `<lr-empty>`'s `description` part. |\n| `empty-heading` | Exported from the built-in `<lr-empty>`'s `heading` part. |\n| `empty-icon` | Exported from the built-in `<lr-empty>`'s `icon` part. |\n| `expand-toggle-cell` | Each row's (and the header's) leading chevron-toggle cell, rendered only when `expandedContent` is set. |\n| `expanded-cell` | The single `colspan`-spanning `<td>` inside `expanded-row`, containing `expandedContent(row)`. |\n| `expanded-row` | The full-width panel `<tr>` rendered beneath a row whose key is in `expandedKeys`. |\n| `filter` | The optional row-filter input. |\n| `filter-label` | The `<label>` wrapping the filter input. |\n| `foot` | The `<tfoot>`, only rendered when at least one column defines `footer`. |\n| `footer-cell` | A single footer cell. |\n| `footer-row` | The single footer row. |\n| `group-cell` | The full-width group header cell. |\n| `group-row` | A non-focusable group header row. |\n| `head` | The `<thead>` element. |\n| `header-cell` | Each `<th>` header cell. |\n| `loading` | The loading-state wrapper. Under `loadingAppearance=\"spinner\"` (the default) it is the visible block holding the spinner; under `\"skeleton\"` it is the visually-hidden `role=\"status\"` node, since the placeholder rows are the visible affordance. |\n| `more-button` | The \"load more\" control, shown when `hasMore` is true. |\n| `pagination` | The optional pagination component. |\n| `resize-handle` | The focusable separator used to resize a `resizable` column. |\n| `reveal-columns-button` | The button that toggles `priority`-hidden columns back into view. |\n| `row` | Each body `<tr>`. |\n| `row-expand-icon` | The chevron icon inside `row-expand-toggle`. |\n| `row-expand-toggle` | The `<button>` inside `expand-toggle-cell`, absent for a row that fails `canExpand`. |\n| `row-total-cell` | Each body row's trailing `<td>` holding `rowTotal(row)`, rendered only when `rowTotal` is set. The corresponding footer-row cell (holding `grandTotal`) is a `footer-cell` instead, matching every other footer cell. |\n| `skeleton` | Each `<lr-skeleton>` placeholder inside a `loadingAppearance=\"skeleton\"` body cell. Its rows and cells reuse the ordinary `row`/`cell`/`row-total-cell` parts (that is what keeps them geometrically identical to real rows), so this is the part to target for the placeholder's own look — e.g. `::part(skeleton) { --lr-skeleton-h: 2em; }`. |\n| `sort-icon` | The chevron shown in the active sortable column's header cell. |\n| `table` | The `<table role=\"grid\">` element. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-table-resize-min-width` (default: `var(--lr-size-3rem)`) — Default minimum width for a resizable column without an explicit pixel `minWidth`.\n- `--lr-table-resize-handle-opacity` (default: `0.12`) — Hover/focus opacity of the resize handle.\n- `--lr-table-max-height` (default: `none`) — Cap on the scroll container's block size, past which the table body scrolls.\n- `--lr-table-heat-tint-lo` (default: `var(--lr-color-brand-quiet)`) — Low endpoint of the heat-tint ramp used by `heatValue` columns.\n- `--lr-table-heat-tint-hi` (default: `var(--lr-color-brand)`) — High endpoint of the heat-tint ramp used by `heatValue` columns.\n- `--lr-table-heat-t` — This cell's position on the heat-tint ramp, as a percentage string. Set inline by the component on each `[data-heat]` cell; not consumer-settable.\n- `--lr-table-row-selected-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a row whose `aria-selected` is `true`. Shadow Parts forbids an attribute selector after `::part()`, so `::part(row)[aria-selected]` is invalid CSS and the selected row could otherwise only be restyled by hijacking the library-wide `--lr-color-brand-quiet` token.\n- `--lr-table-header-sorted-bg` (default: `transparent`) — Background of the currently-sorted column's header cell (`[aria-sort]` other than `none`). Same rationale as `--lr-table-row-selected-bg`: `::part(header-cell)[aria-sort]` is invalid CSS, so this token is the supported way to recolor the sorted header without hijacking a library-wide token.\n- `--lr-table-header-sorted-color` (default: `inherit`) — Text color of the currently-sorted column's header cell.\n- `--lr-table-sticky-offset` (default: `0`) — Distance a `sticky` column pins from the inline edge. Measured and set inline per column by the component so multiple sticky columns stack instead of overlapping; falls back to `0` for the first one, or before the first measurement pass."
14249
+ "value": "`<lr-table>` — a sort/select-aware data table.\n\nSorting is the one area the table owns outright: under the default\n`sortMode: 'client'` a sortable-header activation writes `sortKey`/`sortDir`\nitself and reorders the rendered rows (see `sortMode`, `defaultSortDir` and\n`columns[].sortValue`). Everything else here stays presentational —\nselection state beyond `selectionMode` and expansion state are read, never\nwritten. Set `sortMode=\"server\"` to keep `lr-sort` a pure notification and\ndrive `sortKey`/`sortDir` plus the row order entirely from your own state.\n\nHeader/row activation is delegated: one `click` and one `keydown`\nlistener on `<table>` resolve the target via `closest('[data-col-key]'\n| '[data-row-key]')` and a key→object lookup map, instead of allocating\nfresh per-column/per-row closures on every render. Both listeners guard\nagainst nested interactive `cell()` content first (see\n`INTERACTIVE_SELECTOR`) so a button/link/input inside a cell owns its own\nactivation instead of triggering `lr-row-click`.\n\nKeyboard focus follows a roving-tabindex pattern (one `tabindex=\"0\"` stop\namong the header cells, one among the body rows — see `focusedColKey()` /\n`focusedRowKey()`), matching this repo's other `role=\"grid\"`/composite\nwidgets. Left/Right/Home/End move within the header row; Up/Down/Home/End\nmove within the body; Down from the header enters the body's roving stop,\nand Up from the body's first row returns to the header's roving stop.\nEnter/Space still only sort/activate (see `activateColumn()` /\n`activateRow()`).\n\nSet `aria-label` on the host to give the `role=\"grid\"` element an\naccessible name; it's forwarded into the shadow DOM's `<table>`.\n\n`columns[].priority` ('medium' | 'low') hides that column under\n`[part='base']`'s `@container` breakpoints; `[part='reveal-columns-button']`\nforces them all back into view. Rather than a *static* check of whether any\ncolumn merely declares a `priority`, the button (and the public\n`columnsHidden` property, see below) reflects whether a `priority` column\nis *actually* hidden right now — measured via `ResizeObserver` on\n`[part='base']` plus a post-render DOM check — or the public `showAllColumns`\nforce-visible mode is currently active (so there's still a way to toggle\nit back off). `showAllColumns` defaults to `false` and toggles itself on\n`[part='reveal-columns-button']` activation with no external wiring\nrequired, but is also settable up front (property or the reflected\n`show-all-columns` attribute) to restore a previously-persisted\npreference, and readable back — directly or via the `lr-columns-revealed`\nevent — to persist the current one. `columns[].sticky` pins a column's\nheader/cells to the inline-start (default/`true`) or inline-end (`'end'`)\nedge while the table scrolls horizontally.\n\n`expandedContent` (a table-level `(row: T) => unknown`, not a per-column\nhook, since the resulting panel spans every column via `colspan`) makes\nevery row render a leading chevron-toggle cell before its data columns.\n`canExpand` optionally gates which rows actually get an interactive\ntoggle — a row that fails it still gets a blank leading cell for column\nalignment. Which rows are currently open is fully consumer-owned via\n`expandedKeys` (a `Set<string | number>` of row keys, per `rowKey`/\n`keyOf()`) — the table only reads it and emits `lr-row-expand-toggle`\non activation, mirroring `selectedKey`'s existing presentational-only\nconvention. (`sortKey`/`sortDir` are *not* a parallel case any more: under\nthe default `sortMode: 'client'` the table writes them on header\nactivation.)\n\nSelection is opt-in through the `selectionMode` property. Use `single` or\n`multiple` to self-manage row selection; the default `none` remains\npresentational. `selectedKeys` contains the raw keys selected in multiple\nmode.\n\n`filterable` adds a compact search field above the grid. `filterText` is\ncontrolled and emits `lr-filter-change`; `filter` can provide a typed\npredicate, otherwise the row is matched against its JSON representation.\n`pageSize` enables controlled pagination through the existing\n`<lr-pagination>` primitive. Client mode slices `rows`; server mode\nrenders the supplied page unchanged while using `totalItems` for the\nnavigation summary. `loading` keeps the table shell busy; `loadingAppearance`\nchooses how — the default `'spinner'` replaces the grid with an indeterminate\nspinner, while `'skeleton'` keeps the real `<colgroup>`/`<thead>` (and the\nfilter/pagination chrome) and fills the body with `skeletonRows` placeholder\nrows, so column geometry survives the load instead of collapsing and\nreflowing. Either way exactly one `role=\"status\"` live region announces the\nstate — every placeholder opts out of `<lr-skeleton>`'s own announcement.\nColumns with `editable: true` open a native text/number editor on\ndouble-click and emit `lr-cell-edit`; row mutation remains consumer-owned.\n`editable: 'always'` instead renders that editor in every body cell of the\ncolumn from first paint — a settings/rate-style column meant to be typed\nstraight into. Persistent editors are plain tab stops (no `tabindex` of their\nown, exactly like the row-expand toggle) outside the header/row roving model,\nso arrow keys still navigate the grid from a row's own tab stop and act as\ncaret movement once focus is inside a field. Enter commits and keeps focus;\nEscape has nothing to cancel back to, so it is left uncancelled for an\nancestor dialog/popover. Their value binds as a content attribute, so once\nthe user has typed into one an out-of-band `rows` update to that same cell no\nlonger replaces the draft; an untouched editor still picks up a new value.\nFocus is restored across a re-sort that moves the editor's node, and dropped\n(never re-aimed at an unrelated row) when its row leaves the rendered page.\n`spellcheck`/`autocapitalize`/`autoCorrect` forward to the filter input and, for a `'text'`\n(the default) `editType`, the inline cell editor -- no effect on a `'number'` cell editor.\n`groupBy` inserts non-focusable group header rows before each group; use\n`groupLabel` when the raw group key needs custom content. A client-mode\nsort applies *within* each group, so grouping survives sorting on a column\nunrelated to the group key.\n\n`columns[].heatValue` opts a column into heat-tint mode: its numeric return value is normalized\nagainst a shared scale spanning every `heatValue`-defining column across every currently-rendered\nrow (auto-derived, or overridden via `heatTintScale`) and painted as a `color-mix()` background via\nthe retheme-able `--lr-table-heat-tint-lo`/`-hi` custom properties (matching `lr-heatmap`'s own\nramp-token convention). `rowTotal`/`grandTotal` add a trailing column mirroring `expandedContent`'s\nleading one: `rowTotal(row)` renders per-row, `grandTotal(rows)` renders at its intersection with\nthe footer row (only when a column also defines `footer`) — both share `footer`'s own\n\"consumer computes/renders\" contract rather than assuming addition.\n\nThe built-in empty state is addressable rather than fixed: every `<lr-empty>` the table renders\ncarries `part=\"empty\"` and re-exports its own inner parts as `empty-heading`/`empty-description`/\n`empty-icon`/`empty-actions`/`empty-base`, the two *data*-empty branches (no rows at all, and\nfiltered/paginated down to zero) render it as the fallback content of a named `empty` slot so a\nconsumer can replace it wholesale, and `emptyCompact` overrides each branch's built-in `compact`\ndefault. The no-columns branch is deliberately **not** slot-replaceable — it reports a\nconfiguration problem (`noColumnsHeading`), not \"this query returned nothing\", and a single slot\ncovering all three would collapse that distinction.\n\n`layout` sets a floor on the `<table>`'s `table-layout`: `'fixed'` forces it even with no column\nwidths, while the default `'auto'` still resolves to `fixed` whenever a column declares a `width`\nor a drag-resize is in flight (column resizing does not work under `table-layout: auto`).\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `empty` | Replaces the built-in empty state on the two *data*-empty branches (no rows at all, and filtered/paginated down to zero). Left unfilled, the built-in `[part='empty']` `<lr-empty>` renders as this slot's fallback content. The no-columns branch renders its own `noColumnsHeading` state and is not slot-replaceable. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper around the `<table>` and its footer controls. |\n| `caption` | The `<caption>` element, rendered only when `caption` is set. |\n| `cell` | Each body `<td>`. |\n| `cell-editor` | The native inline cell editor: shown after a double-click on an `editable: true` cell, and rendered persistently in every body cell of an `editable: 'always'` column. |\n| `empty` | The built-in `<lr-empty>` host, in all three empty states (no columns configured, no rows at all, and filtered/paginated down to zero rows). The two data-empty states render it as the `empty` slot's fallback, so it disappears once that slot is filled. Note that the no-columns and no-rows states return the empty element as the shadow root's own root, with no `[part='base']` wrapper around it — `::part(base)` does not apply in those two states, only in the filtered-to-zero one. |\n| `empty-actions` | Exported from the built-in `<lr-empty>`'s `actions` part. |\n| `empty-base` | Exported from the built-in `<lr-empty>`'s own `base` part. |\n| `empty-description` | Exported from the built-in `<lr-empty>`'s `description` part. |\n| `empty-heading` | Exported from the built-in `<lr-empty>`'s `heading` part. |\n| `empty-icon` | Exported from the built-in `<lr-empty>`'s `icon` part. |\n| `expand-toggle-cell` | Each row's (and the header's) leading chevron-toggle cell, rendered only when `expandedContent` is set. |\n| `expanded-cell` | The single `colspan`-spanning `<td>` inside `expanded-row`, containing `expandedContent(row)`. |\n| `expanded-row` | The full-width panel `<tr>` rendered beneath a row whose key is in `expandedKeys`. |\n| `filter` | The optional row-filter input. |\n| `filter-label` | The `<label>` wrapping the filter input. |\n| `foot` | The `<tfoot>`, only rendered when at least one column defines `footer`. |\n| `footer-cell` | A single footer cell. |\n| `footer-row` | The single footer row. |\n| `group-cell` | The full-width group header cell. |\n| `group-row` | A non-focusable group header row. |\n| `head` | The `<thead>` element. |\n| `header-cell` | Each `<th>` header cell. |\n| `loading` | The loading-state wrapper. Under `loadingAppearance=\"spinner\"` (the default) it is the visible block holding the spinner; under `\"skeleton\"` it is the visually-hidden `role=\"status\"` node, since the placeholder rows are the visible affordance. |\n| `more-button` | The \"load more\" control, shown when `hasMore` is true. |\n| `pagination` | The optional pagination component. |\n| `resize-handle` | The focusable separator used to resize a `resizable` column. |\n| `reveal-columns-button` | The button that toggles `priority`-hidden columns back into view. |\n| `row` | Each body `<tr>`. |\n| `row-expand-icon` | The chevron icon inside `row-expand-toggle`. |\n| `row-expand-toggle` | The `<button>` inside `expand-toggle-cell`, absent for a row that fails `canExpand`. |\n| `row-total-cell` | Each body row's trailing `<td>` holding `rowTotal(row)`, rendered only when `rowTotal` is set. The corresponding footer-row cell (holding `grandTotal`) is a `footer-cell` instead, matching every other footer cell. |\n| `skeleton` | Each `<lr-skeleton>` placeholder inside a `loadingAppearance=\"skeleton\"` body cell. Its rows and cells reuse the ordinary `row`/`cell`/`row-total-cell` parts (that is what keeps them geometrically identical to real rows), so this is the part to target for the placeholder's own look — e.g. `::part(skeleton) { --lr-skeleton-h: 2em; }`. |\n| `sort-icon` | The chevron shown in the active sortable column's header cell. |\n| `table` | The `<table role=\"grid\">` element. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-table-resize-min-width` (default: `var(--lr-size-3rem)`) — Default minimum width for a resizable column without an explicit pixel `minWidth`.\n- `--lr-table-resize-handle-opacity` (default: `0.12`) — Hover/focus opacity of the resize handle.\n- `--lr-table-max-height` (default: `none`) — Cap on the scroll container's block size, past which the table body scrolls.\n- `--lr-table-heat-tint-lo` (default: `var(--lr-color-brand-quiet)`) — Low endpoint of the heat-tint ramp used by `heatValue` columns.\n- `--lr-table-heat-tint-hi` (default: `var(--lr-color-brand)`) — High endpoint of the heat-tint ramp used by `heatValue` columns.\n- `--lr-table-heat-t` — This cell's position on the heat-tint ramp, as a percentage string. Set inline by the component on each `[data-heat]` cell; not consumer-settable.\n- `--lr-table-row-selected-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a row whose `aria-selected` is `true`. Shadow Parts forbids an attribute selector after `::part()`, so `::part(row)[aria-selected]` is invalid CSS and the selected row could otherwise only be restyled by hijacking the library-wide `--lr-color-brand-quiet` token.\n- `--lr-table-row-stripe-bg` (default: `transparent`) — Background of alternating body rows. The token is read only on rows carrying the internal stripe marker, so it can be set on the table or an ancestor without affecting group, expanded, hover, or selected rows.\n- `--lr-table-header-sorted-bg` (default: `transparent`) — Background of the currently-sorted column's header cell (`[aria-sort]` other than `none`). Same rationale as `--lr-table-row-selected-bg`: `::part(header-cell)[aria-sort]` is invalid CSS, so this token is the supported way to recolor the sorted header without hijacking a library-wide token.\n- `--lr-table-header-sorted-color` (default: `inherit`) — Text color of the currently-sorted column's header cell.\n- `--lr-table-sticky-offset` (default: `0`) — Distance a `sticky` column pins from the inline edge. Measured and set inline per column by the component so multiple sticky columns stack instead of overlapping; falls back to `0` for the first one, or before the first measurement pass."
13589
14250
  },
13590
14251
  "attributes": [
13591
14252
  {
@@ -13623,6 +14284,21 @@
13623
14284
  "value": "Whether a `priority` column is *actually* hidden right now by\ntable.styles.ts's `@container` rules, or `showAllColumns` force-visible\nmode is currently active — the same computed value that gates whether\n`[part='reveal-columns-button']` renders at all (see `render()`), kept\nin sync by `recomputeColumnsHidden()`. Computed/read-only by\nconvention: consumers may read it (and listen for\n`lr-columns-hidden-change`), but setting it directly has no lasting\neffect, since it's recomputed on the very next render or\n`[part='base']` resize.\n\nType: `boolean` \nDefault: `false`"
13624
14285
  }
13625
14286
  },
14287
+ {
14288
+ "name": "default-sort-dir",
14289
+ "description": {
14290
+ "kind": "markdown",
14291
+ "value": "The direction applied whenever header activation switches sorting to a *different* column —\nincluding the first column ever sorted. Re-activating the column that is already `sortKey`\ntoggles between `'asc'` and `'desc'` instead, so this never overrides a direction the user\njust chose for the column they are still on. Defaults to `'asc'`; set `'desc'` for a\nmost-recent-first or highest-first table.\n\nType: `'asc' | 'desc'` \nDefault: `'asc'`"
14292
+ },
14293
+ "values": [
14294
+ {
14295
+ "name": "asc"
14296
+ },
14297
+ {
14298
+ "name": "desc"
14299
+ }
14300
+ ]
14301
+ },
13626
14302
  {
13627
14303
  "name": "empty-compact",
13628
14304
  "description": {
@@ -13829,6 +14505,13 @@
13829
14505
  "value": "Type: `string` \nDefault: `''`"
13830
14506
  }
13831
14507
  },
14508
+ {
14509
+ "name": "sort-mode",
14510
+ "description": {
14511
+ "kind": "markdown",
14512
+ "value": "`'client'` (the default) orders `rows` itself, in the browser, from `sortKey`/`sortDir` and\nthe active column's `sortValue`. `'server'` renders `rows` in exactly the order given,\nassuming the caller has already sorted them — mirroring `paginationMode`'s identical\nclient/server split. `lr-sort` is emitted on header activation either way.\n\nWith no `sortKey` set (the default) `'client'` is a no-op: the input order is preserved\nverbatim, so an existing consumer that only listens for `lr-sort` sees unchanged rendering\nuntil a header is actually activated.\n\nType: `TableSortMode` \nDefault: `'client'`"
14513
+ }
14514
+ },
13832
14515
  {
13833
14516
  "name": "spellcheck",
13834
14517
  "description": {
@@ -13916,7 +14599,7 @@
13916
14599
  "name": "lr-task-list",
13917
14600
  "description": {
13918
14601
  "kind": "markdown",
13919
- "value": "`<lr-task-list>` — a live, collapsible tracker for an agent's plan: ordered steps with\nper-step lifecycle status and one level of nested sub-steps, embedded in the transcript.\n`items` is controlled and never mutated by this component, mirroring `<lr-stepper>`'s `steps`\ncontract -- but unlike stepper's single-`current` navigation control, task-list is a read-only\nstatus report: several steps may be `running` at once, there is no selection, and status changes\nare announced through an internal `<lr-live-region>`.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `detail-<id>` | Dynamic, one per item id (e.g. `slot=\"detail-step-3\"`). Rich detail under that item's label, after its `detail` text -- typically a `<lr-tool-call-chip>` or file `<lr-chip>`. Plain-HTML friendly, no render props. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The outer container. |\n| `body` | The list of items, `hidden` while collapsed. |\n| `header` | The clickable header (a `<button>` when `collapsible`, a plain heading otherwise). |\n| `item` | One item row (`role=\"listitem\"`); carries `data-status`, `data-id`, `data-depth` (`\"0\"` for a top-level item, `\"1\"` for a child). |\n| `item-children` | The nested `role=\"list\"` wrapper around a top-level item's children. |\n| `item-detail` | The item's optional `detail` text. |\n| `item-label` | The item's `label` text. |\n| `label` | The `label` text. |\n| `status-icon` | The per-item status glyph. |\n| `summary` | The visible \"N of M completed\" summary, counting only top-level items. |\n| `toggle` | The chevron indicator inside the header. Only rendered when `collapsible`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-task-list-spin` (default: `1s linear`) — Running-status icon spin animation duration/timing.\n- `--lr-task-list-compact-header-padding` (default: `var(--lr-space-2xs) var(--lr-space-s)`) — `[part=\"header\"]` padding while `compact`.\n- `--lr-task-list-compact-gap` (default: `var(--lr-space-2xs)`) — Gap between `[part=\"body\"]`'s item rows while `compact`.\n- `--lr-task-list-compact-body-padding` (default: `var(--lr-space-2xs) var(--lr-space-s) var(--lr-space-s)`) — `[part=\"body\"]` padding while `compact`."
14602
+ "value": "`<lr-task-list>` — a live, collapsible tracker for an agent's plan: ordered steps with\nper-step lifecycle status and one level of nested sub-steps, embedded in the transcript.\n`items` is controlled and never mutated by this component, mirroring `<lr-stepper>`'s `steps`\ncontract -- but unlike stepper's single-`current` navigation control, task-list is a read-only\nstatus report: several steps may be `running` at once, there is no selection, and status changes\nare announced through an internal `<lr-live-region>`.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `detail-<id>` | Dynamic, one per item id (e.g. `slot=\"detail-step-3\"`). Rich detail under that item's label, after its `detail` text -- typically a `<lr-tool-call-chip>` or file `<lr-chip>`. Plain-HTML friendly, no render props. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The outer container. |\n| `body` | The list of items, `hidden` while collapsed. |\n| `header` | The clickable header (a `<button>` when `collapsible`, a plain heading otherwise). |\n| `item` | One item row (`role=\"listitem\"`); carries `data-status`, `data-id`, `data-depth` (`\"0\"` for a top-level item, `\"1\"` for a child). |\n| `item-children` | The nested `role=\"list\"` wrapper around a top-level item's children. |\n| `item-detail` | The item's optional `detail` text. |\n| `item-label` | The item's `label` text. |\n| `label` | The `label` text. |\n| `status-icon` | The per-item status glyph. |\n| `summary` | The visible \"N of M completed\" summary, counting only top-level items. |\n| `toggle` | The chevron indicator inside the header. Only rendered when `collapsible`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-task-list-spin` (default: `var(--lr-transition-ambient)`) — Running-status icon spin animation duration/timing.\n- `--lr-task-list-compact-header-padding` (default: `var(--lr-space-2xs) var(--lr-space-s)`) — `[part=\"header\"]` padding while `compact`.\n- `--lr-task-list-compact-gap` (default: `var(--lr-space-2xs)`) — Gap between `[part=\"body\"]`'s item rows while `compact`.\n- `--lr-task-list-compact-body-padding` (default: `var(--lr-space-2xs) var(--lr-space-s) var(--lr-space-s)`) — `[part=\"body\"]` padding while `compact`."
13920
14603
  },
13921
14604
  "attributes": [
13922
14605
  {
@@ -13967,7 +14650,7 @@
13967
14650
  "name": "lr-terminal",
13968
14651
  "description": {
13969
14652
  "kind": "markdown",
13970
- "value": "`<lr-terminal>` — read-only ANSI console for streamed agent/tool output. Not a PTY: no\nstdin/keystroke handling, no cursor-addressed full-screen apps.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `announcer` | The visually-hidden `role=\"status\"` region used when `announce-output` is set. |\n| `base` | The outer container. |\n| `copy-button` | The copy-to-clipboard button. |\n| `download-button` | The download button. |\n| `jump-to-latest` | The pill shown while `follow` is disengaged and new output has arrived. |\n| `line` | One rendered line; carries `data-line-number`, `data-match`, `data-highlight-tone`. Rendered through `<lr-virtual-list>`'s `renderItem`, so it lives inside that element's own shadow root rather than this component's -- this component's own stylesheet reaches it via `lr-virtual-list::part(line)`, one hop of the standard CSS Shadow Parts selector. |\n| `toolbar` | The header row, only rendered when copy/download are enabled. |\n| `viewport` | The `role=\"log\"` scrollable region wrapping the virtualized line list. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-terminal-height` (default: `var(--lr-size-20rem)`) — 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.\n- `--lr-terminal-highlight-accent-bg` (default: `var(--lr-color-brand-quiet)`) — Background of an `accent`-tone highlighted line. Decoupled from the shared `--lr-color-brand-quiet` token also used by `[part=\"copy-button\"]`/`[part=\"download-button\"]`'s hover state, and from any `::part('line')` override (the background is applied inline, so a stylesheet rule can't beat it without `!important`).\n- `--lr-terminal-highlight-success-bg` (default: `var(--lr-color-success-quiet)`) — Background of a `success`-tone highlighted line.\n- `--lr-terminal-highlight-warning-bg` (default: `var(--lr-color-warning-quiet)`) — Background of a `warning`-tone highlighted line.\n- `--lr-terminal-highlight-danger-bg` (default: `var(--lr-color-danger-quiet)`) — Background of a `danger`-tone highlighted line.\n- `--lr-terminal-highlight-neutral-bg` (default: `var(--lr-color-surface)`) — Background of a `neutral`-tone highlighted line."
14653
+ "value": "`<lr-terminal>` — read-only ANSI console for streamed agent/tool output. Not a PTY: no\nstdin/keystroke handling, no cursor-addressed full-screen apps.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `announcer` | The visually-hidden `role=\"status\"` region used when `announce-output` is set. |\n| `base` | The outer container. |\n| `copy-button` | The copy-to-clipboard button. |\n| `download-button` | The download button. |\n| `jump-to-latest` | The pill shown while `follow` is disengaged and new output has arrived. |\n| `line` | One rendered line; carries `data-line-number`, `data-match`, `data-highlight-tone`. Rendered through `<lr-virtual-list>`'s `renderItem`, so it lives inside that element's own shadow root rather than this component's -- this component's own stylesheet reaches it via `lr-virtual-list::part(line)`, one hop of the standard CSS Shadow Parts selector. |\n| `toolbar` | The header row, only rendered when copy/download are enabled. |\n| `viewport` | The `role=\"log\"` scrollable region wrapping the virtualized line list. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-terminal-height` (default: `var(--lr-size-20rem)`) — 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.\n- `--lr-terminal-highlight-accent-bg` (default: `var(--lr-color-brand-quiet)`) — Background of an `accent`-tone highlighted line. Decoupled from the shared `--lr-color-brand-quiet` token also used by `[part=\"copy-button\"]`/`[part=\"download-button\"]`'s hover state, and from any `::part('line')` override (the background is applied inline, so a stylesheet rule can't beat it without `!important`).\n- `--lr-terminal-highlight-success-bg` (default: `var(--lr-color-success-quiet)`) — Background of a `success`-tone highlighted line.\n- `--lr-terminal-highlight-warning-bg` (default: `var(--lr-color-warning-quiet)`) — Background of a `warning`-tone highlighted line.\n- `--lr-terminal-highlight-danger-bg` (default: `var(--lr-color-danger-quiet)`) — Background of a `danger`-tone highlighted line.\n- `--lr-terminal-highlight-neutral-bg` (default: `var(--lr-color-surface)`) — Background of a `neutral`-tone highlighted line.\n- `--lr-terminal-search-outline-color` (default: `var(--lr-color-warning)`) — Outline color for a line containing a non-active search match.\n- `--lr-terminal-search-active-outline-color` (default: `var(--lr-color-brand)`) — Outline color for the active search match's line."
13971
14654
  },
13972
14655
  "attributes": [
13973
14656
  {
@@ -14504,7 +15187,7 @@
14504
15187
  "name": "lr-time-range",
14505
15188
  "description": {
14506
15189
  "kind": "markdown",
14507
- "value": "`<lr-time-range>` — a two-handle brush/scrubber over a numeric domain.\nCallers map their own time axis to `[min, max]`; no date logic lives here\n(matches the no-date-library constraint used elsewhere in this library).\n\nOptionally paired with a row of discrete presets (`presets`) — e.g. \"Last\n7 days\" / \"Last 30 days\" — rendered above the track; picking one is just a\nshortcut that sets both handles at once, the continuous brush underneath\nis unaffected and both interaction modes coexist.\n\nForm-associated only for the `<fieldset disabled>` cascade, not for a\nsubmitted value: it attaches `ElementInternals` (like `<lr-combobox>`'s\nminimal pattern, rather than the single-string-value `FormAssociated`\nmixin, which doesn't fit a two-handle range) purely so an ancestor\n`<fieldset disabled>` disables both handles and every preset button\nthrough `effectiveDisabled`, the same way it would a native `<input>`,\nwithout touching the consumer-facing `disabled` property/attribute itself.\nUnlike `<lr-combobox>`, it never calls `internals.setFormValue()` and\nhas no `name` — the selected range is not included in the owning form's\n`FormData` on submit; read `start`/`end` directly (e.g. from `lr-change`)\ninstead of relying on native form submission.\n\nDeliberately no label/hint/error chrome -- `startLabel`/`endLabel` here are per-handle\naccessible-name overrides, not visible label text, the same carve-out `<lr-slider>` states for\nits own single-handle `label`; a labeled-field consumer wraps this element in their own layout.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The time-range wrapper. |\n| `handle-end` | The end handle. |\n| `handle-start` | The start handle. |\n| `preset-button` | A preset button. |\n| `presets` | The preset controls wrapper. |\n| `range` | The selected range. |\n| `track` | The complete range track. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-time-range-preset-active-bg` (default: `var(--lr-color-brand)`) — Background of the active preset button (`[data-active]`, i.e. the preset whose range matches the current value). Declared as an inline `var()` fallback (never on `:host`), so setting it on the element or an ancestor recolors only the active preset without hijacking the library-wide `--lr-color-brand` token.\n- `--lr-time-range-preset-active-border-color` (default: `var(--lr-color-brand)`) — Border color of the active preset button.\n- `--lr-time-range-preset-active-color` (default: `var(--lr-color-on-brand)`) — Text color of the active preset button.\n- `--lr-time-range-size-scale` (default: `1`) — Unitless multiplier applied proportionally to the handle, track, and preset-button dimensions based on the current `size` tier; the drag hit-area is floored at 24px (WCAG 2.5.8)."
15190
+ "value": "`<lr-time-range>` — a two-handle brush/scrubber over a numeric domain.\nCallers map their own time axis to `[min, max]`; no date logic lives here\n(matches the no-date-library constraint used elsewhere in this library).\n\nOptionally paired with a row of discrete presets (`presets`) — e.g. \"Last\n7 days\" / \"Last 30 days\" — rendered above the track; picking one is just a\nshortcut that sets both handles at once, the continuous brush underneath\nis unaffected and both interaction modes coexist.\n\nForm-associated only for the `<fieldset disabled>` cascade, not for a\nsubmitted value: it attaches `ElementInternals` (like `<lr-combobox>`'s\nminimal pattern, rather than the single-string-value `FormAssociated`\nmixin, which doesn't fit a two-handle range) purely so an ancestor\n`<fieldset disabled>` disables both handles and every preset button\nthrough `effectiveDisabled`, the same way it would a native `<input>`,\nwithout touching the consumer-facing `disabled` property/attribute itself.\nUnlike `<lr-combobox>`, it never calls `internals.setFormValue()` and\nhas no `name` — the selected range is not included in the owning form's\n`FormData` on submit; read `start`/`end` directly (e.g. from `lr-change`)\ninstead of relying on native form submission.\n\nDeliberately no label/hint/error chrome -- `startLabel`/`endLabel` here are per-handle\naccessible-name overrides, not visible label text, the same carve-out `<lr-slider>` states for\nits own single-handle `label`; a labeled-field consumer wraps this element in their own layout.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The time-range wrapper. |\n| `handle-end` | The end handle. |\n| `handle-start` | The start handle. |\n| `preset-button` | A preset button. |\n| `presets` | The preset controls wrapper. |\n| `range` | The selected range. |\n| `track` | The complete range track. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-time-range-preset-active-bg` (default: `var(--lr-color-brand)`) — Background of the active preset button (`[data-active]`, i.e. the preset whose range matches the current value). Declared as an inline `var()` fallback (never on `:host`), so setting it on the element or an ancestor recolors only the active preset without hijacking the library-wide `--lr-color-brand` token.\n- `--lr-time-range-preset-active-border-color` (default: `var(--lr-color-brand)`) — Border color of the active preset button.\n- `--lr-time-range-preset-active-color` (default: `var(--lr-color-on-brand)`) — Text color of the active preset button.\n- `--lr-time-range-size-scale` (default: `1`) — Unitless multiplier applied proportionally to the handle, track, and preset-button dimensions based on the current `size` tier; the drag hit-area is floored at 24px (WCAG 2.5.8).\n- `--lr-time-range-handle-size` (default: `14px*scale`) — Visible handle diameter.\n- `--lr-time-range-hit-size` (default: `max(24px,28px*scale)`) — Actual drag hit-area diameter; endpoint handles are inset by half this distance so the hit geometry stays inside the host.\n- `--lr-time-range-track-size` (default: `4px*scale`) — Track and selected-range thickness.\n- `--lr-time-range-base-size` (default: `1.5rem*scale`) — Brush baseline block size.\n- `--lr-time-range-preset-gap` (default: `var(--lr-space-xs)`) — Gap between preset buttons.\n- `--lr-time-range-preset-radius` (default: `var(--lr-radius)`) — Preset button corner radius.\n- `--lr-time-range-preset-padding` — Preset button padding, scaled by `size`.\n- `--lr-time-range-preset-font-size` — Preset button font size, scaled by `size`."
14508
15191
  },
14509
15192
  "attributes": [
14510
15193
  {
@@ -14717,7 +15400,7 @@
14717
15400
  "name": "lr-token-input",
14718
15401
  "description": {
14719
15402
  "kind": "markdown",
14720
- "value": "`<lr-token-input>` — an editable, form-associated list of removable tokens.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Validation message. |\n| `hint` | Supporting text. |\n| `label` | Visible label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `error` | Validation message. |\n| `form-control` | Outer control wrapper. |\n| `form-control-label` | Label. |\n| `hint` | Supporting text. |\n| `input` | Native text input. |\n| `input-wrapper` | Token and input row. |\n| `remove` | Token remove button. |\n| `token` | Individual token. |\n| `token-editor` | The inline text field replacing a token's text while it is being edited. Rendered only while `editable` is set and that token is open for editing. |\n| `token-label` | The token's text, as the roving-focus edit trigger. Rendered only while `editable` is set. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-token-input-input-inline-size` (default: `var(--lr-size-8rem)`) — `flex-basis` of the native text input within the token row.\n- `--lr-token-input-min-input-inline-size` (default: `var(--lr-size-4rem)`) — Inline-size floor of the native text input, so it stays usable once tokens wrap.\n- `--lr-token-input-editor-inline-size` (default: `var(--lr-size-6rem)`) — Inline size of the inline token editor opened by `editable`.\n- `--lr-token-input-padding` — Input-wrapper padding, scaled by `size`.\n- `--lr-token-input-font-size` — Input-wrapper/token font size, scaled by `size`.\n- `--lr-token-input-control-min-height` — Input-wrapper block-size floor, scaled by `size`.\n- `--lr-token-input-control-height` — Exact input-wrapper height. Unset by default, which leaves `--lr-token-input-control-min-height` as a floor only; set it to a length to both floor and cap the row (e.g. to pixel-match a sibling field in the same toolbar row). Because it is never declared by the component itself, it can be set from an ancestor or an outer-tree rule as well as inline on the element."
15403
+ "value": "`<lr-token-input>` — an editable, form-associated list of removable tokens.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Validation message. |\n| `hint` | Supporting text. |\n| `label` | Visible label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `error` | Validation message. |\n| `form-control` | Outer control wrapper. |\n| `form-control-label` | Label. |\n| `hint` | Supporting text. |\n| `input` | Native text input. |\n| `input-wrapper` | Token and input row. |\n| `remove` | Token remove button. |\n| `token` | Individual token. |\n| `token-editor` | The inline text field replacing a token's text while it is being edited. Rendered only while `editable` is set and that token is open for editing. |\n| `token-label` | The token's text, as the roving-focus edit trigger. Rendered only while `editable` is set. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-token-input-input-inline-size` (default: `var(--lr-size-8rem)`) — `flex-basis` of the native text input within the token row.\n- `--lr-token-input-min-input-inline-size` (default: `var(--lr-size-4rem)`) — Inline-size floor of the native text input, so it stays usable once tokens wrap.\n- `--lr-token-input-editor-inline-size` (default: `var(--lr-size-6rem)`) — Inline size of the inline token editor opened by `editable`.\n- `--lr-token-input-padding` — Input-wrapper padding, scaled by `size`.\n- `--lr-token-input-token-padding` — Per-token chip padding, scaled by `size`.\n- `--lr-token-input-gap` (default: `var(--lr-space-xs)`) — Gap between form/row children.\n- `--lr-token-input-token-gap` (default: `var(--lr-space-2xs)`) — Gap inside token chips.\n- `--lr-token-input-radius` (default: `var(--lr-radius)`) — Row/token corner radius.\n- `--lr-token-input-token-bg` (default: `var(--lr-color-brand-quiet)`) — Token chip background.\n- `--lr-token-input-action-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Edit/remove hover background.\n- `--lr-token-input-focus-border-color` (default: `var(--lr-color-brand)`) — Focused row border color.\n- `--lr-token-input-invalid-border-color` (default: `var(--lr-color-danger)`) — Invalid row border color.\n- `--lr-token-input-font-size` — Input-wrapper/token font size, scaled by `size`.\n- `--lr-token-input-control-min-height` — Input-wrapper block-size floor, scaled by `size`.\n- `--lr-token-input-control-height` — Exact input-wrapper height. Unset by default, which leaves `--lr-token-input-control-min-height` as a floor only; set it to a length to both floor and cap the row (e.g. to pixel-match a sibling field in the same toolbar row). Because it is never declared by the component itself, it can be set from an ancestor or an outer-tree rule as well as inline on the element."
14721
15404
  },
14722
15405
  "attributes": [
14723
15406
  {
@@ -14917,7 +15600,7 @@
14917
15600
  "name": "lr-tool-call-chip",
14918
15601
  "description": {
14919
15602
  "kind": "markdown",
14920
- "value": "`<lr-tool-call-chip>` — a compact inline pill representing one tool/\nfunction call an agent made mid-conversation, e.g.\n`web_search: Searching web…` with a `running` spinner. It owns no detail\nsurface of its own: clicking (or Enter/Space-activating) it only fires\n`lr-tool-call-chip-select` (plus, for one minor cycle, the deprecated\n`lr-tool-chip-select` alias) — a consumer wires that to opening a\n`<lr-tool-result-dialog>` (or anything else) at the call site. Keeping\nthe two decoupled means a chip can be reused wherever a compact call\nsummary is useful, with or without a detail surface behind it.\n\nThe default slot is *not* the chip's visible content — the chip's own\nlabel is always built from `name`/`summary`/`status`/`duration-ms`. It's\nreserved for optional rich detail content (e.g. the tool's raw arguments,\na short preview) shown in a floating tooltip on hover/focus, positioned\nwith `internal/positioner.js`'s `place()` the same way `<lr-combobox>`\npositions its listbox. No tooltip is shown at all when the slot carries no\ncontent — hovering an empty chip does nothing. Hover and keyboard focus are\ntracked as independent reasons to keep the tooltip open (mirrors\n`<lr-citation-badge>`'s popover), so releasing one modality while the\nother is still active doesn't close it, and the trigger button's\n`aria-describedby` points at the tooltip's id whenever it's open and has\ncontent, so the association reaches assistive tech too.\n\nThe `icon` slot overrides the built-in per-status glyph entirely via the\nplatform's own slot-fallback-content mechanism (`<slot\nname=\"icon\">${fallback}</slot>` — the same pattern `<lr-stat>`'s\n`caption` slot and `<lr-file-input>`'s default slot already use):\nwhatever is assigned to `slot=\"icon\"` wins; otherwise the `icon` prop is\nrendered as a literal hint (e.g. an emoji); otherwise the built-in glyph\nfor the current `status` is used.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Rich tooltip/detail content, shown on hover/focus. Nothing renders (no hover affordance at all) when this slot is empty. |\n| `icon` | Overrides the built-in status glyph entirely. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The clickable pill (`<button>`). |\n| `category` | The optional grouping label. |\n| `duration` | The formatted `duration-ms`, when set. |\n| `icon` | Wrapper around the status glyph / `icon` slot. |\n| `label` | Wrapper around `category`, `name` and `summary`. |\n| `meta` | Wrapper around `status-text` and `duration`. |\n| `name` | The tool/function name. |\n| `status-text` | The visible text twin of the status glyph/color — carries the state in text, not just color. |\n| `summary` | The short status text. |\n| `tooltip` | The floating detail popup (only meaningful while open). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-tool-call-chip-spin` (default: `1s linear`) — Running-icon animation duration and timing.\n- `--lr-transition-ambient` (default: `1.8s ease-in-out`) — Pending-icon pulse duration and timing.\n- `--lr-tool-call-chip-accent` (default: `var(--lr-color-text-quiet)`) — 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.\n- `--lr-tool-call-chip-bg` (default: `var(--lr-color-surface)`) — Per-status chip background. Reassigned by the same `:host([status=\"…\"])` rules (each status's `-quiet` tint).\n- `--lr-tool-call-chip-border` (default: `var(--lr-color-border)`) — Per-status chip border color. Reassigned by the same `:host([status=\"…\"])` rules (`transparent` for every non-`pending` status)."
15603
+ "value": "`<lr-tool-call-chip>` — a compact inline pill representing one tool/\nfunction call an agent made mid-conversation, e.g.\n`web_search: Searching web…` with a `running` spinner. It owns no detail\nsurface of its own: clicking (or Enter/Space-activating) it only fires\n`lr-tool-call-chip-select` (plus, for one minor cycle, the deprecated\n`lr-tool-chip-select` alias) — a consumer wires that to opening a\n`<lr-tool-result-dialog>` (or anything else) at the call site. Keeping\nthe two decoupled means a chip can be reused wherever a compact call\nsummary is useful, with or without a detail surface behind it.\n\nThe default slot is *not* the chip's visible content — the chip's own\nlabel is always built from `name`/`summary`/`status`/`duration-ms`. It's\nreserved for optional rich detail content (e.g. the tool's raw arguments,\na short preview) shown in a floating tooltip on hover/focus, positioned\nwith `internal/positioner.js`'s `place()` the same way `<lr-combobox>`\npositions its listbox. No tooltip is shown at all when the slot carries no\ncontent — hovering an empty chip does nothing. Hover and keyboard focus are\ntracked as independent reasons to keep the tooltip open (mirrors\n`<lr-citation-badge>`'s popover), so releasing one modality while the\nother is still active doesn't close it, and the trigger button's\n`aria-describedby` points at the tooltip's id whenever it's open and has\ncontent, so the association reaches assistive tech too.\n\nThe `icon` slot overrides the built-in per-status glyph entirely via the\nplatform's own slot-fallback-content mechanism (`<slot\nname=\"icon\">${fallback}</slot>` — the same pattern `<lr-stat>`'s\n`caption` slot and `<lr-file-input>`'s default slot already use):\nwhatever is assigned to `slot=\"icon\"` wins; otherwise the `icon` prop is\nrendered as a literal hint (e.g. an emoji); otherwise the built-in glyph\nfor the current `status` is used.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Rich tooltip/detail content, shown on hover/focus. Nothing renders (no hover affordance at all) when this slot is empty. |\n| `icon` | Overrides the built-in status glyph entirely. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The clickable pill (`<button>`). |\n| `category` | The optional grouping label. |\n| `duration` | The formatted `duration-ms`, when set. |\n| `icon` | Wrapper around the status glyph / `icon` slot. |\n| `label` | Wrapper around `category`, `name` and `summary`. |\n| `meta` | Wrapper around `status-text` and `duration`. |\n| `name` | The tool/function name. |\n| `status-text` | The visible text twin of the status glyph/color — carries the state in text, not just color. |\n| `summary` | The short status text. |\n| `tooltip` | The floating detail popup (only meaningful while open). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-tool-call-chip-spin` (default: `var(--lr-transition-ambient)`) — Running-icon animation duration and timing.\n- `--lr-transition-ambient` (default: `1.8s ease-in-out`) — Pending-icon pulse duration and timing.\n- `--lr-tool-call-chip-accent` (default: `var(--lr-color-text-quiet)`) — 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.\n- `--lr-tool-call-chip-bg` (default: `var(--lr-color-surface)`) — Per-status chip background. Reassigned by the same `:host([status=\"…\"])` rules (each status's `-quiet` tint).\n- `--lr-tool-call-chip-border` (default: `var(--lr-color-border)`) — Per-status chip border color. Reassigned by the same `:host([status=\"…\"])` rules (`transparent` for every non-`pending` status)."
14921
15604
  },
14922
15605
  "attributes": [
14923
15606
  {
@@ -15012,7 +15695,7 @@
15012
15695
  "name": "lr-tool-result-dialog",
15013
15696
  "description": {
15014
15697
  "kind": "markdown",
15015
- "value": "`<lr-tool-result-dialog>` — a full tool-call detail overlay: a status/\nduration header plus a `body` slot where a consumer typically places a\n`<lr-tabs>` with Input/Preview/JSON/Raw panels. This component knows\nnothing about what's inside that slot — it only supplies the modal chrome\naround it.\n\nThis is its own standalone overlay implementation (`role=\"dialog\"`,\nfocus-trapped, Escape/backdrop-dismissible, scroll-locking) rather than\nnesting a `<lr-dialog>` in its shadow template — see `<lr-dialog>`'s\nown header comment for why a new overlay component in this library\nduplicates that pattern locally instead of composing the previous one:\nslot-forwarding into a nested `<lr-dialog>` would put a forwarding\n`<slot>` where a light-DOM-scanning descendant (e.g. a slotted\n`<lr-tabs>`'s own `Array.from(this.children)` scan) expects real\nprojected content.\n\n`maximized` toggles between a constrained modal size and a near-fullscreen\nsize within the same open dialog and open/close lifecycle — unlike\n`<lr-widget>`'s fullscreen mode, there's no non-modal resting state to\nreturn to, so no separate scroll-lock/focus-trap bookkeeping is needed for\nthe transition itself.\n\nStacking: opening more than one of these dialogs at once is supported --\nEscape and the Tab focus trap only ever act on the topmost open instance,\nso instances beneath it stay open and untouched until the one on top closes.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `body` | The dialog's main content — typically a `<lr-tabs>` with Input/Preview/JSON/Raw panels, entirely consumer-assembled. |\n| `footer` | Optional action buttons, rendered in a bottom row. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `backdrop` | The full-viewport scrim behind the panel. |\n| `body` | The wrapper around the `body` slot. |\n| `close-button` | The built-in close button. |\n| `duration` | The formatted `duration-ms` text. |\n| `footer` | The wrapper around the `footer` slot. |\n| `header` | The row containing the tool name, status, duration, and toggle/close buttons. |\n| `header-actions` | The wrapper around the maximize and close buttons. |\n| `maximize-button` | The built-in maximize/restore toggle button. |\n| `panel` | The dialog panel itself (`role=\"dialog\"` while open). |\n| `status` | The status badge (icon + text). |\n| `title` | The wrapper around the tool name, status, and duration. |\n| `tool-name` | The `tool-name` text. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-tool-result-dialog-overlay-color` (default: `var(--lr-color-overlay)`) — Backdrop color.\n- `--lr-tool-result-dialog-maximized-inset` — Insets for the maximized panel.\n- `--lr-tool-result-dialog-spin` (default: `1s linear`) — Running-status animation duration and timing."
15698
+ "value": "`<lr-tool-result-dialog>` — a full tool-call detail overlay: a status/\nduration header plus a `body` slot where a consumer typically places a\n`<lr-tabs>` with Input/Preview/JSON/Raw panels. This component knows\nnothing about what's inside that slot — it only supplies the modal chrome\naround it.\n\nThis is its own standalone overlay implementation (`role=\"dialog\"`,\nfocus-trapped, Escape/backdrop-dismissible, scroll-locking) rather than\nnesting a `<lr-dialog>` in its shadow template — see `<lr-dialog>`'s\nown header comment for why a new overlay component in this library\nduplicates that pattern locally instead of composing the previous one:\nslot-forwarding into a nested `<lr-dialog>` would put a forwarding\n`<slot>` where a light-DOM-scanning descendant (e.g. a slotted\n`<lr-tabs>`'s own `Array.from(this.children)` scan) expects real\nprojected content.\n\n`maximized` toggles between a constrained modal size and a near-fullscreen\nsize within the same open dialog and open/close lifecycle — unlike\n`<lr-widget>`'s fullscreen mode, there's no non-modal resting state to\nreturn to, so no separate scroll-lock/focus-trap bookkeeping is needed for\nthe transition itself.\n\nStacking: opening more than one of these dialogs at once is supported --\nEscape and the Tab focus trap only ever act on the topmost open instance,\nso instances beneath it stay open and untouched until the one on top closes.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `body` | The dialog's main content — typically a `<lr-tabs>` with Input/Preview/JSON/Raw panels, entirely consumer-assembled. |\n| `footer` | Optional action buttons, rendered in a bottom row. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `backdrop` | The full-viewport scrim behind the panel. |\n| `body` | The wrapper around the `body` slot. |\n| `close-button` | The built-in close button. |\n| `duration` | The formatted `duration-ms` text. |\n| `footer` | The wrapper around the `footer` slot. |\n| `header` | The row containing the tool name, status, duration, and toggle/close buttons. |\n| `header-actions` | The wrapper around the maximize and close buttons. |\n| `maximize-button` | The built-in maximize/restore toggle button. |\n| `panel` | The dialog panel itself (`role=\"dialog\"` while open). |\n| `status` | The status badge (icon + text). |\n| `title` | The wrapper around the tool name, status, and duration. |\n| `tool-name` | The `tool-name` text. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-tool-result-dialog-overlay-color` (default: `var(--lr-color-overlay)`) — Backdrop color.\n- `--lr-tool-result-dialog-maximized-inset` — Insets for the maximized panel.\n- `--lr-tool-result-dialog-spin` (default: `var(--lr-transition-ambient)`) — Running-status animation duration and timing.\n- `--lr-tool-result-dialog-running-color` (default: `var(--lr-color-brand)`) — Running status foreground.\n- `--lr-tool-result-dialog-running-bg` (default: `var(--lr-color-brand-quiet)`) — Running status background.\n- `--lr-tool-result-dialog-success-color` (default: `var(--lr-color-success)`) — Success status foreground.\n- `--lr-tool-result-dialog-success-bg` (default: `var(--lr-color-success-quiet)`) — Success status background.\n- `--lr-tool-result-dialog-error-color` (default: `var(--lr-color-danger)`) — Error status foreground.\n- `--lr-tool-result-dialog-error-bg` (default: `var(--lr-color-danger-quiet)`) — Error status background.\n- `--lr-tool-result-dialog-denied-color` (default: `var(--lr-color-warning)`) — Denied status foreground.\n- `--lr-tool-result-dialog-denied-bg` (default: `var(--lr-color-warning-quiet)`) — Denied status background."
15016
15699
  },
15017
15700
  "attributes": [
15018
15701
  {
@@ -15114,7 +15797,7 @@
15114
15797
  "name": "lr-tool-select-dialog",
15115
15798
  "description": {
15116
15799
  "kind": "markdown",
15117
- "value": "`<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()`).\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `footer` | Optional action buttons (e.g. a \"Done\" button), rendered in a bottom row. Changes already apply live via `lr-change`, so this is optional. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `backdrop` | The full-viewport scrim behind the panel. |\n| `body` | The scrollable wrapper around the grouped tool list. |\n| `category` | A single category's wrapper (`role=\"group\"`). |\n| `category-count` | The terse, `aria-hidden` tool count next to a category heading (the heading's accessible name gets the full sentence from an sr-only sibling instead). |\n| `category-heading` | A category's heading. |\n| `category-list` | The `<ul>` of tool rows within a category. |\n| `defaults-hint` | The \"turn off to customize\" hint, shown only while `useDefaults` is true. |\n| `defaults-row` | The wrapper around the use-defaults switch and its hint. |\n| `defaults-toggle` | The built-in `<lr-switch>` bound to `useDefaults`. |\n| `empty` | The \"no tools\" / \"no matches\" message. |\n| `footer` | The wrapper around the `footer` slot. |\n| `header` | The wrapper around the title/subtitle. |\n| `panel` | The dialog panel itself (`role=\"dialog\"` while open). |\n| `search-input` | The filter text input. |\n| `search-row` | The wrapper around the search input. |\n| `subtitle` | The \"N of M tools enabled\" summary line. |\n| `title` | The dialog's heading. |\n| `tool-checkbox` | A row's `<lr-checkbox>`. |\n| `tool-description` | A row's optional description text. |\n| `tool-disabled-reason` | A disabled row's `disabledReason` text, slotted inside `tool-checkbox` (alongside `tool-name`/`tool-description`) so it contributes to the checkbox's accessible name/description instead of going unannounced. |\n| `tool-icon` | A row's leading icon glyph, when `icon` is set. |\n| `tool-name` | A row's name text (plus its `icon`, if set). |\n| `tool-row` | A single tool's `<li>` row. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-tool-select-dialog-overlay-color` (default: `var(--lr-color-overlay)`) — Backdrop scrim color."
15800
+ "value": "`<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()`).\n\nAt most the first 200 matching tools are mounted at once. Filtering narrows that bounded\nprojection; `tools`, selection counts, and emitted ids retain the caller's complete catalog.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `footer` | Optional action buttons (e.g. a \"Done\" button), rendered in a bottom row. Changes already apply live via `lr-change`, so this is optional. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `backdrop` | The full-viewport scrim behind the panel. |\n| `body` | The scrollable wrapper around the grouped tool list. |\n| `category` | A single category's wrapper (`role=\"group\"`). |\n| `category-count` | The terse, `aria-hidden` tool count next to a category heading (the heading's accessible name gets the full sentence from an sr-only sibling instead). |\n| `category-heading` | A category's heading. |\n| `category-list` | The `<ul>` of tool rows within a category. |\n| `defaults-hint` | The \"turn off to customize\" hint, shown only while `useDefaults` is true. |\n| `defaults-row` | The wrapper around the use-defaults switch and its hint. |\n| `defaults-toggle` | The built-in `<lr-switch>` bound to `useDefaults`. |\n| `empty` | The \"no tools\" / \"no matches\" message. |\n| `footer` | The wrapper around the `footer` slot. |\n| `header` | The wrapper around the title/subtitle. |\n| `panel` | The dialog panel itself (`role=\"dialog\"` while open). |\n| `search-input` | The filter text input. |\n| `search-row` | The wrapper around the search input. |\n| `subtitle` | The \"N of M tools enabled\" summary line. |\n| `title` | The dialog's heading. |\n| `tool-checkbox` | A row's `<lr-checkbox>`. |\n| `tool-description` | A row's optional description text. |\n| `tool-disabled-reason` | A disabled row's `disabledReason` text, slotted inside `tool-checkbox` (alongside `tool-name`/`tool-description`) so it contributes to the checkbox's accessible name/description instead of going unannounced. |\n| `tool-icon` | A row's leading icon glyph, when `icon` is set. |\n| `tool-name` | A row's name text (plus its `icon`, if set). |\n| `tool-row` | A single tool's `<li>` row. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-tool-select-dialog-overlay-color` (default: `var(--lr-color-overlay)`) — Backdrop scrim color."
15118
15801
  },
15119
15802
  "attributes": [
15120
15803
  {
@@ -15207,7 +15890,7 @@
15207
15890
  "name": "lr-tool-timeline",
15208
15891
  "description": {
15209
15892
  "kind": "markdown",
15210
- "value": "`<lr-tool-timeline>` — a chronological list of an agent run's tool/function calls, each\nrendered through `<lr-tool-call-chip>` (name/status/duration) and `<lr-tool-result-view>`\n(args/result), with per-entry retry counts, sensitive-field redaction, and a shared\n`<lr-tool-approval-dialog>` for entries gated behind a human approval decision. This component\nowns none of the actual per-call rendering -- that is entirely those three existing\nprimitives -- its own job is ordering `entries` chronologically, computing each entry's\nduration from `startedAt`/`endedAt`, masking `redactedFields` before handing `args`/`result` to\n`<lr-tool-result-view>`, and opening/closing the one shared approval dialog for whichever entry\nis currently pending a decision.\n\nOrdering: `entries` is sorted ascending by `startedAt`; an entry with no `startedAt` sorts after\nevery timed entry, keeping its position relative to any other untimed entries stable (input\norder is preserved among ties) — a still-pending call with no timestamp yet naturally lands at\nthe end without needing to be pre-sorted by the host.\n\nRedaction only ever affects the read-only detail view: the copy of `args` handed to the\napproval dialog is always the entry's real, unmasked value. Approving a masked-args call must\nlet the reviewer see (and, if `approvalEditable`, edit) what will actually be sent — handing the\ndialog a placeholder string in place of a real field would silently corrupt the decision.\n\nApproval: activating the chip (`lr-tool-call-chip-select`) of an entry with `needsApproval` and\nan undecided `approved` opens the shared dialog for that entry; approving or denying emits this\ncomponent's own `lr-tool-approval-decide` and closes the dialog. This component never mutates\n`entries` itself — a host applies the decision (and any resulting status change) and re-assigns\n`entries`; if the entry currently under review disappears or no longer qualifies as pending\n(its `approved` was resolved some other way) by the time `entries` changes, the dialog closes on\nits own rather than staying open over stale data. A chip belonging to an entry that isn't\npending approval is left alone — its own `lr-tool-call-chip-select` (and deprecated\n`lr-tool-chip-select` alias) still bubble out normally for a host that wants to react to raw\nchip selection for its own purposes.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `approval-dialog` | The single shared `<lr-tool-approval-dialog>` instance. |\n| `base` | The root `<ol>`. |\n| `entry` | One entry's `<li>`; carries `data-status` (the entry's `status`) and `data-pending-approval` (`\"true\"`/`\"false\"`). |\n| `entry-approval-status` | The \"Approved\"/\"Denied\" badge, only rendered once `approved` is set; carries `data-decision` (`\"approved\"`/`\"denied\"`). |\n| `entry-body` | Wrapper around one entry's header and details. |\n| `entry-details` | The `<lr-details>` disclosure wrapping the entry's result view. |\n| `entry-error` | The entry's `error` text, only rendered when set. |\n| `entry-header` | Wrapper around the timestamp, chip, retry badge, and approval status. |\n| `entry-marker` | The decorative rail dot/connector for one entry. |\n| `entry-redacted-indicator` | A decorative marker shown when `redactedFields` is non-empty for that entry. |\n| `entry-result` | The entry's `<lr-tool-result-view>`. |\n| `entry-retries` | The retry-count badge, only rendered while `retryCount > 0`. |\n| `entry-retries-count` | The formatted retry count within the retry badge. |\n| `entry-retries-label` | The localized \"Retry\" text within the retry badge. |\n| `entry-timestamp` | The formatted `startedAt`, only rendered while it's set. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-tool-timeline-gap` (default: `var(--lr-space-l)`) — Vertical gap between entries.\n- `--lr-tool-timeline-marker-size` (default: `var(--lr-size-0-625rem)`) — Diameter of an entry's rail dot; also the width of the marker gutter column.\n- `--lr-tool-timeline-denied-marker-color` (default: `var(--lr-color-warning)`) — Rail-dot color for a `status=\"denied\"` entry, decoupled from the pending-approval border below so a consumer can retint either independently.\n- `--lr-tool-timeline-pending-approval-border-color` (default: `var(--lr-color-warning)`) — Color of the entry body's leading border while `data-pending-approval=\"true\"`."
15893
+ "value": "`<lr-tool-timeline>` — a chronological list of an agent run's tool/function calls, each\nrendered through `<lr-tool-call-chip>` (name/status/duration) and `<lr-tool-result-view>`\n(args/result), with per-entry retry counts, sensitive-field redaction, and a shared\n`<lr-tool-approval-dialog>` for entries gated behind a human approval decision. This component\nowns none of the actual per-call rendering -- that is entirely those three existing\nprimitives -- its own job is ordering `entries` chronologically, computing each entry's\nduration from `startedAt`/`endedAt`, masking `redactedFields` before handing `args`/`result` to\n`<lr-tool-result-view>`, and opening/closing the one shared approval dialog for whichever entry\nis currently pending a decision.\n\nOrdering: `entries` is sorted ascending by `startedAt`; an entry with no `startedAt` sorts after\nevery timed entry, keeping its position relative to any other untimed entries stable (input\norder is preserved among ties) — a still-pending call with no timestamp yet naturally lands at\nthe end without needing to be pre-sorted by the host.\n\nRedaction only ever affects the read-only detail view: the copy of `args` handed to the\napproval dialog is always the entry's real, unmasked value. Approving a masked-args call must\nlet the reviewer see (and, if `approvalEditable`, edit) what will actually be sent — handing the\ndialog a placeholder string in place of a real field would silently corrupt the decision.\n\nApproval: activating the chip (`lr-tool-call-chip-select`) of an entry with `needsApproval` and\nan undecided `approved` opens the shared dialog for that entry; approving or denying emits this\ncomponent's own `lr-tool-approval-decide` and closes the dialog. This component never mutates\n`entries` itself — a host applies the decision (and any resulting status change) and re-assigns\n`entries`; if the entry currently under review disappears or no longer qualifies as pending\n(its `approved` was resolved some other way) by the time `entries` changes, the dialog closes on\nits own rather than staying open over stale data. A chip belonging to an entry that isn't\npending approval is left alone — its own `lr-tool-call-chip-select` (and deprecated\n`lr-tool-chip-select` alias) still bubble out normally for a host that wants to react to raw\nchip selection for its own purposes.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `approval-dialog` | The single shared `<lr-tool-approval-dialog>` instance. |\n| `base` | The root `<ol>`. |\n| `entry` | One entry's `<li>`; carries `data-status` (the entry's `status`) and `data-pending-approval` (`\"true\"`/`\"false\"`). |\n| `entry-approval-status` | The \"Approved\"/\"Denied\" badge, only rendered once `approved` is set; carries `data-decision` (`\"approved\"`/`\"denied\"`). |\n| `entry-body` | Wrapper around one entry's header and details. |\n| `entry-details` | The `<lr-details>` disclosure wrapping the entry's result view. |\n| `entry-error` | The entry's `error` text, only rendered when set. |\n| `entry-header` | Wrapper around the timestamp, chip, retry badge, and approval status. |\n| `entry-marker` | The decorative rail dot/connector for one entry. |\n| `entry-redacted-indicator` | A decorative marker shown when `redactedFields` is non-empty for that entry. |\n| `entry-result` | The entry's `<lr-tool-result-view>`. |\n| `entry-retries` | The retry-count badge, only rendered while `retryCount > 0`. |\n| `entry-retries-count` | The formatted retry count within the retry badge. |\n| `entry-retries-label` | The localized \"Retry\" text within the retry badge. |\n| `entry-timestamp` | The formatted `startedAt`, only rendered while it's set. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-tool-timeline-gap` (default: `var(--lr-space-l)`) — Vertical gap between entries.\n- `--lr-tool-timeline-marker-size` (default: `var(--lr-size-0-625rem)`) — Diameter of an entry's rail dot; also the width of the marker gutter column.\n- `--lr-tool-timeline-denied-marker-color` (default: `var(--lr-color-warning)`) — Rail-dot color for a `status=\"denied\"` entry, decoupled from the pending-approval border below so a consumer can retint either independently.\n- `--lr-tool-timeline-pending-approval-border-color` (default: `var(--lr-color-warning)`) — Color of the entry body's leading border while `data-pending-approval=\"true\"`.\n- `--lr-tool-timeline-running-marker-color` (default: `var(--lr-color-brand)`) — Running rail dot.\n- `--lr-tool-timeline-success-marker-color` (default: `var(--lr-color-success)`) — Success rail dot.\n- `--lr-tool-timeline-error-marker-color` (default: `var(--lr-color-danger)`) — Error rail dot.\n- `--lr-tool-timeline-approved-bg` (default: `var(--lr-color-success-quiet)`) — Approved badge background.\n- `--lr-tool-timeline-approved-color` (default: `var(--lr-color-success)`) — Approved badge foreground.\n- `--lr-tool-timeline-denied-bg` (default: `var(--lr-color-danger-quiet)`) — Denied badge background.\n- `--lr-tool-timeline-denied-color` (default: `var(--lr-color-danger)`) — Denied badge foreground.\n- `--lr-tool-timeline-error-color` (default: `var(--lr-color-danger)`) — Expanded error text."
15211
15894
  },
15212
15895
  "attributes": [
15213
15896
  {
@@ -15230,7 +15913,7 @@
15230
15913
  "name": "lr-tooltip",
15231
15914
  "description": {
15232
15915
  "kind": "markdown",
15233
- "value": "`<lr-tooltip>` — a localized, hover/focus tooltip for a consumer-owned trigger.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Tooltip content. |\n| `trigger` | The element that receives hover/focus listeners. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `popup` | The tooltip popup. |\n| `trigger` | The trigger wrapper. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-tooltip-max-inline-size` — Maximum inline size of the tooltip (default `--lr-size-20rem`).\n- `--lr-tooltip-background` — Tooltip background color (default `--lr-color-neutral`).\n- `--lr-tooltip-color` — Tooltip text color (default `--lr-color-on-neutral`)."
15916
+ "value": "`<lr-tooltip>` — a localized, hover/focus tooltip for a consumer-owned trigger.\nPlain content uses tooltip semantics. When the default slot contains an actionable descendant,\nthe popup promotes to a named dialog and remains open while pointer or focus is inside so its\ncontrols can be reached. Prefer `<lr-popover>` when click-to-open ownership is desired.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Tooltip content. |\n| `trigger` | The element that receives hover/focus listeners. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `popup` | The tooltip popup. |\n| `trigger` | The trigger wrapper. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-tooltip-max-inline-size` — Maximum inline size of the tooltip (default `--lr-size-20rem`).\n- `--lr-tooltip-background` — Tooltip background color (default `--lr-color-neutral`).\n- `--lr-tooltip-color` — Tooltip text color (default `--lr-color-on-neutral`)."
15234
15917
  },
15235
15918
  "attributes": [
15236
15919
  {
@@ -15279,7 +15962,7 @@
15279
15962
  "name": "open",
15280
15963
  "description": {
15281
15964
  "kind": "markdown",
15282
- "value": "Type: `boolean` \nDefault: `false`"
15965
+ "value": "Type: `boolean`"
15283
15966
  }
15284
15967
  },
15285
15968
  {
@@ -15295,7 +15978,7 @@
15295
15978
  "name": "lr-tour",
15296
15979
  "description": {
15297
15980
  "kind": "markdown",
15298
- "value": "`<lr-tour>` -- a spotlight-and-step guided walkthrough for first-run onboarding. A sequence\nof steps, each anchored to a target element elsewhere in the page via the shared Floating UI\npositioner, shown against a dimmed full-viewport backdrop with a cutout/ring highlighting the\ncurrent target, with Next/Previous/Skip controls and a step-progress indicator. First-party\ninvention (no Web Awesome equivalent) -- nearest precedent in shape is `lr-dialog` (overlay\nlifecycle/focus trap) + `lr-carousel` (index-based navigation) + `lr-stepper`\n(progress/RTL arrow-key nav).\n\n**Not a form-associated control.** A tour is a walkthrough, not a field -- it deliberately has\nno `label`/`hint`/`error` chrome and no `FormAssociated` mixin.\n\n**Controlled component.** `steps` is never mutated by this component (mirrors\n`lr-stepper`'s `steps`); only `activeIndex` and `open` are self-managed, mirroring\n`lr-carousel`'s `index`.\n\n**Target interactivity.** By default, the step's spotlighted target is non-interactive while\nits step is active: it stays visually revealed and perceivable/announceable by assistive tech\n(not `inert`, not `aria-hidden`) but cannot be clicked -- every pointer event over the full\nviewport, including directly over the visually-revealed target, is captured by the backdrop\n(CSS `mask` does not affect hit-testing, only `clip-path` does) -- and cannot be reached by Tab\n(the shared overlay focus trap confines Tab to the popover panel). Set `step.interactiveTarget`\nto opt a step's target out of this: the backdrop additionally clips itself (via `clip-path`,\nwhich *does* affect hit-testing) around the same rect, so pointer/click events fall through to\nthe live target underneath. This only restores pointer/click reachability, not Tab\nreachability -- the focus trap still confines keyboard focus to the step popover regardless of\n`interactiveTarget`. If the interaction a step demonstrates must also be keyboard-reachable,\ndon't rely on Tab to reach the live target -- have the app's own listener on the target call\n`tourEl.next()` to advance the tour programmatically.\n\n**Focus management.** Uses the shared overlay manager with `modal: false` -- a deliberate\nchoice, not an oversight. The default `modal: true` would mark the entire rest of the page\n(including the spotlighted target itself, since it lives outside `<lr-tour>`'s own ancestor\nchain) `inert`, stripping it from the accessibility tree entirely -- stronger than the\n\"non-interactive but still perceivable\" default described above. `modal: false` skips that\nDOM-wide `inert` marking; the shared Tab-trap still confines keyboard Tab to the popover panel\nunconditionally regardless of `modal`, and the backdrop's own hit-testing handles\npointer/click reachability, so nothing is lost. `role=\"dialog\"` and `aria-modal=\"true\"` are\nstill rendered on the popover panel anyway: most screen readers restrict their own virtual-\ncursor/browse-mode navigation to an `aria-modal=\"true\"` element's subtree, giving assistive-\ntech users the same \"can perceive, can't wander into, the live target\" experience that the\nTab-trap and backdrop hit-testing already give sighted/mouse users.\n\nEach step transition mounts a genuinely new popover DOM node (keyed on the step's `id`) so\nfocus reliably re-enters the panel every time, even though the Previous/Next button that\ntriggered the transition lives inside that same persistent-looking region.\n\nNo `Home`/`End` jump-to-first/last-step shortcut and no click-to-jump progress dots, unlike\n`lr-stepper` -- a tour's steps are tied to live DOM targets that may not exist until an\nearlier step's side effect (opening a menu, navigating a route) has run, so free jumping is\nunsafe by default. `goToStep()` remains available for a host that knows what it's doing (e.g.\na \"restart tour\" affordance elsewhere).\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Rich content overriding the currently active step's plain-text `content` for that step only. When real content is assigned, it's shown instead of `step.content`; when empty, `step.content` renders as plain text. Not scoped per step by this component itself -- a consumer that needs different rich content per step swaps the slotted children (or listens for `lr-tour-step-change` and re-renders them) itself, the same \"consumer owns slotted content\" pattern `lr-dialog`'s default slot already uses. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `backdrop` | The full-viewport dimmed scrim with the spotlight cutout, an inline `<svg>`. `aria-hidden=\"true\"`. |\n| `body` | Wrapper around the step's content (slotted or `step.content`). |\n| `footer` | Wrapper around the Previous/Skip/Next-or-Done control row. |\n| `heading` | The step's visible heading text element -- the `aria-labelledby` target. |\n| `next-button` | The Next/Done control (label switches on the last step). |\n| `popover` | The step panel itself. `role=\"dialog\"`. |\n| `previous-button` | The Previous control. |\n| `progress` | Wrapper around the built-in step-progress indicator (dots + text). |\n| `progress-dot` | An individual decorative dot within `progress`. `aria-hidden=\"true\"`. |\n| `progress-text` | The visible \"Step X of Y\" text -- one of the popover's `aria-describedby` targets. |\n| `skip-button` | The Skip control. |\n| `spotlight` | The decorative highlight ring drawn around the current target's (padded) rect. `pointer-events: none`, `aria-hidden=\"true\"`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-tour-backdrop-color` — Backdrop scrim fill. Defaults to `--lr-color-overlay`.\n- `--lr-tour-spotlight-radius` — Corner radius shared by the cutout and the ring. Defaults to `--lr-radius`.\n- `--lr-tour-spotlight-ring-color` — Spotlight ring color. Defaults to `--lr-color-brand`.\n- `--lr-tour-spotlight-ring-width` — Spotlight ring thickness. Defaults to `--lr-border-width-medium`.\n- `--lr-tour-popover-max-width` — Maximum popover inline size. Defaults to `--lr-size-22rem`.\n- `--lr-tour-progress-dot-current-bg` (default: `var(--lr-color-brand)`) — Background of `progress-dot` for the current step, without repainting every other component that reuses the shared brand token."
15981
+ "value": "`<lr-tour>` -- a spotlight-and-step guided walkthrough for first-run onboarding. A sequence\nof steps, each anchored to a target element elsewhere in the page via the shared Floating UI\npositioner, shown against a dimmed full-viewport backdrop with a cutout/ring highlighting the\ncurrent target, with Next/Previous/Skip controls and a step-progress indicator. First-party\ninvention (no Web Awesome equivalent) -- nearest precedent in shape is `lr-dialog` (overlay\nlifecycle/focus trap) + `lr-carousel` (index-based navigation) + `lr-stepper`\n(progress/RTL arrow-key nav).\n\n**Not a form-associated control.** A tour is a walkthrough, not a field -- it deliberately has\nno `label`/`hint`/`error` chrome and no `FormAssociated` mixin.\n\n**Controlled component.** `steps` is never mutated by this component (mirrors\n`lr-stepper`'s `steps`); only `activeIndex` and `open` are self-managed, mirroring\n`lr-carousel`'s `index`.\n\n**Target interactivity.** By default, the step's spotlighted target is non-interactive while\nits step is active: it stays visually revealed but is outside the modal interaction model\nand cannot be clicked -- every pointer event over the full\nviewport, including directly over the visually-revealed target, is captured by the backdrop\n(CSS `mask` does not affect hit-testing, only `clip-path` does) -- and cannot be reached by Tab\n(the shared overlay focus trap confines Tab to the popover panel). Set `step.interactiveTarget`\nto opt a step's target out of this: the backdrop additionally clips itself (via `clip-path`,\nwhich *does* affect hit-testing) around the same rect, so pointer/click events fall through to\nthe live target underneath. The panel also becomes nonmodal and an explicit Tab route connects\nits controls with the live target.\n\n**Focus management.** Default steps exclusively own interaction: the shared overlay manager\nmarks outside content inert, traps Tab, and the panel reports `aria-modal=\"true\"`.\n`interactiveTarget` steps instead use a nonmodal overlay, report `aria-modal=\"false\"`, and\nexplicitly route Tab between the panel and the external target.\n\nEach step transition mounts a genuinely new popover DOM node (keyed on the step's `id`) so\nfocus reliably re-enters the panel every time, even though the Previous/Next button that\ntriggered the transition lives inside that same persistent-looking region.\n\nNo `Home`/`End` jump-to-first/last-step shortcut and no click-to-jump progress dots, unlike\n`lr-stepper` -- a tour's steps are tied to live DOM targets that may not exist until an\nearlier step's side effect (opening a menu, navigating a route) has run, so free jumping is\nunsafe by default. `goToStep()` remains available for a host that knows what it's doing (e.g.\na \"restart tour\" affordance elsewhere).\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Rich content overriding the currently active step's plain-text `content` for that step only. When real content is assigned, it's shown instead of `step.content`; when empty, `step.content` renders as plain text. Not scoped per step by this component itself -- a consumer that needs different rich content per step swaps the slotted children (or listens for `lr-tour-step-change` and re-renders them) itself, the same \"consumer owns slotted content\" pattern `lr-dialog`'s default slot already uses. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `backdrop` | The full-viewport dimmed scrim with the spotlight cutout, an inline `<svg>`. `aria-hidden=\"true\"`. |\n| `body` | Wrapper around the step's content (slotted or `step.content`). |\n| `footer` | Wrapper around the Previous/Skip/Next-or-Done control row. |\n| `heading` | The step's visible heading text element -- the `aria-labelledby` target. |\n| `next-button` | The Next/Done control (label switches on the last step). |\n| `popover` | The step panel itself. `role=\"dialog\"`. |\n| `previous-button` | The Previous control. |\n| `progress` | Wrapper around the built-in step-progress indicator (dots + text). |\n| `progress-dot` | An individual decorative dot within `progress`. `aria-hidden=\"true\"`. |\n| `progress-text` | The visible \"Step X of Y\" text -- one of the popover's `aria-describedby` targets. |\n| `skip-button` | The Skip control. |\n| `spotlight` | The decorative highlight ring drawn around the current target's (padded) rect. `pointer-events: none`, `aria-hidden=\"true\"`. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-tour-backdrop-color` — Backdrop scrim fill. Defaults to `--lr-color-overlay`.\n- `--lr-tour-spotlight-radius` — Corner radius shared by the cutout and the ring. Defaults to `--lr-radius`.\n- `--lr-tour-spotlight-ring-color` — Spotlight ring color. Defaults to `--lr-color-brand`.\n- `--lr-tour-spotlight-ring-width` — Spotlight ring thickness. Defaults to `--lr-border-width-medium`.\n- `--lr-tour-popover-max-width` — Maximum popover inline size. Defaults to `--lr-size-22rem`.\n- `--lr-tour-progress-dot-current-bg` (default: `var(--lr-color-brand)`) — Background of `progress-dot` for the current step, without repainting every other component that reuses the shared brand token."
15299
15982
  },
15300
15983
  "attributes": [
15301
15984
  {
@@ -15367,7 +16050,7 @@
15367
16050
  "name": "lr-trace-tree",
15368
16051
  "description": {
15369
16052
  "kind": "markdown",
15370
- "value": "`<lr-trace-tree>` — a collapsible span hierarchy for one agent/LLM trace\n(Langfuse/LangSmith run-tree style): kind icon, name, status, an inline\nduration bar on the shared trace time scale, and optional tokens/cost\ncolumns. Consumes the same `LyraSpan[]` as `<lr-span-waterfall>`.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `bar` | The duration bar's filled portion. |\n| `bar-track` | The duration bar's background track. |\n| `base` | The root wrapper (`role=\"tree\"`). |\n| `cost` | The cost column cell (when `showCost`). |\n| `detail` | The span's secondary text, from `LyraSpan.detail`. |\n| `duration` | The formatted duration text. |\n| `empty` | The empty-state message shown when `spans` is empty. |\n| `header` | The column-header row, rendered only when `showTokens`/`showCost` is on. |\n| `icon` | The span-kind icon. |\n| `live-region` | The internal status-announcement live region. |\n| `name` | The span's name. |\n| `row` | One span's row (`role=\"treeitem\"`). |\n| `status-text` | The visible status label. |\n| `toggle` | A row's expand/collapse button. |\n| `tokens-in` | The tokens-in column cell (when `showTokens`). |\n| `tokens-out` | The tokens-out column cell (when `showTokens`). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-trace-tree-row-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the active (`activeSpanId`) row. Shadow Parts forbids an attribute selector after `::part()`, so the active row could otherwise only be restyled by hijacking the library-wide `--lr-color-brand-quiet` token. Pairs with `--lr-trace-tree-row-active-color`: set both together, since the defaults assume the active background stays on the same side of the lightness midpoint as the ambient surface — a dark tint in light mode needs the matching text color set too, or the row's secondary text drops below the WCAG AA contrast floor.\n- `--lr-trace-tree-row-active-color` (default: `var(--lr-color-text)`) — Foreground reference for the active (`activeSpanId`) row. It sets the color of that row's secondary text (`detail`, `duration`, `tokens-in`, `tokens-out`, `cost`, and the `pending` status label), which is raised from the quiet token to full-strength text so it clears WCAG AA against the active row's tint. The semantic status labels keep their own hue but are mixed 25% toward this same value, so overriding it re-aims every foreground on the row at once rather than leaving the status colors stranded. See the pairing caveat on `--lr-trace-tree-row-active-bg`."
16053
+ "value": "`<lr-trace-tree>` — a collapsible span hierarchy for one agent/LLM trace\n(Langfuse/LangSmith run-tree style): kind icon, name, status, an inline\nduration bar on the shared trace time scale, and optional tokens/cost\ncolumns. Consumes the same `LyraSpan[]` as `<lr-span-waterfall>`.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `bar` | The duration bar's filled portion. |\n| `bar-track` | The duration bar's background track. |\n| `base` | The root wrapper (`role=\"tree\"`). |\n| `cost` | The cost column cell (when `showCost`). |\n| `detail` | The span's secondary text, from `LyraSpan.detail`. |\n| `duration` | The formatted duration text. |\n| `empty` | The empty-state message shown when `spans` is empty. |\n| `header` | The column-header row, rendered only when `showTokens`/`showCost` is on. |\n| `icon` | The span-kind icon. |\n| `live-region` | The internal status-announcement live region. |\n| `name` | The span's name. |\n| `row` | One span's row (`role=\"treeitem\"`). |\n| `status-text` | The visible status label. |\n| `toggle` | A row's expand/collapse button. |\n| `tokens-in` | The tokens-in column cell (when `showTokens`). |\n| `tokens-out` | The tokens-out column cell (when `showTokens`). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-trace-tree-row-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the active (`activeSpanId`) row. Shadow Parts forbids an attribute selector after `::part()`, so the active row could otherwise only be restyled by hijacking the library-wide `--lr-color-brand-quiet` token. Pairs with `--lr-trace-tree-row-active-color`: set both together, since the defaults assume the active background stays on the same side of the lightness midpoint as the ambient surface — a dark tint in light mode needs the matching text color set too, or the row's secondary text drops below the WCAG AA contrast floor.\n- `--lr-trace-tree-row-active-color` (default: `var(--lr-color-text)`) — Foreground reference for the active (`activeSpanId`) row. It sets the color of that row's secondary text (`detail`, `duration`, `tokens-in`, `tokens-out`, `cost`, and the `pending` status label), which is raised from the quiet token to full-strength text so it clears WCAG AA against the active row's tint. The semantic status labels keep their own hue but are mixed 25% toward this same value, so overriding it re-aims every foreground on the row at once rather than leaving the status colors stranded. See the pairing caveat on `--lr-trace-tree-row-active-bg`.\n- `--lr-trace-tree-toggle-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Toggle hover background.\n- `--lr-trace-tree-success-color` (default: `var(--lr-color-success)`) — Success status text and bar.\n- `--lr-trace-tree-error-color` (default: `var(--lr-color-danger)`) — Error status text and bar.\n- `--lr-trace-tree-denied-color` (default: `var(--lr-color-warning)`) — Denied status text and bar.\n- `--lr-trace-tree-running-color` (default: `var(--lr-color-brand)`) — Running status text and stripe.\n- `--lr-trace-tree-pending-color` (default: `var(--lr-color-text-quiet)`) — Pending status text and bar.\n- `--lr-trace-tree-bar-track-bg` (default: `var(--lr-color-surface-raised)`) — Duration bar track.\n- `--lr-trace-tree-running-stripe-bg` (default: `var(--lr-color-brand-quiet)`) — Running stripe contrast."
15371
16054
  },
15372
16055
  "attributes": [
15373
16056
  {
@@ -15617,14 +16300,14 @@
15617
16300
  "name": "lr-virtual-list",
15618
16301
  "description": {
15619
16302
  "kind": "markdown",
15620
- "value": "`<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**Sticky group headers.** `renderStickyGroup` adds a `[part=\"sticky-group\"]` overlay pinned to the\ntop of the scroll viewport, showing the `groups` entry the viewport is currently inside; as the\nnext group's header arrives it is pushed out by the overlap rather than swapped abruptly. Unset\n(the default) renders no overlay element at all, and the list renders exactly as it does without\nthis feature. Four properties of the overlay matter to a consumer:\n- It is a **visual copy** of content that already exists in the list, so it is `aria-hidden` and\n any ordinary focusable element inside it is forced to `tabindex=\"-1\"`: the real row keeps sole\n ownership of the heading semantics and of the tab order. (`inert` would express this more\n directly but would also block the pointer opt-in below, so it is deliberately not used; a\n focus-delegating custom element rendered into the overlay needs its own `tabindex=\"-1\"`.)\n- It is **`pointer-events: none` by default**; a consumer whose header content is interactive\n opts in with `lr-virtual-list::part(sticky-group) { pointer-events: auto; }`.\n- It is **never measured as a row.** It contributes nothing to `offsets`, so a group header that\n is also a real row is not counted twice in `row-height=\"auto\"` mode.\n- Its measured height becomes a `scroll-padding-block-start` on the scroll container, so both\n `active-id`/`scrollToIndex` and native keyboard scrolling stop *below* the band instead of\n parking the target row behind it. Scrolled above the first group the band shows nothing but\n stays mounted, so that height is known before the first jump rather than after it.\nA host that renders its own group headers as ordinary rows supplies `groups` purely as position\nanchors, with `label: ''` so no duplicate `[part=\"group\"]` marker renders.\n\n**Position queries.** `offsetForIndex(index)` and `indexAtOffset(px)` expose the windowing math\nitself: they translate between an item index and the pixel offset that row renders at, in the same\ncoordinate space as the scroll container's `scrollTop`. A host doing its own scroll-linked layout\n(a pinned group header, a scrollbar minimap, a \"jump to here\" affordance) needs those numbers and\nwould otherwise have to duplicate the offsets array.\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\"`.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The scrollable container (`role=\"list\"`). |\n| `group` | A positioned group label. Not rendered for a `groups` entry whose `label` is the empty string (a position-anchor-only entry). |\n| `row` | One rendered row's absolutely-positioned wrapper (`role=\"listitem\"`); `renderItem`'s return value renders inside it. |\n| `spacer` | The full-content-height inner element that gives the container its true scrollable extent. |\n| `sticky-group` | The pinned copy of the current group, rendered only while `renderStickyGroup` is set (and showing nothing while the viewport is above the first group, where there is no group to pin). `aria-hidden` and `pointer-events: none` by default — style this part with `pointer-events: auto` to make copied interactive content clickable again. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-virtual-list-height` (default: `var(--lr-size-24rem)`) — 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.\n- `--lr-virtual-list-hover-outline-color` (default: `var(--lr-color-border-strong)`) — Outline color of the mouse-hover preview on `[part=\"base\"]` (a subtler, always-focusable-target preview of its own `:focus-visible` ring). Set to `transparent` to opt out of the hover treatment entirely."
16303
+ "value": "`<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 corresponding\n`startIndex`. Markers are windowed with the rows, while normalized group metadata stays cached\nfor sticky-header lookup; one-group-per-row catalogs therefore remain bounded.\n\n**Sticky group headers.** `renderStickyGroup` adds a `[part=\"sticky-group\"]` overlay pinned to the\ntop of the scroll viewport, showing the `groups` entry the viewport is currently inside; as the\nnext group's header arrives it is pushed out by the overlap rather than swapped abruptly. Unset\n(the default) renders no overlay element at all, and the list renders exactly as it does without\nthis feature. Four properties of the overlay matter to a consumer:\n- It is a **visual copy** of content that already exists in the list, so it is `aria-hidden` and\n any ordinary focusable element inside it is forced to `tabindex=\"-1\"`: the real row keeps sole\n ownership of the heading semantics and of the tab order. (`inert` would express this more\n directly but would also block the pointer opt-in below, so it is deliberately not used; a\n focus-delegating custom element rendered into the overlay needs its own `tabindex=\"-1\"`.)\n- It is **`pointer-events: none` by default**; a consumer whose header content is interactive\n opts in with `lr-virtual-list::part(sticky-group) { pointer-events: auto; }`.\n- It is **never measured as a row.** It contributes nothing to `offsets`, so a group header that\n is also a real row is not counted twice in `row-height=\"auto\"` mode.\n- Its measured height becomes a `scroll-padding-block-start` on the scroll container, so both\n `active-id`/`scrollToIndex` and native keyboard scrolling stop *below* the band instead of\n parking the target row behind it. Scrolled above the first group the band shows nothing but\n stays mounted, so that height is known before the first jump rather than after it.\nA host that renders its own group headers as ordinary rows supplies `groups` purely as position\nanchors, with `label: ''` so no duplicate `[part=\"group\"]` marker renders.\n\n**Position queries.** `offsetForIndex(index)` and `indexAtOffset(px)` expose the windowing math\nitself: they translate between an item index and the pixel offset that row renders at, in the same\ncoordinate space as the scroll container's `scrollTop`. A host doing its own scroll-linked layout\n(a pinned group header, a scrollbar minimap, a \"jump to here\" affordance) needs those numbers and\nwould otherwise have to duplicate the offsets array.\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\"`.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The scrollable container (`role=\"list\"`). |\n| `group` | A positioned group label. Not rendered for a `groups` entry whose `label` is the empty string (a position-anchor-only entry). |\n| `row` | One rendered row's absolutely-positioned wrapper (`role=\"listitem\"`); `renderItem`'s return value renders inside it. |\n| `spacer` | The full-content-height inner element that gives the container its true scrollable extent. |\n| `sticky-group` | The pinned copy of the current group, rendered only while `renderStickyGroup` is set (and showing nothing while the viewport is above the first group, where there is no group to pin). `aria-hidden` and `pointer-events: none` by default — style this part with `pointer-events: auto` to make copied interactive content clickable again. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-virtual-list-height` (default: `var(--lr-size-24rem)`) — 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.\n- `--lr-virtual-list-hover-outline-color` (default: `var(--lr-color-border-strong)`) — Outline color of the mouse-hover preview on `[part=\"base\"]` (a subtler, always-focusable-target preview of its own `:focus-visible` ring). Set to `transparent` to opt out of the hover treatment entirely."
15621
16304
  },
15622
16305
  "attributes": [
15623
16306
  {
15624
16307
  "name": "active-id",
15625
16308
  "description": {
15626
16309
  "kind": "markdown",
15627
- "value": "When set and it matches a row's typed `keyFunction` result, that row is\nsmoothly scrolled into view whenever this changes. Attribute values are\nstrings; assign the property for a numeric key.\n\nType: `VirtualListKey | ''` \nDefault: `''`"
16310
+ "value": "When set and it matches a row's typed `keyFunction` result, that row is\nsmoothly scrolled into view whenever this changes. Attribute values are\nstrings; assign the property for a numeric key.\n\nType: `VirtualListKey | \"\"` \nDefault: `\"\"`"
15628
16311
  }
15629
16312
  },
15630
16313
  {
@@ -15638,7 +16321,7 @@
15638
16321
  "name": "item-role",
15639
16322
  "description": {
15640
16323
  "kind": "markdown",
15641
- "value": "`'listitem'` (default) preserves today's `role=\"list\"`/`role=\"listitem\"` mapping with\n`aria-setsize`/`aria-posinset`. `'row'` maps to `role=\"rowgroup\"`/`role=\"row\"` with\n`aria-rowindex` instead -- for a consumer composing a virtualized `role=\"table\"` (see\n`<lr-dataset-viewer>`).\n\nType: `VirtualListItemRole` \nDefault: `'listitem'`"
16324
+ "value": "`'listitem'` (default) preserves today's `role=\"list\"`/`role=\"listitem\"` mapping with\n`aria-setsize`/`aria-posinset`. `'row'` maps to `role=\"rowgroup\"`/`role=\"row\"` with\n`aria-rowindex` instead -- for a consumer composing a virtualized `role=\"table\"` (see\n`<lr-dataset-viewer>`).\n\nType: `VirtualListItemRole` \nDefault: `\"listitem\"`"
15642
16325
  }
15643
16326
  },
15644
16327
  {
@@ -15666,7 +16349,7 @@
15666
16349
  "name": "row-height",
15667
16350
  "description": {
15668
16351
  "kind": "markdown",
15669
- "value": "`'auto'` (default) measures each row's real height via `ResizeObserver`;\na numeric string fixes every row to that many pixels.\n\nType: `string` \nDefault: `'auto'`"
16352
+ "value": "`'auto'` (default) measures each row's real height via `ResizeObserver`;\na numeric string fixes every row to that many pixels.\n\nType: `string` \nDefault: `\"auto\"`"
15670
16353
  }
15671
16354
  },
15672
16355
  {
@@ -15682,7 +16365,7 @@
15682
16365
  "name": "lr-voice-picker",
15683
16366
  "description": {
15684
16367
  "kind": "markdown",
15685
- "value": "`<lr-voice-picker>` — a TTS voice selector over a host-supplied `catalog`, mirroring\n`lr-model-select`'s closed-dropdown/free-text-combobox dual mode, stale-value handling, and\nform-association verbatim (see that class's own doc for the full mode-switching contract this one\nshares), extended with a TTS-agnostic preview affordance: a standalone, always-tab-reachable\n`[part=\"preview-button\"]` beside the trigger previews the active option while open, else the\ncommitted value; per-row `[part=\"option-preview\"]` icons are pointer-only duplicates\n(`tabindex=\"-1\"`, `aria-hidden=\"true\"`) since a listbox option must not contain a focusable\ndescendant.\n\nPreview is event-first: `lr-preview-request` always fires first and is cancelable. Left\nun-prevented, a `previewUrl` plays through one internal native `<audio>` (the URL passes\n`safeMediaSrc()` first); `preventDefault()` or no URL leaves playback entirely to the host's own\nTTS. Requesting the same voice while it is already playing internally stops it instead of\nre-requesting; requesting a different voice switches. `lr-preview-change` reports internal\nplayback start/stop (`voiceId: null` on stop/end/error).\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `combobox` | The text-input container (free-text mode). |\n| `combobox-input` | The free-text `<input>`. |\n| `empty` | The empty-listbox message. |\n| `error` | The error message. |\n| `expand-icon` | The dropdown indicator. |\n| `form-control-label` | The `<label>` element. |\n| `hint` | The hint message. |\n| `listbox` | The options popover. |\n| `option` | An option row. |\n| `option-badge` | The \"not in catalog\" badge on a synthetic stale-value row. |\n| `option-label` | An option row's label/meta wrapper. |\n| `option-meta` | An option row's quiet `language · description` second line. |\n| `option-preview` | A pointer-only per-row preview icon (`tabindex=\"-1\"`, `aria-hidden`). |\n| `preview-button` | The standalone, keyboard-reachable preview toggle beside the trigger. |\n| `provider-badge` | The optional leading `provider` label. |\n| `trigger` | The trigger button (closed-dropdown mode). |"
16368
+ "value": "`<lr-voice-picker>` — a TTS voice selector over a host-supplied `catalog`, mirroring\n`lr-model-select`'s closed-dropdown/free-text-combobox dual mode, stale-value handling, and\nform-association verbatim (see that class's own doc for the full mode-switching contract this one\nshares), extended with a TTS-agnostic preview affordance: a standalone, always-tab-reachable\n`[part=\"preview-button\"]` beside the trigger previews the active option while open, else the\ncommitted value; per-row `[part=\"option-preview\"]` icons are pointer-only duplicates\n(`tabindex=\"-1\"`, `aria-hidden=\"true\"`) since a listbox option must not contain a focusable\ndescendant.\n\nPreview is event-first: `lr-preview-request` always fires first and is cancelable. Left\nun-prevented, a `previewUrl` plays through one internal native `<audio>` (the URL passes\n`safeMediaSrc()` first); `preventDefault()` or no URL leaves playback entirely to the host's own\nTTS. Requesting the same voice while it is already playing internally stops it instead of\nre-requesting; requesting a different voice switches. `lr-preview-change` reports internal\nplayback start/stop (`voiceId: null` on stop/end/error).\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `combobox` | The text-input container (free-text mode). |\n| `combobox-input` | The free-text `<input>`. |\n| `empty` | The empty-listbox message. |\n| `error` | The error message. |\n| `expand-icon` | The dropdown indicator. |\n| `form-control-label` | The `<label>` element. |\n| `hint` | The hint message. |\n| `listbox` | The options popover. |\n| `option` | An option row. |\n| `option-badge` | The \"not in catalog\" badge on a synthetic stale-value row. |\n| `option-label` | An option row's label/meta wrapper. |\n| `option-meta` | An option row's quiet `language · description` second line. |\n| `option-preview` | A pointer-only per-row preview icon (`tabindex=\"-1\"`, `aria-hidden`). |\n| `preview-button` | The standalone, keyboard-reachable preview toggle beside the trigger. |\n| `provider-badge` | The optional leading `provider` label. |\n| `trigger` | The trigger button (closed-dropdown mode). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-voice-picker-preview-active-border` (default: `var(--lr-color-brand)`) — Active preview border.\n- `--lr-voice-picker-preview-active-color` (default: `var(--lr-color-brand)`) — Active preview icon.\n- `--lr-voice-picker-option-active-bg` (default: `var(--lr-color-brand-quiet)`) — Active option fill.\n- `--lr-voice-picker-option-selected-border` (default: `var(--lr-color-brand)`) — Selected option border.\n- `--lr-voice-picker-option-selected-color` (default: `var(--lr-color-brand)`) — Selected option text.\n- `--lr-voice-picker-option-selected-bg` (default: `transparent`) — Selected option fill.\n- `--lr-voice-picker-option-selected-font-weight` (default: `var(--lr-font-weight-semibold)`) — Selected option label weight.\n- `--lr-voice-picker-preview-hover-bg` (default: `var(--lr-color-brand-quiet)`) — Preview hover fill.\n- `--lr-voice-picker-preview-hover-color` (default: `var(--lr-color-brand)`) — Preview hover icon."
15686
16369
  },
15687
16370
  "attributes": [
15688
16371
  {
@@ -15824,7 +16507,7 @@
15824
16507
  "name": "lr-widget",
15825
16508
  "description": {
15826
16509
  "kind": "markdown",
15827
- "value": "`<lr-widget>` — a titled panel shell with an optional collapse toggle and\nan optional fullscreen-expand toggle. Fullscreen promotes the same host\nelement in place (a CSS state, not a clone/portal), so slotted content\n(a chart, a running simulation, scroll position) survives the transition.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The panel body. |\n| `actions` | Header action controls, rendered before the collapse/expand buttons. |\n| `collapse-icon` | Overrides the built-in chevron glyph inside the collapse/expand toggle button entirely, via the platform's own slot-fallback-content mechanism (same convention as `<lr-tool-call-chip>`'s `icon` slot): whatever is assigned wins, otherwise the default chevron renders. Only meaningful while `collapsible`. |\n| `fullscreen-icon` | Overrides the built-in expand/close glyph inside the fullscreen toggle button entirely, using the same mechanism -- the override replaces *both* the \"expand\" and \"exit fullscreen\" default icons, so a consumer supplying one is responsible for its own expand/exit distinction (e.g. by reading the `fullscreen` attribute). Only meaningful while `expandable`. |\n| `icon` | Optional leading icon in the title row. |\n| `label` | Rich label content (overrides the `label` attribute). |\n| `sublabel` | Rich sublabel content (overrides the `sublabel` attribute). |\n| `view-{id}` | Content for the view whose `WidgetView.id` matches `{id}`, rendered when `views` is non-empty. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | The wrapper around the `actions` slot. |\n| `backdrop` | The fullscreen scrim behind the panel. |\n| `base` | The panel root (dialog role + backdrop when fullscreen). |\n| `body` | The wrapper around the default slot (the panel body). |\n| `collapse-button` | The collapse/expand toggle button. |\n| `fullscreen-button` | The fullscreen toggle button. |\n| `header` | The header row containing the title, actions, and toggle buttons. |\n| `icon` | Wrapper around the `icon` slot. Hidden entirely when empty. |\n| `label` | The panel title text. |\n| `label-group` | Wrapper around the label and sublabel. |\n| `sublabel` | The panel subtitle text. |\n| `title` | The wrapper around the label/sublabel. |\n| `view-toggle` | A single view toggle button. |\n| `view-toggles` | The header toggle-button group, only rendered when `views` is non-empty. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-widget-overlay-color` (default: `var(--lr-color-overlay)`) — The fullscreen scrim's color, applied to `[part=\"backdrop\"]`.\n- `--lr-widget-view-toggle-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the pressed (`aria-pressed=\"true\"`) view toggle. Declared as an inline `var()` fallback (never on `:host`), so setting it on the element or an ancestor recolors only the active toggle without hijacking the library-wide `--lr-color-brand-quiet` token.\n- `--lr-widget-view-toggle-active-color` (default: `var(--lr-color-brand)`) — Text color of the pressed view toggle.\n- `--lr-widget-fullscreen-inset` (default: `max(var(--lr-space-l), var(--lr-safe-area-top)) max(var(--lr-space-l), var(--lr-safe-area-inline-end)) max(var(--lr-space-l), var(--lr-safe-area-bottom)) max(var(--lr-space-l), var(--lr-safe-area-inline-start))`) — The `inset` applied to `[part=\"base\"]` while `fullscreen`. Also set inline from the `fullscreen-inset` attribute.\n- `--lr-widget-backdrop-inset` (default: `var(--lr-widget-fullscreen-inset)`) — 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`."
16510
+ "value": "`<lr-widget>` — a titled panel shell with an optional collapse toggle and\nan optional fullscreen-expand toggle. Fullscreen promotes the same host\nelement in place (a CSS state, not a clone/portal), so slotted content\n(a chart, a running simulation, scroll position) survives the transition.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | The panel body. |\n| `actions` | Header action controls, rendered before the collapse/expand buttons. |\n| `collapse-icon` | Overrides the built-in chevron glyph inside the collapse/expand toggle button entirely, via the platform's own slot-fallback-content mechanism (same convention as `<lr-tool-call-chip>`'s `icon` slot): whatever is assigned wins, otherwise the default chevron renders. Only meaningful while `collapsible`. |\n| `fullscreen-icon` | Overrides the built-in expand/close glyph inside the fullscreen toggle button entirely, using the same mechanism -- the override replaces *both* the \"expand\" and \"exit fullscreen\" default icons, so a consumer supplying one is responsible for its own expand/exit distinction (e.g. by reading the `fullscreen` attribute). Only meaningful while `expandable`. |\n| `icon` | Optional leading icon in the title row. |\n| `label` | Rich label content (overrides the `label` attribute). |\n| `sublabel` | Rich sublabel content (overrides the `sublabel` attribute). |\n| `view-{id}` | Content for the view whose `WidgetView.id` matches `{id}`, rendered when `views` is non-empty. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | The wrapper around the `actions` slot. |\n| `backdrop` | The fullscreen scrim behind the panel. |\n| `base` | The panel root (dialog role + backdrop when fullscreen). |\n| `body` | The wrapper around the default slot (the panel body). |\n| `collapse-button` | The collapse/expand toggle button. |\n| `fullscreen-button` | The fullscreen toggle button. |\n| `header` | The header row containing the title, actions, and toggle buttons. |\n| `icon` | Wrapper around the `icon` slot. Hidden entirely when empty. |\n| `label` | The panel title text. |\n| `label-group` | Wrapper around the label and sublabel. |\n| `sublabel` | The panel subtitle text. |\n| `title` | The wrapper around the label/sublabel. |\n| `view-icon` | Decorative icon content inside a view toggle. |\n| `view-label` | Visible label text inside a view toggle. |\n| `view-toggle` | A single view toggle button. |\n| `view-toggles` | The header toggle-button group, only rendered when `views` is non-empty. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-widget-overlay-color` (default: `var(--lr-color-overlay)`) — The fullscreen scrim's color, applied to `[part=\"backdrop\"]`.\n- `--lr-widget-view-toggle-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the pressed (`aria-pressed=\"true\"`) view toggle. Declared as an inline `var()` fallback (never on `:host`), so setting it on the element or an ancestor recolors only the active toggle without hijacking the library-wide `--lr-color-brand-quiet` token.\n- `--lr-widget-view-toggle-active-color` (default: `var(--lr-color-brand)`) — Text color of the pressed view toggle.\n- `--lr-widget-fullscreen-inset` (default: `max(var(--lr-space-l), var(--lr-safe-area-top)) max(var(--lr-space-l), var(--lr-safe-area-inline-end)) max(var(--lr-space-l), var(--lr-safe-area-bottom)) max(var(--lr-space-l), var(--lr-safe-area-inline-start))`) — The `inset` applied to `[part=\"base\"]` while `fullscreen`. Also set inline from the `fullscreen-inset` attribute.\n- `--lr-widget-backdrop-inset` (default: `var(--lr-widget-fullscreen-inset)`) — 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`."
15828
16511
  },
15829
16512
  "attributes": [
15830
16513
  {
@@ -15838,7 +16521,7 @@
15838
16521
  "name": "backdrop-inset",
15839
16522
  "description": {
15840
16523
  "kind": "markdown",
15841
- "value": "Overrides the fullscreen *backdrop*'s own inset independent of `fullscreen-inset` -- e.g.\n`\"0\"` to dim the full viewport-to-panel-edge region while the panel itself keeps a narrower\n`fullscreen-inset`. Unset (the default) falls back to `fullscreen-inset`, i.e. today's exact\ncoupled behavior.\n\nType: `string` \nDefault: `''`"
16524
+ "value": "Overrides the fullscreen *backdrop*'s own inset independent of `fullscreen-inset` -- e.g.\n`\"0\"` to dim the full viewport-to-panel-edge region while the panel itself keeps a narrower\n`fullscreen-inset`. Unset (the default) falls back to `fullscreen-inset`, i.e. today's exact\ncoupled behavior.\n\nType: `string` \nDefault: `\"\"`"
15842
16525
  }
15843
16526
  },
15844
16527
  {
@@ -15880,14 +16563,14 @@
15880
16563
  "name": "fullscreen-inset",
15881
16564
  "description": {
15882
16565
  "kind": "markdown",
15883
- "value": "Raw CSS `inset` shorthand applied to the fullscreen panel and backdrop instead of the default\n`var(--lr-space-l)` on every side — e.g. `\"0 0 0 240px\"` to leave a 240px persistent sidebar\nvisible while fullscreen.\n\nType: `string` \nDefault: `''`"
16566
+ "value": "Raw CSS `inset` shorthand applied to the fullscreen panel and backdrop instead of the default\n`var(--lr-space-l)` on every side — e.g. `\"0 0 0 240px\"` to leave a 240px persistent sidebar\nvisible while fullscreen.\n\nType: `string` \nDefault: `\"\"`"
15884
16567
  }
15885
16568
  },
15886
16569
  {
15887
16570
  "name": "label",
15888
16571
  "description": {
15889
16572
  "kind": "markdown",
15890
- "value": "Type: `string` \nDefault: `''`"
16573
+ "value": "Type: `string` \nDefault: `\"\"`"
15891
16574
  }
15892
16575
  },
15893
16576
  {
@@ -15908,7 +16591,7 @@
15908
16591
  "name": "sublabel",
15909
16592
  "description": {
15910
16593
  "kind": "markdown",
15911
- "value": "Type: `string` \nDefault: `''`"
16594
+ "value": "Type: `string` \nDefault: `\"\"`"
15912
16595
  }
15913
16596
  }
15914
16597
  ]