@aceshooting/lyra-ui 6.1.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 (2060) hide show
  1. package/CHANGELOG.md +206 -0
  2. package/README.md +38 -5
  3. package/custom-elements.json +96590 -65700
  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 +68 -0
  44. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.d.ts.map +1 -0
  45. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.js +139 -0
  46. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.js.map +1 -0
  47. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.d.ts +5 -0
  48. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.d.ts.map +1 -0
  49. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.js +8 -0
  50. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.js.map +1 -0
  51. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.d.ts +2 -0
  52. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.d.ts.map +1 -0
  53. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.js +34 -0
  54. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.js.map +1 -0
  55. package/dist/components/agent-tools/agent-run/agent-run.class.d.ts +4 -7
  56. package/dist/components/agent-tools/agent-run/agent-run.class.d.ts.map +1 -1
  57. package/dist/components/agent-tools/agent-run/agent-run.class.js +24 -39
  58. package/dist/components/agent-tools/agent-run/agent-run.class.js.map +1 -1
  59. package/dist/components/agent-tools/agent-run/agent-run.d.ts +6 -0
  60. package/dist/components/agent-tools/agent-run/agent-run.d.ts.map +1 -1
  61. package/dist/components/agent-tools/agent-run/agent-run.js +6 -0
  62. package/dist/components/agent-tools/agent-run/agent-run.js.map +1 -1
  63. package/dist/components/agent-tools/agent-run/agent-run.styles.d.ts.map +1 -1
  64. package/dist/components/agent-tools/agent-run/agent-run.styles.js +13 -4
  65. package/dist/components/agent-tools/agent-run/agent-run.styles.js.map +1 -1
  66. package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts +0 -3
  67. package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts.map +1 -1
  68. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +1 -9
  69. package/dist/components/agent-tools/agent-trace/agent-trace.class.js.map +1 -1
  70. package/dist/components/agent-tools/agent-trace/agent-trace.d.ts.map +1 -1
  71. package/dist/components/agent-tools/agent-trace/agent-trace.js +2 -2
  72. package/dist/components/agent-tools/agent-trace/agent-trace.js.map +1 -1
  73. package/dist/components/agent-tools/agent-trace/agent-trace.styles.d.ts.map +1 -1
  74. package/dist/components/agent-tools/agent-trace/agent-trace.styles.js +2 -0
  75. package/dist/components/agent-tools/agent-trace/agent-trace.styles.js.map +1 -1
  76. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +76 -0
  77. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts.map +1 -0
  78. package/dist/components/agent-tools/approval-queue/approval-queue.class.js +149 -0
  79. package/dist/components/agent-tools/approval-queue/approval-queue.class.js.map +1 -0
  80. package/dist/components/agent-tools/approval-queue/approval-queue.d.ts +4 -0
  81. package/dist/components/agent-tools/approval-queue/approval-queue.d.ts.map +1 -0
  82. package/dist/components/agent-tools/approval-queue/approval-queue.js +7 -0
  83. package/dist/components/agent-tools/approval-queue/approval-queue.js.map +1 -0
  84. package/dist/components/agent-tools/approval-queue/approval-queue.styles.d.ts +2 -0
  85. package/dist/components/agent-tools/approval-queue/approval-queue.styles.d.ts.map +1 -0
  86. package/dist/components/agent-tools/approval-queue/approval-queue.styles.js +96 -0
  87. package/dist/components/agent-tools/approval-queue/approval-queue.styles.js.map +1 -0
  88. package/dist/components/agent-tools/artifact-panel/artifact-panel.class.d.ts +1 -2
  89. package/dist/components/agent-tools/artifact-panel/artifact-panel.class.d.ts.map +1 -1
  90. package/dist/components/agent-tools/artifact-panel/artifact-panel.class.js +3 -6
  91. package/dist/components/agent-tools/artifact-panel/artifact-panel.class.js.map +1 -1
  92. package/dist/components/agent-tools/artifact-panel/artifact-panel.d.ts +1 -0
  93. package/dist/components/agent-tools/artifact-panel/artifact-panel.d.ts.map +1 -1
  94. package/dist/components/agent-tools/artifact-panel/artifact-panel.js +1 -0
  95. package/dist/components/agent-tools/artifact-panel/artifact-panel.js.map +1 -1
  96. package/dist/components/agent-tools/browser-frame/browser-frame.class.d.ts +16 -0
  97. package/dist/components/agent-tools/browser-frame/browser-frame.class.d.ts.map +1 -1
  98. package/dist/components/agent-tools/browser-frame/browser-frame.class.js +12 -14
  99. package/dist/components/agent-tools/browser-frame/browser-frame.class.js.map +1 -1
  100. package/dist/components/agent-tools/browser-frame/browser-frame.styles.d.ts.map +1 -1
  101. package/dist/components/agent-tools/browser-frame/browser-frame.styles.js +17 -6
  102. package/dist/components/agent-tools/browser-frame/browser-frame.styles.js.map +1 -1
  103. package/dist/components/agent-tools/commit-card/commit-card.class.d.ts.map +1 -1
  104. package/dist/components/agent-tools/commit-card/commit-card.class.js +1 -15
  105. package/dist/components/agent-tools/commit-card/commit-card.class.js.map +1 -1
  106. package/dist/components/agent-tools/compare-panel/compare-panel.class.d.ts +1 -2
  107. package/dist/components/agent-tools/compare-panel/compare-panel.class.d.ts.map +1 -1
  108. package/dist/components/agent-tools/compare-panel/compare-panel.class.js +6 -4
  109. package/dist/components/agent-tools/compare-panel/compare-panel.class.js.map +1 -1
  110. package/dist/components/agent-tools/compare-panel/compare-panel.d.ts.map +1 -1
  111. package/dist/components/agent-tools/compare-panel/compare-panel.js +1 -1
  112. package/dist/components/agent-tools/compare-panel/compare-panel.js.map +1 -1
  113. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.d.ts.map +1 -1
  114. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js +15 -5
  115. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js.map +1 -1
  116. package/dist/components/agent-tools/confirm-bar/confirm-bar.styles.js +3 -3
  117. package/dist/components/agent-tools/context-inspector/context-inspector.class.d.ts +1 -0
  118. package/dist/components/agent-tools/context-inspector/context-inspector.class.d.ts.map +1 -1
  119. package/dist/components/agent-tools/context-inspector/context-inspector.class.js +4 -1
  120. package/dist/components/agent-tools/context-inspector/context-inspector.class.js.map +1 -1
  121. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.d.ts +0 -5
  122. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.d.ts.map +1 -1
  123. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.js +23 -8
  124. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.js.map +1 -1
  125. package/dist/components/agent-tools/eval-dataset/eval-dataset.d.ts.map +1 -1
  126. package/dist/components/agent-tools/eval-dataset/eval-dataset.js +2 -2
  127. package/dist/components/agent-tools/eval-dataset/eval-dataset.js.map +1 -1
  128. package/dist/components/agent-tools/eval-dataset/eval-dataset.styles.d.ts.map +1 -1
  129. package/dist/components/agent-tools/eval-dataset/eval-dataset.styles.js +7 -0
  130. package/dist/components/agent-tools/eval-dataset/eval-dataset.styles.js.map +1 -1
  131. package/dist/components/agent-tools/eval-result/eval-result.class.d.ts.map +1 -1
  132. package/dist/components/agent-tools/eval-result/eval-result.class.js +20 -5
  133. package/dist/components/agent-tools/eval-result/eval-result.class.js.map +1 -1
  134. package/dist/components/agent-tools/eval-result/eval-result.styles.d.ts.map +1 -1
  135. package/dist/components/agent-tools/eval-result/eval-result.styles.js +7 -0
  136. package/dist/components/agent-tools/eval-result/eval-result.styles.js.map +1 -1
  137. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.d.ts +0 -9
  138. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.d.ts.map +1 -1
  139. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js +21 -21
  140. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js.map +1 -1
  141. package/dist/components/agent-tools/evaluation-run/evaluation-run.d.ts +9 -0
  142. package/dist/components/agent-tools/evaluation-run/evaluation-run.d.ts.map +1 -1
  143. package/dist/components/agent-tools/evaluation-run/evaluation-run.js +9 -0
  144. package/dist/components/agent-tools/evaluation-run/evaluation-run.js.map +1 -1
  145. package/dist/components/agent-tools/evaluation-run/evaluation-run.styles.d.ts.map +1 -1
  146. package/dist/components/agent-tools/evaluation-run/evaluation-run.styles.js +6 -2
  147. package/dist/components/agent-tools/evaluation-run/evaluation-run.styles.js.map +1 -1
  148. package/dist/components/agent-tools/index.d.ts +36 -0
  149. package/dist/components/agent-tools/index.d.ts.map +1 -0
  150. package/dist/components/agent-tools/index.js +36 -0
  151. package/dist/components/agent-tools/index.js.map +1 -0
  152. package/dist/components/agent-tools/mcp-app/mcp-app.class.d.ts +93 -0
  153. package/dist/components/agent-tools/mcp-app/mcp-app.class.d.ts.map +1 -0
  154. package/dist/components/agent-tools/mcp-app/mcp-app.class.js +238 -0
  155. package/dist/components/agent-tools/mcp-app/mcp-app.class.js.map +1 -0
  156. package/dist/components/agent-tools/mcp-app/mcp-app.d.ts +2 -0
  157. package/dist/components/agent-tools/mcp-app/mcp-app.d.ts.map +1 -0
  158. package/dist/components/agent-tools/mcp-app/mcp-app.js +5 -0
  159. package/dist/components/agent-tools/mcp-app/mcp-app.js.map +1 -0
  160. package/dist/components/agent-tools/mcp-app/mcp-app.styles.d.ts +2 -0
  161. package/dist/components/agent-tools/mcp-app/mcp-app.styles.d.ts.map +1 -0
  162. package/dist/components/agent-tools/mcp-app/mcp-app.styles.js +45 -0
  163. package/dist/components/agent-tools/mcp-app/mcp-app.styles.js.map +1 -0
  164. package/dist/components/agent-tools/policy-summary/policy-summary.class.d.ts +4 -7
  165. package/dist/components/agent-tools/policy-summary/policy-summary.class.d.ts.map +1 -1
  166. package/dist/components/agent-tools/policy-summary/policy-summary.class.js +5 -8
  167. package/dist/components/agent-tools/policy-summary/policy-summary.class.js.map +1 -1
  168. package/dist/components/agent-tools/policy-summary/policy-summary.styles.d.ts.map +1 -1
  169. package/dist/components/agent-tools/policy-summary/policy-summary.styles.js +4 -1
  170. package/dist/components/agent-tools/policy-summary/policy-summary.styles.js.map +1 -1
  171. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +91 -0
  172. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts.map +1 -0
  173. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +236 -0
  174. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js.map +1 -0
  175. package/dist/components/agent-tools/prompt-studio/prompt-studio.d.ts +2 -0
  176. package/dist/components/agent-tools/prompt-studio/prompt-studio.d.ts.map +1 -0
  177. package/dist/components/agent-tools/prompt-studio/prompt-studio.js +5 -0
  178. package/dist/components/agent-tools/prompt-studio/prompt-studio.js.map +1 -0
  179. package/dist/components/agent-tools/prompt-studio/prompt-studio.styles.d.ts +2 -0
  180. package/dist/components/agent-tools/prompt-studio/prompt-studio.styles.d.ts.map +1 -0
  181. package/dist/components/agent-tools/prompt-studio/prompt-studio.styles.js +60 -0
  182. package/dist/components/agent-tools/prompt-studio/prompt-studio.styles.js.map +1 -0
  183. package/dist/components/agent-tools/result-card/result-card.styles.d.ts.map +1 -1
  184. package/dist/components/agent-tools/result-card/result-card.styles.js +3 -1
  185. package/dist/components/agent-tools/result-card/result-card.styles.js.map +1 -1
  186. package/dist/components/agent-tools/result-card/result-field.class.d.ts.map +1 -1
  187. package/dist/components/agent-tools/result-card/result-field.class.js +3 -1
  188. package/dist/components/agent-tools/result-card/result-field.class.js.map +1 -1
  189. package/dist/components/agent-tools/result-card/result-field.styles.d.ts.map +1 -1
  190. package/dist/components/agent-tools/result-card/result-field.styles.js +3 -1
  191. package/dist/components/agent-tools/result-card/result-field.styles.js.map +1 -1
  192. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +77 -0
  193. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts.map +1 -0
  194. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +196 -0
  195. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js.map +1 -0
  196. package/dist/components/agent-tools/schema-viewer/schema-viewer.d.ts +4 -0
  197. package/dist/components/agent-tools/schema-viewer/schema-viewer.d.ts.map +1 -0
  198. package/dist/components/agent-tools/schema-viewer/schema-viewer.js +7 -0
  199. package/dist/components/agent-tools/schema-viewer/schema-viewer.js.map +1 -0
  200. package/dist/components/agent-tools/schema-viewer/schema-viewer.styles.d.ts +2 -0
  201. package/dist/components/agent-tools/schema-viewer/schema-viewer.styles.d.ts.map +1 -0
  202. package/dist/components/agent-tools/schema-viewer/schema-viewer.styles.js +32 -0
  203. package/dist/components/agent-tools/schema-viewer/schema-viewer.styles.js.map +1 -0
  204. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts +2 -0
  205. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts.map +1 -1
  206. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +51 -22
  207. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js.map +1 -1
  208. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.d.ts.map +1 -1
  209. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +1 -0
  210. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js.map +1 -1
  211. package/dist/components/agent-tools/stack-trace/stack-trace-parse.d.ts.map +1 -1
  212. package/dist/components/agent-tools/stack-trace/stack-trace-parse.js +10 -1
  213. package/dist/components/agent-tools/stack-trace/stack-trace-parse.js.map +1 -1
  214. package/dist/components/agent-tools/stack-trace/stack-trace.class.d.ts +2 -2
  215. package/dist/components/agent-tools/stack-trace/stack-trace.class.d.ts.map +1 -1
  216. package/dist/components/agent-tools/stack-trace/stack-trace.class.js +16 -27
  217. package/dist/components/agent-tools/stack-trace/stack-trace.class.js.map +1 -1
  218. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.d.ts +72 -0
  219. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.d.ts.map +1 -0
  220. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +213 -0
  221. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js.map +1 -0
  222. package/dist/components/agent-tools/subagent-panel/subagent-panel.d.ts +4 -0
  223. package/dist/components/agent-tools/subagent-panel/subagent-panel.d.ts.map +1 -0
  224. package/dist/components/agent-tools/subagent-panel/subagent-panel.js +7 -0
  225. package/dist/components/agent-tools/subagent-panel/subagent-panel.js.map +1 -0
  226. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.d.ts +2 -0
  227. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.d.ts.map +1 -0
  228. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js +38 -0
  229. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js.map +1 -0
  230. package/dist/components/agent-tools/task-list/task-list.class.d.ts +11 -2
  231. package/dist/components/agent-tools/task-list/task-list.class.d.ts.map +1 -1
  232. package/dist/components/agent-tools/task-list/task-list.class.js +3 -10
  233. package/dist/components/agent-tools/task-list/task-list.class.js.map +1 -1
  234. package/dist/components/agent-tools/task-list/task-list.d.ts +1 -0
  235. package/dist/components/agent-tools/task-list/task-list.d.ts.map +1 -1
  236. package/dist/components/agent-tools/task-list/task-list.js +1 -0
  237. package/dist/components/agent-tools/task-list/task-list.js.map +1 -1
  238. package/dist/components/agent-tools/task-list/task-list.styles.js +1 -1
  239. package/dist/components/agent-tools/terminal/terminal.class.d.ts +5 -1
  240. package/dist/components/agent-tools/terminal/terminal.class.d.ts.map +1 -1
  241. package/dist/components/agent-tools/terminal/terminal.class.js +46 -25
  242. package/dist/components/agent-tools/terminal/terminal.class.js.map +1 -1
  243. package/dist/components/agent-tools/terminal/terminal.d.ts +1 -0
  244. package/dist/components/agent-tools/terminal/terminal.d.ts.map +1 -1
  245. package/dist/components/agent-tools/terminal/terminal.js +1 -0
  246. package/dist/components/agent-tools/terminal/terminal.js.map +1 -1
  247. package/dist/components/agent-tools/terminal/terminal.styles.d.ts.map +1 -1
  248. package/dist/components/agent-tools/terminal/terminal.styles.js +3 -0
  249. package/dist/components/agent-tools/terminal/terminal.styles.js.map +1 -1
  250. package/dist/components/agent-tools/test-results/test-results.class.d.ts +1 -3
  251. package/dist/components/agent-tools/test-results/test-results.class.d.ts.map +1 -1
  252. package/dist/components/agent-tools/test-results/test-results.class.js +22 -37
  253. package/dist/components/agent-tools/test-results/test-results.class.js.map +1 -1
  254. package/dist/components/agent-tools/test-results/test-results.d.ts +3 -0
  255. package/dist/components/agent-tools/test-results/test-results.d.ts.map +1 -1
  256. package/dist/components/agent-tools/test-results/test-results.js +3 -0
  257. package/dist/components/agent-tools/test-results/test-results.js.map +1 -1
  258. package/dist/components/agent-tools/test-results/test-results.styles.d.ts.map +1 -1
  259. package/dist/components/agent-tools/test-results/test-results.styles.js +2 -0
  260. package/dist/components/agent-tools/test-results/test-results.styles.js.map +1 -1
  261. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts.map +1 -1
  262. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.js +15 -5
  263. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.js.map +1 -1
  264. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.d.ts.map +1 -1
  265. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +6 -2
  266. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js.map +1 -1
  267. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.d.ts.map +1 -1
  268. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js +18 -29
  269. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js.map +1 -1
  270. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.styles.d.ts.map +1 -1
  271. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.styles.js +5 -0
  272. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.styles.js.map +1 -1
  273. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +2 -1
  274. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts.map +1 -1
  275. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +11 -5
  276. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js.map +1 -1
  277. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.styles.js +1 -1
  278. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts +7 -0
  279. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts.map +1 -1
  280. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +24 -16
  281. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js.map +1 -1
  282. package/dist/components/agent-tools/tool-param-form/tool-param-form.styles.d.ts.map +1 -1
  283. package/dist/components/agent-tools/tool-param-form/tool-param-form.styles.js +3 -0
  284. package/dist/components/agent-tools/tool-param-form/tool-param-form.styles.js.map +1 -1
  285. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.d.ts +10 -1
  286. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.d.ts.map +1 -1
  287. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.js +18 -4
  288. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.js.map +1 -1
  289. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.d.ts.map +1 -1
  290. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +17 -9
  291. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js.map +1 -1
  292. package/dist/components/agent-tools/tool-result-view/registry.d.ts +38 -1
  293. package/dist/components/agent-tools/tool-result-view/registry.d.ts.map +1 -1
  294. package/dist/components/agent-tools/tool-result-view/registry.js.map +1 -1
  295. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts +16 -1
  296. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts.map +1 -1
  297. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +33 -1
  298. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js.map +1 -1
  299. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.d.ts +3 -0
  300. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.d.ts.map +1 -1
  301. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +29 -24
  302. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js.map +1 -1
  303. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.styles.d.ts.map +1 -1
  304. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.styles.js +6 -3
  305. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.styles.js.map +1 -1
  306. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +12 -5
  307. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts.map +1 -1
  308. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +60 -37
  309. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js.map +1 -1
  310. package/dist/components/agent-tools/tool-timeline/tool-timeline.d.ts +4 -0
  311. package/dist/components/agent-tools/tool-timeline/tool-timeline.d.ts.map +1 -1
  312. package/dist/components/agent-tools/tool-timeline/tool-timeline.js +4 -0
  313. package/dist/components/agent-tools/tool-timeline/tool-timeline.js.map +1 -1
  314. package/dist/components/agent-tools/tool-timeline/tool-timeline.styles.d.ts.map +1 -1
  315. package/dist/components/agent-tools/tool-timeline/tool-timeline.styles.js +12 -8
  316. package/dist/components/agent-tools/tool-timeline/tool-timeline.styles.js.map +1 -1
  317. package/dist/components/agent-tools/trace-tree/trace-tree.class.d.ts +14 -1
  318. package/dist/components/agent-tools/trace-tree/trace-tree.class.d.ts.map +1 -1
  319. package/dist/components/agent-tools/trace-tree/trace-tree.class.js +177 -53
  320. package/dist/components/agent-tools/trace-tree/trace-tree.class.js.map +1 -1
  321. package/dist/components/agent-tools/trace-tree/trace-tree.styles.d.ts.map +1 -1
  322. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +111 -24
  323. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js.map +1 -1
  324. package/dist/components/charts/chart/box-plot.class.d.ts +7 -0
  325. package/dist/components/charts/chart/box-plot.class.d.ts.map +1 -1
  326. package/dist/components/charts/chart/box-plot.class.js +92 -35
  327. package/dist/components/charts/chart/box-plot.class.js.map +1 -1
  328. package/dist/components/charts/chart/box-plot.styles.d.ts.map +1 -1
  329. package/dist/components/charts/chart/box-plot.styles.js +7 -0
  330. package/dist/components/charts/chart/box-plot.styles.js.map +1 -1
  331. package/dist/components/charts/chart/chart-colors.d.ts +17 -0
  332. package/dist/components/charts/chart/chart-colors.d.ts.map +1 -0
  333. package/dist/components/charts/chart/chart-colors.js +77 -0
  334. package/dist/components/charts/chart/chart-colors.js.map +1 -0
  335. package/dist/components/charts/chart/chart-loader.d.ts +39 -0
  336. package/dist/components/charts/chart/chart-loader.d.ts.map +1 -1
  337. package/dist/components/charts/chart/chart-loader.js +53 -0
  338. package/dist/components/charts/chart/chart-loader.js.map +1 -1
  339. package/dist/components/charts/chart/chart.class.d.ts +128 -13
  340. package/dist/components/charts/chart/chart.class.d.ts.map +1 -1
  341. package/dist/components/charts/chart/chart.class.js +469 -80
  342. package/dist/components/charts/chart/chart.class.js.map +1 -1
  343. package/dist/components/charts/chart/chart.styles.d.ts.map +1 -1
  344. package/dist/components/charts/chart/chart.styles.js +28 -0
  345. package/dist/components/charts/chart/chart.styles.js.map +1 -1
  346. package/dist/components/charts/chart/histogram-bin.d.ts +3 -2
  347. package/dist/components/charts/chart/histogram-bin.d.ts.map +1 -1
  348. package/dist/components/charts/chart/histogram-bin.js +17 -3
  349. package/dist/components/charts/chart/histogram-bin.js.map +1 -1
  350. package/dist/components/charts/chart/histogram.class.d.ts.map +1 -1
  351. package/dist/components/charts/chart/histogram.class.js +7 -3
  352. package/dist/components/charts/chart/histogram.class.js.map +1 -1
  353. package/dist/components/charts/chart/lite-chart.class.d.ts +31 -16
  354. package/dist/components/charts/chart/lite-chart.class.d.ts.map +1 -1
  355. package/dist/components/charts/chart/lite-chart.class.js +290 -96
  356. package/dist/components/charts/chart/lite-chart.class.js.map +1 -1
  357. package/dist/components/charts/chart/lite-chart.styles.d.ts.map +1 -1
  358. package/dist/components/charts/chart/lite-chart.styles.js +17 -1
  359. package/dist/components/charts/chart/lite-chart.styles.js.map +1 -1
  360. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +12 -13
  361. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts.map +1 -1
  362. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +60 -47
  363. package/dist/components/conversation/agent-workspace/agent-workspace.class.js.map +1 -1
  364. package/dist/components/conversation/agent-workspace/agent-workspace.d.ts +11 -0
  365. package/dist/components/conversation/agent-workspace/agent-workspace.d.ts.map +1 -1
  366. package/dist/components/conversation/agent-workspace/agent-workspace.js +11 -0
  367. package/dist/components/conversation/agent-workspace/agent-workspace.js.map +1 -1
  368. package/dist/components/conversation/agent-workspace/agent-workspace.styles.d.ts.map +1 -1
  369. package/dist/components/conversation/agent-workspace/agent-workspace.styles.js +4 -1
  370. package/dist/components/conversation/agent-workspace/agent-workspace.styles.js.map +1 -1
  371. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +2 -7
  372. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts.map +1 -1
  373. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +36 -63
  374. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js.map +1 -1
  375. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts +3 -0
  376. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts.map +1 -1
  377. package/dist/components/conversation/branch-picker/branch-picker.class.js +14 -2
  378. package/dist/components/conversation/branch-picker/branch-picker.class.js.map +1 -1
  379. package/dist/components/conversation/branch-picker/branch-picker.styles.d.ts.map +1 -1
  380. package/dist/components/conversation/branch-picker/branch-picker.styles.js +2 -0
  381. package/dist/components/conversation/branch-picker/branch-picker.styles.js.map +1 -1
  382. package/dist/components/conversation/chat-composer/chat-composer.class.d.ts +2 -16
  383. package/dist/components/conversation/chat-composer/chat-composer.class.d.ts.map +1 -1
  384. package/dist/components/conversation/chat-composer/chat-composer.class.js +6 -38
  385. package/dist/components/conversation/chat-composer/chat-composer.class.js.map +1 -1
  386. package/dist/components/conversation/chat-message/chat-message.class.d.ts +11 -0
  387. package/dist/components/conversation/chat-message/chat-message.class.d.ts.map +1 -1
  388. package/dist/components/conversation/chat-message/chat-message.class.js +16 -4
  389. package/dist/components/conversation/chat-message/chat-message.class.js.map +1 -1
  390. package/dist/components/conversation/chat-message/chat-message.styles.d.ts.map +1 -1
  391. package/dist/components/conversation/chat-message/chat-message.styles.js +22 -11
  392. package/dist/components/conversation/chat-message/chat-message.styles.js.map +1 -1
  393. package/dist/components/conversation/chat-viewport/chat-viewport.class.d.ts +3 -7
  394. package/dist/components/conversation/chat-viewport/chat-viewport.class.d.ts.map +1 -1
  395. package/dist/components/conversation/chat-viewport/chat-viewport.class.js +9 -28
  396. package/dist/components/conversation/chat-viewport/chat-viewport.class.js.map +1 -1
  397. package/dist/components/conversation/checkpoint/checkpoint.class.d.ts +7 -2
  398. package/dist/components/conversation/checkpoint/checkpoint.class.d.ts.map +1 -1
  399. package/dist/components/conversation/checkpoint/checkpoint.class.js +4 -11
  400. package/dist/components/conversation/checkpoint/checkpoint.class.js.map +1 -1
  401. package/dist/components/conversation/checkpoint/checkpoint.styles.js +1 -1
  402. package/dist/components/conversation/code-block/code-block-core.class.d.ts +5 -6
  403. package/dist/components/conversation/code-block/code-block-core.class.d.ts.map +1 -1
  404. package/dist/components/conversation/code-block/code-block-core.class.js +55 -13
  405. package/dist/components/conversation/code-block/code-block-core.class.js.map +1 -1
  406. package/dist/components/conversation/code-block/code-block-shared.d.ts +5 -1
  407. package/dist/components/conversation/code-block/code-block-shared.d.ts.map +1 -1
  408. package/dist/components/conversation/code-block/code-block-shared.js +22 -6
  409. package/dist/components/conversation/code-block/code-block-shared.js.map +1 -1
  410. package/dist/components/conversation/code-block/code-block.class.d.ts +7 -6
  411. package/dist/components/conversation/code-block/code-block.class.d.ts.map +1 -1
  412. package/dist/components/conversation/code-block/code-block.class.js +68 -29
  413. package/dist/components/conversation/code-block/code-block.class.js.map +1 -1
  414. package/dist/components/conversation/code-block/code-block.styles.d.ts.map +1 -1
  415. package/dist/components/conversation/code-block/code-block.styles.js +12 -4
  416. package/dist/components/conversation/code-block/code-block.styles.js.map +1 -1
  417. package/dist/components/conversation/conversation-item/conversation-item.class.d.ts +10 -0
  418. package/dist/components/conversation/conversation-item/conversation-item.class.d.ts.map +1 -1
  419. package/dist/components/conversation/conversation-item/conversation-item.class.js +52 -46
  420. package/dist/components/conversation/conversation-item/conversation-item.class.js.map +1 -1
  421. package/dist/components/conversation/conversation-item/conversation-item.styles.d.ts.map +1 -1
  422. package/dist/components/conversation/conversation-item/conversation-item.styles.js +12 -0
  423. package/dist/components/conversation/conversation-item/conversation-item.styles.js.map +1 -1
  424. package/dist/components/conversation/generation-status/generation-status.class.d.ts.map +1 -1
  425. package/dist/components/conversation/generation-status/generation-status.class.js +8 -0
  426. package/dist/components/conversation/generation-status/generation-status.class.js.map +1 -1
  427. package/dist/components/conversation/generation-status/generation-status.styles.d.ts.map +1 -1
  428. package/dist/components/conversation/generation-status/generation-status.styles.js +4 -1
  429. package/dist/components/conversation/generation-status/generation-status.styles.js.map +1 -1
  430. package/dist/components/conversation/handoff-divider/handoff-divider.class.d.ts +0 -1
  431. package/dist/components/conversation/handoff-divider/handoff-divider.class.d.ts.map +1 -1
  432. package/dist/components/conversation/handoff-divider/handoff-divider.class.js +1 -2
  433. package/dist/components/conversation/handoff-divider/handoff-divider.class.js.map +1 -1
  434. package/dist/components/conversation/handoff-divider/handoff-divider.d.ts +1 -0
  435. package/dist/components/conversation/handoff-divider/handoff-divider.d.ts.map +1 -1
  436. package/dist/components/conversation/handoff-divider/handoff-divider.js +1 -0
  437. package/dist/components/conversation/handoff-divider/handoff-divider.js.map +1 -1
  438. package/dist/components/conversation/index.d.ts +36 -0
  439. package/dist/components/conversation/index.d.ts.map +1 -0
  440. package/dist/components/conversation/index.js +34 -0
  441. package/dist/components/conversation/index.js.map +1 -0
  442. package/dist/components/conversation/markdown/markdown-core.class.d.ts +13 -0
  443. package/dist/components/conversation/markdown/markdown-core.class.d.ts.map +1 -1
  444. package/dist/components/conversation/markdown/markdown-core.class.js +32 -18
  445. package/dist/components/conversation/markdown/markdown-core.class.js.map +1 -1
  446. package/dist/components/conversation/markdown/markdown-shared.js +1 -1
  447. package/dist/components/conversation/markdown/markdown-shared.js.map +1 -1
  448. package/dist/components/conversation/markdown/markdown.class.d.ts +13 -0
  449. package/dist/components/conversation/markdown/markdown.class.d.ts.map +1 -1
  450. package/dist/components/conversation/markdown/markdown.class.js +37 -15
  451. package/dist/components/conversation/markdown/markdown.class.js.map +1 -1
  452. package/dist/components/conversation/markdown/markdown.styles.d.ts.map +1 -1
  453. package/dist/components/conversation/markdown/markdown.styles.js +20 -13
  454. package/dist/components/conversation/markdown/markdown.styles.js.map +1 -1
  455. package/dist/components/conversation/message-actions/message-actions.class.d.ts +2 -0
  456. package/dist/components/conversation/message-actions/message-actions.class.d.ts.map +1 -1
  457. package/dist/components/conversation/message-actions/message-actions.class.js +37 -6
  458. package/dist/components/conversation/message-actions/message-actions.class.js.map +1 -1
  459. package/dist/components/conversation/message-actions/message-actions.styles.d.ts.map +1 -1
  460. package/dist/components/conversation/message-actions/message-actions.styles.js +0 -9
  461. package/dist/components/conversation/message-actions/message-actions.styles.js.map +1 -1
  462. package/dist/components/conversation/message-feedback/message-feedback.class.d.ts +2 -2
  463. package/dist/components/conversation/message-feedback/message-feedback.class.d.ts.map +1 -1
  464. package/dist/components/conversation/message-feedback/message-feedback.class.js +17 -3
  465. package/dist/components/conversation/message-feedback/message-feedback.class.js.map +1 -1
  466. package/dist/components/conversation/message-feedback/message-feedback.d.ts +2 -0
  467. package/dist/components/conversation/message-feedback/message-feedback.d.ts.map +1 -1
  468. package/dist/components/conversation/message-feedback/message-feedback.js +2 -0
  469. package/dist/components/conversation/message-feedback/message-feedback.js.map +1 -1
  470. package/dist/components/conversation/message-feedback/message-feedback.styles.d.ts.map +1 -1
  471. package/dist/components/conversation/message-feedback/message-feedback.styles.js +16 -5
  472. package/dist/components/conversation/message-feedback/message-feedback.styles.js.map +1 -1
  473. package/dist/components/conversation/message-parts/message-parts.class.d.ts +91 -0
  474. package/dist/components/conversation/message-parts/message-parts.class.d.ts.map +1 -0
  475. package/dist/components/conversation/message-parts/message-parts.class.js +230 -0
  476. package/dist/components/conversation/message-parts/message-parts.class.js.map +1 -0
  477. package/dist/components/conversation/message-parts/message-parts.d.ts +11 -0
  478. package/dist/components/conversation/message-parts/message-parts.d.ts.map +1 -0
  479. package/dist/components/conversation/message-parts/message-parts.js +14 -0
  480. package/dist/components/conversation/message-parts/message-parts.js.map +1 -0
  481. package/dist/components/conversation/message-parts/message-parts.styles.d.ts +2 -0
  482. package/dist/components/conversation/message-parts/message-parts.styles.d.ts.map +1 -0
  483. package/dist/components/conversation/message-parts/message-parts.styles.js +67 -0
  484. package/dist/components/conversation/message-parts/message-parts.styles.js.map +1 -0
  485. package/dist/components/conversation/model-select/model-select.class.d.ts +5 -1
  486. package/dist/components/conversation/model-select/model-select.class.d.ts.map +1 -1
  487. package/dist/components/conversation/model-select/model-select.class.js +17 -34
  488. package/dist/components/conversation/model-select/model-select.class.js.map +1 -1
  489. package/dist/components/conversation/model-select/model-select.styles.d.ts.map +1 -1
  490. package/dist/components/conversation/model-select/model-select.styles.js +8 -3
  491. package/dist/components/conversation/model-select/model-select.styles.js.map +1 -1
  492. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.d.ts.map +1 -1
  493. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js +7 -2
  494. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js.map +1 -1
  495. package/dist/components/conversation/model-settings-panel/model-settings-panel.styles.js +2 -2
  496. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +148 -0
  497. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts.map +1 -0
  498. package/dist/components/conversation/prompt-input/prompt-input.class.js +375 -0
  499. package/dist/components/conversation/prompt-input/prompt-input.class.js.map +1 -0
  500. package/dist/components/conversation/prompt-input/prompt-input.d.ts +10 -0
  501. package/dist/components/conversation/prompt-input/prompt-input.d.ts.map +1 -0
  502. package/dist/components/conversation/prompt-input/prompt-input.js +13 -0
  503. package/dist/components/conversation/prompt-input/prompt-input.js.map +1 -0
  504. package/dist/components/conversation/prompt-input/prompt-input.styles.d.ts +2 -0
  505. package/dist/components/conversation/prompt-input/prompt-input.styles.d.ts.map +1 -0
  506. package/dist/components/conversation/prompt-input/prompt-input.styles.js +74 -0
  507. package/dist/components/conversation/prompt-input/prompt-input.styles.js.map +1 -0
  508. package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +59 -0
  509. package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts.map +1 -0
  510. package/dist/components/conversation/prompt-queue/prompt-queue.class.js +145 -0
  511. package/dist/components/conversation/prompt-queue/prompt-queue.class.js.map +1 -0
  512. package/dist/components/conversation/prompt-queue/prompt-queue.d.ts +4 -0
  513. package/dist/components/conversation/prompt-queue/prompt-queue.d.ts.map +1 -0
  514. package/dist/components/conversation/prompt-queue/prompt-queue.js +7 -0
  515. package/dist/components/conversation/prompt-queue/prompt-queue.js.map +1 -0
  516. package/dist/components/conversation/prompt-queue/prompt-queue.styles.d.ts +2 -0
  517. package/dist/components/conversation/prompt-queue/prompt-queue.styles.d.ts.map +1 -0
  518. package/dist/components/conversation/prompt-queue/prompt-queue.styles.js +74 -0
  519. package/dist/components/conversation/prompt-queue/prompt-queue.styles.js.map +1 -0
  520. package/dist/components/conversation/push-to-talk/push-to-talk.class.d.ts +7 -1
  521. package/dist/components/conversation/push-to-talk/push-to-talk.class.d.ts.map +1 -1
  522. package/dist/components/conversation/push-to-talk/push-to-talk.class.js +40 -14
  523. package/dist/components/conversation/push-to-talk/push-to-talk.class.js.map +1 -1
  524. package/dist/components/conversation/push-to-talk/push-to-talk.styles.d.ts.map +1 -1
  525. package/dist/components/conversation/push-to-talk/push-to-talk.styles.js +4 -0
  526. package/dist/components/conversation/push-to-talk/push-to-talk.styles.js.map +1 -1
  527. package/dist/components/conversation/realtime-session/realtime-session.class.d.ts +66 -0
  528. package/dist/components/conversation/realtime-session/realtime-session.class.d.ts.map +1 -0
  529. package/dist/components/conversation/realtime-session/realtime-session.class.js +159 -0
  530. package/dist/components/conversation/realtime-session/realtime-session.class.js.map +1 -0
  531. package/dist/components/conversation/realtime-session/realtime-session.d.ts +6 -0
  532. package/dist/components/conversation/realtime-session/realtime-session.d.ts.map +1 -0
  533. package/dist/components/conversation/realtime-session/realtime-session.js +9 -0
  534. package/dist/components/conversation/realtime-session/realtime-session.js.map +1 -0
  535. package/dist/components/conversation/realtime-session/realtime-session.styles.d.ts +2 -0
  536. package/dist/components/conversation/realtime-session/realtime-session.styles.d.ts.map +1 -0
  537. package/dist/components/conversation/realtime-session/realtime-session.styles.js +20 -0
  538. package/dist/components/conversation/realtime-session/realtime-session.styles.js.map +1 -0
  539. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts +69 -0
  540. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts.map +1 -0
  541. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +268 -0
  542. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js.map +1 -0
  543. package/dist/components/conversation/selection-toolbar/selection-toolbar.d.ts +3 -0
  544. package/dist/components/conversation/selection-toolbar/selection-toolbar.d.ts.map +1 -0
  545. package/dist/components/conversation/selection-toolbar/selection-toolbar.js +6 -0
  546. package/dist/components/conversation/selection-toolbar/selection-toolbar.js.map +1 -0
  547. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.d.ts +2 -0
  548. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.d.ts.map +1 -0
  549. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js +62 -0
  550. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js.map +1 -0
  551. package/dist/components/conversation/stream-status/stream-status.styles.d.ts.map +1 -1
  552. package/dist/components/conversation/stream-status/stream-status.styles.js +10 -0
  553. package/dist/components/conversation/stream-status/stream-status.styles.js.map +1 -1
  554. package/dist/components/conversation/streaming-text/streaming-text.class.d.ts +1 -0
  555. package/dist/components/conversation/streaming-text/streaming-text.class.d.ts.map +1 -1
  556. package/dist/components/conversation/streaming-text/streaming-text.class.js +6 -0
  557. package/dist/components/conversation/streaming-text/streaming-text.class.js.map +1 -1
  558. package/dist/components/conversation/suggestion-chips/suggestion-chips.class.d.ts +2 -0
  559. package/dist/components/conversation/suggestion-chips/suggestion-chips.class.d.ts.map +1 -1
  560. package/dist/components/conversation/suggestion-chips/suggestion-chips.class.js +16 -1
  561. package/dist/components/conversation/suggestion-chips/suggestion-chips.class.js.map +1 -1
  562. package/dist/components/conversation/thread-list/thread-list.class.d.ts +7 -3
  563. package/dist/components/conversation/thread-list/thread-list.class.d.ts.map +1 -1
  564. package/dist/components/conversation/thread-list/thread-list.class.js +72 -42
  565. package/dist/components/conversation/thread-list/thread-list.class.js.map +1 -1
  566. package/dist/components/conversation/thread-list/thread-list.d.ts.map +1 -1
  567. package/dist/components/conversation/thread-list/thread-list.js +2 -2
  568. package/dist/components/conversation/thread-list/thread-list.js.map +1 -1
  569. package/dist/components/conversation/thread-list/thread-list.styles.d.ts.map +1 -1
  570. package/dist/components/conversation/thread-list/thread-list.styles.js +3 -0
  571. package/dist/components/conversation/thread-list/thread-list.styles.js.map +1 -1
  572. package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts.map +1 -1
  573. package/dist/components/conversation/transcript-feed/transcript-feed.class.js +14 -21
  574. package/dist/components/conversation/transcript-feed/transcript-feed.class.js.map +1 -1
  575. package/dist/components/conversation/transcript-feed/transcript-feed.styles.d.ts.map +1 -1
  576. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +16 -1
  577. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js.map +1 -1
  578. package/dist/components/conversation/typing-indicator/typing-indicator.class.d.ts +4 -2
  579. package/dist/components/conversation/typing-indicator/typing-indicator.class.d.ts.map +1 -1
  580. package/dist/components/conversation/typing-indicator/typing-indicator.class.js +4 -2
  581. package/dist/components/conversation/typing-indicator/typing-indicator.class.js.map +1 -1
  582. package/dist/components/conversation/typing-indicator/typing-indicator.styles.d.ts.map +1 -1
  583. package/dist/components/conversation/typing-indicator/typing-indicator.styles.js +35 -21
  584. package/dist/components/conversation/typing-indicator/typing-indicator.styles.js.map +1 -1
  585. package/dist/components/conversation/usage-badge/usage-badge.class.d.ts +2 -1
  586. package/dist/components/conversation/usage-badge/usage-badge.class.d.ts.map +1 -1
  587. package/dist/components/conversation/usage-badge/usage-badge.class.js +30 -7
  588. package/dist/components/conversation/usage-badge/usage-badge.class.js.map +1 -1
  589. package/dist/components/conversation/usage-badge/usage-badge.styles.d.ts.map +1 -1
  590. package/dist/components/conversation/usage-badge/usage-badge.styles.js +21 -1
  591. package/dist/components/conversation/usage-badge/usage-badge.styles.js.map +1 -1
  592. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +24 -2
  593. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts.map +1 -1
  594. package/dist/components/conversation/voice-picker/voice-picker.class.js +97 -64
  595. package/dist/components/conversation/voice-picker/voice-picker.class.js.map +1 -1
  596. package/dist/components/conversation/voice-picker/voice-picker.styles.d.ts.map +1 -1
  597. package/dist/components/conversation/voice-picker/voice-picker.styles.js +22 -7
  598. package/dist/components/conversation/voice-picker/voice-picker.styles.js.map +1 -1
  599. package/dist/components/conversation/widget-renderer/registry.d.ts +6 -0
  600. package/dist/components/conversation/widget-renderer/registry.d.ts.map +1 -1
  601. package/dist/components/conversation/widget-renderer/registry.js.map +1 -1
  602. package/dist/components/conversation/widget-renderer/resolve.d.ts +18 -0
  603. package/dist/components/conversation/widget-renderer/resolve.d.ts.map +1 -1
  604. package/dist/components/conversation/widget-renderer/resolve.js +66 -4
  605. package/dist/components/conversation/widget-renderer/resolve.js.map +1 -1
  606. package/dist/components/conversation/widget-renderer/widget-renderer.class.d.ts +16 -1
  607. package/dist/components/conversation/widget-renderer/widget-renderer.class.d.ts.map +1 -1
  608. package/dist/components/conversation/widget-renderer/widget-renderer.class.js +70 -7
  609. package/dist/components/conversation/widget-renderer/widget-renderer.class.js.map +1 -1
  610. package/dist/components/conversation/widget-renderer/widget-renderer.styles.d.ts.map +1 -1
  611. package/dist/components/conversation/widget-renderer/widget-renderer.styles.js +6 -0
  612. package/dist/components/conversation/widget-renderer/widget-renderer.styles.js.map +1 -1
  613. package/dist/components/data/calendar/calendar.class.d.ts +3 -8
  614. package/dist/components/data/calendar/calendar.class.d.ts.map +1 -1
  615. package/dist/components/data/calendar/calendar.class.js +10 -11
  616. package/dist/components/data/calendar/calendar.class.js.map +1 -1
  617. package/dist/components/data/calendar/calendar.styles.d.ts.map +1 -1
  618. package/dist/components/data/calendar/calendar.styles.js +6 -1
  619. package/dist/components/data/calendar/calendar.styles.js.map +1 -1
  620. package/dist/components/data/context-meter/context-meter.class.d.ts +4 -3
  621. package/dist/components/data/context-meter/context-meter.class.d.ts.map +1 -1
  622. package/dist/components/data/context-meter/context-meter.class.js +34 -30
  623. package/dist/components/data/context-meter/context-meter.class.js.map +1 -1
  624. package/dist/components/data/document-library/document-library.class.d.ts +0 -7
  625. package/dist/components/data/document-library/document-library.class.d.ts.map +1 -1
  626. package/dist/components/data/document-library/document-library.class.js +15 -15
  627. package/dist/components/data/document-library/document-library.class.js.map +1 -1
  628. package/dist/components/data/env-list/env-list.class.d.ts +8 -1
  629. package/dist/components/data/env-list/env-list.class.d.ts.map +1 -1
  630. package/dist/components/data/env-list/env-list.class.js +13 -20
  631. package/dist/components/data/env-list/env-list.class.js.map +1 -1
  632. package/dist/components/data/env-list/env-list.d.ts +1 -0
  633. package/dist/components/data/env-list/env-list.d.ts.map +1 -1
  634. package/dist/components/data/env-list/env-list.js +1 -0
  635. package/dist/components/data/env-list/env-list.js.map +1 -1
  636. package/dist/components/data/env-list/env-list.styles.d.ts.map +1 -1
  637. package/dist/components/data/env-list/env-list.styles.js +3 -0
  638. package/dist/components/data/env-list/env-list.styles.js.map +1 -1
  639. package/dist/components/data/file-tree/file-tree.class.d.ts +0 -2
  640. package/dist/components/data/file-tree/file-tree.class.d.ts.map +1 -1
  641. package/dist/components/data/file-tree/file-tree.class.js +8 -8
  642. package/dist/components/data/file-tree/file-tree.class.js.map +1 -1
  643. package/dist/components/data/file-tree/file-tree.d.ts +2 -0
  644. package/dist/components/data/file-tree/file-tree.d.ts.map +1 -1
  645. package/dist/components/data/file-tree/file-tree.js +2 -0
  646. package/dist/components/data/file-tree/file-tree.js.map +1 -1
  647. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +13 -7
  648. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts.map +1 -1
  649. package/dist/components/data/flow-canvas/flow-canvas.class.js +106 -28
  650. package/dist/components/data/flow-canvas/flow-canvas.class.js.map +1 -1
  651. package/dist/components/data/flow-canvas/flow-canvas.styles.d.ts.map +1 -1
  652. package/dist/components/data/flow-canvas/flow-canvas.styles.js +22 -3
  653. package/dist/components/data/flow-canvas/flow-canvas.styles.js.map +1 -1
  654. package/dist/components/data/flow-controls/flow-controls.class.d.ts +1 -3
  655. package/dist/components/data/flow-controls/flow-controls.class.d.ts.map +1 -1
  656. package/dist/components/data/flow-controls/flow-controls.class.js +16 -16
  657. package/dist/components/data/flow-controls/flow-controls.class.js.map +1 -1
  658. package/dist/components/data/flow-minimap/flow-minimap.class.d.ts +6 -3
  659. package/dist/components/data/flow-minimap/flow-minimap.class.d.ts.map +1 -1
  660. package/dist/components/data/flow-minimap/flow-minimap.class.js +49 -15
  661. package/dist/components/data/flow-minimap/flow-minimap.class.js.map +1 -1
  662. package/dist/components/data/flow-node/flow-node.class.d.ts.map +1 -1
  663. package/dist/components/data/flow-node/flow-node.class.js +15 -4
  664. package/dist/components/data/flow-node/flow-node.class.js.map +1 -1
  665. package/dist/components/data/flow-run-overlay/flow-run-overlay.class.d.ts +3 -0
  666. package/dist/components/data/flow-run-overlay/flow-run-overlay.class.d.ts.map +1 -1
  667. package/dist/components/data/flow-run-overlay/flow-run-overlay.class.js +40 -13
  668. package/dist/components/data/flow-run-overlay/flow-run-overlay.class.js.map +1 -1
  669. package/dist/components/data/gauge/gauge.class.d.ts.map +1 -1
  670. package/dist/components/data/gauge/gauge.class.js +19 -16
  671. package/dist/components/data/gauge/gauge.class.js.map +1 -1
  672. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +16 -0
  673. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts.map +1 -1
  674. package/dist/components/data/graph-query-builder/graph-query-builder.class.js +119 -17
  675. package/dist/components/data/graph-query-builder/graph-query-builder.class.js.map +1 -1
  676. package/dist/components/data/graph-query-builder/graph-query-builder.styles.d.ts.map +1 -1
  677. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +20 -0
  678. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js.map +1 -1
  679. package/dist/components/data/heatmap/heatmap.class.d.ts +8 -19
  680. package/dist/components/data/heatmap/heatmap.class.d.ts.map +1 -1
  681. package/dist/components/data/heatmap/heatmap.class.js +240 -195
  682. package/dist/components/data/heatmap/heatmap.class.js.map +1 -1
  683. package/dist/components/data/heatmap/heatmap.styles.d.ts.map +1 -1
  684. package/dist/components/data/heatmap/heatmap.styles.js +2 -0
  685. package/dist/components/data/heatmap/heatmap.styles.js.map +1 -1
  686. package/dist/components/data/pagination/pagination.class.d.ts +4 -0
  687. package/dist/components/data/pagination/pagination.class.d.ts.map +1 -1
  688. package/dist/components/data/pagination/pagination.class.js +7 -0
  689. package/dist/components/data/pagination/pagination.class.js.map +1 -1
  690. package/dist/components/data/pagination/pagination.styles.d.ts.map +1 -1
  691. package/dist/components/data/pagination/pagination.styles.js +8 -6
  692. package/dist/components/data/pagination/pagination.styles.js.map +1 -1
  693. package/dist/components/data/query-builder/query-builder.class.d.ts +1 -0
  694. package/dist/components/data/query-builder/query-builder.class.d.ts.map +1 -1
  695. package/dist/components/data/query-builder/query-builder.class.js +15 -11
  696. package/dist/components/data/query-builder/query-builder.class.js.map +1 -1
  697. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +18 -14
  698. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts.map +1 -1
  699. package/dist/components/data/sequence-strip/sequence-strip.class.js +66 -13
  700. package/dist/components/data/sequence-strip/sequence-strip.class.js.map +1 -1
  701. package/dist/components/data/sequence-strip/sequence-strip.styles.d.ts.map +1 -1
  702. package/dist/components/data/sequence-strip/sequence-strip.styles.js +5 -0
  703. package/dist/components/data/sequence-strip/sequence-strip.styles.js.map +1 -1
  704. package/dist/components/data/sparkline/sparkline.class.d.ts.map +1 -1
  705. package/dist/components/data/sparkline/sparkline.class.js +6 -2
  706. package/dist/components/data/sparkline/sparkline.class.js.map +1 -1
  707. package/dist/components/data/stat/stat.class.d.ts.map +1 -1
  708. package/dist/components/data/stat/stat.class.js +10 -2
  709. package/dist/components/data/stat/stat.class.js.map +1 -1
  710. package/dist/components/data/stat/stat.styles.d.ts.map +1 -1
  711. package/dist/components/data/stat/stat.styles.js +24 -0
  712. package/dist/components/data/stat/stat.styles.js.map +1 -1
  713. package/dist/components/data/table/table.class.d.ts +129 -10
  714. package/dist/components/data/table/table.class.d.ts.map +1 -1
  715. package/dist/components/data/table/table.class.js +331 -46
  716. package/dist/components/data/table/table.class.js.map +1 -1
  717. package/dist/components/data/table/table.d.ts +3 -0
  718. package/dist/components/data/table/table.d.ts.map +1 -1
  719. package/dist/components/data/table/table.js +3 -0
  720. package/dist/components/data/table/table.js.map +1 -1
  721. package/dist/components/data/table/table.styles.d.ts.map +1 -1
  722. package/dist/components/data/table/table.styles.js +20 -2
  723. package/dist/components/data/table/table.styles.js.map +1 -1
  724. package/dist/components/data/timeline/timeline-item.class.d.ts.map +1 -1
  725. package/dist/components/data/timeline/timeline-item.class.js +9 -1
  726. package/dist/components/data/timeline/timeline-item.class.js.map +1 -1
  727. package/dist/components/data/timeline/timeline-item.styles.d.ts.map +1 -1
  728. package/dist/components/data/timeline/timeline-item.styles.js +4 -0
  729. package/dist/components/data/timeline/timeline-item.styles.js.map +1 -1
  730. package/dist/components/data/timeline/timeline.class.d.ts.map +1 -1
  731. package/dist/components/data/timeline/timeline.class.js +1 -1
  732. package/dist/components/data/timeline/timeline.class.js.map +1 -1
  733. package/dist/components/data/timeline/timeline.styles.d.ts.map +1 -1
  734. package/dist/components/data/timeline/timeline.styles.js +2 -0
  735. package/dist/components/data/timeline/timeline.styles.js.map +1 -1
  736. package/dist/components/data/tree/tree-item.d.ts +5 -0
  737. package/dist/components/data/tree/tree-item.d.ts.map +1 -1
  738. package/dist/components/data/tree/tree-node.class.d.ts +2 -0
  739. package/dist/components/data/tree/tree-node.class.d.ts.map +1 -1
  740. package/dist/components/data/tree/tree-node.class.js +25 -4
  741. package/dist/components/data/tree/tree-node.class.js.map +1 -1
  742. package/dist/components/data/tree/tree-node.styles.d.ts.map +1 -1
  743. package/dist/components/data/tree/tree-node.styles.js +11 -0
  744. package/dist/components/data/tree/tree-node.styles.js.map +1 -1
  745. package/dist/components/data/tree/tree.class.d.ts +17 -3
  746. package/dist/components/data/tree/tree.class.d.ts.map +1 -1
  747. package/dist/components/data/tree/tree.class.js +59 -19
  748. package/dist/components/data/tree/tree.class.js.map +1 -1
  749. package/dist/components/data/tree/tree.d.ts +2 -0
  750. package/dist/components/data/tree/tree.d.ts.map +1 -1
  751. package/dist/components/data/tree/tree.js +2 -0
  752. package/dist/components/data/tree/tree.js.map +1 -1
  753. package/dist/components/data/word-cloud/word-cloud.class.d.ts +22 -13
  754. package/dist/components/data/word-cloud/word-cloud.class.d.ts.map +1 -1
  755. package/dist/components/data/word-cloud/word-cloud.class.js +75 -28
  756. package/dist/components/data/word-cloud/word-cloud.class.js.map +1 -1
  757. package/dist/components/data/word-cloud/word-cloud.styles.d.ts.map +1 -1
  758. package/dist/components/data/word-cloud/word-cloud.styles.js +27 -15
  759. package/dist/components/data/word-cloud/word-cloud.styles.js.map +1 -1
  760. package/dist/components/forms/button/button.class.d.ts +66 -8
  761. package/dist/components/forms/button/button.class.d.ts.map +1 -1
  762. package/dist/components/forms/button/button.class.js +144 -18
  763. package/dist/components/forms/button/button.class.js.map +1 -1
  764. package/dist/components/forms/button/button.styles.d.ts.map +1 -1
  765. package/dist/components/forms/button/button.styles.js +13 -5
  766. package/dist/components/forms/button/button.styles.js.map +1 -1
  767. package/dist/components/forms/checkbox/checkbox.class.d.ts +3 -0
  768. package/dist/components/forms/checkbox/checkbox.class.d.ts.map +1 -1
  769. package/dist/components/forms/checkbox/checkbox.class.js +9 -1
  770. package/dist/components/forms/checkbox/checkbox.class.js.map +1 -1
  771. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +9 -1
  772. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts.map +1 -1
  773. package/dist/components/forms/checkbox-group/checkbox-group.class.js +91 -8
  774. package/dist/components/forms/checkbox-group/checkbox-group.class.js.map +1 -1
  775. package/dist/components/forms/code-editor/code-editor.class.d.ts +13 -1
  776. package/dist/components/forms/code-editor/code-editor.class.d.ts.map +1 -1
  777. package/dist/components/forms/code-editor/code-editor.class.js +22 -11
  778. package/dist/components/forms/code-editor/code-editor.class.js.map +1 -1
  779. package/dist/components/forms/code-editor/code-editor.styles.js +2 -2
  780. package/dist/components/forms/color-picker/color-picker.class.d.ts +8 -0
  781. package/dist/components/forms/color-picker/color-picker.class.d.ts.map +1 -1
  782. package/dist/components/forms/color-picker/color-picker.class.js +26 -0
  783. package/dist/components/forms/color-picker/color-picker.class.js.map +1 -1
  784. package/dist/components/forms/color-picker/color-picker.styles.d.ts.map +1 -1
  785. package/dist/components/forms/color-picker/color-picker.styles.js +7 -3
  786. package/dist/components/forms/color-picker/color-picker.styles.js.map +1 -1
  787. package/dist/components/forms/combobox/combobox.class.d.ts +65 -10
  788. package/dist/components/forms/combobox/combobox.class.d.ts.map +1 -1
  789. package/dist/components/forms/combobox/combobox.class.js +134 -34
  790. package/dist/components/forms/combobox/combobox.class.js.map +1 -1
  791. package/dist/components/forms/combobox/combobox.styles.d.ts.map +1 -1
  792. package/dist/components/forms/combobox/combobox.styles.js +24 -3
  793. package/dist/components/forms/combobox/combobox.styles.js.map +1 -1
  794. package/dist/components/forms/date-picker/date-input.class.d.ts +6 -0
  795. package/dist/components/forms/date-picker/date-input.class.d.ts.map +1 -1
  796. package/dist/components/forms/date-picker/date-input.class.js +10 -17
  797. package/dist/components/forms/date-picker/date-input.class.js.map +1 -1
  798. package/dist/components/forms/date-picker/date-input.styles.d.ts.map +1 -1
  799. package/dist/components/forms/date-picker/date-input.styles.js +9 -4
  800. package/dist/components/forms/date-picker/date-input.styles.js.map +1 -1
  801. package/dist/components/forms/date-picker/date-picker.class.d.ts +3 -0
  802. package/dist/components/forms/date-picker/date-picker.class.d.ts.map +1 -1
  803. package/dist/components/forms/date-picker/date-picker.class.js +3 -0
  804. package/dist/components/forms/date-picker/date-picker.class.js.map +1 -1
  805. package/dist/components/forms/date-picker/date-picker.styles.d.ts.map +1 -1
  806. package/dist/components/forms/date-picker/date-picker.styles.js +8 -5
  807. package/dist/components/forms/date-picker/date-picker.styles.js.map +1 -1
  808. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +7 -1
  809. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts.map +1 -1
  810. package/dist/components/forms/emoji-picker/emoji-picker.class.js +19 -7
  811. package/dist/components/forms/emoji-picker/emoji-picker.class.js.map +1 -1
  812. package/dist/components/forms/emoji-picker/emoji-picker.styles.d.ts.map +1 -1
  813. package/dist/components/forms/emoji-picker/emoji-picker.styles.js +16 -11
  814. package/dist/components/forms/emoji-picker/emoji-picker.styles.js.map +1 -1
  815. package/dist/components/forms/icon-button/icon-button.class.d.ts +19 -0
  816. package/dist/components/forms/icon-button/icon-button.class.d.ts.map +1 -1
  817. package/dist/components/forms/icon-button/icon-button.class.js +57 -2
  818. package/dist/components/forms/icon-button/icon-button.class.js.map +1 -1
  819. package/dist/components/forms/icon-button/icon-button.styles.js +2 -2
  820. package/dist/components/forms/input/input.class.d.ts +26 -1
  821. package/dist/components/forms/input/input.class.d.ts.map +1 -1
  822. package/dist/components/forms/input/input.class.js +56 -8
  823. package/dist/components/forms/input/input.class.js.map +1 -1
  824. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +6 -0
  825. package/dist/components/forms/locale-picker/locale-picker.class.d.ts.map +1 -1
  826. package/dist/components/forms/locale-picker/locale-picker.class.js +7 -5
  827. package/dist/components/forms/locale-picker/locale-picker.class.js.map +1 -1
  828. package/dist/components/forms/locale-picker/locale-picker.styles.d.ts.map +1 -1
  829. package/dist/components/forms/locale-picker/locale-picker.styles.js +11 -9
  830. package/dist/components/forms/locale-picker/locale-picker.styles.js.map +1 -1
  831. package/dist/components/forms/phone-input/phone-input.class.d.ts +11 -0
  832. package/dist/components/forms/phone-input/phone-input.class.d.ts.map +1 -1
  833. package/dist/components/forms/phone-input/phone-input.class.js +37 -20
  834. package/dist/components/forms/phone-input/phone-input.class.js.map +1 -1
  835. package/dist/components/forms/phone-input/phone-input.styles.d.ts.map +1 -1
  836. package/dist/components/forms/phone-input/phone-input.styles.js +23 -9
  837. package/dist/components/forms/phone-input/phone-input.styles.js.map +1 -1
  838. package/dist/components/forms/radio/radio-group.class.d.ts +5 -0
  839. package/dist/components/forms/radio/radio-group.class.d.ts.map +1 -1
  840. package/dist/components/forms/radio/radio-group.class.js +44 -5
  841. package/dist/components/forms/radio/radio-group.class.js.map +1 -1
  842. package/dist/components/forms/rubric-form/rubric-form.class.d.ts +1 -0
  843. package/dist/components/forms/rubric-form/rubric-form.class.d.ts.map +1 -1
  844. package/dist/components/forms/rubric-form/rubric-form.class.js +91 -20
  845. package/dist/components/forms/rubric-form/rubric-form.class.js.map +1 -1
  846. package/dist/components/forms/rubric-form/rubric-form.styles.d.ts.map +1 -1
  847. package/dist/components/forms/rubric-form/rubric-form.styles.js +7 -1
  848. package/dist/components/forms/rubric-form/rubric-form.styles.js.map +1 -1
  849. package/dist/components/forms/select/select.class.d.ts +26 -4
  850. package/dist/components/forms/select/select.class.d.ts.map +1 -1
  851. package/dist/components/forms/select/select.class.js +65 -28
  852. package/dist/components/forms/select/select.class.js.map +1 -1
  853. package/dist/components/forms/select/select.styles.d.ts.map +1 -1
  854. package/dist/components/forms/select/select.styles.js +8 -3
  855. package/dist/components/forms/select/select.styles.js.map +1 -1
  856. package/dist/components/forms/slider/slider.class.d.ts +8 -6
  857. package/dist/components/forms/slider/slider.class.d.ts.map +1 -1
  858. package/dist/components/forms/slider/slider.class.js +21 -28
  859. package/dist/components/forms/slider/slider.class.js.map +1 -1
  860. package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts +20 -0
  861. package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts.map +1 -1
  862. package/dist/components/forms/swatch-picker/swatch-picker.class.js +61 -14
  863. package/dist/components/forms/swatch-picker/swatch-picker.class.js.map +1 -1
  864. package/dist/components/forms/swatch-picker/swatch-picker.styles.d.ts.map +1 -1
  865. package/dist/components/forms/swatch-picker/swatch-picker.styles.js +38 -6
  866. package/dist/components/forms/swatch-picker/swatch-picker.styles.js.map +1 -1
  867. package/dist/components/forms/textarea/textarea.class.d.ts +35 -0
  868. package/dist/components/forms/textarea/textarea.class.d.ts.map +1 -1
  869. package/dist/components/forms/textarea/textarea.class.js +59 -8
  870. package/dist/components/forms/textarea/textarea.class.js.map +1 -1
  871. package/dist/components/forms/time-range/time-range.class.d.ts +19 -0
  872. package/dist/components/forms/time-range/time-range.class.d.ts.map +1 -1
  873. package/dist/components/forms/time-range/time-range.class.js +80 -23
  874. package/dist/components/forms/time-range/time-range.class.js.map +1 -1
  875. package/dist/components/forms/time-range/time-range.styles.d.ts.map +1 -1
  876. package/dist/components/forms/time-range/time-range.styles.js +60 -12
  877. package/dist/components/forms/time-range/time-range.styles.js.map +1 -1
  878. package/dist/components/forms/token-input/token-input.class.d.ts +14 -0
  879. package/dist/components/forms/token-input/token-input.class.d.ts.map +1 -1
  880. package/dist/components/forms/token-input/token-input.class.js +27 -4
  881. package/dist/components/forms/token-input/token-input.class.js.map +1 -1
  882. package/dist/components/forms/token-input/token-input.styles.d.ts.map +1 -1
  883. package/dist/components/forms/token-input/token-input.styles.js +35 -9
  884. package/dist/components/forms/token-input/token-input.styles.js.map +1 -1
  885. package/dist/components/layout/app-rail/app-rail-item.class.d.ts +3 -3
  886. package/dist/components/layout/app-rail/app-rail-item.class.d.ts.map +1 -1
  887. package/dist/components/layout/app-rail/app-rail-item.class.js +33 -24
  888. package/dist/components/layout/app-rail/app-rail-item.class.js.map +1 -1
  889. package/dist/components/layout/app-rail/app-rail-item.styles.d.ts.map +1 -1
  890. package/dist/components/layout/app-rail/app-rail-item.styles.js +18 -12
  891. package/dist/components/layout/app-rail/app-rail-item.styles.js.map +1 -1
  892. package/dist/components/layout/app-rail/app-rail.class.d.ts +25 -4
  893. package/dist/components/layout/app-rail/app-rail.class.d.ts.map +1 -1
  894. package/dist/components/layout/app-rail/app-rail.class.js +84 -4
  895. package/dist/components/layout/app-rail/app-rail.class.js.map +1 -1
  896. package/dist/components/layout/app-rail/app-rail.styles.d.ts.map +1 -1
  897. package/dist/components/layout/app-rail/app-rail.styles.js +21 -2
  898. package/dist/components/layout/app-rail/app-rail.styles.js.map +1 -1
  899. package/dist/components/layout/breadcrumb/breadcrumb-item.class.d.ts +4 -3
  900. package/dist/components/layout/breadcrumb/breadcrumb-item.class.d.ts.map +1 -1
  901. package/dist/components/layout/breadcrumb/breadcrumb-item.class.js +14 -9
  902. package/dist/components/layout/breadcrumb/breadcrumb-item.class.js.map +1 -1
  903. package/dist/components/layout/breadcrumb/breadcrumb-item.styles.d.ts.map +1 -1
  904. package/dist/components/layout/breadcrumb/breadcrumb-item.styles.js +16 -5
  905. package/dist/components/layout/breadcrumb/breadcrumb-item.styles.js.map +1 -1
  906. package/dist/components/layout/breadcrumb/breadcrumb.styles.d.ts.map +1 -1
  907. package/dist/components/layout/breadcrumb/breadcrumb.styles.js +15 -8
  908. package/dist/components/layout/breadcrumb/breadcrumb.styles.js.map +1 -1
  909. package/dist/components/layout/card/card.class.d.ts +22 -8
  910. package/dist/components/layout/card/card.class.d.ts.map +1 -1
  911. package/dist/components/layout/card/card.class.js +91 -40
  912. package/dist/components/layout/card/card.class.js.map +1 -1
  913. package/dist/components/layout/card/card.styles.d.ts.map +1 -1
  914. package/dist/components/layout/card/card.styles.js +33 -20
  915. package/dist/components/layout/card/card.styles.js.map +1 -1
  916. package/dist/components/layout/carousel/carousel.class.d.ts +8 -4
  917. package/dist/components/layout/carousel/carousel.class.d.ts.map +1 -1
  918. package/dist/components/layout/carousel/carousel.class.js +133 -65
  919. package/dist/components/layout/carousel/carousel.class.js.map +1 -1
  920. package/dist/components/layout/carousel/carousel.styles.d.ts.map +1 -1
  921. package/dist/components/layout/carousel/carousel.styles.js +38 -28
  922. package/dist/components/layout/carousel/carousel.styles.js.map +1 -1
  923. package/dist/components/layout/command-palette/command-palette.class.d.ts +31 -6
  924. package/dist/components/layout/command-palette/command-palette.class.d.ts.map +1 -1
  925. package/dist/components/layout/command-palette/command-palette.class.js +369 -66
  926. package/dist/components/layout/command-palette/command-palette.class.js.map +1 -1
  927. package/dist/components/layout/command-palette/command-palette.styles.d.ts.map +1 -1
  928. package/dist/components/layout/command-palette/command-palette.styles.js +164 -18
  929. package/dist/components/layout/command-palette/command-palette.styles.js.map +1 -1
  930. package/dist/components/layout/dashboard-grid/dashboard-grid.class.d.ts +12 -8
  931. package/dist/components/layout/dashboard-grid/dashboard-grid.class.d.ts.map +1 -1
  932. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +199 -111
  933. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js.map +1 -1
  934. package/dist/components/layout/dashboard-grid/dashboard-grid.styles.d.ts.map +1 -1
  935. package/dist/components/layout/dashboard-grid/dashboard-grid.styles.js +27 -18
  936. package/dist/components/layout/dashboard-grid/dashboard-grid.styles.js.map +1 -1
  937. package/dist/components/layout/details/accordion.class.d.ts +6 -3
  938. package/dist/components/layout/details/accordion.class.d.ts.map +1 -1
  939. package/dist/components/layout/details/accordion.class.js +47 -14
  940. package/dist/components/layout/details/accordion.class.js.map +1 -1
  941. package/dist/components/layout/dock-panel/dock-panel.class.d.ts +6 -6
  942. package/dist/components/layout/dock-panel/dock-panel.class.d.ts.map +1 -1
  943. package/dist/components/layout/dock-panel/dock-panel.class.js +76 -74
  944. package/dist/components/layout/dock-panel/dock-panel.class.js.map +1 -1
  945. package/dist/components/layout/dock-panel/dock-panel.styles.d.ts.map +1 -1
  946. package/dist/components/layout/dock-panel/dock-panel.styles.js +39 -36
  947. package/dist/components/layout/dock-panel/dock-panel.styles.js.map +1 -1
  948. package/dist/components/layout/drilldown-panel/drilldown-panel.class.d.ts.map +1 -1
  949. package/dist/components/layout/drilldown-panel/drilldown-panel.class.js +1 -14
  950. package/dist/components/layout/drilldown-panel/drilldown-panel.class.js.map +1 -1
  951. package/dist/components/layout/filter-bar/filter-bar.class.d.ts +17 -16
  952. package/dist/components/layout/filter-bar/filter-bar.class.d.ts.map +1 -1
  953. package/dist/components/layout/filter-bar/filter-bar.class.js +126 -60
  954. package/dist/components/layout/filter-bar/filter-bar.class.js.map +1 -1
  955. package/dist/components/layout/menu/menu.class.d.ts +24 -19
  956. package/dist/components/layout/menu/menu.class.d.ts.map +1 -1
  957. package/dist/components/layout/menu/menu.class.js +108 -76
  958. package/dist/components/layout/menu/menu.class.js.map +1 -1
  959. package/dist/components/layout/menu/menu.styles.d.ts.map +1 -1
  960. package/dist/components/layout/menu/menu.styles.js +28 -19
  961. package/dist/components/layout/menu/menu.styles.js.map +1 -1
  962. package/dist/components/layout/reorder-list/reorder-list.class.d.ts +5 -6
  963. package/dist/components/layout/reorder-list/reorder-list.class.d.ts.map +1 -1
  964. package/dist/components/layout/reorder-list/reorder-list.class.js +52 -32
  965. package/dist/components/layout/reorder-list/reorder-list.class.js.map +1 -1
  966. package/dist/components/layout/reorder-list/reorder-list.d.ts +2 -1
  967. package/dist/components/layout/reorder-list/reorder-list.d.ts.map +1 -1
  968. package/dist/components/layout/reorder-list/reorder-list.js +5 -4
  969. package/dist/components/layout/reorder-list/reorder-list.js.map +1 -1
  970. package/dist/components/layout/responsive-panel/responsive-panel.class.d.ts +11 -9
  971. package/dist/components/layout/responsive-panel/responsive-panel.class.d.ts.map +1 -1
  972. package/dist/components/layout/responsive-panel/responsive-panel.class.js +87 -45
  973. package/dist/components/layout/responsive-panel/responsive-panel.class.js.map +1 -1
  974. package/dist/components/layout/scroller/scroller.class.d.ts +6 -5
  975. package/dist/components/layout/scroller/scroller.class.d.ts.map +1 -1
  976. package/dist/components/layout/scroller/scroller.class.js +89 -37
  977. package/dist/components/layout/scroller/scroller.class.js.map +1 -1
  978. package/dist/components/layout/scroller/scroller.styles.d.ts.map +1 -1
  979. package/dist/components/layout/scroller/scroller.styles.js +27 -22
  980. package/dist/components/layout/scroller/scroller.styles.js.map +1 -1
  981. package/dist/components/layout/segmented/segmented.class.d.ts +19 -5
  982. package/dist/components/layout/segmented/segmented.class.d.ts.map +1 -1
  983. package/dist/components/layout/segmented/segmented.class.js +112 -34
  984. package/dist/components/layout/segmented/segmented.class.js.map +1 -1
  985. package/dist/components/layout/segmented/segmented.styles.d.ts.map +1 -1
  986. package/dist/components/layout/segmented/segmented.styles.js +26 -18
  987. package/dist/components/layout/segmented/segmented.styles.js.map +1 -1
  988. package/dist/components/layout/split/split.class.d.ts +34 -16
  989. package/dist/components/layout/split/split.class.d.ts.map +1 -1
  990. package/dist/components/layout/split/split.class.js +340 -190
  991. package/dist/components/layout/split/split.class.js.map +1 -1
  992. package/dist/components/layout/stepper/stepper.class.d.ts +14 -14
  993. package/dist/components/layout/stepper/stepper.class.d.ts.map +1 -1
  994. package/dist/components/layout/stepper/stepper.class.js +106 -74
  995. package/dist/components/layout/stepper/stepper.class.js.map +1 -1
  996. package/dist/components/layout/stepper/stepper.styles.d.ts.map +1 -1
  997. package/dist/components/layout/stepper/stepper.styles.js +24 -18
  998. package/dist/components/layout/stepper/stepper.styles.js.map +1 -1
  999. package/dist/components/layout/tabs/tabs.styles.d.ts.map +1 -1
  1000. package/dist/components/layout/tabs/tabs.styles.js +22 -15
  1001. package/dist/components/layout/tabs/tabs.styles.js.map +1 -1
  1002. package/dist/components/layout/virtual-list/virtual-list.class.d.ts +23 -19
  1003. package/dist/components/layout/virtual-list/virtual-list.class.d.ts.map +1 -1
  1004. package/dist/components/layout/virtual-list/virtual-list.class.js +171 -100
  1005. package/dist/components/layout/virtual-list/virtual-list.class.js.map +1 -1
  1006. package/dist/components/layout/widget/widget.class.d.ts +23 -6
  1007. package/dist/components/layout/widget/widget.class.d.ts.map +1 -1
  1008. package/dist/components/layout/widget/widget.class.js +188 -59
  1009. package/dist/components/layout/widget/widget.class.js.map +1 -1
  1010. package/dist/components/layout/widget/widget.styles.d.ts.map +1 -1
  1011. package/dist/components/layout/widget/widget.styles.js +65 -40
  1012. package/dist/components/layout/widget/widget.styles.js.map +1 -1
  1013. package/dist/components/media/animated-image/animated-image.class.d.ts +2 -0
  1014. package/dist/components/media/animated-image/animated-image.class.d.ts.map +1 -1
  1015. package/dist/components/media/animated-image/animated-image.class.js +17 -17
  1016. package/dist/components/media/animated-image/animated-image.class.js.map +1 -1
  1017. package/dist/components/media/animation/animation.class.d.ts +3 -0
  1018. package/dist/components/media/animation/animation.class.d.ts.map +1 -1
  1019. package/dist/components/media/animation/animation.class.js +35 -21
  1020. package/dist/components/media/animation/animation.class.js.map +1 -1
  1021. package/dist/components/media/attachment-chip/attachment-chip.class.d.ts +4 -17
  1022. package/dist/components/media/attachment-chip/attachment-chip.class.d.ts.map +1 -1
  1023. package/dist/components/media/attachment-chip/attachment-chip.class.js +20 -50
  1024. package/dist/components/media/attachment-chip/attachment-chip.class.js.map +1 -1
  1025. package/dist/components/media/attachment-chip/attachment-chip.styles.d.ts.map +1 -1
  1026. package/dist/components/media/attachment-chip/attachment-chip.styles.js +9 -10
  1027. package/dist/components/media/attachment-chip/attachment-chip.styles.js.map +1 -1
  1028. package/dist/components/media/attachment-chip/file-size.d.ts +11 -0
  1029. package/dist/components/media/attachment-chip/file-size.d.ts.map +1 -0
  1030. package/dist/components/media/attachment-chip/file-size.js +28 -0
  1031. package/dist/components/media/attachment-chip/file-size.js.map +1 -0
  1032. package/dist/components/media/attachment-trigger/attachment-trigger.class.d.ts +7 -2
  1033. package/dist/components/media/attachment-trigger/attachment-trigger.class.d.ts.map +1 -1
  1034. package/dist/components/media/attachment-trigger/attachment-trigger.class.js +36 -19
  1035. package/dist/components/media/attachment-trigger/attachment-trigger.class.js.map +1 -1
  1036. package/dist/components/media/av-player/av-player.class.d.ts +5 -1
  1037. package/dist/components/media/av-player/av-player.class.d.ts.map +1 -1
  1038. package/dist/components/media/av-player/av-player.class.js +115 -38
  1039. package/dist/components/media/av-player/av-player.class.js.map +1 -1
  1040. package/dist/components/media/av-player/av-player.d.ts +1 -0
  1041. package/dist/components/media/av-player/av-player.d.ts.map +1 -1
  1042. package/dist/components/media/av-player/av-player.js +1 -0
  1043. package/dist/components/media/av-player/av-player.js.map +1 -1
  1044. package/dist/components/media/av-player/av-player.styles.d.ts.map +1 -1
  1045. package/dist/components/media/av-player/av-player.styles.js +2 -0
  1046. package/dist/components/media/av-player/av-player.styles.js.map +1 -1
  1047. package/dist/components/media/avatar-group/avatar-group.class.d.ts +3 -0
  1048. package/dist/components/media/avatar-group/avatar-group.class.d.ts.map +1 -1
  1049. package/dist/components/media/avatar-group/avatar-group.class.js +34 -6
  1050. package/dist/components/media/avatar-group/avatar-group.class.js.map +1 -1
  1051. package/dist/components/media/file-icon/file-icon.class.d.ts.map +1 -1
  1052. package/dist/components/media/file-icon/file-icon.class.js +5 -2
  1053. package/dist/components/media/file-icon/file-icon.class.js.map +1 -1
  1054. package/dist/components/media/file-input/file-input.class.d.ts +24 -10
  1055. package/dist/components/media/file-input/file-input.class.d.ts.map +1 -1
  1056. package/dist/components/media/file-input/file-input.class.js +69 -31
  1057. package/dist/components/media/file-input/file-input.class.js.map +1 -1
  1058. package/dist/components/media/file-input/file-input.styles.d.ts.map +1 -1
  1059. package/dist/components/media/file-input/file-input.styles.js +12 -0
  1060. package/dist/components/media/file-input/file-input.styles.js.map +1 -1
  1061. package/dist/components/media/flag/flag.class.d.ts +7 -3
  1062. package/dist/components/media/flag/flag.class.d.ts.map +1 -1
  1063. package/dist/components/media/flag/flag.class.js +29 -5
  1064. package/dist/components/media/flag/flag.class.js.map +1 -1
  1065. package/dist/components/media/flag/flag.styles.d.ts.map +1 -1
  1066. package/dist/components/media/flag/flag.styles.js +6 -0
  1067. package/dist/components/media/flag/flag.styles.js.map +1 -1
  1068. package/dist/components/media/image-comparer/image-comparer.class.d.ts +7 -0
  1069. package/dist/components/media/image-comparer/image-comparer.class.d.ts.map +1 -1
  1070. package/dist/components/media/image-comparer/image-comparer.class.js +17 -1
  1071. package/dist/components/media/image-comparer/image-comparer.class.js.map +1 -1
  1072. package/dist/components/media/image-viewer/image-viewer.class.d.ts +12 -2
  1073. package/dist/components/media/image-viewer/image-viewer.class.d.ts.map +1 -1
  1074. package/dist/components/media/image-viewer/image-viewer.class.js +60 -15
  1075. package/dist/components/media/image-viewer/image-viewer.class.js.map +1 -1
  1076. package/dist/components/media/image-viewer/image-viewer.styles.d.ts.map +1 -1
  1077. package/dist/components/media/image-viewer/image-viewer.styles.js +21 -7
  1078. package/dist/components/media/image-viewer/image-viewer.styles.js.map +1 -1
  1079. package/dist/components/media/lightbox/lightbox.class.d.ts.map +1 -1
  1080. package/dist/components/media/lightbox/lightbox.class.js +45 -3
  1081. package/dist/components/media/lightbox/lightbox.class.js.map +1 -1
  1082. package/dist/components/media/map/map-loader.d.ts +2 -1
  1083. package/dist/components/media/map/map-loader.d.ts.map +1 -1
  1084. package/dist/components/media/map/map-loader.js +2 -1
  1085. package/dist/components/media/map/map-loader.js.map +1 -1
  1086. package/dist/components/media/map/map.class.d.ts +10 -1
  1087. package/dist/components/media/map/map.class.d.ts.map +1 -1
  1088. package/dist/components/media/map/map.class.js +47 -8
  1089. package/dist/components/media/map/map.class.js.map +1 -1
  1090. package/dist/components/media/media-card/media-card.class.d.ts +22 -2
  1091. package/dist/components/media/media-card/media-card.class.d.ts.map +1 -1
  1092. package/dist/components/media/media-card/media-card.class.js +31 -3
  1093. package/dist/components/media/media-card/media-card.class.js.map +1 -1
  1094. package/dist/components/media/playback/playback.class.d.ts +4 -6
  1095. package/dist/components/media/playback/playback.class.d.ts.map +1 -1
  1096. package/dist/components/media/playback/playback.class.js +7 -22
  1097. package/dist/components/media/playback/playback.class.js.map +1 -1
  1098. package/dist/components/media/qr-code/qr-code.class.d.ts +1 -6
  1099. package/dist/components/media/qr-code/qr-code.class.d.ts.map +1 -1
  1100. package/dist/components/media/qr-code/qr-code.class.js +31 -67
  1101. package/dist/components/media/qr-code/qr-code.class.js.map +1 -1
  1102. package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts.map +1 -1
  1103. package/dist/components/media/zoomable-frame/zoomable-frame.class.js +15 -1
  1104. package/dist/components/media/zoomable-frame/zoomable-frame.class.js.map +1 -1
  1105. package/dist/components/media/zoomable-frame/zoomable-frame.styles.d.ts.map +1 -1
  1106. package/dist/components/media/zoomable-frame/zoomable-frame.styles.js +3 -0
  1107. package/dist/components/media/zoomable-frame/zoomable-frame.styles.js.map +1 -1
  1108. package/dist/components/overlays/callout/callout.class.d.ts +8 -5
  1109. package/dist/components/overlays/callout/callout.class.d.ts.map +1 -1
  1110. package/dist/components/overlays/callout/callout.class.js +26 -21
  1111. package/dist/components/overlays/callout/callout.class.js.map +1 -1
  1112. package/dist/components/overlays/chip/chip-group.class.d.ts +3 -0
  1113. package/dist/components/overlays/chip/chip-group.class.d.ts.map +1 -1
  1114. package/dist/components/overlays/chip/chip-group.class.js +22 -1
  1115. package/dist/components/overlays/chip/chip-group.class.js.map +1 -1
  1116. package/dist/components/overlays/chip/chip.class.d.ts +26 -15
  1117. package/dist/components/overlays/chip/chip.class.d.ts.map +1 -1
  1118. package/dist/components/overlays/chip/chip.class.js +58 -32
  1119. package/dist/components/overlays/chip/chip.class.js.map +1 -1
  1120. package/dist/components/overlays/chip/chip.styles.d.ts.map +1 -1
  1121. package/dist/components/overlays/chip/chip.styles.js +28 -19
  1122. package/dist/components/overlays/chip/chip.styles.js.map +1 -1
  1123. package/dist/components/overlays/dialog/dialog.class.d.ts +1 -0
  1124. package/dist/components/overlays/dialog/dialog.class.d.ts.map +1 -1
  1125. package/dist/components/overlays/dialog/dialog.class.js +6 -5
  1126. package/dist/components/overlays/dialog/dialog.class.js.map +1 -1
  1127. package/dist/components/overlays/empty/empty.class.d.ts +11 -2
  1128. package/dist/components/overlays/empty/empty.class.d.ts.map +1 -1
  1129. package/dist/components/overlays/empty/empty.class.js +25 -2
  1130. package/dist/components/overlays/empty/empty.class.js.map +1 -1
  1131. package/dist/components/overlays/empty/empty.styles.d.ts.map +1 -1
  1132. package/dist/components/overlays/empty/empty.styles.js +6 -0
  1133. package/dist/components/overlays/empty/empty.styles.js.map +1 -1
  1134. package/dist/components/overlays/kbd/kbd.class.js +1 -1
  1135. package/dist/components/overlays/kbd/kbd.class.js.map +1 -1
  1136. package/dist/components/overlays/overlay/overlay.styles.d.ts.map +1 -1
  1137. package/dist/components/overlays/overlay/overlay.styles.js +1 -2
  1138. package/dist/components/overlays/overlay/overlay.styles.js.map +1 -1
  1139. package/dist/components/overlays/overlay/popover.class.d.ts +33 -18
  1140. package/dist/components/overlays/overlay/popover.class.d.ts.map +1 -1
  1141. package/dist/components/overlays/overlay/popover.class.js +166 -56
  1142. package/dist/components/overlays/overlay/popover.class.js.map +1 -1
  1143. package/dist/components/overlays/overlay/tooltip.class.d.ts +20 -1
  1144. package/dist/components/overlays/overlay/tooltip.class.d.ts.map +1 -1
  1145. package/dist/components/overlays/overlay/tooltip.class.js +169 -17
  1146. package/dist/components/overlays/overlay/tooltip.class.js.map +1 -1
  1147. package/dist/components/overlays/progress/progress-bar.class.d.ts +3 -0
  1148. package/dist/components/overlays/progress/progress-bar.class.d.ts.map +1 -1
  1149. package/dist/components/overlays/progress/progress-bar.class.js +13 -4
  1150. package/dist/components/overlays/progress/progress-bar.class.js.map +1 -1
  1151. package/dist/components/overlays/progress/progress-ring.class.d.ts +2 -0
  1152. package/dist/components/overlays/progress/progress-ring.class.d.ts.map +1 -1
  1153. package/dist/components/overlays/progress/progress-ring.class.js +13 -4
  1154. package/dist/components/overlays/progress/progress-ring.class.js.map +1 -1
  1155. package/dist/components/overlays/progress/progress.styles.js +3 -3
  1156. package/dist/components/overlays/rating/rating.class.d.ts +7 -0
  1157. package/dist/components/overlays/rating/rating.class.d.ts.map +1 -1
  1158. package/dist/components/overlays/rating/rating.class.js +17 -0
  1159. package/dist/components/overlays/rating/rating.class.js.map +1 -1
  1160. package/dist/components/overlays/skeleton/skeleton.class.d.ts.map +1 -1
  1161. package/dist/components/overlays/skeleton/skeleton.class.js +1 -14
  1162. package/dist/components/overlays/skeleton/skeleton.class.js.map +1 -1
  1163. package/dist/components/overlays/spinner/spinner.class.d.ts +2 -1
  1164. package/dist/components/overlays/spinner/spinner.class.d.ts.map +1 -1
  1165. package/dist/components/overlays/spinner/spinner.class.js +2 -1
  1166. package/dist/components/overlays/spinner/spinner.class.js.map +1 -1
  1167. package/dist/components/overlays/spinner/spinner.styles.js +1 -1
  1168. package/dist/components/overlays/toast/toast-item.class.d.ts +2 -0
  1169. package/dist/components/overlays/toast/toast-item.class.d.ts.map +1 -1
  1170. package/dist/components/overlays/toast/toast-item.class.js +19 -1
  1171. package/dist/components/overlays/toast/toast-item.class.js.map +1 -1
  1172. package/dist/components/overlays/toast/toast-item.styles.d.ts.map +1 -1
  1173. package/dist/components/overlays/toast/toast-item.styles.js +9 -1
  1174. package/dist/components/overlays/toast/toast-item.styles.js.map +1 -1
  1175. package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.d.ts +1 -0
  1176. package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.d.ts.map +1 -1
  1177. package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.js +17 -7
  1178. package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.js.map +1 -1
  1179. package/dist/components/retrieval/chunk-inspector/chunk-inspector.styles.d.ts.map +1 -1
  1180. package/dist/components/retrieval/chunk-inspector/chunk-inspector.styles.js +6 -0
  1181. package/dist/components/retrieval/chunk-inspector/chunk-inspector.styles.js.map +1 -1
  1182. package/dist/components/retrieval/citation-badge/citation-badge.class.js +1 -1
  1183. package/dist/components/retrieval/citation-badge/citation-badge.class.js.map +1 -1
  1184. package/dist/components/retrieval/citation-badge/citation-badge.styles.d.ts.map +1 -1
  1185. package/dist/components/retrieval/citation-badge/citation-badge.styles.js +2 -0
  1186. package/dist/components/retrieval/citation-badge/citation-badge.styles.js.map +1 -1
  1187. package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts +50 -0
  1188. package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts.map +1 -0
  1189. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +133 -0
  1190. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js.map +1 -0
  1191. package/dist/components/retrieval/claim-evidence/claim-evidence.d.ts +5 -0
  1192. package/dist/components/retrieval/claim-evidence/claim-evidence.d.ts.map +1 -0
  1193. package/dist/components/retrieval/claim-evidence/claim-evidence.js +8 -0
  1194. package/dist/components/retrieval/claim-evidence/claim-evidence.js.map +1 -0
  1195. package/dist/components/retrieval/claim-evidence/claim-evidence.styles.d.ts +2 -0
  1196. package/dist/components/retrieval/claim-evidence/claim-evidence.styles.d.ts.map +1 -0
  1197. package/dist/components/retrieval/claim-evidence/claim-evidence.styles.js +84 -0
  1198. package/dist/components/retrieval/claim-evidence/claim-evidence.styles.js.map +1 -0
  1199. package/dist/components/retrieval/community-card/community-card.class.d.ts.map +1 -1
  1200. package/dist/components/retrieval/community-card/community-card.class.js +9 -3
  1201. package/dist/components/retrieval/community-card/community-card.class.js.map +1 -1
  1202. package/dist/components/retrieval/community-card/community-card.styles.d.ts.map +1 -1
  1203. package/dist/components/retrieval/community-card/community-card.styles.js +6 -0
  1204. package/dist/components/retrieval/community-card/community-card.styles.js.map +1 -1
  1205. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.d.ts +57 -0
  1206. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.d.ts.map +1 -0
  1207. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +175 -0
  1208. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js.map +1 -0
  1209. package/dist/components/retrieval/embedding-explorer/embedding-explorer.d.ts +2 -0
  1210. package/dist/components/retrieval/embedding-explorer/embedding-explorer.d.ts.map +1 -0
  1211. package/dist/components/retrieval/embedding-explorer/embedding-explorer.js +5 -0
  1212. package/dist/components/retrieval/embedding-explorer/embedding-explorer.js.map +1 -0
  1213. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.d.ts +2 -0
  1214. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.d.ts.map +1 -0
  1215. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js +56 -0
  1216. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js.map +1 -0
  1217. package/dist/components/retrieval/entity-card/entity-card.class.d.ts.map +1 -1
  1218. package/dist/components/retrieval/entity-card/entity-card.class.js +11 -16
  1219. package/dist/components/retrieval/entity-card/entity-card.class.js.map +1 -1
  1220. package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts.map +1 -1
  1221. package/dist/components/retrieval/entity-chip/entity-chip.class.js +3 -1
  1222. package/dist/components/retrieval/entity-chip/entity-chip.class.js.map +1 -1
  1223. package/dist/components/retrieval/entity-chip/entity-chip.styles.d.ts.map +1 -1
  1224. package/dist/components/retrieval/entity-chip/entity-chip.styles.js +4 -1
  1225. package/dist/components/retrieval/entity-chip/entity-chip.styles.js.map +1 -1
  1226. package/dist/components/retrieval/entity-dossier/entity-dossier.class.d.ts.map +1 -1
  1227. package/dist/components/retrieval/entity-dossier/entity-dossier.class.js +1 -14
  1228. package/dist/components/retrieval/entity-dossier/entity-dossier.class.js.map +1 -1
  1229. package/dist/components/retrieval/graph/graph-canvas.d.ts.map +1 -1
  1230. package/dist/components/retrieval/graph/graph-canvas.js +4 -1
  1231. package/dist/components/retrieval/graph/graph-canvas.js.map +1 -1
  1232. package/dist/components/retrieval/graph/graph.class.d.ts +7 -0
  1233. package/dist/components/retrieval/graph/graph.class.d.ts.map +1 -1
  1234. package/dist/components/retrieval/graph/graph.class.js +124 -38
  1235. package/dist/components/retrieval/graph/graph.class.js.map +1 -1
  1236. package/dist/components/retrieval/graph/graph.styles.d.ts.map +1 -1
  1237. package/dist/components/retrieval/graph/graph.styles.js +6 -1
  1238. package/dist/components/retrieval/graph/graph.styles.js.map +1 -1
  1239. package/dist/components/retrieval/graph-legend/graph-legend.class.d.ts.map +1 -1
  1240. package/dist/components/retrieval/graph-legend/graph-legend.class.js +1 -14
  1241. package/dist/components/retrieval/graph-legend/graph-legend.class.js.map +1 -1
  1242. package/dist/components/retrieval/graph-legend/graph-legend.styles.d.ts.map +1 -1
  1243. package/dist/components/retrieval/graph-legend/graph-legend.styles.js +3 -0
  1244. package/dist/components/retrieval/graph-legend/graph-legend.styles.js.map +1 -1
  1245. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +8 -1
  1246. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts.map +1 -1
  1247. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +19 -2
  1248. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js.map +1 -1
  1249. package/dist/components/retrieval/grounding-summary/grounding-summary.d.ts +1 -0
  1250. package/dist/components/retrieval/grounding-summary/grounding-summary.d.ts.map +1 -1
  1251. package/dist/components/retrieval/grounding-summary/grounding-summary.js +1 -0
  1252. package/dist/components/retrieval/grounding-summary/grounding-summary.js.map +1 -1
  1253. package/dist/components/retrieval/index.d.ts +31 -0
  1254. package/dist/components/retrieval/index.d.ts.map +1 -0
  1255. package/dist/components/retrieval/index.js +31 -0
  1256. package/dist/components/retrieval/index.js.map +1 -0
  1257. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.d.ts +8 -5
  1258. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.d.ts.map +1 -1
  1259. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js +53 -16
  1260. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js.map +1 -1
  1261. package/dist/components/retrieval/ingestion-queue/ingestion-queue.d.ts +4 -0
  1262. package/dist/components/retrieval/ingestion-queue/ingestion-queue.d.ts.map +1 -1
  1263. package/dist/components/retrieval/ingestion-queue/ingestion-queue.js +4 -0
  1264. package/dist/components/retrieval/ingestion-queue/ingestion-queue.js.map +1 -1
  1265. package/dist/components/retrieval/ingestion-queue/ingestion-queue.styles.d.ts.map +1 -1
  1266. package/dist/components/retrieval/ingestion-queue/ingestion-queue.styles.js +5 -0
  1267. package/dist/components/retrieval/ingestion-queue/ingestion-queue.styles.js.map +1 -1
  1268. package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +0 -5
  1269. package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts.map +1 -1
  1270. package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +12 -12
  1271. package/dist/components/retrieval/knowledge-base/knowledge-base.class.js.map +1 -1
  1272. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts +75 -0
  1273. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts.map +1 -0
  1274. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js +179 -0
  1275. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js.map +1 -0
  1276. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.d.ts +4 -0
  1277. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.d.ts.map +1 -0
  1278. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.js +7 -0
  1279. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.js.map +1 -0
  1280. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.d.ts +2 -0
  1281. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.d.ts.map +1 -0
  1282. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js +59 -0
  1283. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js.map +1 -0
  1284. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +13 -0
  1285. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts.map +1 -1
  1286. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +114 -24
  1287. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js.map +1 -1
  1288. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.d.ts.map +1 -1
  1289. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +5 -0
  1290. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js.map +1 -1
  1291. package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +6 -2
  1292. package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts.map +1 -1
  1293. package/dist/components/retrieval/memory-panel/memory-panel.class.js +71 -17
  1294. package/dist/components/retrieval/memory-panel/memory-panel.class.js.map +1 -1
  1295. package/dist/components/retrieval/memory-panel/memory-panel.styles.d.ts.map +1 -1
  1296. package/dist/components/retrieval/memory-panel/memory-panel.styles.js +6 -0
  1297. package/dist/components/retrieval/memory-panel/memory-panel.styles.js.map +1 -1
  1298. package/dist/components/retrieval/mind-map/mind-map.class.d.ts +10 -0
  1299. package/dist/components/retrieval/mind-map/mind-map.class.d.ts.map +1 -1
  1300. package/dist/components/retrieval/mind-map/mind-map.class.js +96 -3
  1301. package/dist/components/retrieval/mind-map/mind-map.class.js.map +1 -1
  1302. package/dist/components/retrieval/neighbor-list/neighbor-list.class.d.ts.map +1 -1
  1303. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +23 -7
  1304. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js.map +1 -1
  1305. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.d.ts.map +1 -1
  1306. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +3 -1
  1307. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js.map +1 -1
  1308. package/dist/components/retrieval/node-palette/node-palette.class.d.ts +8 -0
  1309. package/dist/components/retrieval/node-palette/node-palette.class.d.ts.map +1 -1
  1310. package/dist/components/retrieval/node-palette/node-palette.class.js +107 -15
  1311. package/dist/components/retrieval/node-palette/node-palette.class.js.map +1 -1
  1312. package/dist/components/retrieval/node-palette/node-palette.styles.d.ts.map +1 -1
  1313. package/dist/components/retrieval/node-palette/node-palette.styles.js +9 -1
  1314. package/dist/components/retrieval/node-palette/node-palette.styles.js.map +1 -1
  1315. package/dist/components/retrieval/path-strip/path-strip.class.d.ts +4 -1
  1316. package/dist/components/retrieval/path-strip/path-strip.class.d.ts.map +1 -1
  1317. package/dist/components/retrieval/path-strip/path-strip.class.js +28 -1
  1318. package/dist/components/retrieval/path-strip/path-strip.class.js.map +1 -1
  1319. package/dist/components/retrieval/provenance-panel/provenance-panel.class.d.ts.map +1 -1
  1320. package/dist/components/retrieval/provenance-panel/provenance-panel.class.js +2 -1
  1321. package/dist/components/retrieval/provenance-panel/provenance-panel.class.js.map +1 -1
  1322. package/dist/components/retrieval/provenance-panel/provenance-panel.styles.d.ts.map +1 -1
  1323. package/dist/components/retrieval/provenance-panel/provenance-panel.styles.js +3 -0
  1324. package/dist/components/retrieval/provenance-panel/provenance-panel.styles.js.map +1 -1
  1325. package/dist/components/retrieval/rag-answer/rag-answer.class.d.ts +56 -0
  1326. package/dist/components/retrieval/rag-answer/rag-answer.class.d.ts.map +1 -0
  1327. package/dist/components/retrieval/rag-answer/rag-answer.class.js +105 -0
  1328. package/dist/components/retrieval/rag-answer/rag-answer.class.js.map +1 -0
  1329. package/dist/components/retrieval/rag-answer/rag-answer.d.ts +9 -0
  1330. package/dist/components/retrieval/rag-answer/rag-answer.d.ts.map +1 -0
  1331. package/dist/components/retrieval/rag-answer/rag-answer.js +12 -0
  1332. package/dist/components/retrieval/rag-answer/rag-answer.js.map +1 -0
  1333. package/dist/components/retrieval/rag-answer/rag-answer.styles.d.ts +2 -0
  1334. package/dist/components/retrieval/rag-answer/rag-answer.styles.d.ts.map +1 -0
  1335. package/dist/components/retrieval/rag-answer/rag-answer.styles.js +13 -0
  1336. package/dist/components/retrieval/rag-answer/rag-answer.styles.js.map +1 -0
  1337. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.d.ts +78 -0
  1338. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.d.ts.map +1 -0
  1339. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js +186 -0
  1340. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js.map +1 -0
  1341. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.d.ts +5 -0
  1342. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.d.ts.map +1 -0
  1343. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.js +8 -0
  1344. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.js.map +1 -0
  1345. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.styles.d.ts +2 -0
  1346. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.styles.d.ts.map +1 -0
  1347. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.styles.js +95 -0
  1348. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.styles.js.map +1 -0
  1349. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.d.ts +58 -0
  1350. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.d.ts.map +1 -0
  1351. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.js +157 -0
  1352. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.js.map +1 -0
  1353. package/dist/components/retrieval/retrieval-compare/retrieval-compare.d.ts +3 -0
  1354. package/dist/components/retrieval/retrieval-compare/retrieval-compare.d.ts.map +1 -0
  1355. package/dist/components/retrieval/retrieval-compare/retrieval-compare.js +6 -0
  1356. package/dist/components/retrieval/retrieval-compare/retrieval-compare.js.map +1 -0
  1357. package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.d.ts +2 -0
  1358. package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.d.ts.map +1 -0
  1359. package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.js +103 -0
  1360. package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.js.map +1 -0
  1361. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +3 -6
  1362. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts.map +1 -1
  1363. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +37 -46
  1364. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js.map +1 -1
  1365. package/dist/components/retrieval/retrieval-results/retrieval-results.styles.d.ts.map +1 -1
  1366. package/dist/components/retrieval/retrieval-results/retrieval-results.styles.js +3 -4
  1367. package/dist/components/retrieval/retrieval-results/retrieval-results.styles.js.map +1 -1
  1368. package/dist/components/retrieval/retrieval-search/retrieval-search.class.d.ts.map +1 -1
  1369. package/dist/components/retrieval/retrieval-search/retrieval-search.class.js +20 -6
  1370. package/dist/components/retrieval/retrieval-search/retrieval-search.class.js.map +1 -1
  1371. package/dist/components/retrieval/retrieval-search/retrieval-search.styles.d.ts.map +1 -1
  1372. package/dist/components/retrieval/retrieval-search/retrieval-search.styles.js +1 -0
  1373. package/dist/components/retrieval/retrieval-search/retrieval-search.styles.js.map +1 -1
  1374. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.d.ts +4 -2
  1375. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.d.ts.map +1 -1
  1376. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +31 -23
  1377. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js.map +1 -1
  1378. package/dist/components/retrieval/retrieval-trace/retrieval-trace.styles.d.ts.map +1 -1
  1379. package/dist/components/retrieval/retrieval-trace/retrieval-trace.styles.js +3 -0
  1380. package/dist/components/retrieval/retrieval-trace/retrieval-trace.styles.js.map +1 -1
  1381. package/dist/components/retrieval/source-card/source-card.styles.d.ts.map +1 -1
  1382. package/dist/components/retrieval/source-card/source-card.styles.js +13 -0
  1383. package/dist/components/retrieval/source-card/source-card.styles.js.map +1 -1
  1384. package/dist/components/retrieval/source-list/source-list.class.d.ts +3 -0
  1385. package/dist/components/retrieval/source-list/source-list.class.d.ts.map +1 -1
  1386. package/dist/components/retrieval/source-list/source-list.class.js +30 -3
  1387. package/dist/components/retrieval/source-list/source-list.class.js.map +1 -1
  1388. package/dist/components/retrieval/source-list/source-list.styles.d.ts.map +1 -1
  1389. package/dist/components/retrieval/source-list/source-list.styles.js +6 -0
  1390. package/dist/components/retrieval/source-list/source-list.styles.js.map +1 -1
  1391. package/dist/components/retrieval/source-picker/source-picker.class.d.ts +5 -1
  1392. package/dist/components/retrieval/source-picker/source-picker.class.d.ts.map +1 -1
  1393. package/dist/components/retrieval/source-picker/source-picker.class.js +68 -21
  1394. package/dist/components/retrieval/source-picker/source-picker.class.js.map +1 -1
  1395. package/dist/components/retrieval/source-picker/source-picker.styles.d.ts.map +1 -1
  1396. package/dist/components/retrieval/source-picker/source-picker.styles.js +25 -1
  1397. package/dist/components/retrieval/source-picker/source-picker.styles.js.map +1 -1
  1398. package/dist/components/utility/copy-button/copy-button.class.d.ts +2 -0
  1399. package/dist/components/utility/copy-button/copy-button.class.d.ts.map +1 -1
  1400. package/dist/components/utility/copy-button/copy-button.class.js +6 -0
  1401. package/dist/components/utility/copy-button/copy-button.class.js.map +1 -1
  1402. package/dist/components/utility/diff-view/diff-line-diff.d.ts +3 -4
  1403. package/dist/components/utility/diff-view/diff-line-diff.d.ts.map +1 -1
  1404. package/dist/components/utility/diff-view/diff-line-diff.js +85 -35
  1405. package/dist/components/utility/diff-view/diff-line-diff.js.map +1 -1
  1406. package/dist/components/utility/diff-view/diff-view.class.d.ts +15 -2
  1407. package/dist/components/utility/diff-view/diff-view.class.d.ts.map +1 -1
  1408. package/dist/components/utility/diff-view/diff-view.class.js +78 -17
  1409. package/dist/components/utility/diff-view/diff-view.class.js.map +1 -1
  1410. package/dist/components/utility/diff-view/diff-view.styles.d.ts.map +1 -1
  1411. package/dist/components/utility/diff-view/diff-view.styles.js +19 -6
  1412. package/dist/components/utility/diff-view/diff-view.styles.js.map +1 -1
  1413. package/dist/components/utility/export-button/export-button.class.d.ts +9 -0
  1414. package/dist/components/utility/export-button/export-button.class.d.ts.map +1 -1
  1415. package/dist/components/utility/export-button/export-button.class.js +45 -8
  1416. package/dist/components/utility/export-button/export-button.class.js.map +1 -1
  1417. package/dist/components/utility/export-button/export-button.styles.d.ts.map +1 -1
  1418. package/dist/components/utility/export-button/export-button.styles.js +4 -0
  1419. package/dist/components/utility/export-button/export-button.styles.js.map +1 -1
  1420. package/dist/components/utility/format/format-date.class.d.ts.map +1 -1
  1421. package/dist/components/utility/format/format-date.class.js +11 -4
  1422. package/dist/components/utility/format/format-date.class.js.map +1 -1
  1423. package/dist/components/utility/format/format-number.class.d.ts.map +1 -1
  1424. package/dist/components/utility/format/format-number.class.js +18 -4
  1425. package/dist/components/utility/format/format-number.class.js.map +1 -1
  1426. package/dist/components/utility/format/relative-time.class.d.ts.map +1 -1
  1427. package/dist/components/utility/format/relative-time.class.js +11 -2
  1428. package/dist/components/utility/format/relative-time.class.js.map +1 -1
  1429. package/dist/components/utility/icon/icon.class.d.ts.map +1 -1
  1430. package/dist/components/utility/icon/icon.class.js +9 -2
  1431. package/dist/components/utility/icon/icon.class.js.map +1 -1
  1432. package/dist/components/utility/intersection-observer/intersection-observer.class.d.ts.map +1 -1
  1433. package/dist/components/utility/intersection-observer/intersection-observer.class.js +23 -9
  1434. package/dist/components/utility/intersection-observer/intersection-observer.class.js.map +1 -1
  1435. package/dist/components/utility/intersection-observer/intersection-observer.styles.d.ts +1 -1
  1436. package/dist/components/utility/intersection-observer/intersection-observer.styles.d.ts.map +1 -1
  1437. package/dist/components/utility/intersection-observer/intersection-observer.styles.js +1 -7
  1438. package/dist/components/utility/intersection-observer/intersection-observer.styles.js.map +1 -1
  1439. package/dist/components/utility/json-viewer/json-viewer.class.d.ts +15 -2
  1440. package/dist/components/utility/json-viewer/json-viewer.class.d.ts.map +1 -1
  1441. package/dist/components/utility/json-viewer/json-viewer.class.js +182 -44
  1442. package/dist/components/utility/json-viewer/json-viewer.class.js.map +1 -1
  1443. package/dist/components/utility/json-viewer/json-viewer.styles.d.ts.map +1 -1
  1444. package/dist/components/utility/json-viewer/json-viewer.styles.js +14 -4
  1445. package/dist/components/utility/json-viewer/json-viewer.styles.js.map +1 -1
  1446. package/dist/components/utility/known-date/known-date.class.d.ts +6 -3
  1447. package/dist/components/utility/known-date/known-date.class.d.ts.map +1 -1
  1448. package/dist/components/utility/known-date/known-date.class.js +35 -5
  1449. package/dist/components/utility/known-date/known-date.class.js.map +1 -1
  1450. package/dist/components/utility/known-date/known-date.styles.d.ts.map +1 -1
  1451. package/dist/components/utility/known-date/known-date.styles.js +5 -0
  1452. package/dist/components/utility/known-date/known-date.styles.js.map +1 -1
  1453. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +51 -27
  1454. package/dist/components/utility/mention-popover/mention-popover.class.d.ts.map +1 -1
  1455. package/dist/components/utility/mention-popover/mention-popover.class.js +130 -35
  1456. package/dist/components/utility/mention-popover/mention-popover.class.js.map +1 -1
  1457. package/dist/components/utility/mention-popover/mention-popover.styles.d.ts.map +1 -1
  1458. package/dist/components/utility/mention-popover/mention-popover.styles.js +5 -1
  1459. package/dist/components/utility/mention-popover/mention-popover.styles.js.map +1 -1
  1460. package/dist/components/utility/mutation-observer/mutation-observer.class.d.ts.map +1 -1
  1461. package/dist/components/utility/mutation-observer/mutation-observer.class.js +8 -22
  1462. package/dist/components/utility/mutation-observer/mutation-observer.class.js.map +1 -1
  1463. package/dist/components/utility/mutation-observer/mutation-observer.styles.d.ts +1 -1
  1464. package/dist/components/utility/mutation-observer/mutation-observer.styles.d.ts.map +1 -1
  1465. package/dist/components/utility/mutation-observer/mutation-observer.styles.js +1 -7
  1466. package/dist/components/utility/mutation-observer/mutation-observer.styles.js.map +1 -1
  1467. package/dist/components/utility/poll-status/poll-status.class.d.ts +6 -4
  1468. package/dist/components/utility/poll-status/poll-status.class.d.ts.map +1 -1
  1469. package/dist/components/utility/poll-status/poll-status.class.js +23 -21
  1470. package/dist/components/utility/poll-status/poll-status.class.js.map +1 -1
  1471. package/dist/components/utility/poll-status/poll-status.styles.d.ts.map +1 -1
  1472. package/dist/components/utility/poll-status/poll-status.styles.js +9 -1
  1473. package/dist/components/utility/poll-status/poll-status.styles.js.map +1 -1
  1474. package/dist/components/utility/random-content/random-content.class.d.ts +30 -9
  1475. package/dist/components/utility/random-content/random-content.class.d.ts.map +1 -1
  1476. package/dist/components/utility/random-content/random-content.class.js +196 -24
  1477. package/dist/components/utility/random-content/random-content.class.js.map +1 -1
  1478. package/dist/components/utility/random-content/random-content.styles.d.ts.map +1 -1
  1479. package/dist/components/utility/random-content/random-content.styles.js +22 -0
  1480. package/dist/components/utility/random-content/random-content.styles.js.map +1 -1
  1481. package/dist/components/utility/resize-observer/resize-observer.class.d.ts.map +1 -1
  1482. package/dist/components/utility/resize-observer/resize-observer.class.js +3 -4
  1483. package/dist/components/utility/resize-observer/resize-observer.class.js.map +1 -1
  1484. package/dist/components/utility/resize-observer/resize-observer.styles.d.ts +1 -1
  1485. package/dist/components/utility/resize-observer/resize-observer.styles.d.ts.map +1 -1
  1486. package/dist/components/utility/resize-observer/resize-observer.styles.js +1 -10
  1487. package/dist/components/utility/resize-observer/resize-observer.styles.js.map +1 -1
  1488. package/dist/components/utility/tour/tour.class.d.ts +14 -19
  1489. package/dist/components/utility/tour/tour.class.d.ts.map +1 -1
  1490. package/dist/components/utility/tour/tour.class.js +116 -51
  1491. package/dist/components/utility/tour/tour.class.js.map +1 -1
  1492. package/dist/components/utility/tour/tour.styles.d.ts.map +1 -1
  1493. package/dist/components/utility/tour/tour.styles.js +7 -0
  1494. package/dist/components/utility/tour/tour.styles.js.map +1 -1
  1495. package/dist/components/viewers/archive-viewer/archive-viewer.class.d.ts +21 -5
  1496. package/dist/components/viewers/archive-viewer/archive-viewer.class.d.ts.map +1 -1
  1497. package/dist/components/viewers/archive-viewer/archive-viewer.class.js +105 -18
  1498. package/dist/components/viewers/archive-viewer/archive-viewer.class.js.map +1 -1
  1499. package/dist/components/viewers/archive-viewer/zip-resource-guard.d.ts +36 -0
  1500. package/dist/components/viewers/archive-viewer/zip-resource-guard.d.ts.map +1 -0
  1501. package/dist/components/viewers/archive-viewer/zip-resource-guard.js +261 -0
  1502. package/dist/components/viewers/archive-viewer/zip-resource-guard.js.map +1 -0
  1503. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts +18 -3
  1504. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts.map +1 -1
  1505. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js +53 -12
  1506. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js.map +1 -1
  1507. package/dist/components/viewers/calendar-viewer/calendar-viewer.js +13 -2
  1508. package/dist/components/viewers/calendar-viewer/calendar-viewer.js.map +1 -1
  1509. package/dist/components/viewers/contact-viewer/contact-viewer.class.d.ts +21 -3
  1510. package/dist/components/viewers/contact-viewer/contact-viewer.class.d.ts.map +1 -1
  1511. package/dist/components/viewers/contact-viewer/contact-viewer.class.js +76 -10
  1512. package/dist/components/viewers/contact-viewer/contact-viewer.class.js.map +1 -1
  1513. package/dist/components/viewers/contact-viewer/contact-viewer.js +7 -0
  1514. package/dist/components/viewers/contact-viewer/contact-viewer.js.map +1 -1
  1515. package/dist/components/viewers/contact-viewer/contact-viewer.styles.d.ts.map +1 -1
  1516. package/dist/components/viewers/contact-viewer/contact-viewer.styles.js +2 -0
  1517. package/dist/components/viewers/contact-viewer/contact-viewer.styles.js.map +1 -1
  1518. package/dist/components/viewers/contact-viewer/vcard.d.ts +1 -1
  1519. package/dist/components/viewers/contact-viewer/vcard.d.ts.map +1 -1
  1520. package/dist/components/viewers/contact-viewer/vcard.js +9 -2
  1521. package/dist/components/viewers/contact-viewer/vcard.js.map +1 -1
  1522. package/dist/components/viewers/csv-viewer/csv-viewer.class.d.ts +17 -10
  1523. package/dist/components/viewers/csv-viewer/csv-viewer.class.d.ts.map +1 -1
  1524. package/dist/components/viewers/csv-viewer/csv-viewer.class.js +102 -54
  1525. package/dist/components/viewers/csv-viewer/csv-viewer.class.js.map +1 -1
  1526. package/dist/components/viewers/csv-viewer/csv-viewer.d.ts +1 -0
  1527. package/dist/components/viewers/csv-viewer/csv-viewer.d.ts.map +1 -1
  1528. package/dist/components/viewers/csv-viewer/csv-viewer.js +1 -0
  1529. package/dist/components/viewers/csv-viewer/csv-viewer.js.map +1 -1
  1530. package/dist/components/viewers/csv-viewer/csv-viewer.styles.js +6 -6
  1531. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts +17 -15
  1532. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts.map +1 -1
  1533. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js +127 -53
  1534. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js.map +1 -1
  1535. package/dist/components/viewers/dataset-viewer/dataset-viewer.d.ts +1 -0
  1536. package/dist/components/viewers/dataset-viewer/dataset-viewer.d.ts.map +1 -1
  1537. package/dist/components/viewers/dataset-viewer/dataset-viewer.js +1 -0
  1538. package/dist/components/viewers/dataset-viewer/dataset-viewer.js.map +1 -1
  1539. package/dist/components/viewers/dataset-viewer/dataset-viewer.styles.js +4 -4
  1540. package/dist/components/viewers/document-compare/document-compare.class.d.ts +5 -2
  1541. package/dist/components/viewers/document-compare/document-compare.class.d.ts.map +1 -1
  1542. package/dist/components/viewers/document-compare/document-compare.class.js +4 -16
  1543. package/dist/components/viewers/document-compare/document-compare.class.js.map +1 -1
  1544. package/dist/components/viewers/document-compare/document-compare.d.ts +2 -0
  1545. package/dist/components/viewers/document-compare/document-compare.d.ts.map +1 -1
  1546. package/dist/components/viewers/document-compare/document-compare.js +2 -0
  1547. package/dist/components/viewers/document-compare/document-compare.js.map +1 -1
  1548. package/dist/components/viewers/document-compare/document-compare.styles.d.ts.map +1 -1
  1549. package/dist/components/viewers/document-compare/document-compare.styles.js +4 -0
  1550. package/dist/components/viewers/document-compare/document-compare.styles.js.map +1 -1
  1551. package/dist/components/viewers/document-preview/document-preview.class.d.ts +20 -2
  1552. package/dist/components/viewers/document-preview/document-preview.class.d.ts.map +1 -1
  1553. package/dist/components/viewers/document-preview/document-preview.class.js +130 -39
  1554. package/dist/components/viewers/document-preview/document-preview.class.js.map +1 -1
  1555. package/dist/components/viewers/document-preview/document-preview.d.ts +1 -0
  1556. package/dist/components/viewers/document-preview/document-preview.d.ts.map +1 -1
  1557. package/dist/components/viewers/document-preview/document-preview.js +1 -0
  1558. package/dist/components/viewers/document-preview/document-preview.js.map +1 -1
  1559. package/dist/components/viewers/document-preview/document-preview.styles.d.ts.map +1 -1
  1560. package/dist/components/viewers/document-preview/document-preview.styles.js +70 -12
  1561. package/dist/components/viewers/document-preview/document-preview.styles.js.map +1 -1
  1562. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +11 -10
  1563. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts.map +1 -1
  1564. package/dist/components/viewers/document-viewer/document-viewer.class.js +40 -14
  1565. package/dist/components/viewers/document-viewer/document-viewer.class.js.map +1 -1
  1566. package/dist/components/viewers/document-viewer/document-viewer.d.ts +1 -0
  1567. package/dist/components/viewers/document-viewer/document-viewer.d.ts.map +1 -1
  1568. package/dist/components/viewers/document-viewer/document-viewer.js +1 -0
  1569. package/dist/components/viewers/document-viewer/document-viewer.js.map +1 -1
  1570. package/dist/components/viewers/docx-viewer/docx-resource-guard.d.ts +10 -0
  1571. package/dist/components/viewers/docx-viewer/docx-resource-guard.d.ts.map +1 -0
  1572. package/dist/components/viewers/docx-viewer/docx-resource-guard.js +18 -0
  1573. package/dist/components/viewers/docx-viewer/docx-resource-guard.js.map +1 -0
  1574. package/dist/components/viewers/docx-viewer/docx-viewer.class.d.ts +13 -0
  1575. package/dist/components/viewers/docx-viewer/docx-viewer.class.d.ts.map +1 -1
  1576. package/dist/components/viewers/docx-viewer/docx-viewer.class.js +62 -7
  1577. package/dist/components/viewers/docx-viewer/docx-viewer.class.js.map +1 -1
  1578. package/dist/components/viewers/docx-viewer/docx-viewer.styles.js +15 -15
  1579. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +1 -0
  1580. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts.map +1 -1
  1581. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +93 -34
  1582. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js.map +1 -1
  1583. package/dist/components/viewers/ebook-viewer/epub-resource-guard.d.ts +10 -0
  1584. package/dist/components/viewers/ebook-viewer/epub-resource-guard.d.ts.map +1 -0
  1585. package/dist/components/viewers/ebook-viewer/epub-resource-guard.js +18 -0
  1586. package/dist/components/viewers/ebook-viewer/epub-resource-guard.js.map +1 -0
  1587. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +24 -2
  1588. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts.map +1 -1
  1589. package/dist/components/viewers/email-viewer/email-viewer.class.js +125 -48
  1590. package/dist/components/viewers/email-viewer/email-viewer.class.js.map +1 -1
  1591. package/dist/components/viewers/email-viewer/email-viewer.js +13 -3
  1592. package/dist/components/viewers/email-viewer/email-viewer.js.map +1 -1
  1593. package/dist/components/viewers/geojson-view/geojson-view.class.d.ts +21 -10
  1594. package/dist/components/viewers/geojson-view/geojson-view.class.d.ts.map +1 -1
  1595. package/dist/components/viewers/geojson-view/geojson-view.class.js +251 -68
  1596. package/dist/components/viewers/geojson-view/geojson-view.class.js.map +1 -1
  1597. package/dist/components/viewers/geojson-view/geojson-view.js +7 -0
  1598. package/dist/components/viewers/geojson-view/geojson-view.js.map +1 -1
  1599. package/dist/components/viewers/highlight-layer/highlight-layer-timing.d.ts +2 -0
  1600. package/dist/components/viewers/highlight-layer/highlight-layer-timing.d.ts.map +1 -0
  1601. package/dist/components/viewers/highlight-layer/highlight-layer-timing.js +31 -0
  1602. package/dist/components/viewers/highlight-layer/highlight-layer-timing.js.map +1 -0
  1603. package/dist/components/viewers/highlight-layer/highlight-layer.class.d.ts +28 -5
  1604. package/dist/components/viewers/highlight-layer/highlight-layer.class.d.ts.map +1 -1
  1605. package/dist/components/viewers/highlight-layer/highlight-layer.class.js +206 -62
  1606. package/dist/components/viewers/highlight-layer/highlight-layer.class.js.map +1 -1
  1607. package/dist/components/viewers/highlight-layer/highlight-layer.styles.d.ts.map +1 -1
  1608. package/dist/components/viewers/highlight-layer/highlight-layer.styles.js +84 -21
  1609. package/dist/components/viewers/highlight-layer/highlight-layer.styles.js.map +1 -1
  1610. package/dist/components/viewers/html-viewer/html-viewer.class.d.ts +16 -2
  1611. package/dist/components/viewers/html-viewer/html-viewer.class.d.ts.map +1 -1
  1612. package/dist/components/viewers/html-viewer/html-viewer.class.js +34 -6
  1613. package/dist/components/viewers/html-viewer/html-viewer.class.js.map +1 -1
  1614. package/dist/components/viewers/include/include.class.d.ts +17 -2
  1615. package/dist/components/viewers/include/include.class.d.ts.map +1 -1
  1616. package/dist/components/viewers/include/include.class.js +32 -3
  1617. package/dist/components/viewers/include/include.class.js.map +1 -1
  1618. package/dist/components/viewers/notebook-viewer/dompurify-loader.js.map +1 -1
  1619. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.d.ts +15 -13
  1620. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.d.ts.map +1 -1
  1621. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +255 -41
  1622. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js.map +1 -1
  1623. package/dist/components/viewers/notebook-viewer/notebook-viewer.styles.d.ts.map +1 -1
  1624. package/dist/components/viewers/notebook-viewer/notebook-viewer.styles.js +17 -0
  1625. package/dist/components/viewers/notebook-viewer/notebook-viewer.styles.js.map +1 -1
  1626. package/dist/components/viewers/page-rail/page-rail.class.d.ts +8 -3
  1627. package/dist/components/viewers/page-rail/page-rail.class.d.ts.map +1 -1
  1628. package/dist/components/viewers/page-rail/page-rail.class.js +96 -26
  1629. package/dist/components/viewers/page-rail/page-rail.class.js.map +1 -1
  1630. package/dist/components/viewers/page-rail/page-rail.d.ts +3 -0
  1631. package/dist/components/viewers/page-rail/page-rail.d.ts.map +1 -1
  1632. package/dist/components/viewers/page-rail/page-rail.js +3 -0
  1633. package/dist/components/viewers/page-rail/page-rail.js.map +1 -1
  1634. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts +3 -3
  1635. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts.map +1 -1
  1636. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +198 -46
  1637. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js.map +1 -1
  1638. package/dist/components/viewers/pdf-viewer/pdf-viewer.d.ts +3 -0
  1639. package/dist/components/viewers/pdf-viewer/pdf-viewer.d.ts.map +1 -1
  1640. package/dist/components/viewers/pdf-viewer/pdf-viewer.js +3 -0
  1641. package/dist/components/viewers/pdf-viewer/pdf-viewer.js.map +1 -1
  1642. package/dist/components/viewers/pdf-viewer/pdf-viewer.styles.d.ts.map +1 -1
  1643. package/dist/components/viewers/pdf-viewer/pdf-viewer.styles.js +11 -1
  1644. package/dist/components/viewers/pdf-viewer/pdf-viewer.styles.js.map +1 -1
  1645. package/dist/components/viewers/pptx-viewer/pptx-loader.d.ts.map +1 -1
  1646. package/dist/components/viewers/pptx-viewer/pptx-loader.js +13 -1
  1647. package/dist/components/viewers/pptx-viewer/pptx-loader.js.map +1 -1
  1648. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.d.ts +15 -3
  1649. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.d.ts.map +1 -1
  1650. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.js +27 -9
  1651. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.js.map +1 -1
  1652. package/dist/components/viewers/pptx-viewer/pptx-viewer.d.ts +1 -0
  1653. package/dist/components/viewers/pptx-viewer/pptx-viewer.d.ts.map +1 -1
  1654. package/dist/components/viewers/pptx-viewer/pptx-viewer.js +1 -0
  1655. package/dist/components/viewers/pptx-viewer/pptx-viewer.js.map +1 -1
  1656. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.d.ts +12 -7
  1657. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.d.ts.map +1 -1
  1658. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.js +144 -44
  1659. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.js.map +1 -1
  1660. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.d.ts +2 -0
  1661. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.d.ts.map +1 -1
  1662. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.js +2 -0
  1663. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.js.map +1 -1
  1664. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.styles.d.ts.map +1 -1
  1665. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.styles.js +7 -11
  1666. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.styles.js.map +1 -1
  1667. package/dist/components/viewers/spreadsheet-viewer/xlsx-resource-guard.d.ts +17 -0
  1668. package/dist/components/viewers/spreadsheet-viewer/xlsx-resource-guard.d.ts.map +1 -0
  1669. package/dist/components/viewers/spreadsheet-viewer/xlsx-resource-guard.js +26 -0
  1670. package/dist/components/viewers/spreadsheet-viewer/xlsx-resource-guard.js.map +1 -0
  1671. package/dist/components/viewers/svg-viewer/svg-viewer.class.d.ts +14 -1
  1672. package/dist/components/viewers/svg-viewer/svg-viewer.class.d.ts.map +1 -1
  1673. package/dist/components/viewers/svg-viewer/svg-viewer.class.js +101 -34
  1674. package/dist/components/viewers/svg-viewer/svg-viewer.class.js.map +1 -1
  1675. package/dist/components/viewers/svg-viewer/svg-viewer.d.ts +1 -0
  1676. package/dist/components/viewers/svg-viewer/svg-viewer.d.ts.map +1 -1
  1677. package/dist/components/viewers/svg-viewer/svg-viewer.js +1 -0
  1678. package/dist/components/viewers/svg-viewer/svg-viewer.js.map +1 -1
  1679. package/dist/components/viewers/svg-viewer/svg-viewer.styles.d.ts.map +1 -1
  1680. package/dist/components/viewers/svg-viewer/svg-viewer.styles.js +66 -6
  1681. package/dist/components/viewers/svg-viewer/svg-viewer.styles.js.map +1 -1
  1682. package/dist/components/viewers/xml-viewer/xml-viewer.class.d.ts +4 -0
  1683. package/dist/components/viewers/xml-viewer/xml-viewer.class.d.ts.map +1 -1
  1684. package/dist/components/viewers/xml-viewer/xml-viewer.class.js +0 -0
  1685. package/dist/components/viewers/xml-viewer/xml-viewer.class.js.map +1 -1
  1686. package/dist/internal/anchor-target.d.ts.map +1 -1
  1687. package/dist/internal/anchor-target.js +7 -3
  1688. package/dist/internal/anchor-target.js.map +1 -1
  1689. package/dist/internal/anchored-popover-controller.d.ts +10 -0
  1690. package/dist/internal/anchored-popover-controller.d.ts.map +1 -0
  1691. package/dist/internal/anchored-popover-controller.js +17 -0
  1692. package/dist/internal/anchored-popover-controller.js.map +1 -0
  1693. package/dist/internal/aria-controls.d.ts +12 -0
  1694. package/dist/internal/aria-controls.d.ts.map +1 -0
  1695. package/dist/internal/aria-controls.js +33 -0
  1696. package/dist/internal/aria-controls.js.map +1 -0
  1697. package/dist/internal/catalog-picker.d.ts +12 -0
  1698. package/dist/internal/catalog-picker.d.ts.map +1 -0
  1699. package/dist/internal/catalog-picker.js +17 -0
  1700. package/dist/internal/catalog-picker.js.map +1 -0
  1701. package/dist/internal/converters.d.ts +22 -0
  1702. package/dist/internal/converters.d.ts.map +1 -0
  1703. package/dist/internal/converters.js +38 -0
  1704. package/dist/internal/converters.js.map +1 -0
  1705. package/dist/internal/delimited-data.d.ts +17 -0
  1706. package/dist/internal/delimited-data.d.ts.map +1 -0
  1707. package/dist/internal/delimited-data.js +24 -0
  1708. package/dist/internal/delimited-data.js.map +1 -0
  1709. package/dist/internal/form-associated.d.ts.map +1 -1
  1710. package/dist/internal/form-associated.js +57 -1
  1711. package/dist/internal/form-associated.js.map +1 -1
  1712. package/dist/internal/intl-cache.d.ts +8 -2
  1713. package/dist/internal/intl-cache.d.ts.map +1 -1
  1714. package/dist/internal/intl-cache.js +0 -0
  1715. package/dist/internal/intl-cache.js.map +1 -1
  1716. package/dist/internal/latest-task.d.ts +11 -0
  1717. package/dist/internal/latest-task.d.ts.map +1 -0
  1718. package/dist/internal/latest-task.js +17 -0
  1719. package/dist/internal/latest-task.js.map +1 -0
  1720. package/dist/internal/length-constraints.d.ts +27 -0
  1721. package/dist/internal/length-constraints.d.ts.map +1 -0
  1722. package/dist/internal/length-constraints.js +42 -0
  1723. package/dist/internal/length-constraints.js.map +1 -0
  1724. package/dist/internal/localization.d.ts +8 -1
  1725. package/dist/internal/localization.d.ts.map +1 -1
  1726. package/dist/internal/localization.js +168 -2
  1727. package/dist/internal/localization.js.map +1 -1
  1728. package/dist/internal/lyra-element.d.ts +9 -0
  1729. package/dist/internal/lyra-element.d.ts.map +1 -1
  1730. package/dist/internal/lyra-element.js +41 -0
  1731. package/dist/internal/lyra-element.js.map +1 -1
  1732. package/dist/internal/observer-wrapper.styles.d.ts +3 -0
  1733. package/dist/internal/observer-wrapper.styles.d.ts.map +1 -0
  1734. package/dist/internal/observer-wrapper.styles.js +9 -0
  1735. package/dist/internal/observer-wrapper.styles.js.map +1 -0
  1736. package/dist/internal/overlay-manager.d.ts +2 -0
  1737. package/dist/internal/overlay-manager.d.ts.map +1 -1
  1738. package/dist/internal/overlay-manager.js +4 -0
  1739. package/dist/internal/overlay-manager.js.map +1 -1
  1740. package/dist/internal/persisted-state.d.ts +27 -0
  1741. package/dist/internal/persisted-state.d.ts.map +1 -0
  1742. package/dist/internal/persisted-state.js +57 -0
  1743. package/dist/internal/persisted-state.js.map +1 -0
  1744. package/dist/internal/root-registration-allowlist.d.ts +1 -1
  1745. package/dist/internal/root-registration-allowlist.d.ts.map +1 -1
  1746. package/dist/internal/root-registration-allowlist.js +17 -0
  1747. package/dist/internal/root-registration-allowlist.js.map +1 -1
  1748. package/dist/internal/safe-url.d.ts +13 -2
  1749. package/dist/internal/safe-url.d.ts.map +1 -1
  1750. package/dist/internal/safe-url.js +27 -4
  1751. package/dist/internal/safe-url.js.map +1 -1
  1752. package/dist/internal/slotted-observer.d.ts +8 -0
  1753. package/dist/internal/slotted-observer.d.ts.map +1 -0
  1754. package/dist/internal/slotted-observer.js +11 -0
  1755. package/dist/internal/slotted-observer.js.map +1 -0
  1756. package/dist/internal/text-quote.d.ts +5 -1
  1757. package/dist/internal/text-quote.d.ts.map +1 -1
  1758. package/dist/internal/text-quote.js +187 -18
  1759. package/dist/internal/text-quote.js.map +1 -1
  1760. package/dist/internal/text-viewer-target.d.ts +27 -0
  1761. package/dist/internal/text-viewer-target.d.ts.map +1 -0
  1762. package/dist/internal/text-viewer-target.js +266 -0
  1763. package/dist/internal/text-viewer-target.js.map +1 -0
  1764. package/dist/internal/theme-watcher.d.ts +32 -0
  1765. package/dist/internal/theme-watcher.d.ts.map +1 -0
  1766. package/dist/internal/theme-watcher.js +67 -0
  1767. package/dist/internal/theme-watcher.js.map +1 -0
  1768. package/dist/lyra.d.ts +60 -8
  1769. package/dist/lyra.d.ts.map +1 -1
  1770. package/dist/lyra.js +51 -0
  1771. package/dist/lyra.js.map +1 -1
  1772. package/dist/theme/gemstones-data.d.ts +16 -0
  1773. package/dist/theme/gemstones-data.d.ts.map +1 -0
  1774. package/dist/theme/gemstones-data.js +28 -0
  1775. package/dist/theme/gemstones-data.js.map +1 -0
  1776. package/dist/theme/gemstones.d.ts +9 -0
  1777. package/dist/theme/gemstones.d.ts.map +1 -0
  1778. package/dist/theme/gemstones.js +18 -0
  1779. package/dist/theme/gemstones.js.map +1 -0
  1780. package/dist/theme/theme.d.ts +72 -0
  1781. package/dist/theme/theme.d.ts.map +1 -0
  1782. package/dist/theme/theme.js +143 -0
  1783. package/dist/theme/theme.js.map +1 -0
  1784. package/llms/components/lr-accordion-item.md +1 -0
  1785. package/llms/components/lr-accordion.md +1 -0
  1786. package/llms/components/lr-activity-feed.md +1 -0
  1787. package/llms/components/lr-agent-eval-dashboard.md +36 -0
  1788. package/llms/components/lr-agent-run.md +7 -0
  1789. package/llms/components/lr-agent-trace.md +1 -0
  1790. package/llms/components/lr-agent-workspace.md +1 -0
  1791. package/llms/components/lr-animated-image.md +5 -0
  1792. package/llms/components/lr-animation.md +1 -0
  1793. package/llms/components/lr-app-rail-item.md +16 -2
  1794. package/llms/components/lr-app-rail.md +16 -2
  1795. package/llms/components/lr-approval-queue.md +31 -0
  1796. package/llms/components/lr-archive-viewer.md +9 -3
  1797. package/llms/components/lr-artifact-panel.md +1 -0
  1798. package/llms/components/lr-attachment-chip.md +1 -0
  1799. package/llms/components/lr-attachment-trigger.md +5 -0
  1800. package/llms/components/lr-audio-visualizer.md +1 -0
  1801. package/llms/components/lr-av-player.md +3 -2
  1802. package/llms/components/lr-avatar-group.md +1 -0
  1803. package/llms/components/lr-avatar.md +1 -0
  1804. package/llms/components/lr-badge.md +1 -0
  1805. package/llms/components/lr-bar-chart.md +5 -3
  1806. package/llms/components/lr-box-plot.md +7 -5
  1807. package/llms/components/lr-branch-picker.md +5 -0
  1808. package/llms/components/lr-breadcrumb-item.md +5 -0
  1809. package/llms/components/lr-breadcrumb.md +5 -0
  1810. package/llms/components/lr-browser-frame.md +10 -0
  1811. package/llms/components/lr-bubble-chart.md +5 -3
  1812. package/llms/components/lr-button-group.md +1 -0
  1813. package/llms/components/lr-button.md +40 -6
  1814. package/llms/components/lr-calendar-viewer.md +7 -1
  1815. package/llms/components/lr-calendar.md +1 -0
  1816. package/llms/components/lr-callout.md +1 -0
  1817. package/llms/components/lr-card.md +11 -0
  1818. package/llms/components/lr-carousel-item.md +1 -0
  1819. package/llms/components/lr-carousel.md +1 -0
  1820. package/llms/components/lr-chart.md +64 -14
  1821. package/llms/components/lr-chat-composer.md +1 -0
  1822. package/llms/components/lr-chat-message.md +22 -1
  1823. package/llms/components/lr-chat-viewport.md +1 -0
  1824. package/llms/components/lr-checkbox-group.md +12 -6
  1825. package/llms/components/lr-checkbox.md +6 -1
  1826. package/llms/components/lr-checkpoint.md +1 -0
  1827. package/llms/components/lr-chip-group.md +20 -17
  1828. package/llms/components/lr-chip.md +20 -17
  1829. package/llms/components/lr-chunk-inspector.md +1 -0
  1830. package/llms/components/lr-citation-badge.md +6 -0
  1831. package/llms/components/lr-claim-evidence.md +37 -0
  1832. package/llms/components/lr-code-block-core.md +2 -3
  1833. package/llms/components/lr-code-block.md +7 -6
  1834. package/llms/components/lr-code-editor.md +6 -0
  1835. package/llms/components/lr-color-picker.md +8 -0
  1836. package/llms/components/lr-combobox.md +67 -14
  1837. package/llms/components/lr-command-palette.md +8 -0
  1838. package/llms/components/lr-commit-card.md +1 -0
  1839. package/llms/components/lr-community-card.md +1 -0
  1840. package/llms/components/lr-compare-panel.md +3 -1
  1841. package/llms/components/lr-confirm-bar.md +1 -0
  1842. package/llms/components/lr-contact-viewer.md +7 -1
  1843. package/llms/components/lr-context-inspector.md +1 -0
  1844. package/llms/components/lr-context-meter.md +15 -6
  1845. package/llms/components/lr-control-group.md +1 -0
  1846. package/llms/components/lr-conversation-item.md +10 -2
  1847. package/llms/components/lr-copy-button.md +5 -0
  1848. package/llms/components/lr-csv-viewer.md +6 -3
  1849. package/llms/components/lr-dashboard-grid.md +5 -0
  1850. package/llms/components/lr-dataset-viewer.md +1 -0
  1851. package/llms/components/lr-date-input.md +16 -3
  1852. package/llms/components/lr-date-picker.md +16 -3
  1853. package/llms/components/lr-details.md +1 -0
  1854. package/llms/components/lr-dialog.md +1 -0
  1855. package/llms/components/lr-diff-view.md +22 -8
  1856. package/llms/components/lr-divider.md +1 -0
  1857. package/llms/components/lr-dock-panel.md +5 -2
  1858. package/llms/components/lr-document-compare.md +36 -4
  1859. package/llms/components/lr-document-library.md +1 -0
  1860. package/llms/components/lr-document-preview.md +16 -6
  1861. package/llms/components/lr-document-viewer.md +6 -4
  1862. package/llms/components/lr-docx-viewer.md +12 -0
  1863. package/llms/components/lr-doughnut-chart.md +5 -3
  1864. package/llms/components/lr-drawer.md +1 -0
  1865. package/llms/components/lr-drilldown-panel.md +1 -0
  1866. package/llms/components/lr-dropdown-item.md +7 -2
  1867. package/llms/components/lr-dropdown.md +1 -0
  1868. package/llms/components/lr-ebook-viewer.md +5 -0
  1869. package/llms/components/lr-email-viewer.md +9 -3
  1870. package/llms/components/lr-embedding-explorer.md +29 -0
  1871. package/llms/components/lr-emoji-picker.md +12 -2
  1872. package/llms/components/lr-empty.md +4 -1
  1873. package/llms/components/lr-entity-card.md +1 -0
  1874. package/llms/components/lr-entity-chip.md +1 -0
  1875. package/llms/components/lr-entity-dossier.md +1 -0
  1876. package/llms/components/lr-env-list.md +1 -0
  1877. package/llms/components/lr-eval-dataset.md +1 -0
  1878. package/llms/components/lr-eval-result.md +1 -0
  1879. package/llms/components/lr-evaluation-run.md +1 -0
  1880. package/llms/components/lr-export-button.md +5 -2
  1881. package/llms/components/lr-file-icon.md +1 -0
  1882. package/llms/components/lr-file-input.md +20 -7
  1883. package/llms/components/lr-file-tree.md +1 -0
  1884. package/llms/components/lr-filter-bar.md +20 -4
  1885. package/llms/components/lr-flag.md +5 -0
  1886. package/llms/components/lr-flow-canvas.md +15 -5
  1887. package/llms/components/lr-flow-controls.md +1 -0
  1888. package/llms/components/lr-flow-minimap.md +8 -2
  1889. package/llms/components/lr-flow-node.md +1 -0
  1890. package/llms/components/lr-flow-run-overlay.md +1 -0
  1891. package/llms/components/lr-format-bytes.md +1 -0
  1892. package/llms/components/lr-format-date.md +1 -0
  1893. package/llms/components/lr-format-number.md +1 -0
  1894. package/llms/components/lr-gauge.md +1 -0
  1895. package/llms/components/lr-generation-status.md +1 -0
  1896. package/llms/components/lr-geojson-view.md +8 -2
  1897. package/llms/components/lr-graph-legend.md +1 -0
  1898. package/llms/components/lr-graph-query-builder.md +10 -0
  1899. package/llms/components/lr-graph.md +4 -3
  1900. package/llms/components/lr-grounding-summary.md +10 -5
  1901. package/llms/components/lr-handoff-divider.md +1 -0
  1902. package/llms/components/lr-heatmap.md +1 -0
  1903. package/llms/components/lr-highlight-layer.md +17 -2
  1904. package/llms/components/lr-histogram.md +5 -3
  1905. package/llms/components/lr-html-viewer.md +7 -1
  1906. package/llms/components/lr-icon-button.md +18 -4
  1907. package/llms/components/lr-icon.md +1 -0
  1908. package/llms/components/lr-image-comparer.md +3 -0
  1909. package/llms/components/lr-image-viewer.md +13 -6
  1910. package/llms/components/lr-include.md +11 -4
  1911. package/llms/components/lr-ingestion-queue.md +5 -2
  1912. package/llms/components/lr-input.md +28 -3
  1913. package/llms/components/lr-intersection-observer.md +1 -0
  1914. package/llms/components/lr-json-viewer.md +17 -6
  1915. package/llms/components/lr-kbd.md +8 -5
  1916. package/llms/components/lr-knowledge-base-admin.md +30 -0
  1917. package/llms/components/lr-knowledge-base.md +1 -0
  1918. package/llms/components/lr-knowledge-graph-explorer.md +1 -0
  1919. package/llms/components/lr-known-date.md +5 -0
  1920. package/llms/components/lr-lightbox.md +1 -0
  1921. package/llms/components/lr-line-chart.md +5 -3
  1922. package/llms/components/lr-lite-chart.md +20 -2
  1923. package/llms/components/lr-live-region.md +1 -0
  1924. package/llms/components/lr-locale-picker.md +10 -0
  1925. package/llms/components/lr-map.md +14 -3
  1926. package/llms/components/lr-markdown-core.md +11 -0
  1927. package/llms/components/lr-markdown.md +11 -0
  1928. package/llms/components/lr-mcp-app.md +51 -0
  1929. package/llms/components/lr-media-card.md +4 -0
  1930. package/llms/components/lr-memory-panel.md +1 -0
  1931. package/llms/components/lr-mention-popover.md +42 -22
  1932. package/llms/components/lr-menu-item.md +7 -2
  1933. package/llms/components/lr-menu.md +7 -2
  1934. package/llms/components/lr-message-actions.md +1 -0
  1935. package/llms/components/lr-message-feedback.md +1 -0
  1936. package/llms/components/lr-message-parts.md +59 -0
  1937. package/llms/components/lr-mind-map.md +1 -0
  1938. package/llms/components/lr-model-select.md +8 -1
  1939. package/llms/components/lr-model-settings-panel.md +1 -0
  1940. package/llms/components/lr-mutation-observer.md +1 -0
  1941. package/llms/components/lr-neighbor-list.md +1 -0
  1942. package/llms/components/lr-node-palette.md +1 -0
  1943. package/llms/components/lr-notebook-viewer.md +16 -10
  1944. package/llms/components/lr-number-input.md +5 -3
  1945. package/llms/components/lr-option.md +67 -14
  1946. package/llms/components/lr-page-rail.md +1 -0
  1947. package/llms/components/lr-pagination.md +6 -0
  1948. package/llms/components/lr-path-strip.md +1 -0
  1949. package/llms/components/lr-pdf-viewer.md +2 -1
  1950. package/llms/components/lr-phone-input.md +15 -3
  1951. package/llms/components/lr-pie-chart.md +5 -3
  1952. package/llms/components/lr-playback.md +3 -2
  1953. package/llms/components/lr-polar-area-chart.md +5 -3
  1954. package/llms/components/lr-policy-summary.md +1 -0
  1955. package/llms/components/lr-poll-status.md +1 -0
  1956. package/llms/components/lr-popover.md +6 -0
  1957. package/llms/components/lr-pptx-viewer.md +7 -2
  1958. package/llms/components/lr-progress-bar.md +7 -0
  1959. package/llms/components/lr-progress-ring.md +1 -0
  1960. package/llms/components/lr-prompt-input.md +56 -0
  1961. package/llms/components/lr-prompt-queue.md +35 -0
  1962. package/llms/components/lr-prompt-studio.md +53 -0
  1963. package/llms/components/lr-provenance-panel.md +1 -0
  1964. package/llms/components/lr-push-to-talk.md +6 -0
  1965. package/llms/components/lr-qr-code.md +1 -0
  1966. package/llms/components/lr-query-builder.md +9 -2
  1967. package/llms/components/lr-radar-chart.md +5 -3
  1968. package/llms/components/lr-radio-group.md +1 -0
  1969. package/llms/components/lr-radio.md +1 -0
  1970. package/llms/components/lr-rag-answer.md +32 -0
  1971. package/llms/components/lr-rag-eval-dashboard.md +46 -0
  1972. package/llms/components/lr-random-content.md +7 -3
  1973. package/llms/components/lr-rating.md +7 -0
  1974. package/llms/components/lr-realtime-session.md +41 -0
  1975. package/llms/components/lr-relative-time.md +1 -0
  1976. package/llms/components/lr-reorder-item.md +1 -0
  1977. package/llms/components/lr-reorder-list.md +1 -0
  1978. package/llms/components/lr-resize-observer.md +1 -0
  1979. package/llms/components/lr-responsive-panel.md +1 -0
  1980. package/llms/components/lr-result-card.md +1 -0
  1981. package/llms/components/lr-result-field.md +1 -0
  1982. package/llms/components/lr-retrieval-compare.md +37 -0
  1983. package/llms/components/lr-retrieval-results.md +1 -0
  1984. package/llms/components/lr-retrieval-search.md +1 -0
  1985. package/llms/components/lr-retrieval-trace.md +4 -2
  1986. package/llms/components/lr-rubric-form.md +5 -1
  1987. package/llms/components/lr-scatter-chart.md +5 -3
  1988. package/llms/components/lr-schema-viewer.md +48 -0
  1989. package/llms/components/lr-scroller.md +1 -0
  1990. package/llms/components/lr-segmented.md +14 -0
  1991. package/llms/components/lr-select.md +27 -16
  1992. package/llms/components/lr-selection-toolbar.md +44 -0
  1993. package/llms/components/lr-sequence-strip.md +1 -0
  1994. package/llms/components/lr-skeleton.md +1 -0
  1995. package/llms/components/lr-slider.md +10 -2
  1996. package/llms/components/lr-source-card.md +5 -5
  1997. package/llms/components/lr-source-list.md +5 -5
  1998. package/llms/components/lr-source-picker.md +4 -3
  1999. package/llms/components/lr-span-waterfall.md +1 -0
  2000. package/llms/components/lr-sparkline.md +1 -0
  2001. package/llms/components/lr-spinner.md +1 -0
  2002. package/llms/components/lr-split.md +13 -3
  2003. package/llms/components/lr-spreadsheet-viewer.md +6 -3
  2004. package/llms/components/lr-stack-trace.md +1 -0
  2005. package/llms/components/lr-stat.md +3 -1
  2006. package/llms/components/lr-stepper.md +13 -12
  2007. package/llms/components/lr-stream-status.md +5 -4
  2008. package/llms/components/lr-streaming-text.md +2 -1
  2009. package/llms/components/lr-subagent-panel.md +43 -0
  2010. package/llms/components/lr-suggestion-chips.md +1 -0
  2011. package/llms/components/lr-svg-viewer.md +9 -1
  2012. package/llms/components/lr-swatch-picker.md +37 -7
  2013. package/llms/components/lr-switch.md +2 -1
  2014. package/llms/components/lr-table.md +77 -11
  2015. package/llms/components/lr-tabs.md +1 -0
  2016. package/llms/components/lr-tag.md +1 -0
  2017. package/llms/components/lr-task-list.md +1 -0
  2018. package/llms/components/lr-terminal.md +6 -0
  2019. package/llms/components/lr-test-results.md +1 -0
  2020. package/llms/components/lr-textarea.md +28 -2
  2021. package/llms/components/lr-thinking-panel.md +1 -0
  2022. package/llms/components/lr-thread-list.md +2 -1
  2023. package/llms/components/lr-time-input.md +4 -2
  2024. package/llms/components/lr-time-range.md +30 -9
  2025. package/llms/components/lr-timeline-item.md +1 -0
  2026. package/llms/components/lr-timeline.md +1 -0
  2027. package/llms/components/lr-toast-item.md +7 -8
  2028. package/llms/components/lr-toast.md +7 -8
  2029. package/llms/components/lr-token-input.md +17 -2
  2030. package/llms/components/lr-tool-approval-dialog.md +1 -0
  2031. package/llms/components/lr-tool-call-chip.md +6 -0
  2032. package/llms/components/lr-tool-param-form.md +1 -0
  2033. package/llms/components/lr-tool-result-dialog.md +12 -0
  2034. package/llms/components/lr-tool-result-view.md +53 -4
  2035. package/llms/components/lr-tool-select-dialog.md +1 -0
  2036. package/llms/components/lr-tool-timeline.md +12 -0
  2037. package/llms/components/lr-tooltip.md +1 -0
  2038. package/llms/components/lr-tour.md +1 -0
  2039. package/llms/components/lr-trace-tree.md +12 -0
  2040. package/llms/components/lr-transcript-feed.md +1 -0
  2041. package/llms/components/lr-tree-node.md +19 -6
  2042. package/llms/components/lr-tree.md +19 -6
  2043. package/llms/components/lr-typing-indicator.md +13 -8
  2044. package/llms/components/lr-usage-badge.md +1 -0
  2045. package/llms/components/lr-virtual-list.md +2 -1
  2046. package/llms/components/lr-voice-picker.md +13 -0
  2047. package/llms/components/lr-widget-renderer.md +3 -1
  2048. package/llms/components/lr-widget.md +25 -6
  2049. package/llms/components/lr-word-cloud.md +9 -2
  2050. package/llms/components/lr-xml-viewer.md +7 -4
  2051. package/llms/components/lr-zoomable-frame.md +1 -0
  2052. package/llms/index.md +22 -5
  2053. package/llms/peers.md +17 -9
  2054. package/llms/shared.md +155 -13
  2055. package/llms-full.txt +2081 -394
  2056. package/llms.txt +6 -5
  2057. package/package.json +66 -14
  2058. package/vscode-css-data.json +1686 -167
  2059. package/vscode-html-data.json +1395 -184
  2060. package/web-types.json +2380 -235
package/llms-full.txt CHANGED
@@ -7,7 +7,7 @@ Agent UI. Selected components retain documented Web Awesome-compatible public na
7
7
  prefix to make migration easier, but Lyra has its own implementation, design tokens, localization
8
8
  runtime, RTL behavior, and release surface. It has no runtime dependency on either project.
9
9
 
10
- **This file is the whole catalog concatenated — 251 components, several hundred thousand tokens.**
10
+ **This file is the whole catalog concatenated — several hundred thousand tokens.**
11
11
  Read it end to end only if you genuinely need everything. Otherwise:
12
12
 
13
13
  | To… | Read |
@@ -39,9 +39,9 @@ family and entry point.
39
39
  - **Media, files & maps** — 18 tags in `components/media/`
40
40
  - **Charts** — 12 tags in `components/charts/`
41
41
  - **Document & file viewers** — 22 tags in `components/viewers/`
42
- - **Conversation & chat UI** — 28 tags in `components/conversation/`
43
- - **Agent tooling, tool calls & evaluation** — 29 tags in `components/agent-tools/`
44
- - **Retrieval, knowledge graph & grounding** — 24 tags in `components/retrieval/`
42
+ - **Conversation & chat UI** — 33 tags in `components/conversation/`
43
+ - **Agent tooling, tool calls & evaluation** — 35 tags in `components/agent-tools/`
44
+ - **Retrieval, knowledge graph & grounding** — 30 tags in `components/retrieval/`
45
45
  - **Reference tables** — design tokens (`llms/tokens.md`), optional peers (`llms/peers.md`), `wa-*`/`sl-*` migration (`llms/migration.md`)
46
46
 
47
47
  ---
@@ -58,7 +58,7 @@ import '@aceshooting/lyra-ui/components/forms/combobox/combobox.js'; // register
58
58
  import '@aceshooting/lyra-ui/components/data/table/table.js'; // registers <lr-table>
59
59
  ```
60
60
 
61
- `llms/index.md` lists the exact path for all 251 tags. A wrong or missing family segment is a hard
61
+ `llms/index.md` lists the exact path for every tag. A wrong or missing family segment is a hard
62
62
  module-resolution failure, not a silent no-op — `exports` maps `./components/*` straight onto
63
63
  `./dist/components/*`.
64
64
 
@@ -71,8 +71,22 @@ module-resolution failure, not a silent no-op — `exports` maps `./components/*
71
71
  `lr-bar-chart`, `lr-pie-chart`, `lr-doughnut-chart`, `lr-radar-chart`, `lr-polar-area-chart`,
72
72
  `lr-bubble-chart`, `lr-scatter-chart`), `lr-box-plot`, `lr-histogram`, `lr-map`, `lr-graph`,
73
73
  `lr-knowledge-graph-explorer`, and `lr-geojson-view`. Those always need their own subpath import.
74
- The barrel also re-exports every class and type (every `Lyra*EventMap` type included), so it is the
75
- one import that defeats tree-shaking prefer per-component entries in application code.
74
+ The barrel also re-exports a broad compatibility surface of commonly used classes, helpers, and
75
+ types, but it is not an exhaustive promise that every component-owned type or future export is
76
+ present. It is the one import that defeats tree-shaking — prefer the owning component entry in
77
+ application code, both for the smallest bundle and the complete contract of that component.
78
+ - **Document anchor/highlight types.** The granular document-viewer entry owns and exports
79
+ `LyraAnchor`, `LyraAnchorKind`, `LyraHighlight`, `LyraHighlightTone`,
80
+ `AnchorTargetCapabilities`, `HighlightActivateDetail`, `TextSelectDetail`, and
81
+ `AnchorResultDetail`:
82
+ ```ts
83
+ import type {
84
+ LyraAnchor,
85
+ LyraHighlight,
86
+ AnchorTargetCapabilities,
87
+ } from '@aceshooting/lyra-ui/components/viewers/document-viewer/document-viewer.js';
88
+ ```
89
+ Use that entry instead of depending on incidental root-barrel coverage.
76
90
  - **`lr-flag`** registers from the barrel, but resolving a flag by `country`/`language` (rather than
77
91
  a pre-resolved `src`) additionally needs
78
92
  `import '@aceshooting/lyra-ui/components/media/flag/flag-peer.js';` once.
@@ -240,6 +254,98 @@ dark palette — that fallback applies only where no real `--lr-theme-*` value i
240
254
  The token layer also sets `:host([hidden]) { display: none !important; }` and an inherited
241
255
  `box-sizing: border-box` reset.
242
256
 
257
+ ### Theme mode/accent runtime (`@aceshooting/lyra-ui/theme.js`)
258
+
259
+ Flipping the mode class/attribute above is something every app ends up hand-rolling — persist a
260
+ choice, apply it on load, avoid the flash of wrong theme before the app boots. `theme.js` is that
261
+ runtime, published as its own subpath: **zero dependencies, no Lit, no component imports, and no
262
+ side effects on import**, so an app can persist and apply a theme without pulling the component
263
+ graph into its first-paint bundle.
264
+
265
+ ```ts
266
+ import { setLyraTheme, getLyraTheme } from '@aceshooting/lyra-ui/theme.js';
267
+
268
+ setLyraTheme({ mode: 'dark' }); // unspecified fields keep their current value
269
+ setLyraTheme({ accent: '#7c3aed' }); // mode stays 'dark'
270
+ getLyraTheme(); // → { mode: 'dark', accent: '#7c3aed' }
271
+ setLyraTheme({ mode: 'auto', accent: null }); // clears the override and the accent
272
+ ```
273
+
274
+ - **`setLyraTheme({ mode?, accent? })`** persists to `localStorage['lyra-theme']`, applies to
275
+ `document.documentElement`, and dispatches `lr-theme-change` on `window` with
276
+ `detail: { mode, accent }`. Fields you omit keep their current value; pass `null` to clear the
277
+ accent. It **never throws** — when `localStorage` is unavailable (private browsing, quota, a
278
+ sandboxed iframe) it degrades to apply-without-persist, and the "fields you omit keep their
279
+ current value" rule still holds across calls in that state: the merge falls back to the last
280
+ theme applied in this session rather than to the default.
281
+ - **`getLyraTheme()`** returns `{ mode, accent }`, defaulting to `{ mode: 'auto', accent: null }`
282
+ when nothing is stored or the stored value is malformed. Storage is re-read on every call — no
283
+ in-memory cache — so a value written by another tab or a previous session is picked up cold.
284
+ Where storage is unreadable or unwritable it reports the theme last applied, so the return value
285
+ always describes what the document is actually showing and a toggle UI bound to it stays in sync.
286
+ - **`mode`** is `'light' | 'dark' | 'auto'`. `'light'`/`'dark'` set **both `data-lr-theme`** (the
287
+ attribute `theme.css` actually keys its palette blocks on) **and `data-theme`** (the generic
288
+ attribute canvas-rendered components watch, so `lr-chart`/`lr-heatmap`/`lr-qr-code` repaint on
289
+ the switch rather than keeping stale colors — see `llms/components/lr-chart.md`). `'auto'`
290
+ removes both, which means **no override — not "follow the OS"**:
291
+ - **With `theme.css` imported** (the setup this section is nested under), its `:root` block sets
292
+ the full light palette unconditionally and that file ships no `prefers-color-scheme` block, so
293
+ `'auto'` renders **light** whatever the OS is set to.
294
+ - **Without `theme.css`**, no real `--lr-theme-*` value is set, so the token layer's
295
+ `prefers-color-scheme: dark` fallback described above does apply and bare components follow
296
+ the OS.
297
+
298
+ To follow the OS *alongside* `theme.css`, resolve the preference yourself and pass a concrete
299
+ mode — `setLyraTheme` deliberately does no `matchMedia` work of its own:
300
+ ```ts
301
+ const os = matchMedia('(prefers-color-scheme: dark)');
302
+ const sync = () => setLyraTheme({ mode: os.matches ? 'dark' : 'light' });
303
+ sync();
304
+ os.addEventListener('change', sync);
305
+ ```
306
+ - **`accent`** is written to `--lr-theme-accent` as an inline custom property on the root element.
307
+ This is a **hook for your CSS, not a token the library reads** — no lyra-ui component consumes
308
+ `--lr-theme-accent`. Point the real inputs at it to make it retint anything, **writing one rule
309
+ per mode**:
310
+ ```css
311
+ :root { --lr-theme-color-brand-fill-loud: var(--lr-theme-accent, #0969da); }
312
+ .lr-dark,
313
+ [data-lr-theme='dark'] { --lr-theme-color-brand-fill-loud: var(--lr-theme-accent, #4ea0f0); }
314
+ ```
315
+ **Each arm's fallback must carry that mode's own value.** A single `:root` rule flattens both
316
+ modes to one color whenever the accent is unset (`accent: null`, the default): `:root` and
317
+ `[data-lr-theme='dark']` have equal specificity and both match `<html>` — the element
318
+ `setLyraTheme` writes `data-lr-theme` onto — so a consumer stylesheet loaded after `theme.css`
319
+ wins the tie on source order and pins the light-mode blue in dark mode. Copy each fallback from
320
+ the matching palette block in `theme.css` (`#0969da` light / `#4ea0f0` dark here).
321
+
322
+ Because that is a `--lr-theme-*` input, it reaches every nested shadow root — see "Where an
323
+ override actually reaches" above for why setting a `--lr-*` token instead would not.
324
+
325
+ **No-flash bootstrap.** `lyraThemeBootstrap` is a self-contained IIFE **string** (not a function),
326
+ meant to be inlined into a `<script>` in `<head>` **before any stylesheet**, so the persisted theme
327
+ is on the root element before first paint. It reads `localStorage['lyra-theme']`.
328
+ `createLyraThemeBootstrap({ storageKey })` returns the same kind of string for an application-owned
329
+ key, so an existing persistence layer can reuse the pre-paint half independently of
330
+ `setLyraTheme()`/`getLyraTheme()`. Calling the factory with no options returns the same string as
331
+ `lyraThemeBootstrap`. The result is a string precisely so this can happen in an unbundled
332
+ `<script>` context without shipping or parsing the module:
333
+
334
+ ```html
335
+ <head>
336
+ <script>/* server-inlines lyraThemeBootstrap here */</script>
337
+ <link rel="stylesheet" href="/theme.css" />
338
+ </head>
339
+ ```
340
+
341
+ Both variants expect a stored `{ mode, accent }` record, apply the same two attributes and
342
+ `--lr-theme-accent`, and swallow any error — malformed storage or a blocked `localStorage` leaves
343
+ the document untouched rather than throwing before your app loads.
344
+
345
+ **This runtime does no color math.** It stores and applies whatever accent string you give it; it
346
+ does not validate the value, compute a palette from it, or check contrast against any surface.
347
+ Verifying that an accent meets WCAG contrast against the light *and* dark palettes is yours.
348
+
243
349
  ## Localization: `locale`, `strings`, and the locale runtime
244
350
 
245
351
  Every built-in string — button labels, accessible names, descriptions, validation messages, status
@@ -301,13 +407,29 @@ instead of hand-rolling state shapes — they bind field-for-field onto the comp
301
407
  adapter layer:
302
408
 
303
409
  ```ts
304
- import type { AgentRun, ChatMessage, ToolInvocation, RetrievalChunk } from '@aceshooting/lyra-ui/ai';
410
+ import {
411
+ createAgentStreamState,
412
+ reduceAgentStream,
413
+ adaptAiSdkStream,
414
+ adaptAgUiEvents,
415
+ adaptA2UiSurface,
416
+ type AgentRun,
417
+ type ChatMessage,
418
+ type MessagePart,
419
+ type RetrievalChunk,
420
+ } from '@aceshooting/lyra-ui/ai';
305
421
  ```
306
422
 
307
423
  - **Run/step state** — `AgentStatusKind`, `AgentStatus`, `AgentStep`, `AgentRun`
308
- - **Conversation** — `ChatMessage`, `ToolInvocation`
424
+ - **Conversation** — `ChatMessage`, ordered `MessagePart` variants, `ToolInvocation`
309
425
  - **Documents & grounding** — `DocumentRef`, `Citation`, `RetrievalQuery`, `RetrievalChunk`,
310
- `GroundingAssessment`
426
+ `RetrievalScoreBreakdown`, `GroundedClaim`, `GroundingAssessment`, `DocumentLocator`
427
+ - **Streaming runtime** — `AgentStreamEvent`, `AgentStreamState`, `createAgentStreamState()`,
428
+ `reduceAgentStream()`, `reduceAgentStreamEvents()`; event ids make replay/duplicate delivery
429
+ deterministic, and JSON Patch application rejects prototype-mutating paths
430
+ - **Protocol adapters** — `adaptAiSdkStream()`, `adaptAgUiEvents()`, and `adaptA2UiSurface()` map
431
+ structural provider events/documents onto the neutral runtime without pulling vendor SDKs into
432
+ the package
311
433
  - **Event payloads** — `RunLifecycleEventDetail`, `RetrievalProgressEventDetail`,
312
434
  `CitationSelectEventDetail`, `ToolApprovalEventDetail`, `CancelEventDetail`, `RetryEventDetail`,
313
435
  `ExportEventDetail`
@@ -318,15 +440,35 @@ feeds on `lr-chat-message`, `lr-tool-call-chip`, `lr-tool-result-view`, `lr-sour
318
440
  convention. The types are structural and provider-agnostic: map any vendor's payload onto them once,
319
441
  at the edge.
320
442
 
443
+ ### Task-first AI composition guide
444
+
445
+ - **Render one model response:** `lr-message-parts`; use `lr-chat-message` only when the message
446
+ shell (avatar, author, actions) is also needed.
447
+ - **Build the main prompt affordance:** `lr-prompt-input`; it already composes attachments,
448
+ model/voice/source controls, mentions/commands, and `lr-prompt-queue`.
449
+ - **Run an agent workspace:** `lr-agent-workspace` + `reduceAgentStream()`; add
450
+ `lr-subagent-panel` for nested runs and `lr-mcp-app` only for executable MCP App resources.
451
+ - **Show grounded output:** `lr-rag-answer`; pass claim records for `lr-claim-evidence`, use
452
+ `lr-retrieval-compare` for retrieval tuning and `lr-rag-eval-dashboard` for run metrics.
453
+ - **Develop prompts/tools:** `lr-prompt-studio` and `lr-schema-viewer`.
454
+ - **Build voice sessions:** `lr-realtime-session`; it composes the existing audio visualizer,
455
+ push-to-talk control, and transcript feed while leaving transport ownership with the host.
456
+
457
+ Family registration entry points are additive: importing
458
+ `@aceshooting/lyra-ui/components/conversation`, `/agent-tools`, or `/retrieval` registers and
459
+ exports that complete family. Granular component entry points remain the smallest bundles and are
460
+ preferred in production.
461
+
321
462
  ## Optional peer dependencies
322
463
 
323
- All 26 peers are optional and lazily loaded; nothing is imported eagerly. `llms/peers.md` is the
324
- generated component → peer table. The shared contract: a component resolves its peer through a
325
- dynamic `import()` on first use, rendering an `<lr-skeleton>` placeholder with `aria-busy="true"` on
326
- the host meanwhile; if the peer is genuinely absent it falls back to an empty/degraded render plus a
327
- single deduped `console.warn` it never throws and never blocks paint. `lr-phone-input` is the
328
- exception: it takes a consumer-built adapter (`loadLibphonenumberAdapter()`) rather than importing
329
- `libphonenumber-js` itself.
464
+ All 26 peers are optional and their implementations are loaded on demand; nothing is imported
465
+ eagerly. `llms/peers.md` is the generated component → peer table. Loading and failure UI is
466
+ component-specific: viewer sections document their localized loading/error/notice states, while
467
+ `lr-include` preserves its light-DOM fallback/live region and emits `lr-include-error` when its
468
+ sanitizer is unavailable. Some components additionally issue a deduped warning. Consult the owning
469
+ component section instead of assuming every peer user renders an `<lr-skeleton>` or the same
470
+ degraded state. `lr-phone-input` is the exception to dynamic peer import: it takes a consumer-built
471
+ adapter (`loadLibphonenumberAdapter()`) rather than importing `libphonenumber-js` itself.
330
472
 
331
473
  ## Framework integration
332
474
 
@@ -545,14 +687,23 @@ shared `FormAssociated` mixin — see gotchas).
545
687
  shown when `maxRender` caps the row list; `{n}` is replaced with the hidden count)
546
688
  - `filter: OptionFilter | null = null` (attribute: false — `(option, query) => boolean`; default
547
689
  matches `label`/`searchText` case-insensitively; ignored while `source` is set)
548
- - `source: ComboboxSource | null = null` (attribute: false — `(query: string) =>
549
- Promise<ComboboxSourceRow[]>`; when set, replaces the light-DOM `<lr-option>` list with an async
550
- lookup, debounced ~200ms after each keystroke and re-run on clear/pick. `loadingText` is shown
551
- while a call is in flight; a stale in-flight call that resolves after a newer one (or after
552
- disconnect) is dropped via a monotonic token)
690
+ - `source: ComboboxSource | null = null` (attribute: false — `(query: string, options: { signal:
691
+ AbortSignal }) => Promise<ComboboxSourceRow[]>`; when set, replaces the light-DOM `<lr-option>`
692
+ list with an async lookup, debounced by `sourceDelay` ms after each keystroke and re-run on
693
+ clear/pick. Forward `options.signal` to `fetch(url, { signal })` to cancel the request when a
694
+ newer query supersedes it or the element disconnects. `loadingText` is shown while a call is in
695
+ flight; a stale in-flight call that resolves after a newer one (or after disconnect) is dropped
696
+ via a monotonic token. The exported type requires the `options` parameter; an existing
697
+ one-parameter `(query) => …` function remains assignable under TypeScript's ordinary function
698
+ parameter compatibility, but consumers that need cancellation should accept and forward
699
+ `options.signal`.)
700
+ - `sourceDelay: number = 200` (attribute `source-delay` — debounce in ms between the last keystroke
701
+ and the `source` call; `0` fires on every keystroke. Sanitized to a finite non-negative duration,
702
+ falling back to `200` for a non-finite value)
553
703
  - `maxRender: number = 200` (attribute `max-render` — caps how many rows render at once, always
554
704
  keeping the current selection visible even if it's outside the cap; the excess renders as one
555
- `overflowText` row instead of being dropped silently)
705
+ `overflowText` row instead of being dropped silently. See "Large option lists" below for how to
706
+ size it, and when `source` is the better answer)
556
707
  - `value: string | string[]` — a getter/setter: plain `string` in single mode, `string[]` in
557
708
  `multiple` mode
558
709
  - `selectedRows: ComboboxSourceRow[]` (read-only getter) — structured rows for the current
@@ -573,11 +724,16 @@ The light-DOM `<lr-option>` path normalizes its supported label/sub/dot/group fi
573
724
  internal row model.
574
725
 
575
726
  **Events:** typing in the filter exposes the original bubbling/composed, non-cancelable `InputEvent`
576
- as exactly one host `input` event and does not fire `change`. An actual user selection mutation —
577
- pointer or keyboard selection, multiple-value toggle, tag/Backspace removal, or clear — emits exactly
578
- one bubbling/composed, non-cancelable plain `input` `Event`, immediately followed by the same shape
579
- of `change` `Event`. Re-picking the current single value and programmatic/default/reset/restore
580
- writes are silent. The clear button emits one `lr-clear` after its `input`/`change` pair.
727
+ as exactly one host `input` event (no `value` detail) and does not fire `change`. An actual user
728
+ selection mutation — pointer or keyboard selection, multiple-value toggle, tag/Backspace removal, or
729
+ clear — emits exactly one bubbling/composed, non-cancelable `input` `CustomEvent`, immediately
730
+ followed by the same shape of `change`, then a prefixed `lr-change` alias. All three carry
731
+ `detail: { value }` the new committed selection (a string in single mode, a `string[]` in
732
+ `multiple` mode). `lr-change` mirrors `<lr-checkbox>`'s namespaced alias; subscribe to it when you
733
+ want a `lr-`-prefixed event, or to the native-style `input`/`change` for parity with a native
734
+ control. Re-picking the current single value and programmatic/default/reset/restore writes are
735
+ silent (including on `lr-change`). The clear button emits one `lr-clear` after its
736
+ `input`/`change`/`lr-change` triple.
581
737
  `lr-filter` (`detail: { value: string }`) reports the in-progress filter text on every user-driven
582
738
  keystroke — the live as-you-typed search string, deliberately *not* `value`, which is the committed
583
739
  selection. It is the supported way to read that text; reaching into the shadow root for
@@ -594,8 +750,8 @@ The internal input's `focus` and `blur` are re-dispatched as bubbling, composed
594
750
  committed selection and an in-progress filter query, so the button renders whenever either has
595
751
  something to clear, and one press clears both:
596
752
 
597
- - Clearing a selection emits `input`, then `change`, then `lr-clear` — and, if the query was also
598
- non-empty, `lr-filter` with an empty `value`.
753
+ - Clearing a selection emits `input`, then `change`, then `lr-change`, then `lr-clear` — and, if the
754
+ query was also non-empty, `lr-filter` with an empty `value`.
599
755
  - A **query-only** clear (nothing selected, just typed text) emits `lr-filter` with an empty
600
756
  `value` and deliberately **no** `change` and **no** `lr-clear`. There was no selection
601
757
  transition to report, so announcing one would be a lie. Don't listen for `lr-clear` to detect
@@ -605,6 +761,32 @@ something to clear, and one press clears both:
605
761
  selected label rather than the query, so a stale query alone never surfaces a button offering to
606
762
  clear text the user cannot see.
607
763
 
764
+ **Large option lists: sizing `maxRender`, and why the listbox is not windowed.** Every row that
765
+ survives the filter and fits under `maxRender` is a real DOM element — the listbox renders its rows
766
+ in full rather than recycling a small window of them across a scroll. That is a deliberate
767
+ accessibility constraint, not an omission: the filter input carries `aria-activedescendant`, which
768
+ is an **IDREF**, and an IDREF only resolves within its own tree scope. Moving the rows into the
769
+ library's windowing primitive (`<lr-virtual-list>`) would place them one shadow root deeper than the
770
+ input that has to point at them, where neither the attribute nor its `ariaActiveDescendantElement`
771
+ element-reflection replacement can reach — element reflection resolves same-root or upward only. So
772
+ `<lr-virtual-list>` stays `role="list"`/`role="listitem"` and is the right tool for feeds and
773
+ viewers, not for a listbox whose active row must stay addressable.
774
+
775
+ What that means in practice:
776
+
777
+ - **Up to a few hundred rows, raise `maxRender` and move on.** A few hundred flex rows is an
778
+ unremarkable amount of DOM; a country, currency, or time-zone list (typically 200–450 entries)
779
+ renders comfortably with `max-render` set to cover it. The cap exists to bound pathological
780
+ cases, not to make lists of that size expensive.
781
+ - **Past roughly a thousand rows, reach for `source` instead of a larger cap.** An async source
782
+ narrows the candidate set before it ever becomes DOM, which is a categorically better trade than
783
+ rendering everything and asking the browser to lay it out. Pair it with `sourceDelay` to debounce.
784
+ - **Leave the overflow row doing its job.** When the cap does bite, the excess collapses into one
785
+ `overflowText` row (default `"+{n} more — refine your search"`) rather than disappearing
786
+ silently, and the current selection is always kept visible even when it falls outside the cap.
787
+ Suppressing that row by setting `maxRender` far above the real list size trades a useful "keep
788
+ typing" affordance for layout work no user asked for.
789
+
608
790
  **Slots:** default (`<lr-option>` children), `label`, `hint`, `error` (overrides the `errorText`
609
791
  attribute when provided), plus two adornment slots:
610
792
  - `start` — content at the inline-start of the trigger row, before the selected-value tags and the
@@ -634,6 +816,14 @@ a hovered or keyboard-active `[part='option']` row — the same per-component in
634
816
  `lr-select`'s identical `--lr-select-option-active-bg` uses, so a consumer can retheme just this
635
817
  row state without hijacking the shared `--lr-color-brand-quiet` token library-wide.
636
818
 
819
+ The currently-**selected** row (`[part='option'][aria-selected='true']`) has its own matching set:
820
+ `--lr-combobox-option-selected-bg` (default `transparent`), `--lr-combobox-option-selected-border`
821
+ and `--lr-combobox-option-selected-color` (both default `var(--lr-color-brand)`), and
822
+ `--lr-combobox-option-selected-font-weight` (default `var(--lr-font-weight-semibold)`) — the same
823
+ four-token indirection `lr-select`/`lr-model-select` already provide for their own selected row.
824
+ Like the active-bg knob these are inline `var()` fallbacks, not declared on `:host`, so a consumer
825
+ can retheme the selected row without hijacking `--lr-color-brand` library-wide.
826
+
637
827
  `--lr-combobox-trigger-height` pins an **exact** input-container height (both floors and caps it),
638
828
  for pixel-matching an `<lr-input>` or `<lr-select>` in the same toolbar row. It is **undeclared by
639
829
  default**, leaving `--lr-combobox-trigger-min-height` as a floor only and the row free to grow —
@@ -695,7 +885,7 @@ Session-history/autofill state is stored as a name-independent JSON string array
695
885
  array restores the selection (single mode keeps its first entry); malformed or wrong-shape state
696
886
  restores an empty selection. Restored state wins even when it arrives before the first option
697
887
  collection, while `form.reset()` still returns to the declarative selected default. Restoration is
698
- synchronous and fires no `input`/`change` event.
888
+ synchronous and fires no `input`/`change`/`lr-change` event.
699
889
 
700
890
  **Known gotchas:**
701
891
  - `with-clear` remains supported for compatibility, but new code should use the mirrored
@@ -723,6 +913,10 @@ synchronous and fires no `input`/`change` event.
723
913
  `form.reset()` default itself is captured exclusively from that very first pass; a later pick, or
724
914
  a later batch of newly-`selected` options, never redefines what a reset restores to.
725
915
 
916
+ **Additional API surface:**
917
+
918
+ - `part="tag-label"` — The wrapping/ellipsis-safe selected-tag label.
919
+
726
920
  ---
727
921
 
728
922
  ## `lr-select`
@@ -734,7 +928,8 @@ input: click/Enter/Space/ArrowDown opens it, and there's no typing-to-filter. Op
734
928
  `<lr-option value>` children — the same element `<lr-combobox>` uses — reconciled the same way
735
929
  combobox does, and the popup reuses `internal/positioner.ts` for placement.
736
930
  Session-history/autofill restoration assigns the stored string through the same synchronous
737
- value/form/validity path as a programmatic value write and does not emit `input` or `change`.
931
+ value/form/validity path as a programmatic value write and does not emit `input`, `change`, or
932
+ `lr-change`.
738
933
 
739
934
  Single-select only, with no `filter`/`source`/`with-clear`/`max-options-visible`/`empty-text`/
740
935
  `max-render`/`multiple` surface — reach for `<lr-combobox>` instead whenever any of those apply.
@@ -766,29 +961,29 @@ exactly like the multi-option case, until the trigger is actually activated.
766
961
  single-option auto-commit behavior described above
767
962
  - `value: string` — a getter/setter; always a single string (no `multiple` mode)
768
963
 
964
+ **Methods:** `focus(options?)`, `blur()`, and `click()` forward to the internal trigger button.
965
+
769
966
  **Events:** `change` (native-style — selection changed), `input` (fired alongside `change` on every
770
- selection change — a native `<select>` doesn't meaningfully distinguish the two either),
771
- `lr-show`, `lr-hide`
967
+ selection change — a native `<select>` doesn't meaningfully distinguish the two either), and
968
+ `lr-change` (a prefixed compatibility alias fired after both, mirroring `<lr-checkbox>`'s
969
+ `lr-change`). All three carry `detail: { value: string }` (the new selection) and fire only on a
970
+ real change, never on a programmatic `value` write. Plus `lr-show`, `lr-hide`, and bubbling,
971
+ composed `focus`/`blur` events re-dispatched from the internal trigger.
772
972
 
773
973
  **Slots:** default (`<lr-option>` children), `label`, `hint`, `error` (overrides the `errorText`
774
- attribute when provided)
775
-
776
- **`lr-select` deliberately has no `start`/`end` adornment slots**, unlike
777
- `lr-input`/`lr-combobox`/`lr-date-input`. Two reasons, both structural rather than incidental:
778
- its `[part='trigger']` is a native `<button>`, and HTML's content model forbids interactive
779
- descendants inside one — so the slot could only ever accept decorative content, a materially
780
- different contract from the other three that would read as the same feature; and the trigger lays
781
- out with `justify-content: space-between`, so injecting a leading element pushes the selected label
782
- into the middle of the control instead of leaving it at the start. **Instead:** put a glyph in the
783
- `label` slot, or compose the select into `<lr-control-group>` alongside the adornment.
974
+ attribute when provided), `start` (non-interactive adornment before the selected-value label), and
975
+ `end` (non-interactive adornment after the label and before the expand icon). The adornments live
976
+ inside the native trigger `<button>`, so never place links, buttons, inputs, or other interactive
977
+ content in either slot.
784
978
 
785
979
  When hint/error content is present, the trigger's `aria-describedby` references stable shadow-local
786
980
  IDs for both messages (error first, then hint), so the visible supporting text is part of the
787
981
  control's accessible description.
788
982
 
789
- **CSS parts:** `form-control`, `form-control-label`, `trigger`, `listbox`, `group-label` (a heading
790
- row emitted inside the listbox whenever an option's `group` differs from the previous one's — a
791
- presentational `<div>`, not a `role="group"`; options with an empty `group` get no heading),
983
+ **CSS parts:** `form-control`, `form-control-label`, `trigger`, `start`, `end`, `listbox`,
984
+ `group-label` (a heading row emitted inside the listbox whenever an option's `group` differs from
985
+ the previous one's — a presentational `<div>`, not a `role="group"`; options with an empty `group`
986
+ get no heading),
792
987
  `option`, `option-dot` (the leading status dot, when a row's `dotColor` is set), `option-label`,
793
988
  `option-sub` (a row's secondary line, when `sub` is set), `expand-icon`, `error`, `hint`
794
989
 
@@ -820,6 +1015,15 @@ ancestor is never shadowed — retheme just this row state without hijacking the
820
1015
  `--lr-color-brand-quiet` token every other component's own hover/active state also reads. Same
821
1016
  knob `lr-combobox`'s own `--lr-combobox-option-active-bg` provides.
822
1017
 
1018
+ The currently-**selected** row (`[part='option'][aria-selected='true']`) has its own matching set:
1019
+ `--lr-select-option-selected-bg` (default `transparent`), `--lr-select-option-selected-border` and
1020
+ `--lr-select-option-selected-color` (both default `var(--lr-color-brand)`), and
1021
+ `--lr-select-option-selected-font-weight` (default `var(--lr-font-weight-semibold)`). Like the
1022
+ active-bg knob these are inline `var()` fallbacks, not declared on `:host`, so a consumer can
1023
+ retheme the selected row without hijacking `--lr-color-brand` library-wide. Note the shadow-parts
1024
+ spec forbids an attribute selector after `::part()` — `::part(option)[aria-selected='true']` is
1025
+ invalid CSS and never matches — which is exactly why these tokens exist.
1026
+
823
1027
  **Optional peer deps:** none.
824
1028
 
825
1029
  ```html
@@ -944,9 +1148,11 @@ Text field + calendar popover, **form-associated** via the shared `FormAssociate
944
1148
  `<input>`'s computed accessible name; wins over `label`/`placeholder`/the localized `date`
945
1149
  fallback in that order. Attribute-reflects from a host-level `aria-label` so a plain-markup
946
1150
  consumer gets ARIA-name forwarding without setting a JS property.
947
- - `clearLabel: string = 'Clear'` (attribute `clear-label` — accessible label for the clear button)
948
- - `openLabel: string = 'Open calendar'` (attribute `open-label` accessible label for the
949
- calendar-toggle button)
1151
+ - `clearLabel: string = ''` (attribute `clear-label` — accessible label for the clear button;
1152
+ empty uses the localized `clear` message, whose English fallback is `"Clear"`)
1153
+ - `openLabel: string = ''` (attribute `open-label` — accessible label for the calendar-toggle
1154
+ button; empty uses the localized `openCalendar` message, whose English fallback is
1155
+ `"Open calendar"`)
950
1156
  - `dialogLabel: string = 'Choose date'` (attribute `dialog-label` — accessible name for the
951
1157
  `role="dialog"` calendar popover)
952
1158
  - `spellcheck: boolean = true` — forwarded to the internal `<input>`
@@ -1073,6 +1279,16 @@ and `dateTimeFormat(locale, options)`.
1073
1279
  (`--lr-color-on-brand`, not a hardcoded literal — safe to override `--lr-color-brand` without
1074
1280
  losing contrast on selected-day text).
1075
1281
 
1282
+ **Additional API surface:**
1283
+
1284
+ - `--lr-date-picker-month-gap` — Gap between visible months. Default: `var(--lr-space-l)`.
1285
+ - `--lr-date-picker-header-gap` — Month-header child gap. Default: `var(--lr-space-s)`.
1286
+ - `--lr-date-picker-radius` — Calendar and control corner radius. Default: `var(--lr-radius)`.
1287
+ - `--lr-date-input-placeholder-color` — Placeholder text color. Default: `var(--lr-color-text-quiet)`.
1288
+ - `--lr-date-input-gap` — Gap between input-row children. Default: `var(--lr-space-xs)`.
1289
+ - `--lr-date-input-radius` — Input-row corner radius. Default: `var(--lr-radius)`.
1290
+ - `--lr-date-input-focus-border-color` — Focused row border color. Default: `var(--lr-color-brand)`.
1291
+
1076
1292
  ---
1077
1293
 
1078
1294
  ## lr-textarea
@@ -1105,10 +1321,29 @@ submission/validation/reset via `name`/`value`/`disabled`/`required`/`checkValid
1105
1321
  | `autocomplete` | `autocomplete` | `string` | `''` | Forwarded to the native `<textarea>`; empty omits the attribute. |
1106
1322
  | `inputMode` | `inputmode` | `string` | `''` | Virtual-keyboard input hint forwarded to the native `<textarea>`. |
1107
1323
  | `enterKeyHint` | `enterkeyhint` | `string` | `''` | Virtual-keyboard Enter-key hint forwarded to the native `<textarea>`. |
1324
+ | `minlength` | `minlength` | `number \| undefined` | `undefined` | Minimum text length; forwarded to the native `<textarea>` and reported as `validity.tooShort`. |
1325
+ | `maxlength` | `maxlength` | `number \| undefined` | `undefined` | Maximum text length; forwarded to the native `<textarea>` (which also stops typing past it) and reported as `validity.tooLong`. |
1108
1326
  | `name` | `name` | `string` | `''` | Form field name. |
1109
1327
  | `disabled` | `disabled` | `boolean` | `false` | Disables the control. |
1110
1328
  | `required` | `required` | `boolean` | `false` | Participates in native constraint validation. |
1111
1329
 
1330
+ ### Constraint validation
1331
+
1332
+ `validity` reports `valueMissing` (from `required`), `tooShort` (from `minlength`), and `tooLong`
1333
+ (from `maxlength`) — the complete set a native `<textarea>` can produce. Leaving `minlength` and
1334
+ `maxlength` unset constrains nothing, exactly as before they existed.
1335
+
1336
+ Two behaviors are worth knowing, both inherited from the platform and both shared with `lr-input`:
1337
+
1338
+ - **An empty value is never `tooShort`.** Native `minlength` only applies to a non-empty value, so
1339
+ an optional field left blank stays valid; `required` is what rejects empty.
1340
+ - **A script-assigned value is validated too.** The native `tooShort`/`tooLong` flags are raised
1341
+ only for a value the *user* edited, so the component recomputes both from its own `value` and
1342
+ ORs them in — `el.value = <over-length>` reports `tooLong` rather than silently submitting.
1343
+ Lengths count UTF-16 code units, matching the native control (one emoji counts as two).
1344
+ `validationMessage` is the browser's own localized message when the native control flagged the
1345
+ value, and the localized `valueInvalid` string when only the script-value check did.
1346
+
1112
1347
  The visible label, hint, and error live in the same shadow tree as the native control, so their
1113
1348
  generated ids safely drive the native `<label>`/`aria-describedby` relationships. Name precedence
1114
1349
  is `accessibleLabel`/host `aria-label`, visible `label`, `placeholder`, then the localized
@@ -1139,8 +1374,10 @@ the shadow boundary.
1139
1374
 
1140
1375
  | Event | Detail | Description |
1141
1376
  | --- | --- | --- |
1142
- | `lr-input` | `{ value: string }` | Fired on every user-driven edit. |
1143
- | `lr-change` | `{ value: string }` | Fired on native `change` timing (blur after a committed edit). |
1377
+ | `input` | none | Native-style composed event fired on every user-driven edit. |
1378
+ | `change` | none | Native-style composed event fired at native `change` timing. |
1379
+ | `lr-input` | `{ value: string }` | Compatibility alias fired on every user-driven edit. |
1380
+ | `lr-change` | `{ value: string }` | Compatibility alias fired on native `change` timing (blur after a committed edit). |
1144
1381
  | `blur` | none | Re-dispatched from the internal native `<textarea>`'s own `blur` -- bubbling and composed, unlike the native event. |
1145
1382
  | `focus` | none | Re-dispatched from the internal native `<textarea>`'s own `focus`, for the same reason as `blur`. |
1146
1383
 
@@ -1173,6 +1410,10 @@ original declarative `value`, matching native `defaultValue` behavior.
1173
1410
  bound scrolls inside the native textarea. Auto-resize remeasures after user edits, programmatic
1174
1411
  `value`/`rows` changes, range edits, and container-width changes.
1175
1412
 
1413
+ **Additional API surface:**
1414
+
1415
+ - `click()` — Activates the internal textarea.
1416
+
1176
1417
  ---
1177
1418
 
1178
1419
  ## `lr-button`
@@ -1181,7 +1422,27 @@ A generic action-button primitive. Renders an internal native `<button>`; `type=
1181
1422
  `type="reset"` are handled by the component itself via the host's own `closest('form')`, since a
1182
1423
  shadow-internal native button doesn't participate in an ancestor form's submission on its own.
1183
1424
 
1425
+ Set `href` to a safe link URL and the root renders as a real `<a part="base" href=…>` instead — a
1426
+ link styled as a button (e.g. a CTA). Native navigation is then the activation, so the submit/reset
1427
+ handling and `type` have no effect in that mode. A disabled link button (its own `disabled` or an
1428
+ ancestor `<fieldset disabled>`) renders the anchor with `aria-disabled="true"` and **no `href`**, so
1429
+ it is neither focusable nor navigable; an unsafe/unparseable `href` falls back to the native
1430
+ `<button>`.
1431
+
1184
1432
  **Properties:**
1433
+ - `href?: string` — when set to a safe link URL (`http:`/`https:`/`blob:`/`mailto:`/relative; see
1434
+ `safeLinkHref`), the root renders as an `<a href=…>` instead of a `<button>`. Setting `download`
1435
+ narrows the allowlist to `http:`/`https:`/`blob:`/relative — `mailto:` names no retrievable bytes,
1436
+ so a `mailto:` href paired with `download` falls back to the native `<button>`. Unset (the default)
1437
+ renders a plain `<button>`, unchanged. `type` (submit/reset) has no effect while the anchor
1438
+ renders. While the button is disabled the anchor is rendered **without** `href` (keeping
1439
+ `aria-disabled="true"`), so a disabled link button cannot navigate. An unsafe/unparseable value
1440
+ falls back to the native `<button>`
1441
+ - `target?: string` — native anchor `target`, used only while `href` resolves to a link. Setting it
1442
+ (e.g. `'_blank'`) automatically derives `rel="noopener noreferrer"` on the anchor; `rel` is never
1443
+ independently settable (reverse-tabnabbing). Ignored in `<button>` mode
1444
+ - `download?: string` — native anchor `download` attribute, used only while `href` resolves to a
1445
+ link. Ignored in `<button>` mode
1185
1446
  - `variant: 'neutral' | 'brand' | 'success' | 'warning' | 'danger' = 'neutral'` (reflected)
1186
1447
  - `appearance: 'accent' | 'filled' | 'outlined' | 'plain' | 'quiet' | 'link' = 'filled'` (reflected)
1187
1448
  — `'accent'` is a
@@ -1202,19 +1463,24 @@ shadow-internal native button doesn't participate in an ancestor form's submissi
1202
1463
  - `loading: boolean = false` (reflected) — shows an internal spinner and disables the button without
1203
1464
  clearing `disabled`
1204
1465
  - `disabled: boolean = false` (reflected)
1466
+ - `accessibleLabel: string | null = null` (attribute `aria-label`) — accessible name forwarded
1467
+ reactively to the internal native button or anchor; changing or removing the attribute after
1468
+ mount updates the actual focused control
1205
1469
 
1206
1470
  The shared `m` size uses `--lr-font-size-m`. The internal button follows the host's inline size through `--lr-button-width` (default
1207
1471
  `100%`), and each size tier's `min-block-size` floor is exposed as its own token (see below).
1208
1472
 
1209
- **Getters/methods:** `click()`, `focus(options?)`, and `blur()` — forwarded to the internal native
1210
- `<button>`; `click()` also runs the component's submit/reset behavior.
1473
+ **Getters/methods:** `click()`, `focus(options?)`, and `blur()` — forwarded to the internal base
1474
+ element (the `<button>`, or the `<a>` in anchor mode); `click()` also runs the component's
1475
+ submit/reset behavior in `<button>` mode.
1211
1476
 
1212
1477
  **Events:** none (a plain native `click` bubbles and composes through the shadow boundary
1213
1478
  unmodified; disabled while `disabled` or `loading`).
1214
1479
 
1215
1480
  **Slots:** default (label content), `start` (leading icon/content), `end` (trailing icon/content).
1216
1481
 
1217
- **CSS parts:** `base`, `label`, `start`, `end`, `spinner` (present only while `loading`).
1482
+ **CSS parts:** `base` (the internal native `<button>`, or an `<a>` when `href` resolves to a safe
1483
+ link), `label`, `start`, `end`, `spinner` (present only while `loading`).
1218
1484
 
1219
1485
  **Themeable custom properties:** `--lr-button-width`, `--lr-button-accent`, `--lr-button-fill`,
1220
1486
  `--lr-button-on-fill`, `--lr-button-border` (each swapped by the active `variant`, default
@@ -1242,6 +1508,9 @@ and the per-`size`
1242
1508
  and any slotted content) and `--lr-button-radius` (default `--lr-radius`, the corner radius) are
1243
1509
  both retunable without a `::part(base)` rule but — unlike the four size knobs below — do not vary
1244
1510
  by `size` tier; `appearance="link"` ignores `--lr-button-radius` (it renders with zero radius).
1511
+ `--lr-button-shadow` is **undeclared by default**, so `box-shadow` falls back to `none` —
1512
+ byte-identical to before this property existed — set it to add a drop shadow (e.g. an
1513
+ elevated/floating action button) without a `::part(base)` rule.
1245
1514
 
1246
1515
  **Retuning one `size` tier's geometry, without a `::part(base)` rule.** Four more properties carry
1247
1516
  the active tier's geometry, and every `:host([size='…'])` rule does nothing but re-assign them — no
@@ -1275,9 +1544,14 @@ box no matter what tier or override is in play.
1275
1544
  ```
1276
1545
 
1277
1546
  **Known gotchas:**
1278
- - A host `aria-label` is forwarded to the internal button as a literal string (for an icon-only
1279
- button); an external `aria-labelledby`/`aria-describedby` idref is not copied across the shadow
1280
- boundary.
1547
+ - `accessibleLabel`/a host `aria-label` is forwarded reactively to the internal button or anchor as
1548
+ a literal string (for an icon-only button); an external `aria-labelledby`/`aria-describedby`
1549
+ idref is not copied across the shadow boundary.
1550
+ - Host `aria-haspopup` and `aria-expanded` values are forwarded to the internal semantic control.
1551
+ For host `aria-controls`, targets in the host's own root are resolved through the reflected
1552
+ element-reference API so a popup relationship survives the component's shadow boundary; browsers
1553
+ without that API retain the forwarded string attribute as a best-effort fallback. This is what
1554
+ lets either button serve as an `lr-menu` trigger.
1281
1555
  - Is form-associated (`static formAssociated = true` + `attachInternals()`), so it participates in
1282
1556
  an ancestor `<form>.elements` the same way `wa-button` does — a sibling text field's own
1283
1557
  Enter-to-submit lookup (which scans `form.elements` for a `type === 'submit'` control) finds it.
@@ -1286,9 +1560,8 @@ box no matter what tier or override is in play.
1286
1560
 
1287
1561
  ## `lr-icon-button`
1288
1562
 
1289
- An accessible icon-only action button — a native `<button>` wrapping an `lr-icon`. Not
1290
- form-associated: it is an action trigger, so `type="submit"`/`"reset"` work through the ancestor
1291
- form the way a native button does, but the element itself contributes no form value.
1563
+ An accessible icon-only action button — a form-associated custom element with a native `<button>`
1564
+ inside. Its `type="submit"`/`"reset"` behavior is forwarded to the ancestor form by the component.
1292
1565
 
1293
1566
  **Properties:**
1294
1567
  - `icon: string = ''` — an `lr-icon` glyph name (see `llms/components/lr-icon.md`)
@@ -1303,6 +1576,12 @@ With neither `accessibleLabel` nor `label` set, the name falls back to the local
1303
1576
  app-wide with `registerLyraLocale()` (see `llms/shared.md`); don't rely on the fallback for a
1304
1577
  button whose purpose isn't generic.
1305
1578
 
1579
+ Host `aria-haspopup` and `aria-expanded` values are forwarded reactively to the shadow-internal
1580
+ native button. Host `aria-controls` targets in the host's own root are resolved through the
1581
+ reflected element-reference API, so using `<lr-icon-button slot="trigger">` inside `<lr-menu>`
1582
+ exposes the menu relationship and expanded state on the element that actually receives focus;
1583
+ browsers without that API retain the forwarded string attribute as a best-effort fallback.
1584
+
1306
1585
  **Methods:** `focus(options?)`, `blur()` — forward to the native button. `click()` also forwards to
1307
1586
  the native button, activating it — including this component's own `type="submit"`/`type="reset"`
1308
1587
  handling, since the click goes through the same `<button>` the pointer/keyboard path does.
@@ -1339,7 +1618,15 @@ that several other components size their icon-only controls against), so overrid
1339
1618
  above 24px — see `llms/shared.md`. `--lr-icon-button-radius` (default `--lr-radius`) is the
1340
1619
  `[part='button']` corner radius, retunable without a `::part(button)` rule — the same
1341
1620
  `--lr-button-radius` pattern; `lr-icon-button` has no `size` tiers, so there is no per-tier gap
1342
- counterpart to it.
1621
+ counterpart to it. `--lr-icon-button-background` (default `transparent`) tints the
1622
+ `[part='button']` background, `--lr-icon-button-background-hover` (default `--lr-color-surface`)
1623
+ its hover-state background, `--lr-icon-button-color` (default `inherit`) its icon/text color,
1624
+ `--lr-icon-button-color-hover` (default `var(--lr-icon-button-color, inherit)`) its hover-state
1625
+ foreground, and `--lr-icon-button-border` (default `0`) the complete native-button border
1626
+ shorthand. These are the same per-component indirection `lr-button`'s
1627
+ `--lr-button-fill`/`--lr-button-on-fill` provide, letting a single button be bordered and tinted
1628
+ without a `::part(button)` rule. Left unset, each falls back to the original value, so rendering is
1629
+ unchanged.
1343
1630
 
1344
1631
  ## `lr-input`
1345
1632
 
@@ -1366,13 +1653,21 @@ form-associated via the same `FormAssociated` mixin as `lr-textarea`. Ships the
1366
1653
  - `inputMode: string = ''` (attribute `inputmode`) / `enterKeyHint: string = ''` (attribute
1367
1654
  `enterkeyhint`) — these four are forwarded verbatim to the native input; an empty string omits
1368
1655
  the attribute entirely
1369
- - `min?: number` / `max?: number` (attributes `min`/`max`) / `step?: number | 'any'` (attribute
1370
- `step`, accepts the native `'any'` value alongside a number) — forwarded verbatim to the native
1656
+ - `min?: number | string` / `max?: number | string` (attributes `min`/`max`) /
1657
+ `step?: number | 'any'` (attribute `step`, accepts the native `'any'` value alongside a number)
1658
+ — forwarded verbatim to the native
1371
1659
  input and validated by it. Intended for `type="number"`; `step` is equally meaningful on
1372
1660
  `type="time"`. On `lr-input` itself the `min`/`max` *attributes* are number-converted, so a
1373
1661
  non-numeric bound only survives a direct property assignment; the declared type also admits a
1374
1662
  string so a subclass can narrow the attribute parsing to its own native type's literal form —
1375
1663
  `lr-time-input` does exactly that. Inert for the other types
1664
+ - `minlength?: number` / `maxlength?: number` (attributes `minlength`/`maxlength`) — text-length
1665
+ bounds forwarded to the native input and reported as `validity.tooShort`/`validity.tooLong`.
1666
+ Apply to the text-bearing types (`text`, `search`, `email`, `password`); the platform ignores
1667
+ both on `type="number"`/`type="time"`, and so does this component
1668
+ - `pattern?: string` (attribute `pattern`) — a regular expression the value must match in full,
1669
+ forwarded to the native input and reported as `validity.patternMismatch`. Anchored to the whole
1670
+ value by the platform, so no `^`/`$` is needed; an empty value never violates it
1376
1671
  - `passwordVisible: boolean = false` (attribute `password-visible` — `type="password"` only)
1377
1672
  - `name`/`disabled`/`required` (from `FormAssociated`)
1378
1673
 
@@ -1447,9 +1742,25 @@ Several controls expose the same pair: a per-`size` `*-min-height` **floor**, an
1447
1742
  **Known gotchas:**
1448
1743
  - `type="email"`/`type="number"` delegate constraint validation to the internal native `<input>`'s
1449
1744
  own browser-computed `validity` (format/range/step), bridged into this element's own
1450
- `ElementInternals` — not a second hand-rolled regex check.
1745
+ `ElementInternals` — not a second hand-rolled regex check. The same bridge carries
1746
+ `minlength`/`maxlength`/`pattern`, so `validity` reports the full native set: `valueMissing`,
1747
+ `typeMismatch`, `rangeUnderflow`, `rangeOverflow`, `stepMismatch`, `tooShort`, `tooLong`,
1748
+ `patternMismatch`, and `badInput`.
1749
+ - **`tooShort`/`tooLong` also fire for a value assigned from script.** The native flags are raised
1750
+ only for a value the *user* edited, so the component recomputes both from its own `value` and ORs
1751
+ them in; `el.value = <over-length>` reports `tooLong` rather than silently submitting. Lengths
1752
+ count UTF-16 code units, matching the native control (one emoji counts as two). `patternMismatch`
1753
+ needs no such handling — the platform applies `pattern` to script-assigned values already.
1754
+ `validationMessage` is the browser's own localized message when the native input flagged the
1755
+ value, and the localized `valueInvalid` string when only the script-value check did.
1756
+ - An empty value is never `tooShort` and never a `patternMismatch` — both native constraints skip
1757
+ the empty string, and `required` is what rejects it.
1451
1758
  - `type="password"` always renders the `password-toggle` button; there is no separate opt-out.
1452
1759
 
1760
+ **Additional API surface:**
1761
+
1762
+ - `click()` — Activates the internal input.
1763
+
1453
1764
  ## `lr-number-input`
1454
1765
 
1455
1766
  A migration-friendly numeric alias of `lr-input` — a subclass whose constructor and
@@ -1459,8 +1770,8 @@ A migration-friendly numeric alias of `lr-input` — a subclass whose constructo
1459
1770
  **Properties:** `size` (`2xs`…`xl`), `placeholder`, `readonly`, `label`, `hint`, `errorText`
1460
1771
  (`error-text`), `accessibleLabel` (`aria-label`), `autocomplete`, `spellcheck`, `autocapitalize`,
1461
1772
  `autoCorrect` (`autocorrect`), `inputMode` (`inputmode`), `enterKeyHint` (`enterkeyhint`), and
1462
- `min`/`max`/`step` (the native numeric constraint validation). `clearable` and `passwordVisible`
1463
- (`password-visible`) are inherited but inert — see gotchas.
1773
+ `min`/`max`/`step` (the native numeric constraint validation). `clearable`, `passwordVisible`
1774
+ (`password-visible`), and `minlength`/`maxlength`/`pattern` are inherited but inert — see gotchas.
1464
1775
 
1465
1776
  **Events:** `input`/`change` (native-style, composed), `lr-input`/`lr-change`
1466
1777
  (`detail: { value }`), `focus`/`blur` (re-dispatched bubbling + composed from the internal native
@@ -1482,7 +1793,8 @@ vary by `size` at all).
1482
1793
  **Known gotchas:**
1483
1794
  - `clearable`/`clear-button`/`lr-clear` are inert: the clear action only renders for
1484
1795
  `type="text"`/`"search"`. `password-visible`/`password-toggle` are likewise inert, since the
1485
- toggle only renders for `type="password"`.
1796
+ toggle only renders for `type="password"`. `minlength`/`maxlength`/`pattern` are inert too — the
1797
+ platform ignores all three on `type="number"`; use `min`/`max`/`step` instead.
1486
1798
  - `type` is re-forced to `number` on every connect, but a later `el.type = 'text'` on a connected
1487
1799
  element is not reverted — use `lr-input` when the type has to change.
1488
1800
 
@@ -1495,8 +1807,9 @@ re-typed `min`/`max` pair (below); every other property, event, slot and part is
1495
1807
  **Properties:** `size` (`2xs`…`xl`), `placeholder`, `readonly`, `label`, `hint`, `errorText`
1496
1808
  (`error-text`), `accessibleLabel` (`aria-label`), `autocomplete`, `spellcheck`, `autocapitalize`,
1497
1809
  `autoCorrect` (`autocorrect`), `inputMode` (`inputmode`), and `enterKeyHint` (`enterkeyhint`).
1498
- `clearable` and `passwordVisible` (`password-visible`) are inherited but inert, exactly as on
1499
- `lr-number-input`.
1810
+ `clearable`, `passwordVisible` (`password-visible`), and `minlength`/`maxlength`/`pattern` are
1811
+ inherited but inert, exactly as on `lr-number-input` — the platform ignores all three length/pattern
1812
+ constraints on `type="time"` as well.
1500
1813
 
1501
1814
  `step` is forwarded verbatim to the native time input, where it means seconds (`step="1"` reveals
1502
1815
  the seconds field, `'any'` disables step validation).
@@ -1612,9 +1925,9 @@ interface PhoneNumberAdapter {
1612
1925
  native telephone input.
1613
1926
  - `countryLabel: string = 'Select'` (attribute `country-label`) — country-selector accessible name;
1614
1927
  the untouched default routes through the shared localized `select` message.
1615
- - `incompleteText: string = 'The value is invalid.'` (attribute `incomplete-text`) — validation
1616
- message for dial-like input that can still become valid with more digits. The untouched default
1617
- routes through the shared localized `valueInvalid` message.
1928
+ - `incompleteText: string = 'This phone number is incomplete.'` (attribute `incomplete-text`) —
1929
+ validation message for dial-like input that can still become valid with more digits. The
1930
+ untouched default routes through the localized `phoneInputIncomplete` message.
1618
1931
  - `invalidText: string = 'The value is invalid.'` (attribute `invalid-text`) — completed-invalid
1619
1932
  message, localized through the same shared key while left at its default.
1620
1933
  - `autocomplete: string = 'tel'`, `inputmode: 'tel'|'numeric'|'text' = 'tel'`,
@@ -1721,6 +2034,17 @@ import '@aceshooting/lyra-ui/components/media/flag/flag-peer.js';
1721
2034
  via `::part` styling tricks, and don't expect the flag inside the open popup list — a native
1722
2035
  `<option>` is text-only.
1723
2036
 
2037
+ **Additional API surface:**
2038
+
2039
+ - `click()` — Activate the internal telephone input unless the form control is effectively disabled.
2040
+ - `--lr-phone-input-flag-size` — Selected flag size, scaled by `size`.
2041
+ - `--lr-phone-input-glyph-size` — Country selector glyph size, scaled by `size`.
2042
+ - `--lr-phone-input-gap` — Country-trigger child gap. Default: `var(--lr-space-xs)`.
2043
+ - `--lr-phone-input-radius` — Input-wrapper corner radius. Default: `var(--lr-radius)`.
2044
+ - `--lr-phone-input-focus-border-color` — Focused row border color. Default: `var(--lr-color-brand)`.
2045
+ - `--lr-phone-input-invalid-border-color` — Invalid row border color. Default: `var(--lr-color-danger)`.
2046
+ - `--lr-phone-input-country-hover-bg` — Country trigger hover background. Default: `var(--lr-color-brand-quiet)`.
2047
+
1724
2048
  ---
1725
2049
 
1726
2050
  ## `lr-time-range`
@@ -1744,6 +2068,11 @@ consumer-facing `disabled` property/attribute itself.
1744
2068
  - `disabled: boolean = false` (reflected)
1745
2069
  - `startLabel: string = 'Range start'` (attribute `start-label`) — `aria-label` for the start handle
1746
2070
  - `endLabel: string = 'Range end'` (attribute `end-label`) — `aria-label` for the end handle
2071
+ - `valueFormatter?: TimeRangeValueFormatter` (attribute: false) — maps each finite, clamped
2072
+ `aria-valuenow` to optional human-readable `aria-valuetext`; called as
2073
+ `(value, handle: TimeRangeHandle)`, where `TimeRangeHandle = 'start' | 'end'`. The formatter may
2074
+ return `string | null | undefined`; a nullish result omits `aria-valuetext` for that handle.
2075
+ Leaving the property unset preserves the numeric-only contract
1747
2076
  - `presets: TimeRangePreset[] = []` (attribute: false) — `TimeRangePreset { label: string; start:
1748
2077
  number; end: number }`; optional discrete presets (e.g. "Last 7 days") rendered as a
1749
2078
  `[part="presets"]` button row above the track — purely additive, the continuous brush is
@@ -1759,8 +2088,9 @@ key-up-commit, or when a preset button is clicked, `detail: { start, end }`)
1759
2088
  **CSS parts:** `base`, `track`, `range`, `handle-start`, `handle-end`, `presets`, `preset-button`
1760
2089
 
1761
2090
  **Themeable custom properties:** mostly shared tokens — `--lr-color-border`, `--lr-color-brand`,
1762
- `--lr-color-surface`, `--lr-shadow` (track/handles), `--lr-opacity-disabled` (`:host([disabled])`
1763
- dimming), plus (for `presets`) `--lr-color-text`, `--lr-color-on-brand` (the active preset
2091
+ `--lr-color-surface`, `--lr-shadow` (track/handles), `--lr-opacity-disabled` (`:host(:disabled)`
2092
+ dimming, including ancestor-fieldset disablement), plus (for `presets`) `--lr-color-text`,
2093
+ `--lr-color-on-brand` (the active preset
1764
2094
  button's text), `--lr-radius`, `--lr-space-xs/-s`, `--lr-transition-fast`,
1765
2095
  `--lr-focus-ring-*`.
1766
2096
 
@@ -1787,10 +2117,13 @@ any ancestor of the `<lr-time-range>` therefore reaches it. (The same technique
1787
2117
  **Optional peer deps:** none.
1788
2118
 
1789
2119
  ```html
1790
- <lr-time-range min="0" max="1440" start="480" end="1020" step="15"></lr-time-range>
2120
+ <lr-time-range id="months" min="0" max="2" start="0" end="2"></lr-time-range>
1791
2121
  <script>
1792
- document.querySelector('lr-time-range')
1793
- .addEventListener('lr-change', (e) => console.log(e.detail.start, e.detail.end));
2122
+ const months = ['April 2023', 'May 2023', 'June 2023'];
2123
+ const range = document.getElementById('months');
2124
+ range.valueFormatter = (value, handle) =>
2125
+ `${handle === 'start' ? 'From' : 'Through'} ${months[value]}`;
2126
+ range.addEventListener('lr-change', (e) => console.log(e.detail.start, e.detail.end));
1794
2127
  </script>
1795
2128
  ```
1796
2129
 
@@ -1807,9 +2140,9 @@ any ancestor of the `<lr-time-range>` therefore reaches it. (The same technique
1807
2140
  slider.
1808
2141
  - `aria-valuemin`/`aria-valuemax` on each handle report that handle's reachable sub-range (bounded by
1809
2142
  its sibling), not the full domain — matching what Home/End actually jump to.
1810
- - No `aria-valuetext`: only raw numeric `aria-valuenow` is exposed (omitted entirely, rather than a
1811
- literal `"NaN"`, if `start`/`end` is non-finite), no hook for a human-readable (e.g. formatted
1812
- date/time) equivalent of the mapped domain.
2143
+ - `valueFormatter` is presentation-only: `aria-valuenow`, geometry, emitted values, and preset
2144
+ matching stay numeric. Non-finite handles omit both `aria-valuenow` and `aria-valuetext` and are
2145
+ never passed to the formatter.
1813
2146
  - Handles a `min > max` domain, a non-positive/non-finite `step`, and disabled-mid-drag/
1814
2147
  disconnect-mid-drag correctly (tested) — safe to rely on those edge cases. Concurrent drags are
1815
2148
  tracked per `pointerId` (not a single scalar), so a two-finger touch — one finger per handle —
@@ -1819,12 +2152,23 @@ any ancestor of the `<lr-time-range>` therefore reaches it. (The same technique
1819
2152
  - Non-finite domain/handle values use finite fallback geometry, and non-finite or negative steps are
1820
2153
  treated as unstepped; invalid values never become `NaN`/`Infinity` CSS or ARIA strings.
1821
2154
  - `startLabel`/`endLabel` only override each handle's `aria-label`; they don't affect
1822
- `aria-valuenow`/`aria-valuemin`/`aria-valuemax` (still raw numbers) or any visible text.
2155
+ `aria-valuenow`/`aria-valuemin`/`aria-valuemax`, `valueFormatter`, or any visible text.
1823
2156
  - An ancestor `<fieldset disabled>` toggling is reflected via `formDisabledCallback` into
1824
2157
  `effectiveDisabled` (tracked separately from the consumer's own `disabled`), so re-enabling the
1825
2158
  fieldset correctly restores a handle that had `disabled` set explicitly by the consumer, and vice
1826
2159
  versa — mirrors `lr-combobox`'s identical pattern.
1827
2160
 
2161
+ **Additional API surface:**
2162
+
2163
+ - `--lr-time-range-handle-size` — Visible handle diameter. Default: `14px*scale`.
2164
+ - `--lr-time-range-hit-size` — Actual drag hit-area diameter; endpoint handles are inset by half this distance so the hit geometry stays inside the host. Default: `max(24px,28px*scale)`.
2165
+ - `--lr-time-range-track-size` — Track and selected-range thickness. Default: `4px*scale`.
2166
+ - `--lr-time-range-base-size` — Brush baseline block size. Default: `1.5rem*scale`.
2167
+ - `--lr-time-range-preset-gap` — Gap between preset buttons. Default: `var(--lr-space-xs)`.
2168
+ - `--lr-time-range-preset-radius` — Preset button corner radius. Default: `var(--lr-radius)`.
2169
+ - `--lr-time-range-preset-padding` — Preset button padding, scaled by `size`.
2170
+ - `--lr-time-range-preset-font-size` — Preset button font size, scaled by `size`.
2171
+
1828
2172
  ---
1829
2173
 
1830
2174
  ## `lr-swatch-picker`
@@ -1838,16 +2182,18 @@ named colors, the shape apps otherwise hand-roll as a row of round accent-color
1838
2182
 
1839
2183
  **Properties:**
1840
2184
  - `options: SwatchOption[] = []` (attribute: false) — `SwatchOption { value: string; color: string;
1841
- label: string; icon?: unknown }`; `color` is any CSS color string used as the swatch fill, `label`
1842
- is each swatch's accessible name and `title`. `icon` is an optional custom shape (e.g. a gem
1843
- glyph) rendered *instead of* the plain filled circle; the swatch sets `color: <option color>` so a
1844
- `currentColor`-based SVG picks the option's color up automatically, matching
1845
- `<lr-segmented>`'s `SegmentedItem.icon`.
2185
+ label: string; icon?: unknown; gemstone?: GemstoneKey }`; `color` is any CSS color string used as
2186
+ the swatch fill, `label` is each swatch's accessible name and `title`. `icon` is an optional
2187
+ custom shape rendered *instead of* the plain filled circle; `gemstone` selects the canonical
2188
+ faceted glyph when `mode="gemstone"`. An explicit `icon` wins over `gemstone`.
1846
2189
  - `value: string | null = null` — the currently selected option's `value` (controlled); `null`
1847
2190
  leaves nothing selected while keeping the first swatch tabbable.
1848
2191
  - `size: '2xs' | 'xs' | 's' | 'm' | 'l' | 'xl' = 'm'` (reflected — scales the swatch hit-area and
1849
2192
  fill diameter proportionally, hit-area floored at 24px; not pixel-matched to `lr-input`'s
1850
2193
  row-height scale)
2194
+ - `mode: 'swatch' | 'gemstone' = 'swatch'` (reflected) — `swatch` preserves the plain-circle
2195
+ default. `gemstone` renders the shared glyph for options carrying a `gemstone` key and enables
2196
+ the selected glow/shine defaults.
1851
2197
  - `label: string = ''` — accessible name copied to the internal `role="radiogroup"`; when empty, a
1852
2198
  host-level `aria-label` is used as a fallback.
1853
2199
 
@@ -1862,7 +2208,8 @@ swatch's interactive hit target, sized via `--lr-swatch-picker-hit-size` — def
1862
2208
  `[part='swatch'][aria-checked='true']`), `swatch-fill` (the filled circle inside it, sized via
1863
2209
  `--lr-swatch-picker-fill-size` — defaults to `--lr-size-1-5rem`, also swapped per `size` tier —
1864
2210
  rendered when the option has no `icon`), `swatch-icon` (the option's `icon` shape, rendered in its
1865
- place when it has one). Exactly one of `swatch-fill`/`swatch-icon` is mounted per swatch, so the
2211
+ place when it has one, with its inherited `font-size` set to the same fill-size token so a `1em`
2212
+ glyph fills the wrapper). Exactly one of `swatch-fill`/`swatch-icon` is mounted per swatch, so the
1866
2213
  two never coexist.
1867
2214
 
1868
2215
  **Themeable custom properties:** `--lr-swatch-picker-selected-color` (ring color around the
@@ -1876,7 +2223,9 @@ for a looping brighten-and-settle pulse on the selected swatch. It drives a sepa
1876
2223
  works identically for a fill and an icon; disabled outright under `prefers-reduced-motion: reduce`,
1877
2224
  which also drops the hover/selection scale transition), `--lr-swatch-picker-hit-size` (hit-area
1878
2225
  size, swapped per `size` tier), `--lr-swatch-picker-fill-size` (visible fill/icon diameter, swapped
1879
- per `size` tier); plus shared tokens — `--lr-color-border`/`-brand`, `--lr-space-xs`,
2226
+ per `size` tier), `--lr-swatch-picker-gemstone-selected-blur` (default `--lr-size-0-5rem` in
2227
+ gemstone mode), `--lr-swatch-picker-gemstone-shine-duration` (default `1.8s` in gemstone mode);
2228
+ plus shared tokens — `--lr-color-border`/`-brand`, `--lr-space-xs`,
1880
2229
  `--lr-border-width-thin`/`-thick`, `--lr-radius`, `--lr-transition-fast`, `--lr-focus-ring-*`,
1881
2230
  and the per-tier `--lr-size-*` tokens.
1882
2231
 
@@ -1896,6 +2245,26 @@ and the per-tier `--lr-size-*` tokens.
1896
2245
  </script>
1897
2246
  ```
1898
2247
 
2248
+ For the shared gemstone accent mode, import the Lit-free palette data entry. The glyph renderer
2249
+ remains available separately from `theme/gemstones.js` for Lit templates; palette-only consumers
2250
+ do not need to load Lit. The consumer still owns localized labels, display order, and the initial
2251
+ value:
2252
+
2253
+ ```ts
2254
+ import '@aceshooting/lyra-ui/components/forms/swatch-picker/swatch-picker.js';
2255
+ import { GEMSTONES } from '@aceshooting/lyra-ui/theme/gemstones-data.js';
2256
+
2257
+ const order = ['emerald', 'ruby', 'sapphire', 'hematite'] as const;
2258
+ picker.mode = 'gemstone';
2259
+ picker.options = order.map((key) => ({
2260
+ value: key,
2261
+ color: GEMSTONES[key].fill,
2262
+ label: translateGemstone(key),
2263
+ gemstone: key,
2264
+ }));
2265
+ picker.value = 'ruby';
2266
+ ```
2267
+
1899
2268
  **Known gotchas:**
1900
2269
  - arrow-key navigation cycles (past the last swatch wraps to the first, and vice versa) rather than
1901
2270
  clamping, and self-selects on move — arrow-navigating to a swatch immediately updates `value` and
@@ -1911,6 +2280,10 @@ and the per-tier `--lr-size-*` tokens.
1911
2280
  - the semantic `radiogroup` lives inside shadow DOM. Set `label` (preferred for reactive code) or a
1912
2281
  host `aria-label`; the component deliberately forwards the resulting name to that internal role.
1913
2282
 
2283
+ **Additional API surface:**
2284
+
2285
+ - `--lr-swatch-picker-gap` — Gap between swatches. Default: `var(--lr-space-xs)`.
2286
+
1914
2287
  ---
1915
2288
 
1916
2289
  ## `lr-checkbox`
@@ -1934,12 +2307,16 @@ visual box/checkmark. Structurally the same idea as `<lr-switch>` (form-associat
1934
2307
  `lr-change` alias (`detail: { checked: boolean }`). Programmatic `.checked` assignments are
1935
2308
  silent. Internal `focus`/`blur` are re-dispatched as bubbling, composed host events.
1936
2309
 
1937
- **Methods:** `focus(options?)` and `blur()` forward to the internal checkbox control.
2310
+ **Methods:** `focus(options?)`, `blur()`, and `click()` forward to the internal checkbox control.
1938
2311
 
1939
2312
  **Slots:** default — label text, rendered next to the box. Clicking it toggles the checkbox, the
1940
2313
  same as clicking a native checkbox's associated `<label>`. If left empty, set `aria-label` on the
1941
2314
  host so the control still has an accessible name.
1942
2315
 
2316
+ Host `aria-describedby` is forwarded to the internal `role="checkbox"`, so an externally-owned
2317
+ description can be associated with one checkbox inside a group. The attribute is omitted from the
2318
+ internal role when unset and tracks host attribute changes.
2319
+
1943
2320
  **CSS parts:** `base` (the whole interactive control, `role="checkbox"`), `box` (the small square
1944
2321
  showing the checkmark/indeterminate dash), `checkmark` (the checkmark or indeterminate-dash glyph),
1945
2322
  `label` (wrapper around the default slot)
@@ -2031,7 +2408,7 @@ control's visible, clickable label (same as `<lr-checkbox>`).
2031
2408
  **Events:** `lr-change` (`detail: { checked: boolean }`) — fired on a user toggle (click or
2032
2409
  Space/Enter); not fired for a programmatic `.checked` assignment.
2033
2410
 
2034
- **Methods:** `focus(options?)` and `blur()` forward to the internal switch control.
2411
+ **Methods:** `focus(options?)`, `blur()`, and `click()` forward to the internal switch control.
2035
2412
 
2036
2413
  **Slots:**
2037
2414
  - default — label text, rendered next to the track. Clicking it toggles the switch, the same as
@@ -2097,10 +2474,13 @@ seamlessly right after. First-party invention (no Web Awesome equivalent).
2097
2474
  - `label: string = ''` — accessible name set as `aria-label` on the `role="slider"` thumb; a plain
2098
2475
  `aria-label` attribute on the host itself is honored as a fallback when this is left unset (matching
2099
2476
  `<lr-checkbox>`/`<lr-switch>`).
2477
+ - `valueFormatter?: SliderValueFormatter` (attribute: false) — maps the finite, clamped
2478
+ `aria-valuenow` number to optional human-readable `aria-valuetext`. The formatter may return
2479
+ `string | null | undefined`; a nullish result omits `aria-valuetext`. Leaving the property unset
2480
+ preserves the existing numeric `aria-valuetext`.
2100
2481
  - `showValue: boolean = true` (attribute `show-value`) — whether to render the current numeric value as
2101
2482
  visible text next to the track. Not reflected; toggle it off via the `.showValue=${false}` property
2102
- binding a bare `show-value="false"` content attribute is still truthy, since presence is all Lit's
2103
- default boolean converter checks.
2483
+ binding or a plain `show-value="false"` content attribute.
2104
2484
  - Inherited from `FormAssociated`: `name: string = ''`, `value: string` (form-submitted string form),
2105
2485
  `disabled: boolean = false` (reflected), `required: boolean = false` (reflected).
2106
2486
 
@@ -2136,6 +2516,7 @@ when `show-value` is true)
2136
2516
  step="0.1"
2137
2517
  label="Temperature"
2138
2518
  .valueAsNumber=${0.7}
2519
+ .valueFormatter=${(value) => `${value * 100}%`}
2139
2520
  @lr-input=${(e) => setDraftTemperature(e.detail.value)}
2140
2521
  @lr-change=${(e) => commitTemperature(e.detail.value)}
2141
2522
  ></lr-slider>
@@ -2154,6 +2535,9 @@ native range input either.
2154
2535
  value); ArrowUp/ArrowDown are never swapped, since direction only affects the horizontal inline axis.
2155
2536
  - Changing `min`/`max`/`step` after mount automatically re-clamps/re-snaps the current `value` in the
2156
2537
  next update — narrowing the domain can silently move the slider's value.
2538
+ - `valueFormatter` is presentation-only: `aria-valuenow`, the visible numeric readout, geometry,
2539
+ form value, and emitted values stay numeric. With no formatter, `aria-valuetext` remains the
2540
+ numeric string rendered by earlier versions; a nullish formatter result omits it.
2157
2541
  - A pointer drag fires `lr-input` continuously and a single `lr-change` on release; a keyboard step
2158
2542
  fires exactly one of each per press, but OS key-repeat while a key is held re-fires `lr-input` on
2159
2543
  every repeat while still only committing `lr-change` once, on the eventual keyup.
@@ -2209,16 +2593,21 @@ selected value is submitted under `name` and `required` requires at least one se
2209
2593
 
2210
2594
  **Properties:** `label`, `hint`, `errorText`, `value`, `name`, `required`, `disabled`, and
2211
2595
  `accessibleLabel` (`aria-label`). **Slots:** default checkboxes, `label`, `hint`, `error`.
2212
- **Events:** `input`, `change`, and `lr-change` with `{ value: string[] }`.
2596
+ **Events:** a user toggle emits exactly one group-owned `input`, then `change`, then `lr-change`;
2597
+ all three carry `{ value: string[] }`. The owned child's corresponding events are consumed at the
2598
+ group boundary, so an ancestor does not receive a second, differently shaped sequence.
2599
+ Programmatic child/property synchronization is silent.
2213
2600
  **CSS parts:** `form-control`, `form-control-label`, `options`, `hint`, `error`.
2214
2601
 
2215
2602
  **`value` is a read-out of child state, not an input.** The children are the single source of
2216
2603
  truth. An internal sync recomputes `value` from them and reassigns it on every child toggle,
2217
- `slotchange`, `name`/`required` change, blur, and `form.reset()` — so a host assignment is
2218
- silently overwritten by the next of those. `connectedCallback()` runs that sync **before the first
2219
- render**, which means even a constructor-time or template-time `.value=${…}` binding is discarded
2220
- before anything can observe it. Assigning `value` logs a `console.warn` naming the property (once
2221
- per group instance).
2604
+ programmatic child `checked`/`value`/`disabled` update, `slotchange`, `name`/`required` change,
2605
+ blur, and `form.reset()` — so a host assignment is silently overwritten by the next of those.
2606
+ Only a checkbox whose nearest `lr-checkbox-group` ancestor is this group contributes; a nested
2607
+ group owns its own descendants and form entries. `connectedCallback()` runs that sync **before the
2608
+ first render**, which means even a constructor-time or template-time `.value=${…}` binding is
2609
+ discarded before anything can observe it. Assigning `value` logs a `console.warn` naming the
2610
+ property (once per group instance).
2222
2611
 
2223
2612
  - **To preselect**, set `checked` on the children: `<lr-checkbox value="a" checked>`.
2224
2613
  - **To read the selection**, use this property or the `lr-change` event detail.
@@ -2242,7 +2631,9 @@ hit area stays fixed at `40px` across all sizes), `allowDuplicates` (`allow-dupl
2242
2631
  `false`), `editable` (reflected, default `false` — see below), and `delimiter: string | null` (default
2243
2632
  `','` — see below).
2244
2633
  **Slots:** `label`, `hint`, `error`.
2245
- **Events:** `input`, `change`, `lr-add` (`detail: { value }`), `lr-remove`
2634
+ **Events:** native-style `input` and `change` (`detail: { value: string[] }`), bubbling/composed
2635
+ `focus` and `blur` re-dispatched from the internal text input, `lr-add` (`detail: { value }`),
2636
+ `lr-remove`
2246
2637
  (`detail: { value, index }` — cancelable; `preventDefault()` keeps the token in `value`
2247
2638
  unchanged), and `lr-token-edit`
2248
2639
  (`detail: { value, previousValue, index }` — an existing token was edited in place and committed).
@@ -2251,7 +2642,8 @@ token's text, doubling as the roving-focus edit trigger — rendered only while
2251
2642
  `token-editor` (the inline text field that replaces a token's text while it is open for editing —
2252
2643
  rendered only while `editable` and only for the token being edited), `remove` (the
2253
2644
  per-token remove button, floored at the shared `--lr-icon-button-size` tap size around a compact
2254
- glyph), `input`, `hint`, `error`. `focus()` and `blur()` forward to the internal text input.
2645
+ glyph), `input`, `hint`, `error`. `focus()`, `blur()`, and `click()` forward to the internal text
2646
+ input.
2255
2647
 
2256
2648
  **`editable` — editing a token in place.** Off by default, in which case the token row renders
2257
2649
  exactly as it does without the feature and stays non-focusable. Turn it on and each token becomes a
@@ -2285,6 +2677,17 @@ inline to `--lr-size-8rem`), `--lr-token-input-min-input-inline-size` (default `
2285
2677
  floor that input keeps once tokens have consumed the row), and `--lr-token-input-editor-inline-size`
2286
2678
  (default `--lr-size-6rem`, the inline size of the inline token editor opened by `editable`).
2287
2679
 
2680
+ **Additional API surface:**
2681
+
2682
+ - `--lr-token-input-token-padding` — Per-token chip padding, scaled by `size`.
2683
+ - `--lr-token-input-gap` — Gap between form/row children. Default: `var(--lr-space-xs)`.
2684
+ - `--lr-token-input-token-gap` — Gap inside token chips. Default: `var(--lr-space-2xs)`.
2685
+ - `--lr-token-input-radius` — Row/token corner radius. Default: `var(--lr-radius)`.
2686
+ - `--lr-token-input-token-bg` — Token chip background. Default: `var(--lr-color-brand-quiet)`.
2687
+ - `--lr-token-input-action-hover-bg` — Edit/remove hover background. Default: `var(--lr-color-brand-quiet)`.
2688
+ - `--lr-token-input-focus-border-color` — Focused row border color. Default: `var(--lr-color-brand)`.
2689
+ - `--lr-token-input-invalid-border-color` — Invalid row border color. Default: `var(--lr-color-danger)`.
2690
+
2288
2691
  ## `lr-code-editor`
2289
2692
 
2290
2693
  Dependency-free, form-associated multiline code editor built around a native textarea, with an
@@ -2346,6 +2749,11 @@ spaces — the Tab key keeps inserting `tabSize` spaces in that case.
2346
2749
  - The host gets a `data-invalid` attribute once the field has been blurred at least once and
2347
2750
  validity fails; the styles hang the danger border off it.
2348
2751
 
2752
+ **Additional API surface:**
2753
+
2754
+ - `selectionDirection` — The current selection direction of the internal editing surface. Type: `'forward' | 'backward' | 'none'`.
2755
+ - `click()` — Activates the internal editing surface.
2756
+
2349
2757
  ## `lr-color-picker`
2350
2758
 
2351
2759
  A form-associated native color picker with label, hint, and error chrome. **Properties:** the shared
@@ -2362,6 +2770,13 @@ parts:** `form-control`, `form-control-label` (the label; `label` is an alias ke
2362
2770
  auto-swapped per `size` tier (default `'m'` reads `2.5rem`, `'2xs'` reads `1.25rem`, etc.), matching
2363
2771
  the size ladder `lr-input` uses.
2364
2772
 
2773
+ **Additional API surface:**
2774
+
2775
+ - `click()` — Activates the internal color input.
2776
+ - `--lr-color-picker-gap` — Gap between field chrome. Default: `var(--lr-space-xs)`.
2777
+ - `--lr-color-picker-radius` — Swatch corner radius. Default: `var(--lr-radius)`.
2778
+ - `--lr-color-picker-hover-border-color` — Hover border color. Default: `var(--lr-color-brand)`.
2779
+
2365
2780
  ## `lr-emoji-picker`
2366
2781
 
2367
2782
  A searchable, keyboard-navigable, form-associated emoji picker. `groups` is fully consumer-suppliable
@@ -2391,8 +2806,10 @@ supporting text rendered below the search/grid; unset renders no hint chrome. `e
2391
2806
  `error` content when provided); unset renders no error chrome. `size: '2xs' | 'xs' | 's' | 'm' | 'l' | 'xl' = 'm'` —
2392
2807
  visual size; scales the emoji grid item box and its glyph proportionally, floored at 24px (WCAG 2.5.8).
2393
2808
 
2394
- **Events:** `lr-change` with `detail: { emoji }` (an emoji was picked — click, or Enter/Space on
2395
- the active grid cell; also sets `value`), plus the shared form `input`, `change`, `focus`, and `blur`.
2809
+ **Events:** a pick emits native-style composed `input`, then `change` (both with no detail), then
2810
+ `lr-change` with `detail: { emoji }` (click, or Enter/Space on the active grid cell; also sets
2811
+ `value`). The internal search input's `focus` and `blur` are re-dispatched as bubbling, composed
2812
+ host events. Programmatic `value` changes are silent.
2396
2813
 
2397
2814
  **Keyboard:** the grid is a roving-tabindex listbox (a single Tab stop — only the active emoji is
2398
2815
  tabbable). ArrowLeft/ArrowRight step the active item backward/forward following reading direction
@@ -2451,6 +2868,13 @@ windowed row are additionally capped at 20 regardless of available width.
2451
2868
  supply `groups` directly instead. The loader never throws; a missing or failed peer logs one
2452
2869
  `console.warn` and simply leaves `groups` empty.
2453
2870
 
2871
+ **Additional API surface:**
2872
+
2873
+ - `--lr-emoji-picker-control-gap` — Gap between field sections. Default: `var(--lr-space-xs)`.
2874
+ - `--lr-emoji-picker-radius` — Outer picker corner radius. Default: `var(--lr-radius)`.
2875
+ - `--lr-emoji-picker-item-radius` — Search and emoji corner radius. Default: `var(--lr-radius-xs)`.
2876
+ - `--lr-emoji-picker-search-hover-border-color` — Search hover border. Default: `var(--lr-color-brand)`.
2877
+
2454
2878
  ## `lr-rubric-form`
2455
2879
 
2456
2880
  A configurable annotation rubric (LangSmith annotation-queue style): score, category, and
@@ -2460,7 +2884,10 @@ freeform-comment keys with a submit-and-next flow for working through an eval qu
2460
2884
  renders `<lr-textarea>`.
2461
2885
 
2462
2886
  **Properties:** `keys: RubricKey[] = []` (attribute: false, each `{ key, type, label?, description?,
2463
- required?, min?, max?, step? }`), `value: RubricValue = {}` (attribute: false), `itemId: string = ''`
2887
+ required?, min?, max?, step?, options?, multiple?, placeholder? }`; `options?` contains
2888
+ `RubricKeyOption { value: string; label?: string; description?: string }`, `multiple?` selects the
2889
+ checkbox-group category route, and `placeholder?` customizes comment input), `value: RubricValue =
2890
+ {}` (attribute: false), `itemId: string = ''`
2464
2891
  (attribute `item-id`, reflected), `hasNext: boolean = false` (attribute `has-next`), `skippable:
2465
2892
  boolean = false`, and the shared form properties `name` and `disabled`. `errors: Record<string,
2466
2893
  string>` is the current per-key validation-message state.
@@ -2561,6 +2988,15 @@ peer warning duplication; `lr-flag` itself already logs one) when the optional
2561
2988
  - arrow-key navigation is vertical-only (Home/End/ArrowUp/ArrowDown); there is no
2562
2989
  ArrowLeft/ArrowRight remap under RTL, since there is no horizontal axis to remap.
2563
2990
 
2991
+ **Additional API surface:**
2992
+
2993
+ - `--lr-locale-picker-gap` — Trigger and option child gap. Default: `var(--lr-space-xs)`.
2994
+ - `--lr-locale-picker-radius` — Trigger/listbox/option corner radius. Default: `var(--lr-radius)`.
2995
+ - `--lr-locale-picker-trigger-hover-bg` — Trigger hover background. Default: `var(--lr-color-brand-quiet)`.
2996
+ - `--lr-locale-picker-open-border-color` — Open trigger border color. Default: `var(--lr-color-brand)`.
2997
+ - `--lr-locale-picker-option-selected-border-color` — Selected option border. Default: `var(--lr-color-brand)`.
2998
+ - `--lr-locale-picker-option-selected-color` — Selected option text. Default: `var(--lr-color-brand)`.
2999
+
2564
3000
  # Data display, dashboards & flow canvas (`components/data/`)
2565
3001
 
2566
3002
  ## `lr-sparkline`
@@ -2622,7 +3058,8 @@ KPI/stat card — value + unit + label + optional icon/trend/caption.
2622
3058
  - `unit: string = ''`
2623
3059
  - `href?: string` — when it resolves to a safe URL, the root is a real whole-stat `<a>`; unsafe
2624
3060
  URL schemes keep the stat non-interactive
2625
- - `target?: string` / `rel?: string` — forwarded to the anchor while `href` is active
3061
+ - `target?: string` — forwarded to the anchor while `href` is active; a nonempty target derives
3062
+ `rel="noopener noreferrer"` rather than exposing a separately settable `rel`
2626
3063
  - `variant: 'neutral'|'success'|'warning'|'danger' = 'neutral'` (reflected)
2627
3064
  - `trend: number = NaN` (a `NaN` sentinel hides the trend pill entirely — set an actual number to
2628
3065
  show it)
@@ -2714,7 +3151,10 @@ drives `emphasis`'s accent edge and value tint).
2714
3151
 
2715
3152
  ## `lr-table`
2716
3153
 
2717
- Sort/select-aware data table. Sorting remains consumer-controlled; optional filtering, pagination,
3154
+ Sort/select-aware data table. Sorting is built in and client-side by default (`sortMode="client"`
3155
+ orders `rows` from `sortKey`/`sortDir` and the active column's `sortValue`); `sortMode="server"`
3156
+ renders `rows` in the order given for a server-ordered table, and `lr-sort` fires on header
3157
+ activation either way. Optional filtering, pagination,
2718
3158
  and loading chrome are built in while remaining controlled at the public API boundary. A
2719
3159
  `columns[].heatValue`-opted-in heat-tint mode paints a shared, normalized color-mix background across
2720
3160
  every tinted cell (auto-derived domain, or overridden via `heatTintScale`); `rowTotal`/`grandTotal`
@@ -2724,8 +3164,16 @@ own "consumer computes/renders" contract rather than assuming addition.
2724
3164
 
2725
3165
  **Properties:**
2726
3166
  - `columns: TableColumn<T>[] = []` (attribute: false) — `{ key, label, headerCell?, width?,
2727
- minWidth?, maxWidth?, resizable?, sortable?, align?: 'start'|'end', priority?: 'medium'|'low', sticky?: boolean |
3167
+ minWidth?, maxWidth?, resizable?, sortable?, sortValue?, align?: 'start'|'end', priority?: 'medium'|'low', sticky?: boolean |
2728
3168
  'start' | 'end', footer?, cellStyle?, heatValue?, cell: (row) => unknown }` —
3169
+ `sortValue(row) => string | number | null | undefined` supplies the comparable value backing
3170
+ client-mode sorting for that column: a finite number sorts numerically, a string sorts through an
3171
+ `Intl.Collator` built from the component's effective locale with `numeric: true` (so `item2`
3172
+ precedes `item10`), and `null`/`undefined`/non-finite sorts **last in both directions** so
3173
+ flipping `sortDir` never floats a block of blanks to the top. Omit it and the column sorts by its
3174
+ stringified `cell()` output instead — meaningful only when `cell()` returns a string or number, so
3175
+ define `sortValue` whenever `cell()` returns a template or element. Ignored under
3176
+ `sortMode="server"` and on a column that is not `sortable`;
2729
3177
  `priority` progressively hides that column via a `@container` query as `[part='base']` narrows
2730
3178
  (`'low'` hides first, under a ~900px container width; `'medium'` next, under ~640px; both
2731
3179
  breakpoints are fixed in `table.styles.ts`, not themeable tokens), reversible via
@@ -2798,6 +3246,19 @@ own "consumer computes/renders" contract rather than assuming addition.
2798
3246
  the two consequences of the fixed algorithm worth knowing before opting in
2799
3247
  - `sortKey: string = ''` (attribute `sort-key`)
2800
3248
  - `sortDir: 'asc'|'desc' = 'asc'` (attribute `sort-dir`)
3249
+ - `sortMode: 'client'|'server' = 'client'` (attribute `sort-mode`, reflected) — mirrors
3250
+ `paginationMode`'s identical split. `'client'` (the default) orders `rows` in the browser from
3251
+ `sortKey`/`sortDir` and the active column's `sortValue`; `'server'` renders `rows` exactly as
3252
+ given, for a table whose ordering already happened server-side. `lr-sort` is emitted on header
3253
+ activation under both modes. With no `sortKey` set (the default) `'client'` is a **no-op** — the
3254
+ input order is preserved verbatim — so a table that never sorts renders identically either way.
3255
+ Sorting applies to the whole filtered set *before* client pagination slices the page, so page 1
3256
+ holds the globally-smallest rows rather than a re-sorted slice
3257
+ - `defaultSortDir: 'asc'|'desc' = 'asc'` (attribute `default-sort-dir`) — the direction applied
3258
+ whenever header activation switches sorting to a **different** column, including the first column
3259
+ ever sorted. Re-activating the column that is already `sortKey` toggles between `'asc'` and
3260
+ `'desc'` instead, so `defaultSortDir` never overrides a direction the user just chose for the
3261
+ column they are still on. Set `'desc'` for a most-recent-first or highest-first table
2801
3262
  - `rowKey?: (row: T) => string | number` (attribute: false) — derives each row's stable identity for
2802
3263
  DOM-reconciliation and the delegated row click/keydown lookup; falls back to the row's array index
2803
3264
  when omitted, which is only safe while `rows` never reorders — set it whenever `rows` can be
@@ -2844,7 +3305,13 @@ own "consumer computes/renders" contract rather than assuming addition.
2844
3305
  mode slices rows; server mode renders the supplied page unchanged
2845
3306
  - Editable columns emit `lr-cell-edit` on commit and never mutate the supplied row object.
2846
3307
  - `groupBy?: (row: T) => string | number` (attribute: false) — inserts a non-focusable full-width
2847
- group row before each group
3308
+ group row wherever this key changes between consecutive rendered rows. Supply `rows` with each
3309
+ group already contiguous; the table renders the groups in their first-appearance order in `rows`
3310
+ and never reorders them. A client-mode sort is applied **within** each group, so sorting a
3311
+ grouped table on a column unrelated to the group key reorders rows inside their groups and
3312
+ leaves the grouping intact. The one exception: when the sorted column's value is constant inside
3313
+ every group — the group column itself, most obviously — there is nothing to reorder within a
3314
+ group, so the **groups** are ordered by that value instead.
2848
3315
  - `groupLabel?: (key: string | number, rows: T[]) => unknown` (attribute: false) — custom group
2849
3316
  header content; without it, the group key is rendered as text
2850
3317
  - `expandedContent?: (row: T) => unknown` (attribute: false) — enables a leading expand toggle and
@@ -2871,6 +3338,9 @@ own "consumer computes/renders" contract rather than assuming addition.
2871
3338
  button's label once they've been revealed)
2872
3339
  - `showAllColumns: boolean = false` (attribute `show-all-columns`, reflected) — forces responsive
2873
3340
  priority columns visible and is updated by the built-in reveal button
3341
+ - `storageKey?: string` (attribute `storage-key`) — when set, persists `showAllColumns` to
3342
+ `localStorage` (namespaced as `lr-table:${storageKey}`) and restores it on the next mount. Unset
3343
+ (the default) touches storage not at all. Mirrors `lr-app-rail`'s identical `storage-key` pattern
2874
3344
  - `heatTintScale?: { min?: number; max?: number }` (attribute: false) — overrides the auto-derived
2875
3345
  heat-tint domain (min/max of every `heatValue` result across every currently-rendered row —
2876
3346
  post-sort, pre-pagination, the same rows `footer(rows)` already sees). Unset (the default) computes
@@ -2885,7 +3355,8 @@ own "consumer computes/renders" contract rather than assuming addition.
2885
3355
  column × footer row). Only rendered when both `rowTotal` is set **and** at least one column defines
2886
3356
  `footer` — otherwise there is no footer row for it to occupy, and this renders nothing
2887
3357
 
2888
- **Events:** `lr-sort` (`detail: { key }`, fired on sortable-header activation), `lr-row-click`
3358
+ **Events:** `lr-sort` (`detail: { key }`, fired on sortable-header activation — which also updates
3359
+ `sortKey`/`sortDir` itself, per `defaultSortDir` above), `lr-row-click`
2889
3360
  (`detail: { row }`), `lr-load-more` (fired on the "load more" button), `lr-columns-hidden-change`
2890
3361
  (`detail: { hidden: boolean }`, fired only on a real `columnsHidden` transition),
2891
3362
  `lr-columns-revealed` (`detail: { revealed: boolean }`), and `lr-row-expand-toggle`
@@ -2939,6 +3410,14 @@ element *or on any ancestor* and still reach the rule that reads it. It exists b
2939
3410
  forbids an attribute selector after `::part()` — `::part(row)[aria-selected='true']` is invalid CSS —
2940
3411
  so the only prior lever for restyling the selected row was overriding the library-wide
2941
3412
  `--lr-color-brand-quiet` token, which repaints everything else reading it.
3413
+ `--lr-table-row-stripe-bg` (default `transparent`) — the background of alternating body rows. The
3414
+ component marks the alternating rows itself, so this works without an invalid `::part(row)` attribute
3415
+ or structural-pseudo-class selector and does not affect group, expanded, hover, or selected rows.
3416
+ `--lr-table-header-sorted-bg` (default `transparent`) and `--lr-table-header-sorted-color` (default
3417
+ `inherit`) restyle the **currently-sorted** column's header cell (`[aria-sort]` other than `none`).
3418
+ Same shape and rationale as `--lr-table-row-selected-bg`: inline `var()` fallbacks, not on `:host`,
3419
+ because `::part(header-cell)[aria-sort]` is invalid CSS. The `sort-icon` part styles only the
3420
+ chevron; these tokens style the header cell itself.
2942
3421
  `--lr-table-sticky-offset` (default `0`) is measured and written inline per column by the component
2943
3422
  so multiple `sticky` columns stack instead of overlapping; it is a read-out, not a knob you set.
2944
3423
  `--lr-table-heat-t` is likewise component-written (each `[data-heat]` cell's position on the ramp).
@@ -2946,12 +3425,13 @@ so multiple `sticky` columns stack instead of overlapping; it is a read-out, not
2946
3425
  **Optional peer deps:** none.
2947
3426
 
2948
3427
  ```html
2949
- <lr-table id="t" sort-key="name" sort-dir="asc"></lr-table>
3428
+ <lr-table id="t" sort-key="name" sort-dir="asc" accessible-label="Items"></lr-table>
2950
3429
  <script type="module">
2951
3430
  const t = document.getElementById('t');
2952
3431
  t.columns = [
2953
3432
  { key: 'name', label: 'Name', sortable: true, cell: (r) => r.name },
2954
- { key: 'value', label: 'Value', align: 'end', cell: (r) => r.value },
3433
+ // sortValue keeps the numeric column comparing as numbers, not as strings.
3434
+ { key: 'value', label: 'Value', align: 'end', sortable: true, sortValue: (r) => r.value, cell: (r) => r.value },
2955
3435
  ];
2956
3436
  t.rows = [{ name: 'Alpha', value: 1 }, { name: 'Beta', value: 2 }];
2957
3437
  t.rowKey = (r) => r.name;
@@ -2961,14 +3441,36 @@ so multiple `sticky` columns stack instead of overlapping; it is a read-out, not
2961
3441
  ```
2962
3442
 
2963
3443
  **Known gotchas:**
3444
+ - activating a sortable header now writes `sortKey`/`sortDir` on the table itself, in **both** sort
3445
+ modes — it is no longer a pure `lr-sort` notification. A `sortMode="server"` consumer that
3446
+ re-sorts on `lr-sort` and pushes fresh `rows` back in is unaffected (the table renders whatever
3447
+ order it is handed), but a consumer implementing a *tri-state* header (asc → desc → unsorted) must
3448
+ drive `sortKey`/`sortDir` from its own `lr-sort` handler, since the built-in activation only
3449
+ toggles between the two directions.
3450
+ - `sortValue`/`cell` are read off the column object by identity. Mutating a column **in place**
3451
+ (`t.columns[0].sortValue = …`) neither re-renders nor re-sorts; assign a new `columns` array.
3452
+ - `groupBy` + client sorting are **not** in conflict: the sort runs per group, not across the whole
3453
+ set, so group rows stay contiguous. The consequence is that the group order is normally yours to
3454
+ control — it follows first appearance in `rows`. The single exception is a sort on a column whose
3455
+ value is constant inside every group (the group column itself, a column functionally determined
3456
+ by the group key, or any column at all when every group holds one row): the within-group sort
3457
+ would be a provable no-op, so the groups are ordered by that constant value instead. That is what
3458
+ keeps `aria-sort` and the header chevron honest — otherwise clicking the group column would flip
3459
+ both while changing nothing. To force a group order in any other case, sort `rows` into it before
3460
+ assigning them (or set `sort-mode="server"` and own the whole ordering).
2964
3461
  - only single-row selection is modeled (`selectedKey: string | number | null`);
2965
3462
  there's no bulk-select/checkbox-column API — you must hand-roll a checkbox column entirely inside
2966
3463
  a `cell()` callback if you need multi-select.
2967
- - no `caption`/`aria-label` *property* exists, but a plain `aria-label` HTML attribute set on the
2968
- host **is** forwarded into the shadow-DOM `<table role="grid">` (read via
2969
- `this.getAttribute('aria-label')` at render time a plain global-attribute read, not a reactive
2970
- Lit `@property`): `<lr-table aria-label="Scores">` gives the grid an accessible name; omit it and
2971
- the shadow table simply has none.
3464
+ - `accessibleLabel: string = ''` (attribute `accessible-label`) a typed accessible name for the
3465
+ `<table role="grid">`. A plain `aria-label` HTML attribute on the host is also forwarded (read via
3466
+ `this.getAttribute('aria-label')` at render time) and serves as a fallback when `accessibleLabel`
3467
+ is unset. Consumer-supplied text, so neither is run through `this.localize()`.
3468
+ - `caption: string = ''` — an optional visible `<caption>` (exposed as the `caption` CSS part). When
3469
+ no `accessibleLabel`/host `aria-label` is present the caption also names the grid via
3470
+ `aria-labelledby`.
3471
+ - A grid with **none** of `accessibleLabel`, host `aria-label`, or `caption` logs a one-time
3472
+ `console.warn` on first render in development builds only — an unnamed grid is an accessibility
3473
+ defect that otherwise renders silently. Production and unknown/unbundled runtimes do not log it.
2972
3474
  - Full roving-tabindex grid keyboard pattern (one `tabindex="0"` stop among header cells, one among
2973
3475
  body rows) — Left/Right/Home/End move within the header row, Up/Down/Home/End move within the
2974
3476
  body, Down from the header enters the body's roving stop and Up from the body's first row returns
@@ -3091,6 +3593,11 @@ spacing, border, radius, disabled-opacity, and focus-ring tokens.
3091
3593
  - below a 20rem container allocation the summary and controls stack; the breakpoint responds to
3092
3594
  the component's own inline size, not the viewport. Previous/next icons also mirror under RTL
3093
3595
 
3596
+ **Additional API surface:**
3597
+
3598
+ - `click()` — Forward host activation to the primary editable page control.
3599
+ - `--lr-pagination-control-radius` — Border radius of navigation buttons and the page input. Default: `var(--lr-radius)`.
3600
+
3094
3601
  ---
3095
3602
 
3096
3603
  ## `lr-gauge`
@@ -3179,6 +3686,12 @@ visually-hidden `[part="live-region"]` (`role="status" aria-live="polite"`) anno
3179
3686
  90° for denser packing
3180
3687
  - `palette?: string[]` (attribute: false) — custom categorical colors, cycled by word index (or by
3181
3688
  `group`); defaults to the `--lr-word-cloud-color-1..8` tokens
3689
+ - `legend: WordCloudLegendItem[] = []` (attribute: false) — optional named `{ label, color }`
3690
+ entries for explaining explicit `words[].color`/group color overrides; when omitted, the
3691
+ component derives entries from grouped and explicitly colored words
3692
+ - `showLegend: boolean = false` (attribute `show-legend`, reflected) — renders the supplied or
3693
+ derived legend below the cloud; the color key is an accessible list and does not change word
3694
+ activation or palette selection
3182
3695
 
3183
3696
  **Methods:** `refreshTheme(): void` — forces a relayout so the `--lr-font` custom property is
3184
3697
  re-read from computed style (font-family affects the canvas text measurement layout depends on);
@@ -3192,8 +3705,8 @@ the currently-focused word — a no-op if nothing is focused yet)
3192
3705
 
3193
3706
  **CSS parts:** `base`, `svg`, `word` (each `<text>`), `focus-ring` (the rect around the roving-focus
3194
3707
  cursor's word), `live-region` (visually-hidden `role="status" aria-live="polite"` announcement text),
3195
- `empty` (the no-data placeholder hardcoded `"No data"` text, no property to customize it, unlike
3196
- `lr-empty`/`lr-table`)
3708
+ `legend`/`legend-item`/`legend-swatch`/`legend-label` (the optional static color key), and `empty`
3709
+ (the no-data placeholder)
3197
3710
 
3198
3711
  **Themeable custom properties:** `--lr-word-cloud-color-1`, `--lr-word-cloud-color-2`,
3199
3712
  `--lr-word-cloud-color-3`, `--lr-word-cloud-color-4`, `--lr-word-cloud-color-5`,
@@ -3607,9 +4120,13 @@ deeply-nested node's own shadow root still reaches it).
3607
4120
 
3608
4121
  **Properties:**
3609
4122
  - `data: TreeItem[] = []` (attribute: false) — `TreeItem { id: string; label: string; children?:
3610
- TreeItem[]; badge?: string | number; icon?: unknown; description?: string; accessibleLabel?:
3611
- string }`; `icon` renders as a decorative leading visual, `description` as secondary visible row
3612
- text, and `accessibleLabel` names the `role="treeitem"` host without changing its visible label
4123
+ TreeItem[]; selected?: boolean; disabled?: boolean; badge?: string | number; badges?: TreeBadge[];
4124
+ icon?: unknown; description?: string; accessibleLabel?: string }`. `TreeBadge` is `{ text:
4125
+ string; tone?: TreeBadgeTone; label?: string }`, where `TreeBadgeTone` is
4126
+ `'neutral'|'brand'|'success'|'warning'|'danger'`. The legacy singular `badge` renders first;
4127
+ `badges` adds tone-mapped chips after it and each chip's accessible name uses `label ?? text`.
4128
+ `icon` renders as a decorative leading visual, `description` as secondary visible row text, and
4129
+ `accessibleLabel` names the `role="treeitem"` host without changing its visible label
3613
4130
  - `label: string = ''` — accessible name for the tree; `role="tree"` lives on an internal
3614
4131
  `[part="base"]` element. The component forwards a host `aria-label` to that semantic element when
3615
4132
  `label` is empty; `label` takes precedence when both are set. External `aria-labelledby` idrefs
@@ -3685,9 +4202,11 @@ through `lr-tree`'s light DOM.
3685
4202
 
3686
4203
  **Slots:** none.
3687
4204
 
3688
- **CSS parts:** `row`, `toggle`, `icon`, `content`, `label`, `description`, `badge`, `group`. `icon` is
3689
- `aria-hidden="true"`; `content` groups the primary label and optional wrapping secondary
3690
- description while preserving one interactive treeitem per row.
4205
+ **CSS parts:** `row`, `toggle`, `icon`, `content`, `label`, `description`, `badge`, `group`. `badge`
4206
+ is applied to the legacy singular badge and to every `badges` chip; additive chips carry
4207
+ `data-tone="neutral|brand|success|warning|danger"`. `icon` is `aria-hidden="true"`; `content`
4208
+ groups the primary label and optional wrapping secondary description while preserving one
4209
+ interactive treeitem per row.
3691
4210
 
3692
4211
  **Themeable custom properties:** `--lr-tree-depth` (internal, set inline per row for
3693
4212
  indentation), plus the shared tokens listed above.
@@ -3728,6 +4247,12 @@ indentation), plus the shared tokens listed above.
3728
4247
  - `lr-file-tree` does **not** forward `reorderable`, and deliberately so: its `TreeItem[]` is derived
3729
4248
  from `nodes` on every render and keyed by filesystem path, an order it does not own.
3730
4249
 
4250
+ **Additional API surface:**
4251
+
4252
+ - `--lr-tree-selected-color` — Selected-node text color.
4253
+ - `--lr-tree-selected-bg` — Selected-node background.
4254
+ - `ancestry` — Ancestor object identities used to stop cyclic caller graphs before recursive rendering. Type: `TreeItem[]`.
4255
+
3731
4256
  ---
3732
4257
 
3733
4258
  ## `lr-flow-canvas`
@@ -3755,8 +4280,10 @@ controlled-component contract.
3755
4280
  `lr-node-palette` drag sets, emitting `lr-node-add`
3756
4281
  - `locked: boolean = false` (reflected) — freezes pan/zoom/drag/connect without touching the other
3757
4282
  gesture flags
3758
- - `selectedNodeIds: string[] = []`, `selectedEdgeIds: string[] = []` (attribute: false) — controlled;
3759
- the host assigns these back from `lr-selection-change`
4283
+ - `selectedNodeIds: string[] = []`, `selectedEdgeIds: string[] = []` (attribute: false) — seed or
4284
+ replace selection state. Node/edge activation and clear-selection gestures also update these
4285
+ arrays internally before emitting `lr-selection-change`; a host may assign its own authoritative
4286
+ state back.
3760
4287
  - `minZoom: number = 0.25` (attribute `min-zoom`), `maxZoom: number = 2` (attribute `max-zoom`)
3761
4288
  - `grid: number = 8` — snap step in content px for drags/nudges/drop positions (`0` disables
3762
4289
  snapping); also the dotted background's base spacing
@@ -3835,9 +4362,10 @@ treatment entirely.
3835
4362
  ```
3836
4363
 
3837
4364
  **Known gotchas:**
3838
- - Fully controlled: `nodes`/`edges`/`selectedNodeIds`/`selectedEdgeIds` are never mutated
3839
- internally `lr-node-move`, `lr-selection-change`, `lr-connect`, `lr-node-add`, and
3840
- `lr-selection-delete` are all requests the host applies back, same contract as `lr-table`.
4365
+ - `nodes` and `edges` are controlled inputs: move, connect, add, and delete events are requests the
4366
+ host applies back. Selection is hybrid state: `selectedNodeIds`/`selectedEdgeIds` accept external
4367
+ replacement, while node/edge activation and clear-selection gestures update them internally and
4368
+ emit `lr-selection-change`.
3841
4369
  - Auto-layout (via the dependency-free `layeredLayout()` util) only ever positions nodes that are
3842
4370
  missing an explicit `position`; a node the host has already positioned is left exactly where it is
3843
4371
  and used as a fixed anchor for the rest of the layout pass.
@@ -3848,6 +4376,12 @@ treatment entirely.
3848
4376
  deltas are mirrored so content still visually follows the cursor, matching every other
3849
4377
  RTL-mirrored surface in this library.
3850
4378
 
4379
+ **Additional API surface:**
4380
+
4381
+ - `part="edge-hit-area"` — The transparent wide pointer target behind an edge.
4382
+ - `part="node-control"` — The visually hidden, roving selection button for a node.
4383
+ - `--lr-flow-canvas-node-selected-outline-color` — Outline color of a selected node. Default: `var(--lr-flow-canvas-node-current-outline-color,var(--lr-color-brand))`.
4384
+
3851
4385
  ---
3852
4386
 
3853
4387
  ## `lr-flow-node`
@@ -3927,8 +4461,8 @@ disagree.
3927
4461
  **Properties:**
3928
4462
  - `for: string = ''` — id of the target `lr-flow-canvas`; when empty, the nearest ancestor canvas
3929
4463
  is used (the slotted-into-a-corner-slot case, the primary wiring)
3930
- - `label: string = ''` — accessible name for the map region; falls back to a host `aria-label`, then
3931
- a localized default
4464
+ - `label: string = ''` — accessible name for the map region. A host `aria-label` takes precedence,
4465
+ followed by `label`, then the localized default
3932
4466
 
3933
4467
  **Events:** none.
3934
4468
 
@@ -3955,6 +4489,11 @@ draggable, focusable view rectangle).
3955
4489
  - Dragging the viewport rectangle calls the canvas's `setViewport()` directly; there's no separate
3956
4490
  event to wire up.
3957
4491
 
4492
+ **Additional API surface:**
4493
+
4494
+ - `part="instructions"` — Visually hidden keyboard instructions for the viewport.
4495
+ - `part="live-region"` — Visually hidden viewport-change announcements.
4496
+
3958
4497
  ---
3959
4498
 
3960
4499
  ## `lr-flow-controls`
@@ -4106,10 +4645,12 @@ capacity), `segment` (one occupied segment — carries `data-tone` and, for cust
4106
4645
  <lr-context-meter variant="ring" total="128000" .segments=${segments}></lr-context-meter>
4107
4646
  ```
4108
4647
 
4109
- `role="img"` and a computed `aria-label` are set imperatively on the *host* element itself in
4110
- `willUpdate` (mirroring `lr-gauge`'s "meter" role convention) every internal node (`track`,
4111
- `segment`, the ring's `<svg>`, `label`) is `aria-hidden`, so a screen reader gets one meaningful
4112
- summary string instead of the raw markup. That summary's "used" figure is the sum of
4648
+ An internal visually-hidden semantic node carries `role="meter"` plus `aria-valuenow`,
4649
+ `aria-valuemin`, and `aria-valuemax` whenever `total > 0`; without a valid positive total it uses
4650
+ `role="group"` and omits numeric meter attributes. Its accessible name is the host `aria-label`
4651
+ when present, otherwise the generated summary. A separate visually-hidden segment list exposes
4652
+ each labeled quantity, while the visible track, segments, ring SVG, and visible label remain
4653
+ `aria-hidden`. The summary's "used" figure is the sum of
4113
4654
  `segments[].value`, clamped to `total` whenever `total > 0` so the announced text can never claim
4114
4655
  more than 100% used (e.g. `segments` summing to `150000` against `total="128000"` still announces
4115
4656
  `"128,000 of 128,000 used"`) — matching what the *visual* meter shows, since each segment's ratio is
@@ -4123,8 +4664,8 @@ numbers, so the two circular-meter components in the library share one visual sc
4123
4664
 
4124
4665
  **Known gotchas:**
4125
4666
  - The ring variant's per-segment `<title>` and the bar variant's per-segment `title=` attribute are
4126
- native mouse-hover tooltips only — they sit inside `aria-hidden` markup, so screen readers never
4127
- read them; only the host's own `role="img"`/`aria-label` carries accessible information.
4667
+ native mouse-hover tooltips only — they sit inside `aria-hidden` markup. Screen readers use the
4668
+ hidden meter/group summary and segment list instead.
4128
4669
  - `variant="ring"` fixes the host at `8em × 8em` (`:host([variant='ring'])`) — the bar variant's
4129
4670
  `inline-size: 100%` does not apply in ring mode; resize it via `font-size` or an explicit
4130
4671
  width/height override on the host instead.
@@ -4132,6 +4673,12 @@ numbers, so the two circular-meter components in the library share one visual sc
4132
4673
  `segments` render further around the circle (starting at 12 o'clock, going clockwise); there's no
4133
4674
  independent sort/z-order control.
4134
4675
 
4676
+ **Additional API surface:**
4677
+
4678
+ - `part="segment-item"` — One visually-hidden segment label/count pair.
4679
+ - `part="segment-list"` — The visually-hidden list exposing the segment breakdown.
4680
+ - `part="semantic"` — The visually-hidden meter/group carrying aggregate range semantics.
4681
+
4135
4682
  ---
4136
4683
 
4137
4684
  ## `lr-calendar`
@@ -4301,13 +4848,28 @@ parts:** `base`, `path-fields`, `start-input`, `end-input`, `relationship-picker
4301
4848
  `saved-queries`, `saved-queries-label`, `saved-list`, `saved-item`, `saved-load-button`,
4302
4849
  `saved-delete-button`, `saved-empty`.
4303
4850
 
4851
+ **Additional API surface:**
4852
+
4853
+ - `errorText` — Caller-supplied outer error text. Field-level validation remains on the affected controls. Type: `string`.
4854
+ - `hint` — Supporting text rendered below the outer label. Type: `string`.
4855
+ - `error-text` attribute — Caller-supplied outer error text. Field-level validation remains on the affected controls.
4856
+ - `hint` attribute — Supporting text rendered below the outer label.
4857
+ - `hint` slot — Supporting text for the complete form control.
4858
+ - `part="hint"` — Supporting text for the complete form control.
4859
+
4304
4860
  ## `lr-query-builder`
4305
4861
 
4306
4862
  Composable structured-query builder for tabular or dashboard data: condition rows combined with an
4307
4863
  AND/OR combinator.
4308
4864
 
4309
- **Properties:** `fields`, `value`, `disabled`, `addCondition`, `removeCondition`. **Events:**
4310
- `lr-input`, `lr-add-condition`, `lr-remove-condition`. **CSS parts:** `base`, `conditions`,
4865
+ **Properties:** `fields`, `value`, `disabled`.
4866
+
4867
+ **Methods:** `addCondition()` appends a condition using the first available field and emits
4868
+ `lr-add-condition`; it is a no-op while disabled or when there are no fields.
4869
+ `removeCondition(id)` removes the matching condition and emits `lr-remove-condition`; it is a
4870
+ no-op while disabled or when the id is absent.
4871
+
4872
+ **Events:** `lr-input`, `lr-add-condition`, `lr-remove-condition`. **CSS parts:** `base`, `conditions`,
4311
4873
  `condition`, `field-select`, `operator-select`, `value`, `combinator`, `add-button`,
4312
4874
  `remove-button`, `empty`.
4313
4875
 
@@ -4321,9 +4883,18 @@ auto-inserted between each adjacent pair.
4321
4883
  **Properties:**
4322
4884
  - `sizes: number[] = []` (attribute: false — percentages per panel, auto-computed equally if
4323
4885
  omitted/mismatched)
4324
- - `defaultSizes: number[] = []` (attribute: false) — initialization-only fallback: a valid restored
4325
- `storageKey` layout wins first; otherwise a valid `defaultSizes` wins over equal distribution.
4326
- Later reassignment never overwrites live drag/persisted state set it once, at mount.
4886
+ - `defaultSizes: (number | string)[] = []` (attribute: false) — initialization-only fallback: a
4887
+ valid restored `storageKey` layout wins first; otherwise a valid `defaultSizes` wins over equal
4888
+ distribution. Initialization occurs on the first update so framework property bindings committed
4889
+ after connection in the same turn — including `defaultSizes` and `storageKey` — are honored
4890
+ before the layout becomes live. Later reassignment never overwrites live drag/persisted state —
4891
+ set it once, at mount. Each entry is either a plain **number** (percent-of-container, validated unchanged: a
4892
+ pure-number array that does not sum to ~100, e.g. `[30, 60]`, is still rejected and falls through
4893
+ to the equal split) or a CSS **length string** (`'200px'`, `'20%'`, `'3rem'`). When at least one
4894
+ entry is a length string, every entry is resolved against the measured container (numbers as
4895
+ percent-of-container, `%` as-is, `px`/`rem`/`em` via the shared length resolver) and then
4896
+ normalized to percentages before the same validation applies — so `['200px', '300px']` on a 500px
4897
+ container initializes to `[40, 60]`.
4327
4898
  - `min: number = 10` (min % per panel)
4328
4899
  - `orientation: 'horizontal'|'vertical' = 'horizontal'` (reflected) — the axis used at/above
4329
4900
  `orientationBreakpoint` (or always, when that's unset).
@@ -4558,15 +5129,20 @@ position) survives the transition.
4558
5129
  - `backdropInset: string = ''` (attribute `backdrop-inset`) — overrides the fullscreen backdrop's
4559
5130
  CSS `inset` independently from `fullscreenInset`; when empty, it follows `fullscreenInset`
4560
5131
  - `views: WidgetView[] = []` (attribute: false) — named alternate views for the panel body, e.g. a
4561
- chart/table toggle inside the same card chrome; `WidgetView { id: string; label: string; icon?:
4562
- TemplateResult }`. Each entry gets a header toggle button (`[part='view-toggle']`) and a
4563
- `<slot name="view-${id}">`. Empty (the default) renders today's single unnamed default slot as the
4564
- sole view, unchanged.
5132
+ chart/table toggle inside the same card chrome; `WidgetView { id: string; label?: string; icon?:
5133
+ TemplateResult; ariaLabel?: string }`. Each entry gets a header toggle button
5134
+ (`[part='view-toggle']`) and a `<slot name="view-${id}">`. An icon-only view should set
5135
+ `ariaLabel`; if both labels are omitted, the button uses `id` as a last-resort accessible name.
5136
+ Empty (the default) renders today's single unnamed default slot as the sole view, unchanged.
4565
5137
  - `activeView: string = ''` (attribute: false) — the currently active view's `id`; defaults to the
4566
5138
  first entry of `views` (or `''` when `views` is empty). Settable directly to control the active
4567
5139
  view externally; also updated internally when a view toggle is clicked.
4568
- - `accessibleLabel: string = ''` (attribute `aria-label`) — overrides the label-derived fullscreen
4569
- dialog name.
5140
+ - `accessibleLabel: string | null = null` (attribute `aria-label`) — overrides the label-derived
5141
+ fullscreen dialog name.
5142
+ - `storageKey?: string` (attribute `storage-key`) — when set, persists `collapsed` to `localStorage`
5143
+ under `lr-widget:${storageKey}` and restores it on the next mount (mirrors `lr-app-rail`'s/
5144
+ `lr-table`'s identical `storage-key` pattern). Without a `storageKey` there is no persistence and
5145
+ storage is never touched — listen for `lr-collapse-change` and persist the state yourself.
4570
5146
 
4571
5147
  **Events:** `lr-collapse-change` (`detail: { collapsed }`, the new state), `lr-fullscreen-change`
4572
5148
  (`detail: { fullscreen }` — also fired when fullscreen is exited via Escape or a backdrop click, not
@@ -4629,6 +5205,9 @@ space for a persistent sidebar/toolbar that should stay visible instead of being
4629
5205
  fullscreen panel/backdrop — it overrides the default `var(--lr-space-l)` inset on every side for
4630
5206
  both `[part="base"]` and `[part="backdrop"]`. Set `compact` for tighter header/body padding.
4631
5207
 
5208
+ The collapse-button `aria-label` is localized via its own `widgetCollapse` (default `'Collapse
5209
+ panel'`) and `widgetExpand` (default `'Expand panel'`) keys.
5210
+
4632
5211
  **Known gotchas:**
4633
5212
  - a reconnect that preserves the same element instance (e.g. a drag-and-drop reparent) resumes its
4634
5213
  shared overlay registration and re-acquires the scroll lock if `fullscreen` was still `true`
@@ -4636,6 +5215,16 @@ both `[part="base"]` and `[part="backdrop"]`. Set `compact` for tighter header/b
4636
5215
  between, so `willUpdate()` alone wouldn't otherwise notice.
4637
5216
  - `collapsed` hides the body via `hidden` rather than an animated height transition — collapsing is
4638
5217
  instant, not a slide.
5218
+ - prior to this release the collapse-button `aria-label` was localized through `lr-dock-panel`'s
5219
+ own `dockPanelCollapse`/`dockPanelExpand` keys (a borrowed, differently-named pair). A locale
5220
+ registered against those keys specifically to target `lr-widget`'s collapse button should move
5221
+ to `widgetCollapse`/`widgetExpand`; the default English strings are unchanged, and `lr-dock-panel`
5222
+ itself is unaffected.
5223
+
5224
+ **Additional API surface:**
5225
+
5226
+ - `part="view-icon"` — Decorative icon content inside a view toggle.
5227
+ - `part="view-label"` — Visible label text inside a view toggle.
4639
5228
 
4640
5229
  ---
4641
5230
 
@@ -4838,9 +5427,8 @@ before, so rendering is unchanged. Otherwise shared tokens —
4838
5427
  Ordered multi-step wizard/form navigation: an index/label per step, `current`/`completed`/`disabled`/
4839
5428
  `error` state, and click-to-jump. First-party invention (no Web Awesome equivalent). Fully
4840
5429
  data-driven and controlled, like `lr-table`'s `columns`/`rows` — it never mutates `steps` itself; a
4841
- click, or Enter/Space on a non-disabled step, fires a cancelable `lr-step-select`, and the host
4842
- decides whether/how `steps` changes in response (mirroring `lr-dialog-close`'s cancelable-event
4843
- convention).
5430
+ click, or Enter/Space on a non-disabled step, fires a non-cancelable `lr-step-select`, and the host
5431
+ decides whether/how `steps` changes in response.
4844
5432
 
4845
5433
  **Properties:**
4846
5434
  - `steps: StepItem[] = []` (attribute: false) — `StepItem { id: string; label: string; state:
@@ -4886,19 +5474,20 @@ convention).
4886
5474
  doesn't resolve to a length. Also reflected as `data-effective-orientation` (only present while
4887
5475
  `orientationBreakpoint` resolves to a usable length).
4888
5476
  - `accessibleLabel: string | null = null` (attribute `aria-label`) — accessible name applied to the
4889
- `role="tablist"` step strip; attribute-reflects from a host-level `aria-label`. Unset, the
4890
- tablist renders without an `aria-label` (there is no localized default name).
5477
+ `role="list"` step strip; attribute-reflects from a host-level `aria-label`. Unset, the list
5478
+ renders without an `aria-label` (there is no localized default name).
4891
5479
 
4892
5480
  **Events:** `lr-step-select` (`detail: { index, id }`) — fired on click, or Enter/Space while
4893
- focused, on a non-`disabled` step. Cancelable, though this component takes no default action of its
4894
- own to prevent (it never mutates `steps`) `preventDefault()` is available for a host that wants a
4895
- single place to short-circuit its own listener's follow-up work. `lr-stepper-orientation-change`
5481
+ focused, on a non-`disabled` step. It is non-cancelable because the component takes no default
5482
+ action to veto: it never mutates `steps`. `lr-stepper-orientation-change`
4896
5483
  (`detail: { orientation }`) — fired only when an enabled `orientationBreakpoint` actually changes
4897
5484
  `effectiveOrientation`.
4898
5485
 
4899
5486
  **Slots:** none.
4900
5487
 
4901
- **CSS parts:** `base` (root wrapper, `role="tablist"`), `step` (a single step button, `role="tab"`),
5488
+ **CSS parts:** `base` (root wrapper, `role="list"`), `step-item` (the `role="listitem"` wrapper for
5489
+ one step), `step` (a single native button; the current step carries `aria-current="step"` and every
5490
+ other step carries `aria-current="false"`),
4902
5491
  `step-icon` (optional leading topic glyph from the step's `icon` field; only rendered when the step
4903
5492
  has one, additionally to — never instead of — `step-index`/`step-check`), `step-index` (the numbered
4904
5493
  index chip, shown for `pending`/`current`/`error` steps), `step-check` (the completed-checkmark
@@ -4949,9 +5538,9 @@ each falls back to the token its rule used before. Otherwise shared tokens —
4949
5538
  - there's no built-in "step forward/back" method — advancing the wizard is entirely the host's job:
4950
5539
  react to `lr-step-select` (or its own Next/Back buttons) and reassign `steps` with updated
4951
5540
  `state` values.
4952
- - `role="tablist"`/`role="tab"` back the keyboard/focus contract (roving tabindex, arrow-key
4953
- navigation) even though this isn't a `<lr-tabs>`-style panel switcher there's no associated
4954
- `role="tabpanel"`, since this component renders no panel content of its own.
5541
+ - The stepper exposes ordered progress/navigation semantics (`list`/`listitem` plus native step
5542
+ buttons), not tabs: it owns no tab panels. Roving tabindex and orientation-aware arrow-key
5543
+ navigation remain available independently of those semantics.
4955
5544
  - Left/Right (horizontal) and Up/Down (vertical) are mutually exclusive per `orientation` — there's
4956
5545
  no single set of keys that works in both.
4957
5546
 
@@ -5102,6 +5691,13 @@ labeled options, rendered as a button row" is ubiquitous settings/filter-panel U
5102
5691
  **Events:** `lr-change` (`detail: { value }`) — fired when the selected value changes via click or
5103
5692
  keyboard.
5104
5693
 
5694
+ **Methods:**
5695
+ - `scrollToValue(value: string): void` — scroll the segment with the given `value` into view within
5696
+ the (possibly overflowing) track, without changing the selection. Honors
5697
+ `prefers-reduced-motion` (falls back to `behavior: 'auto'`). This runs automatically when `value`
5698
+ is changed programmatically (keyboard navigation already reveals the focused segment on its own),
5699
+ so you only need to call it for the "reveal without selecting" case.
5700
+
5105
5701
  **Slots:** none.
5106
5702
 
5107
5703
  **CSS parts:** `base` (the `role="radiogroup"` root), `segment` (a single `role="radio"` button),
@@ -5163,6 +5759,12 @@ Otherwise shared tokens — `--lr-color-border`/`-surface`/`-text`/
5163
5759
  - the semantic `radiogroup` lives inside shadow DOM. Set `label` (preferred for reactive code) or a
5164
5760
  host `aria-label`; the component deliberately forwards the resulting name to that internal role.
5165
5761
 
5762
+ **Additional API surface:**
5763
+
5764
+ - `--lr-segmented-track-gap` — Gap between segments. Default: `var(--lr-size-0-125rem)`.
5765
+ - `--lr-segmented-track-radius` — Track corner radius. Default: `var(--lr-radius)`.
5766
+ - `--lr-segmented-track-padding` — Track inset padding. Default: `var(--lr-size-0-125rem)`.
5767
+
5166
5768
  ---
5167
5769
 
5168
5770
  ## `lr-virtual-list`
@@ -5232,7 +5834,7 @@ invention (no Web Awesome equivalent).
5232
5834
  - `overscan: number = 6` — extra rows rendered beyond the visible viewport on each side; finite
5233
5835
  values are floored and clamped to 0–100, while non-finite values use the default 6, so an invalid
5234
5836
  runtime value cannot disable windowing and render the entire collection.
5235
- - `activeId: string = ''` (attribute `active-id`) — when set and it matches a row's `keyFunction`
5837
+ - `activeId: string | number | '' = ''` (attribute `active-id`) — when set and it matches a row's `keyFunction`
5236
5838
  result (compared with `Object.is` against the typed value — attribute values arrive as strings, so
5237
5839
  assign the property directly for a numeric key), that row is smoothly scrolled into view whenever
5238
5840
  this changes, and rendered with `aria-current="true"`.
@@ -5408,8 +6010,13 @@ content is never duplicated.
5408
6010
 
5409
6011
  Opting in to `resizable` adds a continuously draggable width for the `'full'` state: a
5410
6012
  `[part="resizer"]` handle (pointer-drag and Left/Right-arrow keyboard stepping, RTL-aware) clamped to
5411
- `[minRailWidthPx, maxRailWidthPx]`, with no built-in persistence a consumer that wants the chosen
5412
- width to survive a reload listens for `lr-rail-resize` and persists `railWidthPx` itself.
6013
+ `[minRailWidthPx, maxRailWidthPx]`. Set `storageKey` (attribute `storage-key`) to persist the fields
6014
+ selected by `persist` to `localStorage` under `lr-app-rail:${storageKey}` and restore them on the
6015
+ next mount (mirrors `lr-split`'s `storage-key`; effective `mode` is breakpoint-derived and never
6016
+ persisted). The backward-compatible allowlist is `open width`; use
6017
+ `persist="width preferred-mode"` for durable layout preference without restoring the transient
6018
+ mobile overlay. Without a `storageKey` there is no persistence — listen for `lr-rail-resize` and
6019
+ persist `widthPx` yourself.
5413
6020
  `preferredMode` separately lets a host manually prefer `'full'`/`'icon-only'` for the non-mobile
5414
6021
  breakpoint axis (e.g. a user's own collapse toggle) while `mobile-breakpoint` continues to be tracked
5415
6022
  automatically regardless — it's only consulted while `mode` isn't force-pinned via the `mode`
@@ -5454,6 +6061,14 @@ accessor itself, which still takes full priority.
5454
6061
  - `railWidthPx?: number` (attribute `rail-width-px`) — the rail's current width in px while
5455
6062
  `resizable`; settable/gettable directly. Unset defers to `--lr-app-rail-width`'s own resolved
5456
6063
  width.
6064
+ - `storageKey?: string` (attribute `storage-key`) — when set, persists the fields selected by
6065
+ `persist` to `localStorage` under `lr-app-rail:${storageKey}` and restores them on the next
6066
+ mount. Effective `mode` is breakpoint-derived and never persisted. Unset means no persistence.
6067
+ - `persist: string = 'open width'` — whitespace-separated field allowlist used with `storageKey`.
6068
+ Valid `AppRailPersistField` tokens are `open`, `width` (`railWidthPx`), and `preferred-mode`
6069
+ (`preferredMode`). The default preserves the existing open+width behavior. Use
6070
+ `persist="width preferred-mode"` when overlay-open state is controlled or should stay
6071
+ session-only.
5457
6072
  - `minRailWidthPx: number = 190` (attribute `min-rail-width-px`) — minimum `railWidthPx` a
5458
6073
  drag/keyboard resize can reach.
5459
6074
  - `maxRailWidthPx: number = 440` (attribute `max-rail-width-px`) — maximum `railWidthPx` a
@@ -5771,8 +6386,12 @@ returning to the trigger)
5771
6386
  **Slots:** `trigger` (the consumer's own trigger element — first assigned element wins if several
5772
6387
  are assigned; enhanced imperatively with `aria-haspopup="menu"`/`aria-expanded`/`aria-controls`
5773
6388
  since those attributes belong on the actual interactive trigger, which lives outside this
5774
- component's shadow root), default (`<lr-menu-item>` elements, plus optionally plain `<hr>`
5775
- dividers between groups native `<hr>` already carries an implicit `separator` role),
6389
+ component's shadow root. `aria-controls` targets the `lr-menu` host, which receives a stable
6390
+ generated id only when the consumer did not provide one, rather than the shadow-private list id.
6391
+ `lr-button`/`lr-icon-button` forward the popup/expanded values to their focused shadow-internal
6392
+ native control and resolve the controls element-reference across their shadow boundary), default
6393
+ (`<lr-menu-item>` elements, plus optionally plain `<hr>` dividers — native `<hr>` already carries
6394
+ an implicit `separator` role),
5776
6395
  `header` and `footer` (composed, deliberately non-menu-item content — a filter/search field, a
5777
6396
  section title, an "Apply"/"Done" button, a count — rendered above/below the items inside
5778
6397
  `[part="popup"]` but **outside** the `role="menu"` list. Both collapse to no box at all while
@@ -5954,8 +6573,10 @@ docked case.
5954
6573
  - `collapsible: boolean = false` (reflected)
5955
6574
  - `collapsed: boolean = false` (reflected)
5956
6575
  - `resizable: boolean = true` (reflected) — when `false`, no drag handle renders at all and the panel
5957
- is a fixed size. (Assign `false` via a **property** binding, e.g. `.resizable=${false}` a
5958
- `?resizable=${false}` boolean-attribute binding cannot override a `true` default; see AGENTS.md.)
6576
+ is a fixed size. Its string-aware converter accepts `resizable="false"` as false despite the
6577
+ true default. A Lit property binding (`.resizable=${false}`) also disables it; a false
6578
+ boolean-attribute binding (`?resizable=${false}`) only removes the attribute and cannot override
6579
+ a true-defaulting property.
5959
6580
 
5960
6581
  **Exported helper:** `parseLengthPx(length: string, containerPx: number, fontSizeEl: Element =
5961
6582
  document.documentElement): number | undefined` — resolves an arbitrary CSS length (`px`, `rem`, `em`,
@@ -6047,6 +6668,11 @@ to `<wa-card>`'s contract, staying slot-compatible with `lr-result-card` where t
6047
6668
  reproduces a plain static card: no `tabindex`, no listeners, no events.
6048
6669
  - `href?: string` — when set, the card's root renders as a real `<a href=...>` instead of a `<div>`,
6049
6670
  for a whole-card link (e.g. a wide CTA tile). Unset (the default) renders a plain `<div>`.
6671
+ - `target?: string` — native anchor target, applied only while `href` resolves to a link. Setting it
6672
+ to `'_blank'` (or any other target) automatically derives `rel="noopener noreferrer"` on the
6673
+ rendered anchor; there is deliberately **no** separately-settable `rel` property, so a consumer
6674
+ can't forget it and leave the opened page holding a `window.opener` back-reference
6675
+ (reverse-tabnabbing). Unset (the default) emits neither `target` nor `rel`.
6050
6676
 
6051
6677
  **Events:** `lr-card-activate` (no detail) — the whole card was activated, by click or by
6052
6678
  Enter/Space while `[part='base']` has focus. Only fired while `interactive` is set **without**
@@ -6102,6 +6728,11 @@ the `footer` slot, hidden entirely when empty).
6102
6728
  `<lr-button>` retargets to the host, but its composed path still contains the internal native
6103
6729
  `<button>`.
6104
6730
 
6731
+ **Additional API surface:**
6732
+
6733
+ - `accessibleLabel` — Host `aria-label` forwarded to the native no-href activation button. Type: `string | null`.
6734
+ - `part="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.
6735
+
6105
6736
  ---
6106
6737
 
6107
6738
  ## `lr-command-palette`
@@ -6154,6 +6785,13 @@ after `::part()`), so highlighting the active row previously required hijacking
6154
6785
  `--lr-color-brand-quiet` token and repainting everything else that read it. Unset, it falls back to
6155
6786
  that token, so rendering is unchanged.
6156
6787
 
6788
+ **Additional API surface:**
6789
+
6790
+ - `part="command-group"` — A labeled ARIA group containing visible command options.
6791
+ - `part="list-spacer"` — Virtual result extent inside the scrolling list.
6792
+ - `--lr-command-palette-row-height` — Virtual command-row height. Default: `var(--lr-size-3rem)`.
6793
+ - `--lr-command-palette-group-height` — Virtual group-heading height. Default: `var(--lr-size-2rem)`.
6794
+
6157
6795
  ## `lr-details`, `lr-accordion`, and `lr-accordion-item`
6158
6796
 
6159
6797
  `lr-details` is a native-semantics disclosure panel. `lr-accordion` coordinates slotted
@@ -6192,6 +6830,10 @@ set on the item, on `<lr-breadcrumb>`, or on any ancestor above the trail:
6192
6830
  `--lr-color-text-quiet` token and repainting everything else that read it. Unset, it falls back to
6193
6831
  that token.
6194
6832
 
6833
+ **Additional API surface:**
6834
+
6835
+ - `part="separator"` — Decorative separator shown before non-first items.
6836
+
6195
6837
  ## `lr-dashboard-grid`
6196
6838
 
6197
6839
  Responsive, keyboard-accessible controlled widget grid. It positions layout entries and emits
@@ -6218,6 +6860,10 @@ overriding them from a stylesheet has no effect — set the properties instead.
6218
6860
  preview of its own `:focus-visible` ring, shown because every cell is a real focusable,
6219
6861
  draggable/resizable target; set it to `transparent` to opt out of the hover treatment entirely.
6220
6862
 
6863
+ **Additional API surface:**
6864
+
6865
+ - `--lr-dashboard-grid-collision-outline-color` — Outline color of a cell whose current drag/resize preview collides with another cell. Default: `var(--lr-color-danger)`.
6866
+
6221
6867
  ## `lr-drilldown-panel`
6222
6868
 
6223
6869
  Controlled navigation shell from a chart or table datum to related evidence, documents, entities,
@@ -6236,10 +6882,25 @@ false), `accessibleLabel: string | null = null` (attribute `aria-label` — name
6236
6882
 
6237
6883
  Dashboard filter row that composes Lyra inputs and removable chips, with reset and loading states.
6238
6884
 
6239
- **Properties:** `filters`, `value`, `disabled`, `loading`, `label`, `hasActiveFilters`,
6240
- `invalidFilterIds`, `checkValidity`, `reportValidity`, `reset`. **Events:** `lr-input`, `lr-reset`,
6241
- `lr-validity-change`. **CSS parts:** `base`, `controls`, `filter-control`, `active-filters`,
6242
- `chips`, `chip`, `reset-button`, `status`.
6885
+ **Properties:**
6886
+
6887
+ - `filters: FilterBarFilterDefinition[] = []` (attribute: false) — filter schema in render order.
6888
+ - `value: FilterBarValue = {}` (attribute: false) — current values keyed by filter id; reads and
6889
+ writes are shallow-copied.
6890
+ - `label: string = ''` — accessible name for the internal `role="group"`.
6891
+ - `disabled: boolean = false` (reflected) — disables every filter control and reset action.
6892
+ - `loading: boolean = false` (reflected) — shows the status spinner and disables reset while leaving
6893
+ filters editable.
6894
+ - `hasActiveFilters: boolean` (read-only) — whether any configured filter currently has a value.
6895
+ - `invalidFilterIds: string[]` (read-only) — ids of required filters whose values are unset.
6896
+
6897
+ **Methods:** `checkValidity(): boolean` returns whether every required filter is set without
6898
+ revealing errors; `reportValidity(): boolean` returns the same state and reveals every current
6899
+ required-field error; `reset(): void` restores each definition's `defaultValue` (or unsets it),
6900
+ unless the bar is disabled.
6901
+
6902
+ **Events:** `lr-input`, `lr-reset`, `lr-validity-change`. **CSS parts:** `base`, `controls`,
6903
+ `filter-control`, `active-filters`, `chips`, `chip`, `reset-button`, `status`.
6243
6904
 
6244
6905
  Each filter definition's `type` selects which existing Lyra input renders it — this component
6245
6906
  composes them and never invents a control of its own. `'select'`/`'combobox'` map to their
@@ -6314,8 +6975,8 @@ DOM.
6314
6975
 
6315
6976
  **Themeable custom properties:** `--lr-toast-accent-width` (4px),
6316
6977
  `--lr-toast-show-duration`/`--lr-toast-hide-duration`
6317
- (`var(--lr-transition-base, 180ms ease-out)` — 180ms by default, matching the JS-side show/hide
6318
- animation timer, which is not itself reading this token), `--lr-toast-padding`
6978
+ (`var(--lr-transition-base, 180ms ease-out)` — the show/hide lifecycle reads the resolved computed
6979
+ transition duration and uses it for its completion fallback), `--lr-toast-padding`
6319
6980
  (`var(--lr-space-m)`), `--lr-toast-font-size` (`1rem`) — both are auto-swapped per `size`, from a
6320
6981
  compact `xs` up to a roomier `xl` — `--lr-toast-accent-color` (defaults to `--lr-color-border`,
6321
6982
  auto-swapped per `variant` to `--lr-color-brand/-success/-warning/-danger`).
@@ -6338,7 +6999,7 @@ From the `toaster` controller — the ergonomic entry point, no manual `<lr-toas
6338
6999
  needed:
6339
7000
 
6340
7001
  ```ts
6341
- import { toast } from '@aceshooting/lyra-ui';
7002
+ import { toast } from '@aceshooting/lyra-ui/components/overlays/toast/toaster.js';
6342
7003
 
6343
7004
  toast('Saved');
6344
7005
  toast({ message: 'Deleted', variant: 'danger', action: { label: 'Undo', onClick: (item) => {/*...*/} } });
@@ -6353,16 +7014,14 @@ at another, since `placement` is a per-call option rather than a single global r
6353
7014
 
6354
7015
  ```html
6355
7016
  <script type="module">
6356
- import { toast } from '@aceshooting/lyra-ui';
7017
+ import { toast } from '@aceshooting/lyra-ui/components/overlays/toast/toaster.js';
6357
7018
  document.getElementById('save-btn').addEventListener('click', () => toast('Saved!'));
6358
7019
  </script>
6359
7020
  ```
6360
7021
 
6361
7022
  **Known gotchas:**
6362
- - possible nested live-region double-announcement: the stack region is
6363
- `role="status" aria-live="polite"` **and** each `lr-toast-item` independently self-assigns its
6364
- own `role` (`status`/`alert`) — nesting live regions can cause some screen readers to announce a
6365
- new toast twice. Plausible from the code, unverified against real AT.
7023
+ - the stack itself has no live-region role; each `lr-toast-item` owns the single `status`/`alert`
7024
+ role appropriate to its current variant, avoiding nested live-region announcements.
6366
7025
  - the close button's accessible name is derived from the toast's own message text (`"Close: <first
6367
7026
  40 chars>…"`, falling back to bare `"Close"` only when the toast has no text content) rather than
6368
7027
  a bare `"Close"` on every instance — useful when several toasts are stacked and a screen-reader or
@@ -6401,7 +7060,9 @@ the existing `flex-start` cross-axis and `start` text alignment, and `center` ce
6401
7060
  `--lr-empty-compact-padding` (default `--lr-space-xs` — padding used in compact mode),
6402
7061
  `--lr-empty-compact-gap` (default `--lr-space-2xs` — gap between the icon, heading, and description
6403
7062
  in compact mode; the non-compact layout's gap stays the plain shared `--lr-space-s` token, not
6404
- independently themeable), plus shared tokens (`--lr-space-xs/-s/-l`,
7063
+ independently themeable), `--lr-empty-compact-font-size` (compact mode only; unset by default with
7064
+ **no fallback value** — the compact heading keeps its ordinary inherited font size until a
7065
+ consumer explicitly sets this token), plus shared tokens (`--lr-space-xs/-s/-l`,
6405
7066
  `--lr-color-text-quiet/-border/-text`).
6406
7067
 
6407
7068
  **Optional peer deps:** none.
@@ -6696,16 +7357,13 @@ already follow.
6696
7357
  whole pill using a loud-color-on-quiet-tint convention; `neutral` has no dedicated token pair, so
6697
7358
  it falls back to a plain bordered-surface look)
6698
7359
  - `removable: boolean = false` (reflected — shows the remove (×) button)
6699
- - `selected: boolean = false` (reflected) — opt-in toggle/pressed mode: when set, `[part='base']`
6700
- itself becomes focusable and keyboard-activatable (Enter/Space, mirroring native `<button>`
6701
- behavior), reflects `aria-pressed` (explicitly `"false"`, not omitted, whenever toggle mode is
6702
- active but unpressed), and toggles on click/activation, emitting `lr-chip-select`.
6703
- Has no effect (no interactive semantics added to `[part='base']`) when combined with `removable`,
6704
- since the remove button already nests inside `[part='base']` a focusable descendant of a
6705
- `role="button"` ancestor isn't allowed there, and this component's two real use cases (a
6706
- chart-series visibility toggle, a category filter chip) never need both at once. `false` (the
6707
- default, with `toggleable` also left at its default) reproduces the exact passive-label-pill
6708
- output.
7360
+ - `selected: boolean = false` (reflected) — current value for opt-in toggle/pressed mode. Once
7361
+ toggle mode is active, a separate native `[part='toggle-button']` owns focus, Enter/Space/click
7362
+ activation, and explicit `"true"`/`"false"` `aria-pressed`; `[part='base']` remains a container
7363
+ and the default-slot label is inert. Activation proposes the opposite value through the
7364
+ cancelable `lr-chip-select` event and mutates `selected` only when that event is not prevented.
7365
+ Has no toggle effect when combined with `removable`, where the remove button is the sole control.
7366
+ `false` (with `toggleable` also left at its default) reproduces the passive label-pill output.
6709
7367
  - `toggleable: boolean = false` (reflected) — explicit opt-in into `selected`'s toggle/pressed
6710
7368
  interactive mode, independent of `selected`'s own current value. Setting `selected` to `true` at
6711
7369
  any point opts in automatically and keeps `toggleable` `true` from then on (enough for a chip that
@@ -6718,16 +7376,21 @@ already follow.
6718
7376
 
6719
7377
  **Events:** `lr-remove` (`detail: { value }` — the remove (×) button was activated via click or
6720
7378
  Enter/Space while focused; only rendered/reachable while `removable`), `lr-chip-select`
6721
- (`detail: { value, selected }` — fired on click, or Enter/Space while focused, when `selected` mode
6722
- is active and `removable` is not set; the chip has already toggled its own `selected` state by the
6723
- time this fires)
7379
+ (`detail: { value, selected }` — cancelable; fired from the native toggle button on click or
7380
+ Enter/Space with the proposed next state when toggle mode is active and `removable` is not set.
7381
+ Calling `preventDefault()` keeps the current `selected` state unchanged)
7382
+
7383
+ **Methods:** `focus(options?)`, `blur()`, and `click()` forward to the active internal control
7384
+ (toggle or remove button); a passive chip's `click()` retains ordinary host behavior.
6724
7385
 
6725
- **Slots:** default (the chip's label content), `icon` (optional leading icon or status dot; nothing
6726
- reserved for it — no extra gap — when left empty)
7386
+ **Slots:** default (the chip's label content; inert in toggle mode, so move links/buttons outside a
7387
+ toggleable chip), `icon` (optional leading icon or status dot; nothing reserved for it — no extra
7388
+ gap — when left empty)
6727
7389
 
6728
7390
  **CSS parts:** `base` (the pill's root container), `icon` (wrapper around the `icon` slot; hidden
6729
- entirely while empty), `label` (wrapper around the default slot), `remove-button` (the remove (×)
6730
- affordance, only rendered while `removable`)
7391
+ entirely while empty), `label` (non-interactive wrapper around the default slot), `toggle-button`
7392
+ (the real native toggle control, rendered over the label in toggle mode), `remove-button` (the
7393
+ remove (×) affordance, only rendered while `removable`)
6731
7394
 
6732
7395
  **Themeable custom properties:** `--lr-chip-accent`, `--lr-chip-bg`, `--lr-chip-border`
6733
7396
  (component-local trio swapped per `tone` rather than repeating background/color/border per part per
@@ -6859,11 +7522,13 @@ string. First-party invention (no Web Awesome equivalent).
6859
7522
  (single letters/digits upper-cased).
6860
7523
 
6861
7524
  **Exported types/functions (also directly usable standalone):** `KbdKeyLabel { visual: string;
6862
- word: string }` — one resolved token's rendered glyph and spelled-out word.
6863
- `shortcutTokenLabel(rawToken: string, isMac: boolean): KbdKeyLabel` — resolves a single token,
6864
- parameterized on `isMac` so both platform branches are unit-testable without spoofing `navigator`.
6865
- `parseShortcut(keys: string, isMac: boolean): KbdKeyLabel[]` splits and resolves a full `keys`
6866
- string.
7525
+ word: string }` — one resolved token's rendered glyph and spelled-out word; `KbdLocalize = (key:
7526
+ string, fallback: string) => string`.
7527
+ `shortcutTokenLabel(rawToken: string, isMac: boolean, localize?: KbdLocalize): KbdKeyLabel`
7528
+ resolves a single token, parameterized on `isMac` so both platform branches are unit-testable
7529
+ without spoofing `navigator`; the optional callback localizes spoken key names.
7530
+ `parseShortcut(keys: string, isMac: boolean, localize?: KbdLocalize): KbdKeyLabel[]` splits and
7531
+ resolves a full `keys` string with the same optional localization callback.
6867
7532
 
6868
7533
  **Events:** none — purely presentational.
6869
7534
 
@@ -6918,6 +7583,11 @@ near the virtual point) when one is available to give it something to observe; o
6918
7583
  the anchor point moves on its own (e.g. a graph pan/zoom tick), re-call `showAt()` with fresh
6919
7584
  coordinates to re-anchor — the popover stays open across such a call. A popover that never calls
6920
7585
  `showAt()` behaves exactly as before.
7586
+ `hide(options?: { focusTrigger?: boolean })` programmatically closes the popover; pass
7587
+ `{ focusTrigger: false }` to opt out of focus restoration. By default, `hide()`, Escape, light
7588
+ dismiss, and a bare `el.open = false` all return focus to the slotted trigger, or to a virtual
7589
+ anchor's explicit `returnFocusTo`; a virtual anchor with no return target closes without moving
7590
+ focus. No-op when already closed.
6921
7591
  **Events:** `lr-show`, `lr-hide`. **Slots:** `trigger`, default content. **CSS parts:** `trigger`,
6922
7592
  `popup`, `content`. **Themeable custom properties:** `--lr-overlay-max-inline-size` (default
6923
7593
  `--lr-size-20rem` — maximum inline size of the popup).
@@ -7002,6 +7672,12 @@ The rendered progressbar exposes `aria-valuemin`, `aria-valuemax`, and `aria-val
7002
7672
  determinate.
7003
7673
 
7004
7674
  **Slots:** `label`. **CSS parts:** `base`, `track`, `indicator`, `label`.
7675
+ **Themeable custom properties:** `--lr-progress-height` (default `var(--lr-size-0-5rem)`) — the
7676
+ block size of the progress track.
7677
+
7678
+ **Additional API surface:**
7679
+
7680
+ - `--lr-progress-duration` — Indeterminate sweep timing. Default: `var(--lr-transition-ambient)`.
7005
7681
 
7006
7682
  ## `lr-progress-ring`
7007
7683
 
@@ -7082,6 +7758,12 @@ inside each star, clipped to the fractional `precision` value). **Themeable cust
7082
7758
  (default `--lr-color-border` — unfilled-star color), and `--lr-rating-size` (default
7083
7759
  `--lr-font-size-xl` — star size).
7084
7760
 
7761
+ **Additional API surface:**
7762
+
7763
+ - `blur()` — Forwards host blur to the internal rating control.
7764
+ - `click()` — Forwards host activation to the internal rating control.
7765
+ - `focus()` — Forwards host focus to the internal rating control.
7766
+
7085
7767
  # Utilities, formatting & observers (`components/utility/`)
7086
7768
 
7087
7769
  ## `lr-export-button`
@@ -7112,12 +7794,14 @@ immediately) or multi-format (click opens a small menu).
7112
7794
  name and feeds the localized format-menu name without changing the visible label
7113
7795
  - `open: boolean = false` (reflected)
7114
7796
 
7115
- **Methods:** `focus(options?)` and `blur()` forward to the native trigger button.
7797
+ **Methods:** `focus(options?)`, `blur()`, and `click()` forward to the native trigger button.
7116
7798
 
7117
7799
  **Events:** `lr-export` (`detail: { format: string }`, **cancelable** — call `preventDefault()` to
7118
7800
  substitute your own server-generated download instead of the built-in client-side one),
7119
7801
  `lr-export-complete` (`detail: { format: 'csv' | 'json' }`, fires only after a non-cancelled
7120
- built-in download completes), `lr-show`, `lr-hide` (format-menu visibility transitions)
7802
+ built-in download completes), `lr-export-error` (`detail: { format: 'csv' | 'json', error:
7803
+ unknown }`, fires when a built-in export cannot be serialized or downloaded; activation does not
7804
+ throw into consumer code), `lr-show`, `lr-hide` (format-menu visibility transitions)
7121
7805
 
7122
7806
  **Slots:** none.
7123
7807
 
@@ -7219,6 +7903,10 @@ buttons, this has no code/JSON content model to adopt just to reuse the copy aff
7219
7903
  and some engines throw synchronously rather than rejecting — either way `lr-copy` still fires
7220
7904
  with the intended text so a consumer can always show its own confirmation/fallback UI.
7221
7905
 
7906
+ **Additional API surface:**
7907
+
7908
+ - `click()` — Activates the native button, matching the host focus/blur forwarding contract.
7909
+
7222
7910
  ---
7223
7911
 
7224
7912
  ## `lr-resize-observer`
@@ -7289,8 +7977,10 @@ stack overflow on cyclic `data`.
7289
7977
  **Methods:** `runSearch(query)` sets the declarative `search` property and awaits the recompute,
7290
7978
  resolving the match count — named distinctly from `search` because a class member can't share a name
7291
7979
  with a reactive property. `searchNext()`/`searchPrevious()` advance/step back a match cursor
7292
- (wrapping) and scroll the active match into view, resolving `false` when there are no matches.
7293
- `clearSearch()` resets `search` to `''`, clearing all matches and the cursor.
7980
+ (wrapping), reveal that selected match even when one of its ancestors was explicitly collapsed,
7981
+ mark it as the active `aria-current` result, announce its position, and scroll it into view;
7982
+ they resolve `false` when there are no matches. `clearSearch()` resets `search` to `''`, clearing all
7983
+ matches and the cursor.
7294
7984
 
7295
7985
  **Events:** `lr-copy` (`detail: { text: string }`) — fired by the top-level copy button or a
7296
7986
  per-node one. Fires even when `navigator.clipboard` is unavailable or the write silently failed
@@ -7321,7 +8011,13 @@ until `max-height` is set), `--lr-json-viewer-font` (default `var(--lr-font-mono
7321
8011
  `--lr-json-viewer-match-bg` (default `var(--lr-color-warning-quiet)`) — background, and surrounding
7322
8012
  box-shadow, of a key/value that currently matches `search`. Component-scoped indirection over the
7323
8013
  shared `--lr-color-warning-quiet` token, so a consumer can retheme just this search-match highlight
7324
- without repainting every other warning-toned surface that reads the same shared token. Plus shared
8014
+ without repainting every other warning-toned surface that reads the same shared token;
8015
+ `--lr-json-viewer-active-outline` (default `var(--lr-focus-ring-color)`) — outline color for the
8016
+ current imperative search match; `--lr-json-viewer-string-color` (default
8017
+ `var(--lr-color-success)`), `--lr-json-viewer-number-color` (default `var(--lr-color-brand)`),
8018
+ `--lr-json-viewer-boolean-color` (default `var(--lr-color-warning)`), and
8019
+ `--lr-json-viewer-null-color` (default `var(--lr-color-text-quiet)`) — per-value-type color hooks.
8020
+ Plus shared
7325
8021
  tokens `--lr-color-border/-surface/-text/-text-quiet/-brand/-brand-quiet/-success/-warning/-warning-quiet`,
7326
8022
  `--lr-radius`, `--lr-space-xs/-s/-l`, `--lr-focus-ring-width/-color/-offset`,
7327
8023
  `--lr-transition-fast`.
@@ -7347,9 +8043,11 @@ html`<lr-json-viewer .data=${apiResponse} copyable max-height="24rem" search=${q
7347
8043
  binding, never as a plain HTML attribute.
7348
8044
  - Search highlighting auto-expands only the *ancestors* of a match, not the whole tree — a
7349
8045
  non-matching sibling subtree elsewhere stays collapsed (or expanded) exactly as it already was.
7350
- - An explicit per-node expand/collapse (from clicking a node's `toggle` button) permanently overrides
7351
- both `collapsedDepth` and any search-driven auto-expand for that path, until `data` is reassigned
7352
- with a different shape.
8046
+ - An explicit per-node expand/collapse (from clicking a node's `toggle` button) overrides
8047
+ `collapsedDepth` and declarative search-driven auto-expansion for that path. Imperative
8048
+ `searchNext()`/`searchPrevious()` navigation may reopen the ancestors of the selected result so
8049
+ the active match is never hidden; otherwise the override persists until `data` is reassigned with
8050
+ a different shape.
7353
8051
  - Per-node copy buttons call `stopPropagation()` on click so clicking one doesn't also toggle the
7354
8052
  row's expand/collapse state.
7355
8053
 
@@ -7517,10 +8215,11 @@ via an internal `<lr-live-region>` in polite mode.
7517
8215
 
7518
8216
  A caret-anchored, keyboard-navigable popover for `@`-mention and `/`-slash-command autocomplete
7519
8217
  inside a plain-text `<textarea>`/`<input>` the host owns. First-party invention (no Web Awesome
7520
- equivalent). It never takes DOM focus itself the host's own input keeps focus, and this
7521
- component conveys the active row via `activeDescendantId` for the host to apply as its own
7522
- input's `aria-activedescendant`, the same pattern `<lr-select>`/`<lr-combobox>` use for their
7523
- own listbox.
8218
+ equivalent). On platforms accepting cross-root ARIA element reflection, the host's own input keeps
8219
+ focus and `syncActiveDescendant()` points it at the active option. Where that reference is rejected,
8220
+ `focusActiveOption()` moves real focus into this component's shadow listbox so the focus owner and
8221
+ option share one tree scope. A string `aria-activedescendant` cannot resolve from a host input in
8222
+ the document into an option in this component's shadow root.
7524
8223
 
7525
8224
  **Properties:**
7526
8225
  - `anchor?: HTMLElement` (attribute: false) — the element to position the popup relative to. A
@@ -7540,18 +8239,26 @@ own listbox.
7540
8239
  - `filteredItems: MentionItem[]` — read-only getter; `items` filtered by `query` via `filter` (or
7541
8240
  the built-in default). Empty `query` returns `items` unfiltered.
7542
8241
  - `activeDescendantId: string | null` — read-only getter; the `id` of the currently-highlighted
7543
- row, or `null` while closed or when `filteredItems` is empty.
7544
- - `listboxId: string` read-only getter; the `id` of the `role="listbox"` element, for a host that
7545
- also wants to wire `aria-controls`.
7546
-
7547
- **Methods:** `handleKeyDown(e: KeyboardEvent): boolean` — the host's own text-control `keydown`
7548
- handler calls this while the popover is open. Handles `ArrowDown`/`ArrowUp` (moves the highlight) and
7549
- `Enter`/`Tab` (commits the highlighted row) — both pairs return `false` with no `preventDefault()`
7550
- when `filteredItems` is empty, letting the keystroke fall through to the host's own control unchanged
7551
- (e.g. the textarea's caret still moves to the next line on ArrowDown when there's nothing to
7552
- navigate); `Escape` always closes with no selection and returns `true`. Returns `true` whenever the
7553
- key was intercepted (`preventDefault()` already called) and the host should not also act on it,
7554
- `false` otherwise (including for any key this method doesn't recognize).
8242
+ internal row, or `null` while closed or when `filteredItems` is empty. Useful for diagnostics and
8243
+ same-tree consumers; do not copy it to an external control as a string IDREF.
8244
+ - `activeDescendantElement: HTMLElement | null` — read-only getter; the highlighted shadow option
8245
+ for the platform's element-reference ARIA API.
8246
+ - `listboxId: string` — read-only getter; the internal `id` of the `role="listbox"` element. Like
8247
+ `activeDescendantId`, it cannot form a cross-shadow string IDREF from a host input.
8248
+
8249
+ **Methods:**
8250
+ - `handleKeyDown(e: KeyboardEvent): boolean` the host's own text-control `keydown` handler calls
8251
+ this while the popover is open. Handles `ArrowDown`/`ArrowUp` (moves the highlight) and
8252
+ `Enter`/`Tab` (commits the highlighted row) both pairs return `false` with no
8253
+ `preventDefault()` when `filteredItems` is empty, letting the keystroke fall through to the
8254
+ host's own control unchanged. `Escape` closes with no selection. Returns `true` whenever the key
8255
+ was intercepted and `false` for keys the method does not recognize.
8256
+ - `syncActiveDescendant(control: HTMLElement): boolean` — clears any string
8257
+ `aria-activedescendant`, then applies `ariaActiveDescendantElement` when the platform accepts the
8258
+ cross-root reference. Returns whether that reference was accepted.
8259
+ - `focusActiveOption(): Promise<boolean>` — same-tree fallback after a consumed navigation key
8260
+ when `syncActiveDescendant()` returns `false`. Focuses the active option, lets the popover handle
8261
+ subsequent navigation, and restores focus to `anchor` when the popover closes.
7555
8262
 
7556
8263
  **Exported types:** `MentionItem { id: string; label: string; description?: string; icon?: string
7557
8264
  }`; `MentionFilter = (item: MentionItem, query: string) => boolean`; `MentionSelectDetail { id:
@@ -7593,7 +8300,13 @@ available space. See `lr-tour` for the shared-clamp note.
7593
8300
  const popover = document.getElementById('mentions');
7594
8301
 
7595
8302
  textarea.addEventListener('keydown', (e) => {
7596
- if (popover.open && popover.handleKeyDown(e)) return; // consumed
8303
+ if (popover.open && popover.handleKeyDown(e)) {
8304
+ if (!popover.syncActiveDescendant(textarea) &&
8305
+ (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {
8306
+ void popover.focusActiveOption();
8307
+ }
8308
+ return;
8309
+ }
7597
8310
  });
7598
8311
  textarea.addEventListener('input', () => {
7599
8312
  popover.anchor = textarea;
@@ -7603,6 +8316,7 @@ available space. See `lr-tour` for the shared-clamp note.
7603
8316
  ];
7604
8317
  popover.query = 'a'; // detected since the trigger character
7605
8318
  popover.open = true;
8319
+ popover.updateComplete.then(() => popover.syncActiveDescendant(textarea));
7606
8320
  });
7607
8321
 
7608
8322
  popover.addEventListener('lr-mention-select', (e) => {
@@ -7613,11 +8327,11 @@ available space. See `lr-tour` for the shared-clamp note.
7613
8327
 
7614
8328
  Integration is entirely the host's responsibility: detect a mention/command trigger in the host's
7615
8329
  own `input` handling, set `anchor`/`items`/`query` and flip `open = true`, forward every `keydown`
7616
- through `handleKeyDown()` while open, and keep the host's own input's `aria-activedescendant` (and
7617
- optionally `aria-controls`, via `listboxId`) in sync with `activeDescendantId`. Setting `open =
7618
- false` whenever the query stops looking like an active mention context (a space typed, the trigger
7619
- deleted, the input blurred, …) is also the host's job `lr-mention-close` fires automatically
7620
- from that, there is no separate "tell it to close" call needed.
8330
+ through `handleKeyDown()` while open, and call `syncActiveDescendant()` after opening and after each
8331
+ consumed navigation key. If it returns `false`, call `focusActiveOption()` after the first consumed
8332
+ ArrowUp/ArrowDown so the fallback owns navigation from then on. Setting `open = false` whenever the
8333
+ query stops looking like an active mention context (a space typed, the trigger deleted, the input
8334
+ blurred, …) is also the host's job `lr-mention-close` fires automatically from that.
7621
8335
 
7622
8336
  Positioning measures exactly where the caret currently paints via a hidden-mirror-element technique
7623
8337
  (`caretClientRect()`) and positions against that single point with `internal/positioner.js`'s
@@ -7629,6 +8343,9 @@ fresh `query` is the proxy for "the caret may have moved").
7629
8343
  - a host-level `aria-label` attribute on `<lr-mention-popover>` now takes priority over `label`
7630
8344
  (and its localized default) when resolving `[part="listbox"]`'s accessible name — previously it
7631
8345
  was silently ignored. Matches the same fallback on `<lr-combobox>`/`<lr-table>`.
8346
+ - Never copy `activeDescendantId` or `listboxId` onto a document-owned control as a string ARIA
8347
+ IDREF; shadow-root IDs are outside that control's tree scope. Use `syncActiveDescendant()` and its
8348
+ `focusActiveOption()` fallback.
7632
8349
  - The popover opens pre-highlighted on the top match (index 0), unlike `<lr-combobox>`'s own
7633
8350
  listbox which opens with nothing highlighted (`-1`) — a bare Enter right after opening commits
7634
8351
  immediately.
@@ -7675,6 +8392,9 @@ First-party invention (no Web Awesome equivalent).
7675
8392
  - `contextLines: number | undefined` (attribute: `context-lines`) — keeps this many unchanged
7676
8393
  lines around each change and collapses longer unchanged runs into a localized fold marker. The
7677
8394
  default `undefined` shows every line; negative and non-finite values also disable folding.
8395
+ - `maxLines: number = 5000` (attribute `max-lines`) — maximum logical lines accepted on either
8396
+ side. Larger input renders the localized `diffViewTooLarge` fallback without computing or
8397
+ highlighting the diff. Set the property to `Infinity` explicitly to opt into unbounded diffing.
7678
8398
 
7679
8399
  **Events:** `lr-copy` (`detail: { text: string }` — the full unified-diff text, fired on
7680
8400
  copy-button activation regardless of whether the clipboard write actually succeeded).
@@ -7685,7 +8405,8 @@ copy-button activation regardless of whether the clipboard write actually succee
7685
8405
  `data-type="equal"|"add"|"remove"|"empty"|"fold"` — `"empty"` is an unbalanced-replace placeholder cell in
7686
8406
  `layout="split"` and never carries a `+`/`-` prefix; `"fold"` is the localized unchanged-lines
7687
8407
  marker), `copy-button` (the copy affordance, only
7688
- rendered while `copyable`), `side` (one column in `layout="split"`, `data-side="old"|"new"`).
8408
+ rendered while `copyable`), `limit` (the localized over-`maxLines` fallback), `side` (one column in
8409
+ `layout="split"`, `data-side="old"|"new"`).
7689
8410
 
7690
8411
  **Themeable custom properties:** `--lr-diff-view-font` (default `var(--lr-font-mono)`), plus
7691
8412
  shared tokens `--lr-color-border`/`-surface`/`-success`/`-success-quiet`/`-danger`/
@@ -7713,13 +8434,22 @@ same line-diff function this component's own `render()`/copy handler call, expos
7713
8434
  consumer can compute or unit-test the same alignment without instantiating the element at all.
7714
8435
 
7715
8436
  **Known gotchas:**
7716
- - the alignment is a genuine O(n·m) longest-common-subsequence dynamic program over lines (split on
7717
- `\n`), not a naive "every removed line then every added line" fine for a typical
7718
- tool-call/transcript-sized diff, but a very large pair of texts costs quadratic time/memory;
7719
- there's no line-count guard or chunking of its own.
7720
- - `oldText`/`newText` are recomputed into the diff on every render — this component keeps no separate
7721
- cached diff state, so binding either property to something that changes on every keystroke
7722
- recomputes the whole alignment each time.
8437
+ - line splitting normalizes LF, CRLF, and lone CR endings before alignment and syntax-token indexing,
8438
+ so files that differ only by line-ending convention do not appear wholly changed.
8439
+ - alignment uses Hirschberg longest-common-subsequence matching: O(n·m) time with linear working
8440
+ memory. The 5,000-line per-side default ceiling bounds pathological inputs; `Infinity` is an
8441
+ explicit performance-risk opt-out.
8442
+ - the computed `diffOps` state is cached and recomputed only when `oldText`, `newText`, or
8443
+ `maxLines` changes. Copy-confirmation and other unrelated renders reuse the cached alignment.
8444
+
8445
+ **Additional API surface:**
8446
+
8447
+ - `--lr-diff-view-add-background` — Added-line background.
8448
+ - `--lr-diff-view-add-color` — Added-line text color.
8449
+ - `--lr-diff-view-remove-background` — Removed-line background.
8450
+ - `--lr-diff-view-remove-color` — Removed-line text color.
8451
+ - `--lr-diff-view-fold-color` — Fold-marker text color.
8452
+ - `--lr-diff-view-fold-background` — Fold-marker background.
7723
8453
 
7724
8454
  ---
7725
8455
 
@@ -7949,6 +8679,10 @@ The two height knobs work as a pair on `[part='field-input']`, the same way
7949
8679
  - The host carries a `:state(blank)` custom state whenever `value === ''`, and `data-invalid` only
7950
8680
  once touched (first blur out of the whole control) and actually invalid.
7951
8681
 
8682
+ **Additional API surface:**
8683
+
8684
+ - `click()` — Activates the first native field in locale order.
8685
+
7952
8686
  ## `lr-random-content`
7953
8687
 
7954
8688
  Shows a chosen subset of its slotted children and hides the rest — A/B copy testing, testimonial
@@ -7965,6 +8699,8 @@ children; nothing is moved or cloned.
7965
8699
  - `animation: 'none' | 'fade' | 'fade-up' | 'fade-down' | 'fade-left' | 'fade-right' = 'none'`
7966
8700
  (reflected) — entrance effect applied to a child the instant it becomes shown
7967
8701
  - `autoplay: boolean = false` (reflected)
8702
+ - `paused: boolean = false` (reflected) — suppresses autoplay. The built-in pause/resume action
8703
+ toggles this state; a programmatic assignment remains silent.
7968
8704
  - `autoplayInterval: number = 3000` (attribute `autoplay-interval`) — clamped to a 1000 ms floor
7969
8705
 
7970
8706
  **Methods:** `randomize(): HTMLElement[]` — re-selects using the current `mode`, applies
@@ -7980,7 +8716,8 @@ each autoplay tick; never when the eligible pool is empty.
7980
8716
  **CSS parts:** `base` — the wrapper around the default slot; carries `role="status"`,
7981
8717
  `aria-atomic="true"`, and `aria-live="polite"`, downgraded to `aria-live="off"` while `autoplay` is
7982
8718
  on (a self-rotating region announcing on every tick would be spam). A host `aria-label` attribute is
7983
- forwarded onto it.
8719
+ forwarded onto it. `pause-button` — the localized autoplay pause/resume action, rendered only while
8720
+ `autoplay` is enabled and exposed as a toggle with `aria-pressed`.
7984
8721
 
7985
8722
  **Themeable custom properties:** `--lr-random-content-animation-duration` (default `300ms`),
7986
8723
  `--lr-random-content-animation-easing` (default `ease`),
@@ -7988,8 +8725,8 @@ forwarded onto it.
7988
8725
  directional `fade-*` effects).
7989
8726
 
7990
8727
  **Known gotchas:**
7991
- - There is no built-in trigger UI (no next/previous/shuffle button) and therefore no keyboard
7992
- interaction: selection changes only via `autoplay` or `randomize()`.
8728
+ - There is no next/previous/shuffle action; the only built-in control is the autoplay pause/resume
8729
+ button. Selection changes via autoplay or `randomize()`.
7993
8730
  - Autoplay is suppressed entirely under `prefers-reduced-motion: reduce`, and whenever the eligible
7994
8731
  pool has fewer than 2 children. The preference is re-observed live, not just read once.
7995
8732
  - `fade-left`/`fade-right` are physical-direction transforms (upstream naming), deliberately **not**
@@ -8252,6 +8989,10 @@ import '@aceshooting/lyra-ui/components/media/flag/flag-peer.js';
8252
8989
  (`variant="detailed"` is the replacement); left unset, `variant` falls back to honoring `detailed`
8253
8990
  for one more minor version before removal.
8254
8991
 
8992
+ **Additional API surface:**
8993
+
8994
+ - `part="error"` — Localized alert rendered when the optional peer resolver is unavailable or fails.
8995
+
8255
8996
  ---
8256
8997
 
8257
8998
  ## `lr-playback`
@@ -8268,8 +9009,8 @@ Steps an index through `[0, length)` on a fixed interval — play/pause for time
8268
9009
  change-tracking sees it and auto-pauses on `hidden = true`)
8269
9010
 
8270
9011
  **Methods:** `play()`, `pause()`, `toggle()`, `next()`, `previous()`, `goTo(index: number)` — all
8271
- idempotent/clamped; `length <= 1` is a no-op degenerate case. `focus(options?)` and `blur()` forward
8272
- to the play button.
9012
+ idempotent/clamped; `length <= 1` is a no-op degenerate case. `focus(options?)`, `blur()`, and
9013
+ `click()` forward to the play button.
8273
9014
 
8274
9015
  **Events:** `lr-play`, `lr-pause` (no detail), `lr-step` (`detail: { index }`, fired on every
8275
9016
  tick and manual step); internal `focus`/`blur` are bridged as bubbling, composed host events.
@@ -8380,13 +9121,19 @@ not installed)
8380
9121
  **Themeable custom properties:** shared tokens only — `--lr-space-xs/-s`, `--lr-color-surface`,
8381
9122
  `--lr-color-border`, `--lr-shadow`, `--lr-radius`.
8382
9123
 
8383
- **Optional peer deps:** `maplibre-gl` (lazy-loaded; consumer must **separately** `import
8384
- 'maplibre-gl/dist/maplibre-gl.css'` once the component does not do this for you).
9124
+ **Optional peer deps:** `maplibre-gl` (lazy-loaded). MapLibre v6 is ESM-only and requires WebGL2.
9125
+ The consumer must **separately** import `maplibre-gl/dist/maplibre-gl.css` and configure the v6
9126
+ module-worker URL for its bundler once — the component cannot choose a bundler-specific worker URL.
9127
+ For Vite:
8385
9128
 
8386
9129
  ```html
8387
9130
  <lr-map center="[2.35, 48.85]" zoom="10"></lr-map>
8388
- <script>
9131
+ <script type="module">
9132
+ import { setWorkerUrl } from 'maplibre-gl';
9133
+ import workerUrl from 'maplibre-gl/dist/maplibre-gl-worker.mjs?worker&url';
8389
9134
  import 'maplibre-gl/dist/maplibre-gl.css';
9135
+ setWorkerUrl(workerUrl);
9136
+
8390
9137
  const m = document.querySelector('lr-map');
8391
9138
  m.choropleth = {
8392
9139
  sourceId: 'regions',
@@ -8400,6 +9147,10 @@ not installed)
8400
9147
  </script>
8401
9148
  ```
8402
9149
 
9150
+ Webpack, esbuild, Rollup, and direct-browser ESM use different worker URL forms; use MapLibre's ESM
9151
+ installation guide for the matching setup:
9152
+ https://maplibre.org/maplibre-gl-js/docs/#esm.
9153
+
8403
9154
  **Known gotchas:**
8404
9155
  - clearing or swapping the choropleth no longer leaks the old layer: setting `choropleth =
8405
9156
  undefined`, or changing `choropleth.sourceId` to a different value, now calls `removeLayer`/
@@ -8475,12 +9226,24 @@ accepted), `'size'` from `maxFileSize`, or `'directory'` for a dropped folder. `
8475
9226
  when the semantic dropzone (the actual keyboard-focusable element, not the hidden native `<input>`)
8476
9227
  gains/loses focus.
8477
9228
 
9229
+ Each rejected file also renders as its own line in the visible `[part="rejection"]` alert, naming
9230
+ the file and the reason via one of four locale keys: `fileInputRejectedType` (default
9231
+ `'{filename}: this file type is not accepted.'`), `fileInputRejectedSize` (default
9232
+ `'{filename}: this file is too large.'`), `fileInputRejectedCount` (default `'{filename}: only one
9233
+ file can be selected at a time.'`), and — for `'directory'` — the pre-existing
9234
+ `fileInputFolderRejected` (default `'Folders are not accepted here.'`, reused verbatim, so it has no
9235
+ `{filename}` placeholder). The filename is interpolated as caller-supplied data, never localized
9236
+ itself. The region is cleared (and unrendered) as soon as a subsequent selection rejects nothing.
9237
+
8478
9238
  **Slots:** default slot — custom dropzone content, overrides the `label` attribute text when
8479
9239
  provided. The accessible name always comes from `label` regardless, so icon-only slot content still
8480
9240
  announces correctly.
8481
9241
 
8482
9242
  **CSS parts:** `base`, `input`, `status` (a visually-hidden `role="status" aria-live="polite"`
8483
- element carrying the drag accept/reject announcement)
9243
+ element carrying the drag accept/reject announcement and the aggregate accepted/rejected count),
9244
+ `rejection` (a **visible** `role="alert"` region, rendered only while a rejection exists, listing
9245
+ each currently-rejected file next to a per-reason message — in addition to, never in place of, the
9246
+ sr-only `status` summary above)
8484
9247
 
8485
9248
  **Themeable custom properties:** `--lr-file-input-compact-padding` (default `var(--lr-space-s)`) —
8486
9249
  `[part='base']`'s padding while `compact`; `--lr-file-input-compact-gap` (default
@@ -8504,17 +9267,18 @@ tokens — `--lr-space-xs`, `--lr-space-l`,
8504
9267
  **Optional peer deps:** none.
8505
9268
 
8506
9269
  ```html
8507
- <lr-file-input multiple accept=".csv,.xlsx" allowed-mime-types='["text/csv"]'></lr-file-input>
9270
+ <lr-file-input id="dataset-files" multiple accept=".csv,.xlsx"></lr-file-input>
8508
9271
  <script>
8509
- document.querySelector('lr-file-input').addEventListener('lr-files', (e) => {
9272
+ const input = document.querySelector('#dataset-files');
9273
+ input.allowedMimeTypes = ['text/csv'];
9274
+ input.addEventListener('lr-files', (e) => {
8510
9275
  console.log('accepted:', e.detail.files, 'rejected:', e.detail.rejected); // rejected[i].reason
8511
9276
  });
8512
9277
  </script>
8513
9278
  ```
8514
9279
 
8515
9280
  Note: `allowedMimeTypes`/`forbiddenMimeTypes` are complex properties (`attribute: false`) — set
8516
- them via JS (`el.allowedMimeTypes = [...]`), not as a JSON string attribute; the snippet above is
8517
- illustrative of intent only.
9281
+ them via JS (`el.allowedMimeTypes = [...]`), not as a JSON string attribute.
8518
9282
 
8519
9283
  `accept.ts` exports `matchesAccept(file, accept, assumeExtensionMatch?)` (internal — not
8520
9284
  re-exported from the package root) — parses the same three `accept` forms the browser's native
@@ -8527,8 +9291,7 @@ an extension-only `accept` list.
8527
9291
  **Known gotchas:**
8528
9292
  - Paste-from-clipboard **is** supported and on by default: a `paste` event on the dropzone reads
8529
9293
  `e.clipboardData.files` and routes it through the same accept/reject classification as a drop.
8530
- Set `paste="false"` (or `.paste = false`) to opt out. (The package README's "Known limitations"
8531
- entry claiming there is no paste support, and none for dragged folders, is stale — both work.)
9294
+ Set `paste="false"` (or `.paste = false`) to opt out.
8532
9295
  - Dragged folders **are** detected via `webkitGetAsEntry()` and reported as
8533
9296
  `rejected[].reason === 'directory'` (paired with a synthetic zero-byte `File` carrying the folder
8534
9297
  name), not silently accepted as a phantom file.
@@ -8559,6 +9322,8 @@ Before/after comparison surface with two named slots and a keyboard-accessible n
8559
9322
  **Events:** `lr-position-change` (`detail: { position }`), plus composed `focus` and `blur` events
8560
9323
  from the internal range handle.
8561
9324
 
9325
+ **Methods:** `focus(options?)`, `blur()`, and `click()` forward to the internal range handle.
9326
+
8562
9327
  **Slots:** `before`, `after`.
8563
9328
 
8564
9329
  **CSS parts:** `base`, `before`, `after`, `divider`, and `handle`.
@@ -8802,6 +9567,9 @@ drop-in still does something useful, but `lr-open` fires first — a host callin
8802
9567
  `preventDefault()` on it suppresses that default download/open so it can substitute its own
8803
9568
  handling.
8804
9569
 
9570
+ **Methods:** `focus(options?)`, `blur()`, and `click()` forward to the primary action for the
9571
+ current media kind.
9572
+
8805
9573
  **Slots:** none.
8806
9574
 
8807
9575
  **CSS parts:** `base` (a `<button>` for `kind="image"`, a plain wrapper `<div>` for `kind="video"`,
@@ -8938,6 +9706,10 @@ hidden via CSS by default, exposed as a part only so a consumer can override tha
8938
9706
  scope-limited by design to firing `lr-camera-request`/`lr-audio-request` and nothing else. The
8939
9707
  hidden input is only rendered when `capabilities` contains `files` or `image`.
8940
9708
 
9709
+ **Additional API surface:**
9710
+
9711
+ - `click()` — Activates the internal attachment trigger.
9712
+
8941
9713
  ---
8942
9714
 
8943
9715
  ## `lr-avatar`
@@ -9057,6 +9829,10 @@ backgrounded circle around the button; only rendered once loaded and error-free)
9057
9829
  browser's native decode loop keeps running while visually covered; only opacity and `aria-hidden`
9058
9830
  swap.
9059
9831
 
9832
+ **Additional API surface:**
9833
+
9834
+ - `click()` — Activate the play/pause control.
9835
+
9060
9836
  ## `lr-animation`
9061
9837
 
9062
9838
  Declaratively animates one slotted element through the native Web Animations API.
@@ -9295,12 +10071,18 @@ mode is on. The toggle carries its own glyph in `--lr-color-text`, so keep a 4.5
9295
10071
  when overriding the background. `--lr-image-viewer-highlight-active-color` (default
9296
10072
  `var(--lr-color-brand)`) — the outline of the `[part='highlight']` matching `activeHighlightId`,
9297
10073
  independent of the per-tone border colors, so the active box stays distinguishable whatever tone it
9298
- carries. All three are declared as inline `var()` fallbacks at the point of use rather than on
9299
- `:host`, so each can be set on the element *or on any ancestor*: `::part(highlight)[data-active]` is
9300
- invalid CSS — Shadow Parts forbids an attribute selector after `::part()` — which previously left
9301
- overriding the library-wide `--lr-color-brand`/`--lr-color-brand-quiet` tokens as the only lever,
9302
- repainting every other element that read them. Unset, each falls back to the token its rule used
9303
- before.
10074
+ carries. Highlight tone styling is exposed through `--lr-image-viewer-highlight-border`,
10075
+ `--lr-image-viewer-highlight-bg`, and the tone-specific
10076
+ `--lr-image-viewer-highlight-success-border`, `--lr-image-viewer-highlight-success-bg`,
10077
+ `--lr-image-viewer-highlight-warning-border`, `--lr-image-viewer-highlight-warning-bg`,
10078
+ `--lr-image-viewer-highlight-danger-border`, `--lr-image-viewer-highlight-danger-bg`,
10079
+ `--lr-image-viewer-highlight-neutral-border`, and `--lr-image-viewer-highlight-neutral-bg`
10080
+ properties. These properties are declared as inline `var()` fallbacks at the point of use rather
10081
+ than on `:host`, so each can be set on the element *or on any ancestor*:
10082
+ `::part(highlight)[data-active]` is invalid CSS — Shadow Parts forbids an attribute selector after
10083
+ `::part()` — which previously left overriding the library-wide
10084
+ `--lr-color-brand`/`--lr-color-brand-quiet` tokens as the only lever, repainting every other
10085
+ element that read them. Unset, each falls back to the token its rule used before.
9304
10086
 
9305
10087
  ## `lr-av-player`
9306
10088
 
@@ -9312,8 +10094,8 @@ distinct from `<lr-transcript-feed>` (live captions for an in-progress voice ses
9312
10094
  `anchorKinds: ['time-range']` only — no text selection is bound. The transcript virtualizes through
9313
10095
  `<lr-virtual-list>` the same way `lr-pdf-viewer` virtualizes pages.
9314
10096
 
9315
- **Properties:** `src: string = ''`, `name: string = ''`, `kind?: 'audio' | 'video'` (attribute:
9316
- false auto-detection override), `mimeType: string = ''` (attribute `mime-type`), `poster: string =
10097
+ **Properties:** `src: string = ''`, `name: string = ''`, `kind?: 'audio' | 'video'`
10098
+ (attribute-backed auto-detection override), `mimeType: string = ''` (attribute `mime-type`), `poster: string =
9317
10099
  ''`, `loop: boolean = false`, `muted: boolean = false`, `preload: 'none' | 'metadata' | 'auto' =
9318
10100
  'metadata'`, `playbackRate: number = 1` (attribute `playback-rate`, reflected), `rates: number[] =
9319
10101
  [0.75, 1, 1.25, 1.5, 2]` (attribute: false), `cues: LyraAvCue[] = []` (attribute: false), `peaks:
@@ -9393,15 +10175,27 @@ Chart.js wrapper every other `lr-*-chart` tag subclasses; supports both a simpli
9393
10175
  - `labels: string[] = []` (attribute: false)
9394
10176
  - `datasets: Series[] = []` (attribute: false) — `Series { label: string; data?: (number|null)[];
9395
10177
  points?: {x,y,label?}[]; color?: string|string[]; fill?: boolean; width?: number; dash?: boolean;
9396
- noTooltip?: boolean; axis?: 'y'|'y2'; pointColors?: string[]; pointRadius?: number; type?:
9397
- 'line'|'bar' }`
10178
+ noTooltip?: boolean; axis?: 'y'|'y2'; pointColors?: string[]; pointRadius?: number|number[];
10179
+ segmentColors?: string[]; type?: 'line'|'bar' }`
10180
+ - `pointRadius` takes a single number (applied to every point) **or** an array matching `data`'s
10181
+ length that sizes each point independently — passed straight through to Chart.js, which
10182
+ supports both natively. Useful for emphasizing a single outlier or the latest reading without
10183
+ splitting the series in two.
10184
+ - `segmentColors` colors each *segment* (the line drawn between two consecutive points) by the
10185
+ segment's **starting** point index, so `['red', 'green']` over 3 points paints the first
10186
+ segment red and the second green; a shorter array cycles. Wired to Chart.js's
10187
+ `segment.borderColor` scriptable option, so it is only meaningful for line-type series.
10188
+ Typical use is threshold/anomaly banding along one line. A series that omits it (or passes an
10189
+ empty array) emits no `segment` key at all, leaving line rendering exactly as before.
9398
10190
  - `legend: boolean = false`
9399
10191
  - `legendPosition: LyraChartLegendPosition = 'top'` (attribute `legend-position`) — places the
9400
10192
  legend at `top`, `right`, `bottom`, or `left`; `auto` chooses right above 480px and bottom below
9401
10193
  that allocation width
9402
- - `valueFormatter?: LyraChartValueFormatter` (attribute: false) — formats numeric tick, tooltip,
9403
- and legend values; the callback receives the value and `'tick'`, `'tooltip'`, or `'legend'`
9404
- context
10194
+ - `valueFormatter?: LyraChartValueFormatter` (attribute: false) — formats numeric (value-axis)
10195
+ tick, tooltip, and legend values; the callback receives the value and `'tick'`, `'tooltip'`, or
10196
+ `'legend'` context. Never runs against the categorical x-axis's own labels (line/bar's `labels`
10197
+ strings) — Chart.js's category scale passes the tick index to `ticks.callback`, not the label
10198
+ text
9405
10199
  - `area: boolean = false`
9406
10200
  - `zoom: boolean = false` — wheel/drag/pinch zoom on the `x` axis only (pan disabled, and the zoom
9407
10201
  range is limited to the original data extent); shows the `reset-zoom-button` while zoomed
@@ -9415,6 +10209,16 @@ Chart.js wrapper every other `lr-*-chart` tag subclasses; supports both a simpli
9415
10209
  - `stacked: boolean = false` — stacks the `x`/`y`(/`y2`) scale entries `buildScales()` returns; only
9416
10210
  meaningful for `bar`/`line` types (scatter/bubble's linear `x` scale and the radial `r` scale used
9417
10211
  by radar/polar-area are out of scope)
10212
+ - `dataLabels: boolean = false` (attribute `data-labels`) — draws each point's value on the chart via
10213
+ the optional `chartjs-plugin-datalabels` peer (see `peers.md`). Unset (the default) leaves labels
10214
+ off; because the plugin is registered **per chart instance** (not globally), a `<lr-chart
10215
+ data-labels>` never affects any other chart on the page. If the peer is not installed the chart
10216
+ still renders and the attribute is inert, with one `console.warn`. The screen-reader equivalent is
10217
+ the always-present accessible data table (`show-data-table` makes it visible) — labels are a
10218
+ purely visual, canvas-only addition and add no new a11y surface.
10219
+ - `stackTotals: boolean = false` (attribute `stack-totals`) — with `stacked` (bar/line only), draws
10220
+ the per-category stack total above each stack, via the same `chartjs-plugin-datalabels` peer.
10221
+ Null/undefined points are skipped; a category whose every value is null shows no total (not `0`)
9418
10222
  - `config?: Partial<ChartConfiguration>` (attribute: false) — deep-merged over the generated
9419
10223
  config; any nested key wins without clobbering sibling generated keys. This is the raw Chart.js
9420
10224
  escape hatch, so a caller-supplied `config.type` is passed through rather than normalized.
@@ -9427,11 +10231,39 @@ Chart.js wrapper every other `lr-*-chart` tag subclasses; supports both a simpli
9427
10231
  - `chartArea: LyraChartArea | undefined` (readonly) — current Chart.js chart-area geometry in
9428
10232
  canvas-local coordinates (`top`, `left`, `right`, `bottom`, `width`, `height`), when a chart is
9429
10233
  drawn
10234
+ - `appendData(label, values, maxPoints?)` — appends one aligned numeric category and optionally
10235
+ keeps only the newest `maxPoints`; point-based scatter/bubble series are left unchanged
10236
+
10237
+ **Methods:** `resetZoom()` resets any active zoom/pan to the original view. `refreshTheme()` forces
10238
+ a redraw so the `--lr-chart-*` tokens below are re-read from the current computed style. A
10239
+ built-in `ThemeWatcher` now calls this automatically when `prefers-color-scheme` flips or an
10240
+ ancestor's `class`/`style`/`data-theme`/`data-color-scheme` attribute mutates — the most common
10241
+ theme-toggle mechanisms — so a consumer rarely needs to call it by hand; it remains public as the
10242
+ escape hatch for theme changes those signals can't observe. `exportData('csv' | 'png')` returns a
10243
+ spreadsheet-safe CSV snapshot or the current PNG data URL when Chart.js is loaded.
10244
+
10245
+ The instance method `seriesPalette(): string[]` resolves the categorical series ramp
10246
+ (`--lr-color-chart-1..8`) through `getComputedStyle` and returns the concrete, theme-aware colors —
10247
+ the exact same values the chart hands any series that sets no `color` of its own. Each internal
10248
+ token resolves through the matching application input (`--lr-theme-color-chart-1..8`), so theme
10249
+ overrides are included.
10250
+
10251
+ The module also exports `seriesPalette(scope?: Element | null): string[]`, which can run before a
10252
+ chart exists. Omit `scope` to read `document.documentElement`, pass an element to resolve its theme
10253
+ scope, or pass `null` to request the light-mode fallback directly. When a scope has no component
10254
+ token layer yet, the helper reads the `--lr-theme-color-chart-N` inputs directly. Both forms return
10255
+ a fresh eight-color array each call (safe to mutate) and let chart-adjacent UI, KPI tiles, or the
10256
+ `Series` array itself come from one source of truth.
9430
10257
 
9431
- **Methods:** `resetZoom()` (reset any active zoom/pan to the original view), `refreshTheme()`
9432
- (forces a redraw so the `--lr-chart-*` tokens below are re-read from the current computed style —
9433
- the escape hatch for a consumer's own theme-toggle handler to call when it flips something, e.g. a
9434
- `data-theme` attribute, that doesn't otherwise change any `lr-chart` property)
10258
+ ```ts
10259
+ import { seriesPalette } from '@aceshooting/lyra-ui/components/charts/chart/chart.js';
10260
+
10261
+ const colors = seriesPalette();
10262
+ const series = [
10263
+ { label: 'Revenue', data: [12, 19], color: colors[0] },
10264
+ { label: 'Costs', data: [7, 11], color: colors[1] },
10265
+ ];
10266
+ ```
9435
10267
 
9436
10268
  **Events:** `lr-zoom` (`detail: { zoomed: boolean }`, fired on zoom-complete and on
9437
10269
  `resetZoom()`), `lr-point-click` (fired when a click lands on, or nearest to — intersect-only —
@@ -9477,10 +10309,9 @@ subset actually used.
9477
10309
  property values fall back to `line`. Each typed `lr-*-chart` subclass (e.g.
9478
10310
  `llms/components/lr-bar-chart.md`) locks its *own* `type` via a real prototype accessor — a
9479
10311
  genuine runtime lock, not just a compile-time default.
9480
- - no global theme-broadcast event exists to auto-retheme an already-drawn chart on a theme switch —
9481
- a consumer flipping something upstream (e.g. a `data-theme` attribute) that doesn't otherwise
9482
- change any `lr-chart` property must call `refreshTheme()` itself to make Chart.js re-read the
9483
- `--lr-chart-*` tokens above.
10312
+ - a built-in `ThemeWatcher` auto-retheme an already-drawn chart when `prefers-color-scheme` flips or
10313
+ an ancestor's `class`/`style`/`data-theme`/`data-color-scheme` attribute mutates (coalesced to one
10314
+ redraw). `refreshTheme()` stays public for out-of-band theme changes those signals can't observe.
9484
10315
  - generated `scales` are keyed off the *effective* type (`config.type` ?? `type`, see
9485
10316
  `effectiveType()`) and are type-appropriate: no scale at all for `type="pie"`/`"doughnut"` (true of
9486
10317
  `<lr-chart type="pie">` directly, not just the `lr-pie-chart`/`lr-doughnut-chart` subclasses),
@@ -9585,16 +10416,24 @@ passthrough). Not a subclass of `LyraChart`.
9585
10416
  every bar/segment at that index, across every dataset — e.g. to highlight a whole selected week's
9586
10417
  column in a stacked chart. Empty (the default) reproduces the exact existing output: no bar
9587
10418
  carries `data-selected`. This component takes no opinion on what the highlight looks like, only
9588
- which bars it applies to — style it via `::part(bar)[data-selected]`.
10419
+ which bars it applies to — style the highlight via the `--lr-lite-chart-selected-outline-color`
10420
+ custom property (documented below). Note `::part(bar)[data-selected]` is **invalid CSS** — Shadow
10421
+ Parts forbids an attribute selector after `::part()` — so it silently never matches; the outline
10422
+ is painted inside the shadow root and exposed through that token instead.
9589
10423
  - `minBarHeight?: number` (attribute `min-bar-height`) — optional minimum visible bar height for
9590
10424
  small non-zero values
9591
10425
  - `accessibleLabel?: string` (attribute `accessible-label`) — SVG accessible-name override; a host
9592
10426
  `aria-label` wins
10427
+ - `appendData(label, values, maxPoints?)` — appends one aligned category and optionally trims the
10428
+ oldest categories
9593
10429
 
9594
10430
  **Events:** `lr-point-click` — fired when a bar/point is activated (click, or Enter/Space while
9595
10431
  focused). `detail: { datasetIndex: number, index: number, label: string | undefined, value: number
9596
10432
  | null }` — same shape as `lr-chart`'s `lr-point-click`.
9597
10433
 
10434
+ **Methods:** `exportData('csv' | 'svg')` returns a spreadsheet-safe CSV snapshot or the current SVG
10435
+ markup. The method does not download a file; pair it with `lr-export-button` for download UX.
10436
+
9598
10437
  The axis gutter/title and y-axis labels mirror to logical start under RTL. Built-in mark summaries
9599
10438
  are complete localized templates and format values with `effectiveLocale`.
9600
10439
 
@@ -9609,7 +10448,16 @@ fresh, small SVG render is cheaper and more correct than a lossy cache.
9609
10448
  `data-selected` when its category index is in `selectedIndex`), `line`, `point`, `legend`,
9610
10449
  `legend-item`, `legend-swatch`, `legend-text` (extra per-item text after the series label,
9611
10450
  rendered only when `legendText` is set), `live-region` (the current mark announcement for keyboard
9612
- users), `data-list` (a visually hidden list of all plotted data points).
10451
+ users), `data-list` (a visually hidden list of all plotted data points — single-series only),
10452
+ `data-table` (a visually hidden category×series data table, rendered instead of `data-list` when
10453
+ there is more than one dataset).
10454
+
10455
+ **Screen-reader data alternative:** a single dataset renders the flat `data-list` (one `<li>` per
10456
+ plotted point, matching the roving-tabindex mark order). More than one dataset instead renders a
10457
+ `data-table` — a category-labelled `<caption>` (the shared localized `chartData` string), one
10458
+ `<th scope="col">` per series (plus a leading `chartCategory` corner header), and one
10459
+ `<th scope="row">` per category label with its per-series values in the body — so a screen-reader
10460
+ user hears the values grouped by series rather than one flattened N×M sequence.
9613
10461
 
9614
10462
  **Themeable custom properties:** `--lr-chart-height` (same host-level property as `lr-chart`);
9615
10463
  `--lr-chart-grid-color`, `--lr-chart-tick-color`, `--lr-chart-legend-color` — same token
@@ -9664,7 +10512,8 @@ of every entry in these lists.**
9664
10512
 
9665
10513
  **Properties:** `labels`, `datasets`, `legend`, `legendPosition` (attribute `legend-position`),
9666
10514
  `valueFormatter`, `area`, `zoom`, `height`, `xLabel` (`x-label`), `yLabel` (`y-label`), `y2Label`
9667
- (`y2-label`), `beginAtZero` (`begin-at-zero`), `horizontal`, `stacked`, `config`, `accessibleLabel`
10515
+ (`y2-label`), `beginAtZero` (`begin-at-zero`), `horizontal`, `stacked`, `dataLabels`
10516
+ (`data-labels`), `stackTotals` (`stack-totals`), `config`, `accessibleLabel`
9668
10517
  (`accessible-label`), `accessibleDescription` (`accessible-description`), `showDataTable`
9669
10518
  (`show-data-table`), `chartArea` (readonly). `type` is the only member that differs: read-only,
9670
10519
  locked to this tag's value.
@@ -9685,7 +10534,7 @@ dependency fails to load — see `llms/components/lr-chart.md`).
9685
10534
  `--lr-chart-tooltip-text`.
9686
10535
 
9687
10536
  **Optional peer deps:** same as `lr-chart` — `chart.js`, plus `chartjs-plugin-zoom` only once
9688
- `zoom` is set.
10537
+ `zoom` is set, and `chartjs-plugin-datalabels` only once `data-labels`/`stack-totals` is set.
9689
10538
 
9690
10539
  ```html
9691
10540
  <lr-bar-chart legend></lr-bar-chart>
@@ -9729,8 +10578,9 @@ Bins `values` into `bins` equal-width buckets and renders as a bar chart (extend
9729
10578
  - All other `LyraChart` properties are inherited and usable: `legend`, `legendPosition` (attribute
9730
10579
  `legend-position`), `valueFormatter`, `area`, `zoom`, `config`, `height`, `xLabel` (`x-label`),
9731
10580
  `yLabel` (`y-label`), `y2Label` (`y2-label`), `beginAtZero` (`begin-at-zero`), `horizontal`,
9732
- `stacked`, `accessibleLabel` (`accessible-label`), `accessibleDescription`
9733
- (`accessible-description`), `showDataTable` (`show-data-table`), `chartArea` (readonly).
10581
+ `stacked`, `dataLabels` (`data-labels`), `stackTotals` (`stack-totals`), `accessibleLabel`
10582
+ (`accessible-label`), `accessibleDescription` (`accessible-description`), `showDataTable`
10583
+ (`show-data-table`), `chartArea` (readonly).
9734
10584
 
9735
10585
  **Methods:** `resetZoom()`, `refreshTheme()` — both inherited.
9736
10586
 
@@ -9794,7 +10644,8 @@ browser). Does **not** extend `LyraChart` — a deliberately bespoke API.
9794
10644
 
9795
10645
  **Slots:** `data-table` — an optional consumer-provided accessible table alternative.
9796
10646
 
9797
- **CSS parts:** `base`, `canvas`, `description`, `data-table`
10647
+ **CSS parts:** `base`, `canvas`, `description`, `data-table`, `error` (`role="alert"` message shown
10648
+ instead of `canvas` when the optional box-plot peer fails to load)
9798
10649
 
9799
10650
  **Themeable custom properties:** `--lr-chart-height`, `--lr-chart-grid-color`,
9800
10651
  `--lr-chart-tick-color`, `--lr-chart-legend-color`, `--lr-chart-tooltip-bg`,
@@ -9802,8 +10653,8 @@ browser). Does **not** extend `LyraChart` — a deliberately bespoke API.
9802
10653
  (also `getComputedStyle`-resolved on every draw), but declared in its own stylesheet, not a
9803
10654
  re-export: `lr-box-plot` has no `zoom`, so no `reset-zoom-button` chrome exists here.
9804
10655
 
9805
- **Optional peer deps:** `@sgratzl/chartjs-chart-boxplot` (plus `chart.js` transitively, loaded
9806
- independently of the base `chart-loader.ts`).
10656
+ **Optional peer deps:** `@sgratzl/chartjs-chart-boxplot` plus `chart.js`; Chart.js is obtained
10657
+ through the same cached `chart-loader.ts` used by `lr-chart`.
9807
10658
 
9808
10659
  ```html
9809
10660
  <lr-box-plot y-label="Latency (ms)"></lr-box-plot>
@@ -9821,10 +10672,19 @@ independently of the base `chart-loader.ts`).
9821
10672
  logical start in RTL, canvas tooltip/axis colors are token-driven, and animation is disabled
9822
10673
  under reduced motion.
9823
10674
  - If `@sgratzl/chartjs-chart-boxplot` fails to load, the component warns to the console and
9824
- resolves to no chart rather than throwing.
10675
+ fails closed with a localized `role="alert"` error part rather than leaving a blank canvas.
9825
10676
 
9826
10677
  ---
9827
10678
 
10679
+ ## Chart streaming and export
10680
+
10681
+ `lr-lite-chart` and `lr-chart` expose additive imperative helpers for live dashboards:
10682
+ `appendData(label, values, maxPoints?)` appends one aligned category and optionally trims the oldest
10683
+ points. `lr-lite-chart.exportData('csv' | 'svg')` returns a spreadsheet-safe CSV snapshot or the
10684
+ current SVG markup. `lr-chart.exportData('csv' | 'png')` returns a CSV snapshot or Chart.js's current
10685
+ PNG data URL when the optional peer is loaded. These helpers do not download files; compose them
10686
+ with `lr-export-button` so the host owns filenames and download policy.
10687
+
9828
10688
  # Document & file viewers (`components/viewers/`)
9829
10689
 
9830
10690
  ## `lr-document-preview`
@@ -9918,7 +10778,10 @@ used both for `status="converting"` and this component's own in-flight text fetc
9918
10778
  rendered when `src` is set *and* passes the link-safe scheme allowlist — see the URL-safety note
9919
10779
  above; excludes `data:` even though the other two sinks allow it), `highlight-layer` (wrapper around
9920
10780
  every rendered region highlight, image format only), `region-highlight` (one region highlight,
9921
- `data-tone`, `data-active`; image format only), `frame-viewport`/`frame-content`/`frame-controls`/
10781
+ `data-tone`, `data-active`; image format only), `region-highlight-target` (transparent activation
10782
+ geometry with a minimum hit area independent of the visual rectangle), `highlight-actions`
10783
+ (non-overlapping actions used when multiple minimum hit areas would overlap),
10784
+ `region-highlight-action` (one action in that list), `frame-viewport`/`frame-content`/`frame-controls`/
9922
10785
  `frame-zoom-in`/`frame-zoom-out`/`frame-reset` (forwarded from the internal `<lr-zoomable-frame>`
9923
10786
  while `zoomable`; image format only)
9924
10787
 
@@ -9926,7 +10789,8 @@ while `zoomable`; image format only)
9926
10789
  consumer-tunable scroll cap on `[part="body"]`, set from `max-height`; `none` means the preview grows
9927
10790
  with its content until a caller opts in. `--lr-document-preview-font` (default `ui-monospace,
9928
10791
  SFMono-Regular, Menlo, Consolas, monospace`) and `--lr-document-preview-spin-duration` (default
9929
- `0.8s`, stopped under reduced motion). `--lr-document-preview-progress` (default `0`) — a unitless
10792
+ `var(--lr-transition-ambient)`, stopped under reduced motion). `--lr-document-preview-progress`
10793
+ (default `0`) — a unitless
9930
10794
  0–100 number the determinate spinner's `conic-gradient` fill reads; written inline on the ring by
9931
10795
  the component itself from the clamped `progress` property, so overriding it only makes sense to
9932
10796
  repaint the fraction. `--lr-document-preview-active-border` (default
@@ -9937,7 +10801,11 @@ state hooks it is an inline `var()` fallback at the point of use rather than a `
9937
10801
  so it can be set on the element or on any ancestor — `::part(region-highlight)[data-active]` is
9938
10802
  invalid CSS (Shadow Parts forbids an attribute selector after `::part()`), which previously left
9939
10803
  re-pointing the shared `--lr-color-warning`/`--lr-color-brand` tokens as the only lever, repainting
9940
- every other element that read them. Plus shared tokens
10804
+ every other element that read them. The tone-specific resting border and hover tint use
10805
+ `--lr-document-preview-highlight-accent-color`, `--lr-document-preview-highlight-success-color`,
10806
+ `--lr-document-preview-highlight-warning-color`, `--lr-document-preview-highlight-danger-color`,
10807
+ and `--lr-document-preview-highlight-neutral-color` (defaulting respectively to the matching
10808
+ brand/success/warning/danger/neutral color tokens). Plus shared tokens
9941
10809
  `--lr-color-border`, `--lr-radius`, `--lr-color-surface`, `--lr-space-s/-m/-l/-xs`,
9942
10810
  `--lr-color-text`, `--lr-color-text-quiet`, `--lr-color-danger`, `--lr-color-brand`,
9943
10811
  `--lr-color-on-brand`, `--lr-focus-ring-width/-color/-offset`, `--lr-transition-fast`.
@@ -9992,9 +10860,10 @@ available, the region becomes a standard `role="progressbar"` instead, self-desc
9992
10860
  just via two different mechanisms depending on timing.
9993
10861
  - `download-link` (and thus `lr-download`) only renders/fires when `src` is set — a generic-fallback
9994
10862
  state with no `src` shows only the file glyph and message, with no download affordance at all.
9995
- - `download-link` also never renders for a `data:` URL, even though `data:` is accepted for text/image
9996
- sinks a `src="data:..."` document renders/fetches fine but falls back to no download affordance
9997
- in the generic state.
10863
+ - `download-link` also never renders for a `data:` or `mailto:` URL, even though `data:` is accepted
10864
+ for text/image sinks and `mailto:` is accepted for navigation anchors elsewhere in the library — a
10865
+ `src="data:..."` document renders/fetches fine but falls back to no download affordance in the
10866
+ generic state, and a `mailto:` names no retrievable bytes so it cannot be a download target at all.
9998
10867
  - A `src` that fails its sink's URL-safety check does **not** raise `lr-render-error` — that event is
9999
10868
  reserved for a `fetch()` that was actually attempted and failed at the network layer; an unsafe/
10000
10869
  malformed `src` is silently treated as unusable instead (a rendered `[part="error"]` message for
@@ -10030,10 +10899,11 @@ type. First-party invention.
10030
10899
  - `lr-download` — `detail: { src, filename }`, emitted when the native safe download action is
10031
10900
  activated. The browser download itself is handled by the link.
10032
10901
  - `lr-anchor-result` — `detail: { found }`. Emitted by this shell as `{ found: false }` once per
10033
- applied `anchor` when the resolved renderer can't honor it (it declares no `capabilities.anchors`,
10034
- or none matching the anchor's `kind`), when the lazy renderer failed to load, or when the file fell
10035
- back to `<lr-document-preview>`. A capable renderer instead emits its own `lr-anchor-result` from
10036
- its embedded `DocumentAnchorTarget` mixin, which composes up through this element unchanged the
10902
+ applied `anchor` when a resolved renderer can't honor it (it declares no `capabilities.anchors`,
10903
+ or none matching the anchor's `kind`). When the file uses `<lr-document-preview>`—including after
10904
+ a lazy renderer fails to load—the shell delegates to that preview's `scrollToAnchor()` and emits
10905
+ its actual `found` result. A capable renderer instead emits its own `lr-anchor-result` from its
10906
+ embedded `DocumentAnchorTarget` mixin, which composes up through this element unchanged — the
10037
10907
  shell stays silent in that case, so the event fires exactly once either way. A string `anchor`
10038
10908
  (a highlight id) counts as supported by any renderer declaring at least one anchor kind.
10039
10909
 
@@ -10114,6 +10984,17 @@ currently active search match, also carries `search-match`).
10114
10984
 
10115
10985
  **Themeable custom properties:** `--lr-docx-viewer-max-height` (default `none`) — maximum block size
10116
10986
  of `[part="body"]`; also settable via the `max-height` property, which writes this token inline.
10987
+ Highlight backgrounds are independently themeable with
10988
+ `--lr-docx-viewer-highlight-accent-background`,
10989
+ `--lr-docx-viewer-highlight-success-background`,
10990
+ `--lr-docx-viewer-highlight-warning-background`,
10991
+ `--lr-docx-viewer-highlight-danger-background`, and
10992
+ `--lr-docx-viewer-highlight-neutral-background`, defaulting to the matching quiet color tokens.
10993
+ `--lr-docx-viewer-highlight-active-background` and
10994
+ `--lr-docx-viewer-highlight-active-outline` style the active host highlight.
10995
+ `--lr-docx-viewer-search-match-background`,
10996
+ `--lr-docx-viewer-search-match-active-background`, and
10997
+ `--lr-docx-viewer-search-match-active-foreground` style resting and active search matches.
10117
10998
 
10118
10999
  **Optional peer dependencies:** install `mammoth` and `dompurify` with `pnpm add mammoth dompurify`.
10119
11000
  The component registers an eager `application/vnd.openxmlformats-officedocument.wordprocessingml.document`
@@ -10144,7 +11025,12 @@ Remote resources are capped at 25 MB; exceeding it surfaces the localized
10144
11025
 
10145
11026
  **Properties:** `src`, `name`, and `maxHeight` (attribute `max-height`) are strings. `foldQuotes:
10146
11027
  boolean = false` (attribute `fold-quotes`) — collapses trailing quoted-reply text/HTML behind a
10147
- localized show/hide toggle. `false` (the default) preserves the full body rendering.
11028
+ localized show/hide toggle. `false` (the default) preserves the full body rendering. A host
11029
+ `aria-label` takes precedence over `name`. `highlights`, `activeHighlightId`, `anchor`, and
11030
+ `anchorKinds` (`['text-quote', 'fragment']`) provide the shared text-viewer contract.
11031
+
11032
+ **Methods:** `search(query)`, `searchNext()`, `searchPrevious()`, `clearSearch()`, and
11033
+ `scrollToAnchor()` operate on rendered message text and emit the shared search/anchor events.
10148
11034
 
10149
11035
  **Events:** `lr-render-error` with `detail.error` when fetching or parsing fails.
10150
11036
  `lr-attachment-open` — `detail: { attachment: { filename, mimeType, content? } }`, `content` a
@@ -10163,8 +11049,8 @@ of `[part="body"]`; also settable via the `max-height` property, which writes th
10163
11049
 
10164
11050
  **Optional peer dependencies:** install `postal-mime` and `dompurify` with
10165
11051
  `pnpm add postal-mime dompurify`. The component registers `message/rfc822` and falls back to
10166
- matching `.eml` filenames in `<lr-document-viewer>`. Deviates from the shared degraded-render
10167
- contract: an absent `postal-mime` renders `[part="error"]` with the localized
11052
+ matching `.eml` filenames in `<lr-document-viewer>`. Fail-closed behavior is explicit: an absent
11053
+ `postal-mime` renders `[part="error"]` with the localized
10168
11054
  `emailViewerMissingParser` message (nothing is parseable without it), and an HTML-only message
10169
11055
  (no `text/plain` alternative) with `dompurify` absent renders the localized
10170
11056
  `documentViewerMissingSanitizer` message rather than silently showing an empty body.
@@ -10174,7 +11060,12 @@ contract: an absent `postal-mime` renders `[part="error"]` with the localized
10174
11060
  Fetches and parses `.ics` calendars with the optional `ical.js` peer and renders each VEVENT as
10175
11061
  plain text, including its title, start/end time, location, and description. No HTML is injected.
10176
11062
 
10177
- **Properties:** `src`, `name`, and `maxHeight` (attribute `max-height`) are strings.
11063
+ **Properties:** `src`, `name`, and `maxHeight` (attribute `max-height`) are strings. A host
11064
+ `aria-label` takes precedence over `name`. `highlights`, `activeHighlightId`, `anchor`, and
11065
+ `anchorKinds` (`['text-quote', 'fragment']`) provide the shared text-viewer contract.
11066
+
11067
+ **Methods:** `search(query)`, `searchNext()`, `searchPrevious()`, `clearSearch()`, and
11068
+ `scrollToAnchor()` operate on rendered event text and emit `lr-search-change`/`lr-anchor-result`.
10178
11069
 
10179
11070
  **Events:** `lr-render-error` with `detail.error` when fetching or parsing fails.
10180
11071
 
@@ -10198,12 +11089,17 @@ read straight from JSZip's local file header (`uncompressedSize`) when available
10198
11089
  fully decompressing only the rare entry missing that header field. The list composes
10199
11090
  `<lr-virtual-list>` for large archives.
10200
11091
 
10201
- **Properties:** `src` and `name` are strings — `name` (or a host-level `aria-label`) names the
10202
- listing region as `role="region"`; with neither set, the region is unnamed.
11092
+ **Properties:** `src` and `name` are strings — a host-level `aria-label` takes precedence over
11093
+ `name` when naming the `role="region"` listing. The viewer also exposes the shared text-viewer
11094
+ contract: `highlights`, `activeHighlightId`, `anchor`, and `anchorKinds` (`['text-quote', 'fragment']`).
11095
+
11096
+ **Methods:** `search(query)`, `searchNext()`, `searchPrevious()`, and `clearSearch()` provide
11097
+ case-insensitive text search over rendered entry names; `scrollToAnchor()` resolves text-quote and
11098
+ fragment anchors and emits `lr-anchor-result`.
10203
11099
 
10204
11100
  **Events:** `lr-render-error` with `detail.error` when fetching or parsing fails.
10205
11101
 
10206
- **CSS parts:** `base`, `entry`, `entry-icon`, `entry-name`, `entry-name-dir`, `entry-size`,
11102
+ **CSS parts:** `base`, `body`, `entry`, `entry-icon`, `entry-name`, `entry-name-dir`, `entry-size`,
10207
11103
  `spinner`, and `error`. A directory row's name element carries both `entry-name` and
10208
11104
  `entry-name-dir` (a part list), so `::part(entry-name-dir)` selects only directory names while
10209
11105
  `::part(entry-name)` still selects every name. Entry rows are rendered into the embedded
@@ -10254,6 +11150,10 @@ clears the query, matches, and painted search annotation.
10254
11150
  `mount`, `error`, and `announcer` (the visually-hidden `role="status"` region search results
10255
11151
  announce through).
10256
11152
 
11153
+ The toolbar buttons use the component-specific localized labels `ebookViewerPreviousChapter` and
11154
+ `ebookViewerNextChapter` (English: “Previous chapter” / “Next chapter”), so they remain
11155
+ unambiguous beside other previous/next controls and are overridable through `.strings`.
11156
+
10257
11157
  **Optional peer dependency:** install `epubjs` with `pnpm add epubjs`. The document-viewer registry
10258
11158
  matches `application/epub+zip` and `.epub` filenames, declaring `{ anchors: ['cfi', 'text-quote'],
10259
11159
  search: true, textSelect: true }` capabilities.
@@ -10276,10 +11176,14 @@ Best-effort client-side PPTX viewer backed by the optional `@aiden0z/pptx-render
10276
11176
  localized fidelity notice is always visible because animations, equations, embedded objects,
10277
11177
  speaker notes, and several advanced effects are not rendered.
10278
11178
 
10279
- **Properties:** `src`, `name`, and `label` are strings. A host `aria-label` also names the viewer
10280
- region when `label` is unset.
11179
+ **Properties:** `src`, `name`, and `label` are strings. A host `aria-label` takes precedence over
11180
+ `label` and `name`. `highlights`, `activeHighlightId`, `anchor`, and `anchorKinds`
11181
+ (`['text-quote', 'fragment']`) provide the shared text-viewer contract when the renderer exposes
11182
+ DOM text.
10281
11183
 
10282
11184
  **Methods:** `goToSlide(index)` returns a promise and navigates the mounted presentation.
11185
+ `search(query)`, `searchNext()`, `searchPrevious()`, `clearSearch()`, and `scrollToAnchor()` are
11186
+ available for renderer output that exposes DOM text.
10283
11187
 
10284
11188
  **Events:** `lr-load` (`detail: { slideCount }`), `lr-slide-change` (`detail: { index, count }`),
10285
11189
  and `lr-render-error` with `detail.error`.
@@ -10319,6 +11223,9 @@ Enter/Space.
10319
11223
 
10320
11224
  **CSS parts:** `base`, `body`, `svg`, `spinner`, `error`, `highlight-layer` (wrapper around every
10321
11225
  rendered region highlight), `region-highlight` (one region highlight, `data-tone`, `data-active`),
11226
+ `region-highlight-target` (transparent activation geometry with an independent minimum hit area),
11227
+ `highlight-actions` (non-overlapping actions for multiple highlights), `region-highlight-action`
11228
+ (one action in that list),
10322
11229
  `frame-viewport`/`frame-content`/`frame-controls`/`frame-zoom-in`/`frame-zoom-out`/`frame-reset`
10323
11230
  (forwarded from the internal `<lr-zoomable-frame>` while `zoomable`).
10324
11231
 
@@ -10331,7 +11238,11 @@ inline `var()` fallback at the point of use rather than a `:host` declaration, s
10331
11238
  the element *or on any ancestor*: `::part(region-highlight)[data-active]` is invalid CSS — Shadow
10332
11239
  Parts forbids an attribute selector after `::part()` — so re-pointing a shared `--lr-color-*` token,
10333
11240
  and repainting everything else reading it, was previously the only way. Unset, it falls back to
10334
- exactly the tokens the rule used before.
11241
+ exactly the tokens the rule used before. The tone-specific resting border and hover tint use
11242
+ `--lr-svg-viewer-highlight-accent-color`, `--lr-svg-viewer-highlight-success-color`,
11243
+ `--lr-svg-viewer-highlight-warning-color`, `--lr-svg-viewer-highlight-danger-color`, and
11244
+ `--lr-svg-viewer-highlight-neutral-color` (defaulting respectively to the matching
11245
+ brand/success/warning/danger/neutral color tokens).
10335
11246
 
10336
11247
  **Optional peer dependency:** `dompurify`.
10337
11248
 
@@ -10343,7 +11254,12 @@ Remote resources are capped at 25 MB; exceeding it surfaces the localized
10343
11254
  Fetches an HTML document, sanitizes it with the optional `dompurify` peer, and renders the safe markup
10344
11255
  inside a bounded, scrollable body.
10345
11256
 
10346
- **Properties:** `src`, `name`, and `maxHeight` (attribute `max-height`) are strings.
11257
+ **Properties:** `src`, `name`, and `maxHeight` (attribute `max-height`) are strings. A host
11258
+ `aria-label` takes precedence over `name`. `highlights`, `activeHighlightId`, `anchor`, and
11259
+ `anchorKinds` (`['text-quote', 'fragment']`) provide the shared text-viewer contract.
11260
+
11261
+ **Methods:** `search(query)`, `searchNext()`, `searchPrevious()`, `clearSearch()`, and
11262
+ `scrollToAnchor()` operate on sanitized HTML text and emit the shared search/anchor events.
10347
11263
 
10348
11264
  **Events:** `lr-render-error` with `detail.error` when fetching or sanitizing fails.
10349
11265
 
@@ -10419,7 +11335,12 @@ label when `FN` is absent).
10419
11335
  Remote resources are capped at 25 MB; exceeding it surfaces the localized
10420
11336
  `documentPreviewResourceTooLarge` message instead of the contacts.
10421
11337
 
10422
- **Properties:** `src`, `name`, and `maxHeight` (attribute `max-height`) are strings.
11338
+ **Properties:** `src`, `name`, and `maxHeight` (attribute `max-height`) are strings. A host
11339
+ `aria-label` takes precedence over `name`. `highlights`, `activeHighlightId`, `anchor`, and
11340
+ `anchorKinds` (`['text-quote', 'fragment']`) provide the shared text-viewer contract.
11341
+
11342
+ **Methods:** `search(query)`, `searchNext()`, `searchPrevious()`, `clearSearch()`, and
11343
+ `scrollToAnchor()` operate on rendered contact text and emit the shared search/anchor events.
10423
11344
 
10424
11345
  **Events:** `lr-render-error` with `detail.error` when fetching or parsing fails.
10425
11346
 
@@ -10508,7 +11429,7 @@ through the exported parts above rather than through dedicated custom properties
10508
11429
 
10509
11430
  **Optional peer dependency:** install `pdfjs-dist` with `pnpm add pdfjs-dist`. The component registers
10510
11431
  a lazy `application/pdf` renderer with `<lr-document-viewer>` so the PDF library is loaded only when
10511
- a PDF is opened. Deviates from the shared degraded-render contract: an absent `pdfjs-dist` renders
11432
+ a PDF is opened. An absent `pdfjs-dist` fails closed and renders
10512
11433
  `[part="error"]` with the localized `pdfViewerMissingLibrary` message — there is no partial PDF
10513
11434
  rendering without it.
10514
11435
 
@@ -10541,9 +11462,11 @@ Enter/Space. `lr-anchor-result` (`detail: { found }`) — fired after an `anchor
10541
11462
  `scrollToAnchor()` call. `lr-search-change` (`detail: { query, matchCount, activeIndex }`) — from
10542
11463
  `search()`/`searchNext()`/`searchPrevious()`/`clearSearch()`.
10543
11464
 
10544
- **CSS parts:** `base`, `tabs`, `sheet`, `header-row`, `data-row`, `cell`, `cell-highlight` (a cell
10545
- covered by a `highlights` entry), `rows`, `spinner`, and `error`. `data-row`, `cell` and
10546
- `cell-highlight` are rendered inside the internal `<lr-virtual-list>` and forwarded via
11465
+ **CSS parts:** `base`, `tabs`, `sheet`, `header-row`, `data-row`, `cell`, `cell-highlight` (a
11466
+ structural cell covered by a `highlights` entry), `cell-highlight-action` (the native button
11467
+ filling a highlighted cell; focusable and emits `lr-highlight-activate`), `rows`, `spinner`, and
11468
+ `error`. `data-row`, `cell`, `cell-highlight`, and `cell-highlight-action` are rendered inside the
11469
+ internal `<lr-virtual-list>` and forwarded via
10547
11470
  `exportparts`, so `lr-spreadsheet-viewer::part(cell)` reaches them from a consumer stylesheet.
10548
11471
 
10549
11472
  **Themeable custom properties:** `--lr-spreadsheet-viewer-highlight-color` (default
@@ -10588,9 +11511,11 @@ Enter/Space. `lr-anchor-result` (`detail: { found }`) — fired after an `anchor
10588
11511
  `scrollToAnchor()` call. `lr-search-change` (`detail: { query, matchCount, activeIndex }`) — from
10589
11512
  `search()`/`searchNext()`/`searchPrevious()`/`clearSearch()`.
10590
11513
 
10591
- **CSS parts:** `base`, `sheet`, `header-row`, `data-row`, `cell`, `cell-highlight` (a cell covered by
10592
- a `highlights` entry), `rows`, `spinner`, and `error`. `data-row`, `cell` and `cell-highlight` are
10593
- rendered inside the internal `<lr-virtual-list>` and forwarded via `exportparts`, so
11514
+ **CSS parts:** `base`, `sheet`, `header-row`, `data-row`, `cell`, `cell-highlight` (a structural
11515
+ cell covered by a `highlights` entry), `cell-highlight-action` (the native button filling a
11516
+ highlighted cell; emits `lr-highlight-activate`), `rows`, `spinner`, and `error`. `data-row`,
11517
+ `cell`, `cell-highlight`, and `cell-highlight-action` are rendered inside the internal
11518
+ `<lr-virtual-list>` and forwarded via `exportparts`, so
10594
11519
  `lr-csv-viewer::part(cell)` reaches them from a consumer stylesheet.
10595
11520
 
10596
11521
  **Themeable custom properties:** `--lr-csv-viewer-max-height` (default `none`) — maximum block size
@@ -10635,13 +11560,19 @@ removed once it settles either way. Build error UI from `lr-include-error`.
10635
11560
  letting `fetch()` throw. `no-cors` is accepted for enum completeness but always yields an opaque
10636
11561
  response (`status` `0`, unreadable body) — a Fetch API limitation, not a bug here.
10637
11562
 
11563
+ The shared text-viewer contract is also available for the sanitized light-DOM fragment:
11564
+ `highlights`, `activeHighlightId`, `anchor`, and `anchorKinds` (`['text-quote', 'fragment']`).
11565
+ `search(query)`, `searchNext()`, `searchPrevious()`, `clearSearch()`, and `scrollToAnchor()`
11566
+ operate on the included text.
11567
+
10638
11568
  **Events:**
10639
11569
  - `lr-load` — `detail: { src }` — the fragment was sanitized and written into the light DOM.
10640
11570
  - `lr-include-error` — `detail: { status, reason, error? }`. `reason` is a `LyraIncludeErrorReason`:
10641
11571
  `'blocked-url'` (`src` failed the allowlist; `fetch()` never ran), `'network'` (`fetch()` rejected),
10642
11572
  `'http'` (response not `ok`; `status` carries the code), `'missing-sanitizer'` (the optional
10643
11573
  `dompurify` peer failed to load), or `'resource-too-large'` (the body exceeded the shared 25 MB
10644
- cap). `status` is `0` for every reason but `'http'`.
11574
+ cap). Non-HTTP reasons use status `0`; `'http'` normally carries the response code, but an opaque
11575
+ `mode="no-cors"` response is also classified as `'http'` with status `0`.
10645
11576
 
10646
11577
  **Slots:** default — fallback content shown until (or unless) a fetch succeeds. It is overwritten by
10647
11578
  the sanitized fragment on success, and left untouched on failure (as is any previously successful
@@ -10649,9 +11580,9 @@ include).
10649
11580
 
10650
11581
  **CSS parts:** `base` — the `display: contents` wrapper around the default slot.
10651
11582
 
10652
- Deviates from the shared degraded-render contract: an absent `dompurify` fires
10653
- `lr-include-error` with `reason: 'missing-sanitizer'` and leaves the existing content in place —
10654
- unsanitized markup is never transcluded.
11583
+ An absent `dompurify` fails closed: it fires `lr-include-error` with
11584
+ `reason: 'missing-sanitizer'` and leaves the existing content in place — unsanitized markup is
11585
+ never transcluded.
10655
11586
 
10656
11587
  ## `lr-highlight-layer`
10657
11588
 
@@ -10670,8 +11601,22 @@ re-click of the same source citation).
10670
11601
  **Events:** `lr-highlight-activate` — a rect was activated (click, or Enter/Space while focused).
10671
11602
  `detail: { id }`.
10672
11603
 
10673
- **CSS parts:** `base` (the absolutely-positioned overlay, inset 0) and `rect` (one highlight
10674
- rectangle; carries `data-tone`/`data-active`/`data-flash` state attributes).
11604
+ **CSS parts:** `base` (the absolutely-positioned overlay, inset 0), `rect` (one visual highlight
11605
+ rectangle; carries `data-tone`/`data-active`/`data-flash` state attributes), and `rect-target`
11606
+ (transparent activation geometry with a minimum pointer/focus area independent of the visual
11607
+ rectangle). When more than one logical highlight would create overlapping minimum hit areas, the
11608
+ individual targets are replaced by `highlight-actions` (a non-overlapping action list) containing
11609
+ one `highlight-action` button per rendered highlight.
11610
+
11611
+ **Themeable custom properties:**
11612
+ `--lr-highlight-layer-accent-background`, `--lr-highlight-layer-accent-outline`,
11613
+ `--lr-highlight-layer-success-background`, `--lr-highlight-layer-success-outline`,
11614
+ `--lr-highlight-layer-warning-background`, `--lr-highlight-layer-warning-outline`,
11615
+ `--lr-highlight-layer-danger-background`, `--lr-highlight-layer-danger-outline`,
11616
+ `--lr-highlight-layer-neutral-background`, and `--lr-highlight-layer-neutral-outline` control each
11617
+ tone independently, defaulting to the corresponding Lyra quiet background and foreground tokens.
11618
+ `--lr-highlight-layer-flash-background` controls the temporary flash state (default
11619
+ `--lr-color-brand`).
10675
11620
 
10676
11621
  ## `lr-page-rail`
10677
11622
 
@@ -10736,18 +11681,23 @@ shared anchor-target contract).
10736
11681
 
10737
11682
  **Methods:** `search(query)` resolves the match count over cell sources and text outputs — a
10738
11683
  matching cell counts as one match (empty/whitespace query behaves like `clearSearch()`);
10739
- `searchNext()`/`searchPrevious()` advance/step back through matches, scrolling to and flashing the
10740
- target cell; `clearSearch()` clears the query and matches.
11684
+ `searchNext()`/`searchPrevious()` advance/step back through matches, scrolling to and marking the
11685
+ target cell with the persistent active-cell paint; `clearSearch()` clears the query and matches.
10741
11686
 
10742
11687
  **Events:** `lr-load` — `detail: { cellCount, language }`, fired once a notebook has been parsed
10743
11688
  and validated (`language` from `metadata.language_info.name`/`kernelspec.language`, else `''`).
10744
- `lr-highlight-activate` — `detail: { id }`. `lr-search-change` — `detail: { query, matchCount,
10745
- activeIndex }`. `lr-render-error` — `detail: { error }`, fetching, parsing, or validating the
10746
- notebook failed.
11689
+ `lr-search-change` — `detail: { query, matchCount, activeIndex }`. `lr-render-error` —
11690
+ `detail: { error }`, fetching, parsing, or validating the notebook failed.
11691
+
11692
+ Migration note: the previously declared `lr-highlight-activate` event was never emitted by
11693
+ `lr-notebook-viewer` and has been removed from its class/EventMap contract. Use `anchor` plus
11694
+ `lr-anchor-result` for notebook cell navigation outcomes.
10747
11695
 
10748
11696
  **CSS parts:** `base` (the root scroll container), `cell` (`data-cell-type="code|markdown|raw"`,
10749
- `data-active`), `cell-active` (added alongside `cell` on the cell an anchor currently targets),
10750
- `cell-gutter` (the `In [n]`/`Out [n]` label column), `cell-source`, `outputs`, `output`
11697
+ `data-active`), `cell-active` (added alongside `cell` on the cell currently targeted by an anchor
11698
+ or the active search match),
11699
+ `cell-gutter` (the `In [n]`/`Out [n]` label column), `cell-source`, `raw-source` (the horizontally
11700
+ scrollable preformatted surface for a raw cell), `outputs`, `output`
10751
11701
  (`data-output-type`, `data-stream`), `output-error` (added alongside `output` on a stderr stream or
10752
11702
  an error output), `error-output-label` (the label introducing an error output's traceback),
10753
11703
  `output-toggle`, `error`, `spinner`.
@@ -10762,9 +11712,9 @@ remain on the elements for scripting.
10762
11712
  **Themeable custom properties:** `--lr-notebook-viewer-max-height` (default `none`).
10763
11713
 
10764
11714
  `--lr-notebook-viewer-active-bg` (default `var(--lr-color-brand-quiet)`) is the background of the
10765
- cell currently targeted by an anchor — the `cell-active` part. It is an inline `var()` fallback at
10766
- the point of use rather than a `:host` declaration, so it can be set on the element or on any
10767
- ancestor.
11715
+ cell currently targeted by an anchor or the active search match — the `cell-active` part. It is an
11716
+ inline `var()` fallback at the point of use rather than a `:host` declaration, so it can be set on
11717
+ the element or on any ancestor.
10768
11718
 
10769
11719
  **Optional peer deps:** `marked`+`dompurify` (markdown cells, falls back to plain text per cell),
10770
11720
  `shiki` (code cells, falls back to unhighlighted), `dompurify` (HTML/SVG outputs, falls back to
@@ -10840,10 +11790,12 @@ so lowering it never squashes the chevron below its own box — the visible glyp
10840
11790
  the hit target follows the token, and it can never fall under the accessible minimum from this
10841
11791
  component's own rules.
10842
11792
 
10843
- ```html
10844
- <lr-xml-viewer .xml=${payload} collapsed-depth="2" copyable
10845
- search=${query}
10846
- ></lr-xml-viewer>
11793
+ ```ts
11794
+ const viewer = document.querySelector('lr-xml-viewer');
11795
+ viewer.xml = payload;
11796
+ viewer.collapsedDepth = 2;
11797
+ viewer.copyable = true;
11798
+ await viewer.search(query);
10847
11799
  ```
10848
11800
 
10849
11801
  Node cap: 50,000 — exceeding it renders the localized `xmlViewerTooManyNodes` error instead of the
@@ -10854,10 +11806,41 @@ tree.
10854
11806
  Comparison surface for two document versions, using `lr-diff-view` for textual diffs and
10855
11807
  `lr-document-preview` for side-by-side rendered content.
10856
11808
 
10857
- **Properties:** `oldVersion`, `newVersion`, `view`, `diffLayout`, `language`, `languages`, `anchor`,
10858
- `copyable`, `syncScroll`. **Events:** `lr-copy`, `lr-download`, `lr-highlight-activate`,
10859
- `lr-render-error`. **CSS parts:** `base`, `diff`, `panes`, `pane-old`, `pane-new`, `pane-header`,
10860
- `pane-empty`. **Themeable custom properties:** `--lr-document-compare-pane-max-height` (default
11809
+ **Properties:**
11810
+
11811
+ - `oldVersion?: DocumentCompareVersion`, `newVersion?: DocumentCompareVersion` (attribute: false) —
11812
+ the before/after inputs. `DocumentCompareVersion` extends `DocumentRef`
11813
+ (`id`, `name`, `mimeType?`, `uri?`, `version?`) with `text?: string` for diff mode and
11814
+ `highlights?: LyraHighlight[]` for its own preview pane.
11815
+ - `view: 'diff' | 'side-by-side' = 'diff'` (reflected) — one inline text diff or two rendered
11816
+ preview panes.
11817
+ - `diffLayout: 'unified' | 'split' = 'unified'` (attribute `diff-layout`, reflected) — forwarded
11818
+ to `lr-diff-view` in diff mode.
11819
+ - `copyable: boolean = false` — forwards the diff copy action.
11820
+ - `language: string = ''`, `languages?: Record<string, ShikiLanguageInput>` (the latter
11821
+ attribute: false) — optional syntax highlighting forwarded to the diff.
11822
+ - `syncScroll: boolean = true` (attribute `sync-scroll`) — proportionally mirrors either
11823
+ side-by-side pane's scroll fraction to the other. The true-default converter accepts the literal
11824
+ `sync-scroll="false"`.
11825
+ - `anchor: LyraAnchor | string | null = null` (attribute: false) — sends the same target to both
11826
+ preview panes; repeated assignment of the same value still re-runs.
11827
+
11828
+ **Exported types:** `DocumentCompareVersion`; `LyraDocumentCompareView = 'diff' |
11829
+ 'side-by-side'`; `DocumentComparePaneSide = 'old' | 'new'`.
11830
+
11831
+ **Synchronized anchors:** activating a region highlight whose id exists in the opposite version
11832
+ scrolls that pane to its corresponding highlight, while the original `lr-highlight-activate`
11833
+ continues bubbling unchanged. The shared `anchor` property drives both panes. In diff mode, split
11834
+ columns already share one scroll container.
11835
+
11836
+ **Events:** `lr-copy` (`detail: { text }`), `lr-download` (`detail: { src, filename }`),
11837
+ `lr-highlight-activate` (`detail: { id }`), and `lr-render-error` (`detail: { error }`).
11838
+
11839
+ **Slots:** none.
11840
+
11841
+ **CSS parts:** `base`, `diff`, `panes`, `pane-old`, `pane-new`, `pane-header`, `pane-empty`.
11842
+
11843
+ **Themeable custom properties:** `--lr-document-compare-pane-max-height` (default
10861
11844
  `var(--lr-size-24rem)`) — maximum block size of a `side-by-side` pane before it scrolls internally.
10862
11845
 
10863
11846
  ## `lr-geojson-view`
@@ -10878,7 +11861,10 @@ collapsed-depth="2">` of the raw value instead of the map.
10878
11861
 
10879
11862
  **Properties:** `src: string = ''` — URL to fetch and parse. `name: string = ''` — accessible label,
10880
11863
  used as `<lr-map>`'s `label` and the root's `aria-label` (falling back to the localized
10881
- `geojsonViewLabel` when unset).
11864
+ `geojsonViewLabel` when unset). A host `aria-label` takes precedence over `name`. The shared
11865
+ text-viewer contract adds `highlights`, `activeHighlightId`, `anchor`, and
11866
+ `anchorKinds` (`['text-quote', 'fragment']`), plus `search()`, `searchNext()`, `searchPrevious()`,
11867
+ `clearSearch()`, and `scrollToAnchor()` for rendered feature metadata and status text.
10882
11868
 
10883
11869
  **Events:** `lr-render-error` — `detail: { error }` — fetch, parse, or shape-validation failure.
10884
11870
 
@@ -10890,7 +11876,9 @@ alongside the `lr-json-viewer` fallback), `error` (the error region, `role="aler
10890
11876
  Registered by importing `geojson-view/geojson-view.js` directly — not part of the root barrel, the
10891
11877
  same as `lr-map`/`lr-graph`, since it depends on the same optional `maplibre-gl` peer. Remote
10892
11878
  resources are capped at 25 MB; exceeding it surfaces the localized `documentPreviewResourceTooLarge`
10893
- message instead of the map.
11879
+ message instead of the map. MapLibre v6 is ESM-only and requires WebGL2; consumers must import its
11880
+ CSS and configure its module-worker URL for their bundler before this viewer constructs the nested
11881
+ map. See `llms/components/lr-map.md` for the Vite example and the other bundler variants.
10894
11882
 
10895
11883
  # Conversation & chat UI (`components/conversation/`)
10896
11884
 
@@ -11064,6 +12052,16 @@ restart at the beginning of each visual line, so a wrapped line's tabs land diff
11064
12052
  HTML `marked` produces from `content` completely unsanitized, so untrusted `content` must never be
11065
12053
  paired with `sanitize="false"`.
11066
12054
 
12055
+ **Additional API surface:**
12056
+
12057
+ - `--lr-markdown-highlight-accent-bg` — Accent highlight fill. Default: `var(--lr-color-brand-quiet)`.
12058
+ - `--lr-markdown-highlight-success-bg` — Success highlight fill. Default: `var(--lr-color-success-quiet)`.
12059
+ - `--lr-markdown-highlight-warning-bg` — Warning highlight fill. Default: `var(--lr-color-warning-quiet)`.
12060
+ - `--lr-markdown-highlight-danger-bg` — Danger highlight fill. Default: `var(--lr-color-danger-quiet)`.
12061
+ - `--lr-markdown-highlight-neutral-bg` — Neutral highlight fill. Default: `var(--lr-color-surface)`.
12062
+ - `--lr-markdown-highlight-active-bg` — Active highlight fill. Default: `var(--lr-color-brand-quiet)`.
12063
+ - `--lr-markdown-highlight-active-outline-color` — Active highlight outline. Default: `var(--lr-color-brand)`.
12064
+
11067
12065
  ---
11068
12066
 
11069
12067
  ## `lr-markdown-core`
@@ -11132,6 +12130,16 @@ differently on a wrapped line.
11132
12130
  </script>
11133
12131
  ```
11134
12132
 
12133
+ **Additional API surface:**
12134
+
12135
+ - `--lr-markdown-highlight-accent-bg` — Accent highlight fill. Default: `var(--lr-color-brand-quiet)`.
12136
+ - `--lr-markdown-highlight-success-bg` — Success highlight fill. Default: `var(--lr-color-success-quiet)`.
12137
+ - `--lr-markdown-highlight-warning-bg` — Warning highlight fill. Default: `var(--lr-color-warning-quiet)`.
12138
+ - `--lr-markdown-highlight-danger-bg` — Danger highlight fill. Default: `var(--lr-color-danger-quiet)`.
12139
+ - `--lr-markdown-highlight-neutral-bg` — Neutral highlight fill. Default: `var(--lr-color-surface)`.
12140
+ - `--lr-markdown-highlight-active-bg` — Active highlight fill. Default: `var(--lr-color-brand-quiet)`.
12141
+ - `--lr-markdown-highlight-active-outline-color` — Active highlight outline. Default: `var(--lr-color-brand)`.
12142
+
11135
12143
  ---
11136
12144
 
11137
12145
  ## `lr-chat-message`
@@ -11240,6 +12248,11 @@ streaming-indicator pulse animation's cycle, the same shared compound token
11240
12248
  background already maps to that same token, override `[part=bubble]`'s background explicitly (e.g.
11241
12249
  via `::part(bubble)`) so message bubbles stay visually distinct from the surrounding panel.
11242
12250
 
12251
+ > Retheming a bubble from outside `<lr-chat-message>` (e.g. per-thread or per-role colors)?
12252
+ > Set `--lr-theme-*` on the ancestor wrapper, not `--lr-*` directly — see `llms/shared.md`'s
12253
+ > "Theming and design tokens" section for why a `--lr-*` override on a wrapper only reaches that
12254
+ > wrapper's *direct* children, not a nested `<lr-*>` host's shadow DOM.
12255
+
11243
12256
  **Optional peer deps:** none. Internally renders a `<lr-live-region>` (a first-party sibling
11244
12257
  component, auto-imported alongside this one, not an npm peer) for the status-transition
11245
12258
  announcements described below.
@@ -11271,7 +12284,8 @@ between several values across a single element's lifetime.
11271
12284
  - mounting a message with `status="failed"` (or any other non-`"sent"` status) already set does
11272
12285
  **not** announce anything — only a genuine *later* transition (`changed.get('status') !==
11273
12286
  undefined`, i.e. not the very first update) triggers the live-region announcement.
11274
- - `lr-retry` fires with no detail payload at all (`undefined`), not e.g. `{ status: 'failed' }`.
12287
+ - `lr-retry` carries `{ messageId?: string }`; the field is the component's `messageId` when set,
12288
+ and is omitted otherwise.
11275
12289
  - the header/footer/avatar/badges/attachments/actions wrappers are shown/hidden via the `hidden`
11276
12290
  attribute, not conditional templating. Whether each slot currently has content is checked once via
11277
12291
  a light-DOM children scan on the very first update (`willUpdate`, gated on `!this.hasUpdated`) and
@@ -11282,6 +12296,20 @@ between several values across a single element's lifetime.
11282
12296
  - `role` intentionally reflects to `data-role`; CSS or selectors that key off role must target
11283
12297
  `[data-role="user"]` etc., not `[role="user"]`.
11284
12298
 
12299
+ **Additional API surface:**
12300
+
12301
+ - `--lr-chat-message-system-color` — System-message text color. Default: `var(--lr-color-text-quiet)`.
12302
+ - `--lr-chat-message-streaming-border-color` — Streaming bubble border. Default: `var(--lr-color-brand)`.
12303
+ - `--lr-chat-message-failed-border-color` — Failed bubble border. Default: `var(--lr-color-danger)`.
12304
+ - `--lr-chat-message-failed-bg` — Failed bubble fill. Default: `var(--lr-color-danger-quiet)`.
12305
+ - `--lr-chat-message-footer-color` — Default footer text. Default: `var(--lr-color-text-quiet)`.
12306
+ - `--lr-chat-message-user-footer-color` — User-message footer text. Default: `var(--lr-color-text)`.
12307
+ - `--lr-chat-message-failed-footer-color` — Failed-message footer text. Default: `var(--lr-color-danger)`.
12308
+ - `--lr-chat-message-indicator-color` — Default status indicator. Default: `var(--lr-color-text-quiet)`.
12309
+ - `--lr-chat-message-streaming-indicator-color` — Streaming indicator. Default: `var(--lr-color-brand)`.
12310
+ - `--lr-chat-message-failed-indicator-color` — Failed indicator. Default: `var(--lr-color-danger)`.
12311
+ - `--lr-chat-message-failed-status-color` — Failed status text. Default: `var(--lr-color-danger)`.
12312
+
11285
12313
  ---
11286
12314
 
11287
12315
  ## `lr-typing-indicator`
@@ -11313,10 +12341,13 @@ variant), `cursor` (the blinking bar in the `cursor` variant)
11313
12341
  `size="sm"`), `--lr-typing-gap` (default `0.25rem`, `0.1875rem` at `size="sm"`),
11314
12342
  `--lr-typing-cursor-width` (default `0.125rem`, `0.09375rem` at `size="sm"`),
11315
12343
  `--lr-typing-cursor-height` (default `1em`, unaffected by `size`),
11316
- `--lr-typing-dot-stagger-1` (default `600ms`, second dot), and
11317
- `--lr-typing-dot-stagger-2` (default `1200ms`, third dot). Every variant uses the shared
11318
- `--lr-transition-ambient` compound duration/timing token (default `1.8s ease-in-out`) as its
11319
- animation cycle.
12344
+ `--lr-typing-dot-stagger-1` (default `600ms`, second dot), `--lr-typing-dot-stagger-2` (default
12345
+ `1200ms`, third dot), and `--lr-typing-duration` (default `var(--lr-transition-ambient)`, i.e.
12346
+ `1.8s ease-in-out`) — the compound duration/timing-function token every variant uses as its
12347
+ animation cycle. `--lr-typing-duration` is a dedicated alias: it defaults to the library-wide
12348
+ `--lr-transition-ambient` token (shared by every other ambient-looping component), but overriding
12349
+ it retimes only this component, leaving `--lr-transition-ambient` itself — and anything else keyed
12350
+ off it — untouched.
11320
12351
 
11321
12352
  **Optional peer deps:** none.
11322
12353
 
@@ -11325,7 +12356,7 @@ animation cycle.
11325
12356
  <lr-typing-indicator variant="pulse" size="sm"></lr-typing-indicator>
11326
12357
  <lr-typing-indicator variant="cursor"></lr-typing-indicator>
11327
12358
  <lr-typing-indicator
11328
- style="--lr-transition-ambient: 900ms ease-in-out; --lr-typing-dot-stagger-1: 300ms; --lr-typing-dot-stagger-2: 600ms"
12359
+ style="--lr-typing-duration: 900ms ease-in-out; --lr-typing-dot-stagger-1: 300ms; --lr-typing-dot-stagger-2: 600ms"
11329
12360
  ></lr-typing-indicator>
11330
12361
  ```
11331
12362
 
@@ -11344,9 +12375,10 @@ decorative; `label` is the entire accessible content, nothing narrates individua
11344
12375
  state (`opacity: 1`, no transform, `animation: none !important`) rather than freezing on whatever
11345
12376
  frame the animation happened to be on — notably relevant for `cursor`, which would otherwise risk
11346
12377
  freezing on its invisible ("off") blink half.
11347
- - `--lr-transition-ambient` is a compound `duration timing-function` value and cannot be divided
11348
- with `calc()`. When retiming it, override both stagger properties alongside it to preserve the
11349
- default one-third/two-thirds dot phasing, as shown above.
12378
+ - `--lr-typing-duration` (like the `--lr-transition-ambient` token it aliases by default) is a
12379
+ compound `duration timing-function` value and cannot be divided with `calc()`. When retiming it,
12380
+ override both stagger properties alongside it to preserve the default one-third/two-thirds dot
12381
+ phasing, as shown above.
11350
12382
  - `size="sm"` shrinks the dot size, gap, and cursor width, but **not** `--lr-typing-cursor-height`
11351
12383
  (still `1em` at any size) — the cursor bar's height is meant to track surrounding text size via
11352
12384
  `1em`, not the component's own `size` property.
@@ -11546,10 +12578,10 @@ visibility is driven purely by whether anything is slotted into it, not by `phas
11546
12578
  message text color, stalled border), `--lr-color-warning-quiet` (stalled background tint),
11547
12579
  `--lr-space-s` / `--lr-space-xs` (base gap, stalled padding, actions gap), `--lr-radius`
11548
12580
  (base corner radius), `--lr-transition-base` (background/border-color transitions and the
11549
- streaming pulse animation's cycle length). The component also sets two internal, phase-driven
11550
- custom properties (`--lr-stream-status-dot-color`, `--lr-stream-status-dot-opacity`) on
11551
- `:host`, but its own `:host([phase="..."])` rules outrank a page-level override for every phase
11552
- except the default `idle`, so these aren't a practical external theming hook.
12581
+ dot's color/opacity transitions), and `--lr-transition-ambient` (the streaming pulse cycle).
12582
+ The phase defaults flow through `--lr-stream-status-dot-color` and
12583
+ `--lr-stream-status-dot-opacity`; setting either custom property on the element or an ancestor
12584
+ wins through the shadow cascade and is the supported per-instance override.
11553
12585
 
11554
12586
  **Optional peer deps:** none.
11555
12587
 
@@ -11674,8 +12706,8 @@ in-place rename `<input>`'s own `focus`, for the same reason as `blur`)
11674
12706
 
11675
12707
  `leading`/`content`/`excerpt`/`meta` must all stay non-focusable — see the `role="button"` note below.
11676
12708
 
11677
- **CSS parts:** `base`, `option`, `content`, `title`, `title-input`, `rename-button`, `excerpt`,
11678
- `timestamp`, `actions`
12709
+ **CSS parts:** `base`, `active-indicator` (decorative, rendered only while `active`), `option`,
12710
+ `content`, `title`, `title-input`, `rename-button`, `excerpt`, `timestamp`, `actions`
11679
12711
 
11680
12712
  **Themeable custom properties:** `--lr-conversation-item-active-bg` (default
11681
12713
  `var(--lr-color-brand-quiet)`) — the row's background while `active`. `--lr-conversation-item-active-color`
@@ -11694,6 +12726,13 @@ the default active background; keep any override at 4.5:1 or better against it.
11694
12726
  custom active background needs its own title color set alongside them, or the title drops below
11695
12727
  contrast while the excerpt stays legible.
11696
12728
 
12729
+ `--lr-conversation-item-active-indicator-color` (default `var(--lr-color-brand)`) controls the
12730
+ decorative `active-indicator` part's color. `--lr-conversation-item-active-indicator-width`
12731
+ (default `var(--lr-size-2px)`) controls its inline width. `--lr-conversation-item-active-indicator-inset-inline`
12732
+ (default `0 auto`) controls its logical inline insets; set `auto 0` to move the indicator to
12733
+ inline-end. The indicator is `aria-hidden`, occupies the full row block-size, and is absent while
12734
+ the row is inactive.
12735
+
11697
12736
  `--lr-conversation-item-compact-padding` (default `var(--lr-space-xs) var(--lr-space-s)`) —
11698
12737
  `[part='base']`'s padding while `compact`. `--lr-conversation-item-compact-gap` (default
11699
12738
  `var(--lr-space-2xs)`) — `[part='base']`'s gap while `compact`. Like the active-state pair, both are
@@ -11875,7 +12914,13 @@ decorative box size (clamped against `--lr-icon-button-size` via `min()`). All f
11875
12914
  uses — so `size` is the primary lever; override the cssprop directly only to retune a single tier or
11876
12915
  step outside the scale entirely. `--lr-model-select-option-active-bg` (default
11877
12916
  `var(--lr-color-brand-quiet)`) — background of a hovered or keyboard-active `[part="option"]` row;
11878
- declared as a `var()` fallback at the point of use, not on `:host`, so it isn't tied to `size`. Plus
12917
+ declared as a `var()` fallback at the point of use, not on `:host`, so it isn't tied to `size`. The
12918
+ selected row (`[part="option"][aria-selected="true"]`) has the matching set
12919
+ `--lr-model-select-option-selected-bg` (default `transparent`),
12920
+ `--lr-model-select-option-selected-border` and `--lr-model-select-option-selected-color` (both
12921
+ `var(--lr-color-brand)`), and `--lr-model-select-option-selected-font-weight`
12922
+ (`var(--lr-font-weight-semibold)`), all inline `var()` fallbacks so the selected row is rethemeable
12923
+ without hijacking `--lr-color-brand`. Plus
11879
12924
  shared tokens — `--lr-space-xs/-s`, `--lr-color-border/-surface/-brand/-brand-quiet/-text-quiet`,
11880
12925
  `--lr-radius`, `--lr-shadow`, `--lr-focus-ring-width/-color/-offset`, `--lr-icon-button-size`,
11881
12926
  `--lr-transition-fast`, `--lr-opacity-disabled`.
@@ -11953,7 +12998,7 @@ of the stream arrives.
11953
12998
  cursor bar's inline size), `--lr-streaming-text-cursor-height` (default `1em`) — both
11954
12999
  component-specific, since no shared "inline cursor bar" token exists, the same pattern
11955
13000
  `<lr-typing-indicator>`'s own `--lr-typing-cursor-width`/`-height` use, plus shared
11956
- `--lr-space-xs` (cursor's `margin-inline-start`) and `--lr-transition-base` (blink animation
13001
+ `--lr-space-xs` (cursor's `margin-inline-start`) and `--lr-transition-ambient` (blink animation
11957
13002
  cycle length).
11958
13003
 
11959
13004
  **Optional peer deps:** none — internally imports and auto-registers `<lr-markdown>` for
@@ -12164,8 +13209,7 @@ highlighted HTML, and always fires regardless of whether the actual OS clipboard
12164
13209
  `lr-toggle` (`detail: { collapsed: boolean }` — fired when the built-in collapse/expand header
12165
13210
  button is activated, same event name/shape convention as `<lr-thinking-panel>`'s own `lr-toggle`),
12166
13211
  `lr-line-click` (`detail: { line: number }` — a gutter line number was activated while
12167
- `interactiveLines` is set), `lr-highlight-activate` (`detail: { id: string }` — declared for
12168
- parity with this library's other anchor-target viewers; not currently emitted by this component),
13212
+ `interactiveLines` is set),
12169
13213
  `lr-text-select` (`detail: { text, anchor, rects }` — a text selection inside the code body ended;
12170
13214
  `anchor` is a `line-range` anchor covering the selected lines)
12171
13215
 
@@ -12235,10 +13279,11 @@ component's own `part="pre"`/`part="code"` hooks and strips shiki's default `tab
12235
13279
  `<pre>`, since `[part="body"]` is already the single scrollable/focusable region (`role="group"`,
12236
13280
  `tabindex="0"`) for the code area. Dark mode is handled via shiki's own "dual themes" feature: every
12237
13281
  token carries its light color as a plain inline `color`/`background-color` and its dark color in
12238
- `--shiki-dark`/`--shiki-dark-bg` custom properties, which an `!important` media-query rule in
12239
- `code-block.styles.ts` reassigns under `prefers-color-scheme: dark` the one deliberate exception in
12240
- this component to every other color being a `--lr-*` token, since these values come from shiki's own
12241
- theme data.
13282
+ `--shiki-dark`/`--shiki-dark-bg` custom properties. The component watches its resolved Lyra theme
13283
+ tokens and sets `data-dark-theme="true"` on the code body when the effective surface is dark; an
13284
+ `!important` state rule then activates Shiki's dark values. This follows explicit Lyra theme
13285
+ overrides instead of consulting `prefers-color-scheme` directly. Shiki's generated colors are the
13286
+ one deliberate exception to every other color being a `--lr-*` token.
12242
13287
 
12243
13288
  **Known gotchas:**
12244
13289
  - `copyable` defaults to `true` and reflects — see the property note above about overriding it with a
@@ -12316,9 +13361,7 @@ Identical behavior to `<lr-code-block>`'s own method.
12316
13361
  highlighted HTML, and always fires regardless of whether the actual OS clipboard write succeeded),
12317
13362
  `lr-toggle` (`detail: { collapsed: boolean }` — fired when the built-in collapse/expand header
12318
13363
  button is activated), `lr-line-click` (`detail: { line: number }` — a gutter line number was
12319
- activated while `interactiveLines` is set), `lr-highlight-activate` (`detail: { id: string }` —
12320
- declared for parity with this library's other anchor-target viewers; not currently emitted by this
12321
- component), `lr-text-select` (`detail: { text, anchor, rects }` — a text selection inside the code
13364
+ activated while `interactiveLines` is set), `lr-text-select` (`detail: { text, anchor, rects }` — a text selection inside the code
12322
13365
  body ended; `anchor` is a `line-range` anchor covering the selected lines).
12323
13366
 
12324
13367
  **Slots:** none.
@@ -12502,6 +13545,10 @@ branch content.
12502
13545
  `previous-glyph` and `next-glyph` (the chevron inside each button — target these to swap the
12503
13546
  arrow without restyling the button), and `position` (the visible "2 / 5" text).
12504
13547
 
13548
+ **Additional API surface:**
13549
+
13550
+ - `click()` — Activates the currently enabled chevron, matching a click on the shadow control.
13551
+
12505
13552
  ## `lr-message-actions`
12506
13553
 
12507
13554
  The per-message action toolbar for `lr-chat-message`'s `actions` slot: opt-in built-ins (copy /
@@ -12626,6 +13673,11 @@ point of use rather than a `:host` declaration, so it can be set on the element
12626
13673
  after `::part()`), so re-pointing the shared `--lr-color-danger` token was previously the only way,
12627
13674
  and it repainted every other danger surface with it.
12628
13675
 
13676
+ **Additional API surface:**
13677
+
13678
+ - `blur()` — Forwards host blur to the internal push-to-talk control.
13679
+ - `focus()` — Forwards host focus to the internal push-to-talk control.
13680
+
12629
13681
  ## `lr-transcript-feed`
12630
13682
 
12631
13683
  Live captions for an in-progress voice session: speaker-grouped entries, interim-vs-final styling
@@ -12884,7 +13936,7 @@ reach callback-rendered descendants through these parts). `row-excerpt` wraps `r
12884
13936
  output, which is slotted into the row item's own `excerpt` slot.
12885
13937
 
12886
13938
  Data mode additionally forwards each row `<lr-conversation-item>`'s own parts under a `row-item-`
12887
- prefix: `row-item-base`, `row-item-option`, `row-item-leading`, `row-item-content`,
13939
+ prefix: `row-item-base`, `row-item-active-indicator`, `row-item-option`, `row-item-leading`, `row-item-content`,
12888
13940
  `row-item-title`, `row-item-title-input`, `row-item-rename-button`, `row-item-excerpt`,
12889
13941
  `row-item-meta`, `row-item-timestamp`, `row-item-actions`.
12890
13942
 
@@ -13050,7 +14102,8 @@ forced `{ sanitize: true }`), `image` → `lr-media-card` (`src`, `alt`, `filena
13050
14102
 
13051
14103
  **Events:** `lr-widget-action` — `detail: { actionId, payload }`, the single bubbling action
13052
14104
  channel. `lr-render-error` — `detail: { error }`, the root value was structurally unusable
13053
- (non-object, or the depth/size caps made it empty).
14105
+ (non-object, or the depth/size caps made it empty). `lr-widget-state-change` — `detail: { path,
14106
+ value, nodeId, prop }`, emitted when a state-bound mapped control requests a controlled update.
13054
14107
 
13055
14108
  **CSS parts:** `base` (the root wrapper, `display: contents`), `row`, `col`, `text` (built-in
13056
14109
  structural nodes only — a mapped lyra component exposes its own parts instead).
@@ -13148,6 +14201,18 @@ trigger), `expand-icon`, `empty`, `hint`, `error`.
13148
14201
  - `catalog` must be homogeneous — the same constraint `lr-model-select`'s `LyraModelCatalog` union
13149
14202
  documents.
13150
14203
 
14204
+ **Additional API surface:**
14205
+
14206
+ - `--lr-voice-picker-preview-active-border` — Active preview border. Default: `var(--lr-color-brand)`.
14207
+ - `--lr-voice-picker-preview-active-color` — Active preview icon. Default: `var(--lr-color-brand)`.
14208
+ - `--lr-voice-picker-option-active-bg` — Active option fill. Default: `var(--lr-color-brand-quiet)`.
14209
+ - `--lr-voice-picker-option-selected-border` — Selected option border. Default: `var(--lr-color-brand)`.
14210
+ - `--lr-voice-picker-option-selected-color` — Selected option text. Default: `var(--lr-color-brand)`.
14211
+ - `--lr-voice-picker-option-selected-bg` — Selected option fill. Default: `transparent`.
14212
+ - `--lr-voice-picker-option-selected-font-weight` — Selected option label weight. Default: `var(--lr-font-weight-semibold)`.
14213
+ - `--lr-voice-picker-preview-hover-bg` — Preview hover fill. Default: `var(--lr-color-brand-quiet)`.
14214
+ - `--lr-voice-picker-preview-hover-color` — Preview hover icon. Default: `var(--lr-color-brand)`.
14215
+
13151
14216
  ## `lr-agent-workspace`
13152
14217
 
13153
14218
  Responsive, fully controlled shell for an AI conversation and its supporting run, tool, retrieval,
@@ -13246,6 +14311,181 @@ composed `lr-chat-viewport`), `messages`, `messages-empty`, `details`, `details-
13246
14311
  **Optional peer deps:** none of its own; the composed `lr-markdown` keeps its `marked`/`dompurify`
13247
14312
  optional-peer fallback.
13248
14313
 
14314
+ ## `lr-message-parts`
14315
+
14316
+ Ordered renderer for provider-neutral `MessagePart[]`: text, reasoning, tool call/result, citation,
14317
+ attachment, data/widget, audio, and error parts can interleave without flattening stream order.
14318
+
14319
+ **Properties:** `parts: MessagePart[] = []` (attribute: false); `renderMarkdown: boolean = true`
14320
+ (attribute `render-markdown`, reflected) and `showReasoning: boolean = true` (attribute
14321
+ `show-reasoning`, reflected), both with string-aware true-default conversion;
14322
+ `renderPart?: MessagePartRenderer` (attribute: false), where returning `undefined` delegates that
14323
+ part to the built-in renderer; `label: string = ''`; `accessibleLabel: string | null = null`
14324
+ (attribute `aria-label`, highest naming precedence).
14325
+
14326
+ `MessagePartRenderer = (part: MessagePart, index: number) => unknown`; `MessagePart` and its
14327
+ discriminated part shapes come from the `@aceshooting/lyra-ui/ai` subpath.
14328
+
14329
+ **Events:** `lr-citation-select` (`{ citation }`), `lr-part-retry` (`{ part }`).
14330
+
14331
+ **CSS parts:** `base`, `part`, `part-streaming`, `text`, `reasoning`, `tool-call`, `tool-result`,
14332
+ `citation`, `attachment`, `data`, `audio`, `audio-transcript`, `error`, `retry`.
14333
+
14334
+ **Slots:** none. **Optional peer deps:** those of composed content only: Markdown can use
14335
+ `marked`/`dompurify`, and code content can use `shiki`; every composed primitive retains its own
14336
+ fallback.
14337
+
14338
+ ```ts
14339
+ import '@aceshooting/lyra-ui/components/conversation/message-parts/message-parts.js';
14340
+ ```
14341
+
14342
+ **Additional API surface:**
14343
+
14344
+ - `lr-anchor-result` event — Passthrough from rendered Markdown.
14345
+ - `lr-citation-open` event — Passthrough from a rendered citation's full-preview action.
14346
+ - `lr-copy` event — Passthrough from rendered JSON content.
14347
+ - `lr-highlight-activate` event — Passthrough from rendered Markdown.
14348
+ - `lr-link-click` event — Passthrough from rendered Markdown.
14349
+ - `lr-preview` event — Passthrough from a rendered attachment.
14350
+ - `lr-remove` event — Passthrough from a rendered attachment.
14351
+ - `lr-render-error` event — Passthrough from rendered Markdown, tool-result, or widget content.
14352
+ - `lr-retry` event — Passthrough from a rendered attachment.
14353
+ - `lr-search-change` event — Passthrough from rendered JSON content.
14354
+ - `lr-text-select` event — Passthrough from rendered Markdown.
14355
+ - `lr-toggle` event — Passthrough from a rendered reasoning panel.
14356
+ - `lr-tool-call-chip-select` event — Passthrough from a rendered tool-call chip.
14357
+ - `lr-tool-chip-select` event — Deprecated tool-call selection alias passthrough.
14358
+ - `lr-widget-action` event — Passthrough from a rendered declarative widget.
14359
+ - `lr-widget-state-change` event — Passthrough from a rendered controlled widget.
14360
+
14361
+ ## `lr-prompt-input`
14362
+
14363
+ The composed prompt surface: chat composer, attachment controls/chips, model and voice pickers,
14364
+ retrieval-source scope, mention/slash-command popup, and queued follow-up prompts. It performs no
14365
+ upload, retrieval, or model call.
14366
+
14367
+ **Properties:** `value: string = ''`; `status: 'idle' | 'sending' | 'streaming' = 'idle'`;
14368
+ `placeholder: string = ''`; `disabled: boolean = false` (reflected);
14369
+ `submitOnEnter: boolean = true` (attribute `submit-on-enter`, string-aware true-default converter);
14370
+ `attachments: PromptInputAttachment[] = []`, `attachmentCapabilities: AttachmentCapability[] =
14371
+ ['files', 'image', 'audio']`, `mentionItems: PromptSuggestion[] = []`, `commandItems:
14372
+ PromptSuggestion[] = []`, `modelCatalog?: LyraModelCatalog`, `voiceCatalog?: LyraVoiceCatalog`,
14373
+ `sources: LyraSourceEntry[] = []`, `selectedSourceIds: string[] = []`, and `queue:
14374
+ PromptQueueItem[] = []` (all attribute: false); `model: string = ''`; `voice: string = ''`;
14375
+ `label: string = ''`; `accessibleLabel: string | null = null` (attribute `aria-label`).
14376
+
14377
+ `PromptSuggestion` extends `MentionItem { id, label, description?, icon? }` with optional
14378
+ `insertText` (defaults to `label`). `PromptInputAttachment` extends `DocumentRef { id, name,
14379
+ mimeType?, uri?, version? }` with `file?`, `size?`, attachment-chip `status?`, and numeric
14380
+ `progress?`.
14381
+
14382
+ **Methods:** `focus(options?)`, `blur()`, and `click()` forward to the composed chat input;
14383
+ `select()` selects its native text surface. `click()` is inert while disabled.
14384
+
14385
+ **Events:** `lr-input` (`{ value }`), `lr-submit` (`{ value }`), `lr-stop`,
14386
+ `lr-mention-select` (`{ id, label, trigger }`), `lr-attachments-add` (`{ files, capability }`),
14387
+ `lr-attachment-remove` (`{ id }`), `lr-model-change`/`lr-voice-change`
14388
+ (`{ value, inCatalog }`), `lr-sources-change` (`{ selectedIds }`), `lr-queue-change`
14389
+ (`{ items, reason, itemId }`), `lr-send-now` (`{ item }`), `lr-camera-request`,
14390
+ `lr-audio-request`, `lr-attachment-retry` (`{ id }`), and `lr-attachment-preview`
14391
+ (`{ id, name, mimeType, src }`). Child events are stopped and re-emitted from
14392
+ `lr-prompt-input`; all composed interactions are suppressed while `disabled`.
14393
+
14394
+ **Slots:** `controls`, `leading`, `chips`, `trailing`, `footer`.
14395
+
14396
+ **CSS parts:** `base`, `controls`, `sources`, `sources-summary`, `source-picker`, `queue`,
14397
+ `composer`, `leading`, `chips`, `footer`.
14398
+
14399
+ **Optional peer deps:** none of its own.
14400
+
14401
+ ```ts
14402
+ import '@aceshooting/lyra-ui/components/conversation/prompt-input/prompt-input.js';
14403
+ ```
14404
+
14405
+ ## `lr-prompt-queue`
14406
+
14407
+ Controlled editable queue of follow-up turns. Reordering, editing, and removal emit a complete
14408
+ proposed queue; send-now emits the complete selected item.
14409
+
14410
+ **Properties:** `items: PromptQueueItem[] = []` (attribute: false); `editable: boolean = true`
14411
+ (reflected, string-aware true-default converter); `disabled: boolean = false` (reflected);
14412
+ `label: string = ''`; `accessibleLabel: string | null = null` (attribute `aria-label`).
14413
+ `PromptQueueItem = { id: string; value: string; attachments?: DocumentRef[]; createdAt?: number;
14414
+ metadata?: Record<string, unknown> }`.
14415
+
14416
+ **Events:** `lr-queue-change` (`PromptQueueChangeDetail = { items, reason, itemId }`, with
14417
+ `reason: 'edit' | 'remove' | 'reorder'`), `lr-send-now` (`{ item }`). The queue is controlled:
14418
+ these events propose complete next values without mutating `items`.
14419
+
14420
+ **CSS parts:** `base`, `heading`, `list`, `item`, `value`, `editor`, `actions`, `action`, `empty`.
14421
+
14422
+ **Slots:** none. **Optional peer deps:** none.
14423
+
14424
+ ```ts
14425
+ import '@aceshooting/lyra-ui/components/conversation/prompt-queue/prompt-queue.js';
14426
+ ```
14427
+
14428
+ ## `lr-selection-toolbar`
14429
+
14430
+ Nonmodal, Escape-dismissible text-selection toolbar carrying selected text plus a format-neutral
14431
+ `DocumentLocator` into ask, quote, cite, and copy actions.
14432
+
14433
+ **Properties:** `open: boolean = false` (reflected); `text: string = ''`;
14434
+ `anchor: DocumentLocator | null = null`, `rect: DOMRectReadOnly | null = null`, and
14435
+ `actions: SelectionAction[] = ['ask', 'quote', 'cite', 'copy']` (attribute: false);
14436
+ `label: string = ''`; `accessibleLabel: string | null = null` (attribute `aria-label`).
14437
+ `SelectionAction = 'ask' | 'quote' | 'cite' | 'copy'`.
14438
+
14439
+ **Events:** `lr-selection-action` (`SelectionActionDetail = { action, text, anchor }`);
14440
+ `lr-dismiss` (Escape); `lr-copy-error` (`{ error }`). Copy uses the Clipboard API when available;
14441
+ the action event still reports the user intent if writing fails, alongside `lr-copy-error`.
14442
+
14443
+ **CSS parts:** `toolbar`, `action`, `action-ask`, `action-quote`, `action-cite`, `action-copy`.
14444
+
14445
+ **Themeable custom properties:** `--lr-selection-toolbar-inline-start` and
14446
+ `--lr-selection-toolbar-block-start` are normally computed from `rect`; hosts may override them to
14447
+ provide their own fixed-position anchor.
14448
+
14449
+ **Slots:** none. **Optional peer deps:** none.
14450
+
14451
+ ```ts
14452
+ import '@aceshooting/lyra-ui/components/conversation/selection-toolbar/selection-toolbar.js';
14453
+ ```
14454
+
14455
+ **Additional API surface:**
14456
+
14457
+ - `--lr-selection-toolbar-inline-shift` — Computed inline collision-avoidance offset.
14458
+ - `--lr-selection-toolbar-block-shift` — Computed block collision-avoidance offset.
14459
+
14460
+ ## `lr-realtime-session`
14461
+
14462
+ Provider-neutral realtime voice shell composing connection state, `lr-audio-visualizer`,
14463
+ `lr-push-to-talk`, and `lr-transcript-feed`. Transport/authentication/playback remain host-owned.
14464
+
14465
+ **Properties:** `state: RealtimeConnectionState = 'disconnected'` (reflected), where the closed set
14466
+ is `'disconnected' | 'connecting' | 'connected' | 'reconnecting' | 'error'`; `voiceState:
14467
+ AudioVisualizerState = 'idle'` (attribute `voice-state`); `level: number | null = null` (finite,
14468
+ clamped by the composed visualizer); `stream: MediaStream | null = null` and `entries:
14469
+ LyraTranscriptEntry[] = []` (attribute: false); `muted: boolean = false` (reflected);
14470
+ `showCapture: boolean = true` (attribute `show-capture`, reflected, string-aware true-default
14471
+ converter); `errorCode: string = ''` (attribute `error-code`); `label: string = ''`.
14472
+
14473
+ **Events:** `lr-connect`, `lr-disconnect`, `lr-mute-change` (`{ muted }`), `lr-interrupt`; the
14474
+ composed push-to-talk events continue bubbling.
14475
+
14476
+ **Slots:** `controls` adds provider-specific actions beside the built-in session controls.
14477
+
14478
+ **CSS parts:** `base`, `header`, `status`, `activity`, `controls`, `connect`, `disconnect`, `mute`,
14479
+ `interrupt`, `capture`, `transcript`, `error`.
14480
+
14481
+ **Slots:** `controls` — provider-specific actions appended to the built-in session controls.
14482
+ **Optional peer deps:** none. Transport, credentials, capture permission, and media playback
14483
+ remain host-owned.
14484
+
14485
+ ```ts
14486
+ import '@aceshooting/lyra-ui/components/conversation/realtime-session/realtime-session.js';
14487
+ ```
14488
+
13249
14489
  # Agent tooling, tool calls & evaluation (`components/agent-tools/`)
13250
14490
 
13251
14491
  ## `lr-tool-call-chip`
@@ -13300,6 +14540,11 @@ referenced: `--lr-color-text-quiet`, `--lr-color-surface`, `--lr-color-border`,
13300
14540
  `--lr-space-xs/-s/-m`, `--lr-radius`, `--lr-shadow`, `--lr-focus-ring-*`,
13301
14541
  `--lr-transition-fast`.
13302
14542
 
14543
+ > Retheming a chip from outside `<lr-tool-call-chip>` (e.g. per-tool or per-status colors)?
14544
+ > Set `--lr-theme-*` on the ancestor wrapper, not `--lr-*` directly — see `llms/shared.md`'s
14545
+ > "Theming and design tokens" section for why a `--lr-*` override on a wrapper only reaches that
14546
+ > wrapper's *direct* children, not a nested `<lr-*>` host's shadow DOM.
14547
+
13303
14548
  **Optional peer deps:** none.
13304
14549
 
13305
14550
  ```html
@@ -13366,6 +14611,13 @@ shell around it.
13366
14611
  - `copyable: boolean = false` (reflected) — shows a copy-to-clipboard affordance alongside the
13367
14612
  fallback view, for either `fallback` kind: forwarded to `<lr-json-viewer>`'s own `copyable` for
13368
14613
  `"json"`, or a `<lr-copy-button>` rendered next to the text for `"text"`.
14614
+ - `status: 'pending'|'running'|'success'|'error'|'denied' = 'success'` (reflected) — the outcome of
14615
+ the currently-rendered result, as reported by the matched renderer's own `context.reportStatus()`
14616
+ (see below). Reset to `'success'` immediately before every `render()` call, so a renderer that
14617
+ never calls `reportStatus` — including every pre-existing 2-arg renderer written before this
14618
+ property existed — leaves it at that default, and a later renderer that stays quiet doesn't
14619
+ inherit a stale outcome left behind by a previous one. Same status vocabulary as
14620
+ `<lr-tool-result-dialog>`/`<lr-tool-call-chip>`.
13369
14621
 
13370
14622
  **Events:** `lr-render-error` (`detail: { toolName: string; error: unknown }`) — fired immediately
13371
14623
  before falling back to `<lr-json-viewer>`, whether because no renderer matched, a candidate
@@ -13408,10 +14660,16 @@ this same module-level registry unless a given `<lr-tool-result-view>`'s `regist
13408
14660
  set to a different `Map` instance.
13409
14661
 
13410
14662
  **`ToolRendererDefinition`** — the shape of one registered renderer:
13411
- - `render?: (result: unknown, args: unknown) => unknown` — renders the result (and the args that
13412
- produced it) as UI. Typed as `unknown` rather than Lit's `TemplateResult` so any lit-html-renderable
13413
- value works (a plain string, a DOM node, an array of templates) — consumers already own their own
13414
- Lit import and don't need this module to add one
14663
+ - `render?: (result: unknown, args: unknown, context: ToolRenderContext) => unknown` — renders the
14664
+ result (and the args that produced it) as UI. Typed as `unknown` rather than Lit's
14665
+ `TemplateResult` so any lit-html-renderable value works (a plain string, a DOM node, an array of
14666
+ templates) — consumers already own their own Lit import and don't need this module to add one.
14667
+ The 3rd `context` argument is additive: it's the *last* positional parameter, so a pre-existing
14668
+ 2-arg `render(result, args)` function stays assignable to this type unchanged — JS/TS function
14669
+ assignability allows an implementation with fewer parameters than its declared type. Use
14670
+ `context.reportStatus(status)` (see `ToolRenderContext` below) to signal a non-throwing outcome
14671
+ — e.g. an application-level failure the renderer still drew real UI for — instead of throwing,
14672
+ which discards that UI for the `<lr-json-viewer>` fallback instead
13415
14673
  - `matches?: (payload: unknown) => boolean` — facade/shape-based dispatch predicate, consulted only
13416
14674
  when no exact `toolName` key matches (see dispatch order below); only ever consulted *before*
13417
14675
  `load` resolves when supplied inline at registration time — a definition that needs shape-based
@@ -13424,6 +14682,27 @@ set to a different `Map` instance.
13424
14682
  object, so `load: () => import('./my-renderer.js')` works unmodified when that module's default
13425
14683
  export is itself a `ToolRendererDefinition`
13426
14684
 
14685
+ **`ToolRenderContext`** — the shape of `render()`'s 3rd argument:
14686
+ - `reportStatus: (status: ToolResultStatus) => void` — reports this render's outcome without
14687
+ throwing. `ToolResultStatus` is `'pending' | 'running' | 'success' | 'error' | 'denied'`, the same
14688
+ union `<lr-tool-result-dialog>`/`<lr-tool-call-chip>` use, re-exported from this module. Calling
14689
+ it is entirely optional: a renderer that never calls it leaves `<lr-tool-result-view>`'s `status`
14690
+ property at its default, `'success'`. This threads through the lazy `load()` path exactly the
14691
+ same way — a `render()` resolved via `load()` receives the same 3rd `context` argument as one
14692
+ registered directly.
14693
+
14694
+ ```ts
14695
+ registerToolRenderer('run_query', {
14696
+ render: (result, _args, context) => {
14697
+ if ((result as { rows?: unknown[] })?.rows === undefined) {
14698
+ context.reportStatus('error');
14699
+ return html`<p class="query-error">The query returned no result set.</p>`;
14700
+ }
14701
+ return html`<query-result-table .rows=${(result as { rows: unknown[] }).rows}></query-result-table>`;
14702
+ },
14703
+ });
14704
+ ```
14705
+
13427
14706
  **Exports:**
13428
14707
  - `registerToolRenderer(name: string, def: ToolRendererDefinition): void` — registers (or
13429
14708
  overwrites) the renderer for `name` in the module-level default registry
@@ -13483,6 +14762,20 @@ registerToolRenderer('web_search', {
13483
14762
  - `matches` is a linear scan over every registered definition's `matches` in registration order; it
13484
14763
  only runs when the exact-name lookup misses, so tool names with a direct registration never pay
13485
14764
  that scan cost
14765
+ - `status` is reset to `'success'` immediately before every `render()` call, not merely at
14766
+ construction — a renderer that reported `'error'` on one result does not leave that status
14767
+ behind once dispatch moves on to a different (quiet) renderer; a `reportStatus()` call that
14768
+ arrives asynchronously after a *newer* resolve has already started (a stale promise the previous
14769
+ render kicked off) is detected via the same generation counter as the `load()` staleness guard
14770
+ and discarded rather than clobbering the newer status
14771
+ - **don't type a custom renderer against a hand-rolled, over-generic function signature** (e.g.
14772
+ `render: (...args: any[]) => unknown`, or a locally-declared narrower alias then cast to
14773
+ `ToolRendererDefinition`) — write the registration as a plain object literal (as in every example
14774
+ above) or annotate it as `ToolRendererDefinition` directly, so TypeScript checks the actual
14775
+ current `render`/`matches`/`load` shape, including the `context: ToolRenderContext` 3rd
14776
+ parameter and the exact `ToolResultStatus` string union `reportStatus` accepts. A loosened/`any`
14777
+ signature type-checks either way but silently gives up the compiler's ability to catch a typo'd
14778
+ status string or a dropped `context` parameter
13486
14779
  - `fallback` implements exactly two kinds, `"json"` and `"text"`; any *other* value silently behaves
13487
14780
  as `"json"`, as does `"text"` whenever `result` isn't a string. Only `"text"` renders
13488
14781
  `[part="fallback-text"]`/`[part="fallback-copy"]`
@@ -13582,6 +14875,17 @@ state, so no additional scroll-lock/focus-trap bookkeeping is needed for that tr
13582
14875
  - the `maximize`/`close` buttons are always the first elements in the Tab order while open,
13583
14876
  regardless of visual position, followed by `body` then `footer` content
13584
14877
 
14878
+ **Additional API surface:**
14879
+
14880
+ - `--lr-tool-result-dialog-running-color` — Running status foreground. Default: `var(--lr-color-brand)`.
14881
+ - `--lr-tool-result-dialog-running-bg` — Running status background. Default: `var(--lr-color-brand-quiet)`.
14882
+ - `--lr-tool-result-dialog-success-color` — Success status foreground. Default: `var(--lr-color-success)`.
14883
+ - `--lr-tool-result-dialog-success-bg` — Success status background. Default: `var(--lr-color-success-quiet)`.
14884
+ - `--lr-tool-result-dialog-error-color` — Error status foreground. Default: `var(--lr-color-danger)`.
14885
+ - `--lr-tool-result-dialog-error-bg` — Error status background. Default: `var(--lr-color-danger-quiet)`.
14886
+ - `--lr-tool-result-dialog-denied-color` — Denied status foreground. Default: `var(--lr-color-warning)`.
14887
+ - `--lr-tool-result-dialog-denied-bg` — Denied status background. Default: `var(--lr-color-warning-quiet)`.
14888
+
13585
14889
  ---
13586
14890
 
13587
14891
  ## `lr-tool-select-dialog`
@@ -14231,7 +15535,8 @@ recorded winner, host-writable to reflect a previously-recorded vote back. `item
14231
15535
  (attribute `item-id`) — an opaque id round-tripped through `lr-vote`. `hideTie: boolean = false`
14232
15536
  (attribute `hide-tie`) and `hideBothBad: boolean = false` (attribute `hide-both-bad`) hide the
14233
15537
  corresponding vote button. `syncScroll: boolean = false` (attribute `sync-scroll`) links both panes'
14234
- scroll position.
15538
+ scroll position. `disabled: boolean = false` (reflected) disables every vote button and suppresses
15539
+ `lr-vote`.
14235
15540
 
14236
15541
  **Slots:** `a` (the first output — any content, a chat message, markdown, a viewer), `b` (the second
14237
15542
  output), and `prompt` (optional shared-input header above both panes).
@@ -14374,6 +15679,11 @@ so retinting one tone doesn't repaint the other surface reading that token, and
14374
15679
  `::part('line')` stylesheet override — the background is applied inline, so a stylesheet rule can't
14375
15680
  beat it without `!important`.
14376
15681
 
15682
+ **Additional API surface:**
15683
+
15684
+ - `--lr-terminal-search-outline-color` — Outline color for a line containing a non-active search match. Default: `var(--lr-color-warning)`.
15685
+ - `--lr-terminal-search-active-outline-color` — Outline color for the active search match's line. Default: `var(--lr-color-brand)`.
15686
+
14377
15687
  ## `lr-trace-tree`
14378
15688
 
14379
15689
  A collapsible span hierarchy for one agent/LLM trace (Langfuse/LangSmith run-tree style): kind icon,
@@ -14421,6 +15731,17 @@ side of the lightness midpoint as the ambient surface, so a consumer who sets
14421
15731
  set `--lr-trace-tree-row-active-color` to match, and should re-check the status-label tones
14422
15732
  against the new tint as well.
14423
15733
 
15734
+ **Additional API surface:**
15735
+
15736
+ - `--lr-trace-tree-toggle-hover-bg` — Toggle hover background. Default: `var(--lr-color-brand-quiet)`.
15737
+ - `--lr-trace-tree-success-color` — Success status text and bar. Default: `var(--lr-color-success)`.
15738
+ - `--lr-trace-tree-error-color` — Error status text and bar. Default: `var(--lr-color-danger)`.
15739
+ - `--lr-trace-tree-denied-color` — Denied status text and bar. Default: `var(--lr-color-warning)`.
15740
+ - `--lr-trace-tree-running-color` — Running status text and stripe. Default: `var(--lr-color-brand)`.
15741
+ - `--lr-trace-tree-pending-color` — Pending status text and bar. Default: `var(--lr-color-text-quiet)`.
15742
+ - `--lr-trace-tree-bar-track-bg` — Duration bar track. Default: `var(--lr-color-surface-raised)`.
15743
+ - `--lr-trace-tree-running-stripe-bg` — Running stripe contrast. Default: `var(--lr-color-brand-quiet)`.
15744
+
14424
15745
  ## `lr-activity-feed`
14425
15746
 
14426
15747
  An append-only streaming log of granular agent actions ("Searching the web…", "Read
@@ -14663,6 +15984,15 @@ viewport's aspect ratio.
14663
15984
  ></lr-browser-frame>
14664
15985
  ```
14665
15986
 
15987
+ **Additional API surface:**
15988
+
15989
+ - `--lr-browser-frame-controller-background` — Controller badge background. Default: `var(--lr-color-brand-quiet)`.
15990
+ - `--lr-browser-frame-controller-color` — Controller badge text color. Default: `var(--lr-color-brand)`.
15991
+ - `--lr-browser-frame-ping-click-color` — Click-ping border color. Default: `var(--lr-color-brand)`.
15992
+ - `--lr-browser-frame-ping-type-color` — Type-ping border color. Default: `var(--lr-color-success)`.
15993
+ - `--lr-browser-frame-ping-scroll-color` — Scroll-ping border color. Default: `var(--lr-color-warning)`.
15994
+ - `--lr-browser-frame-ping-move-color` — Move-ping border color. Default: `var(--lr-color-text-quiet)`.
15995
+
14666
15996
  ## `lr-artifact-panel`
14667
15997
 
14668
15998
  Shell around one agent-generated artifact: a title/kind header, a preview↔code toggle, version
@@ -14792,6 +16122,12 @@ is unset. Like the other density/state properties in this family they are inline
14792
16122
  their point of use rather than `:host` declarations, so either can be set on the element *or on any
14793
16123
  ancestor* — one rule on a run list retunes every compact run inside it.
14794
16124
 
16125
+ **Additional API surface:**
16126
+
16127
+ - `--lr-agent-run-metric-danger-color` — Danger metric value. Default: `var(--lr-color-danger)`.
16128
+ - `--lr-agent-run-metric-success-color` — Success metric value. Default: `var(--lr-color-success)`.
16129
+ - `--lr-agent-run-metric-warning-color` — Warning metric value. Default: `var(--lr-color-warning)`.
16130
+
14795
16131
  ## `lr-agent-trace`
14796
16132
 
14797
16133
  Provider-neutral agent/LLM trace view combining span-kind filters, handoff quick-jumps, and a
@@ -15064,6 +16400,207 @@ retinted independently; `--lr-tool-timeline-pending-approval-border-color` (defa
15064
16400
  `var(--lr-color-warning)`) — color of the entry body's leading border while that entry's
15065
16401
  `data-pending-approval` is `"true"`.
15066
16402
 
16403
+ **Additional API surface:**
16404
+
16405
+ - `--lr-tool-timeline-running-marker-color` — Running rail dot. Default: `var(--lr-color-brand)`.
16406
+ - `--lr-tool-timeline-success-marker-color` — Success rail dot. Default: `var(--lr-color-success)`.
16407
+ - `--lr-tool-timeline-error-marker-color` — Error rail dot. Default: `var(--lr-color-danger)`.
16408
+ - `--lr-tool-timeline-approved-bg` — Approved badge background. Default: `var(--lr-color-success-quiet)`.
16409
+ - `--lr-tool-timeline-approved-color` — Approved badge foreground. Default: `var(--lr-color-success)`.
16410
+ - `--lr-tool-timeline-denied-bg` — Denied badge background. Default: `var(--lr-color-danger-quiet)`.
16411
+ - `--lr-tool-timeline-denied-color` — Denied badge foreground. Default: `var(--lr-color-danger)`.
16412
+ - `--lr-tool-timeline-error-color` — Expanded error text. Default: `var(--lr-color-danger)`.
16413
+
16414
+ ## `lr-agent-eval-dashboard`
16415
+
16416
+ Controlled evaluation overview with metric cards, a dependency-free trend chart, and run-status
16417
+ history. It never launches or scores evaluations.
16418
+
16419
+ **Properties:** `metrics: AgentEvaluationMetric[] = []` (attribute: false), where each metric is
16420
+ `{ id, label, value, format?: 'number' | 'percent' | 'milliseconds' | 'currency' }`; `currency:
16421
+ string = 'USD'` is the ISO 4217 code used by currency-formatted metrics (invalid codes safely fall
16422
+ back to USD). `runs:
16423
+ AgentEvaluationDashboardRun[] = []` (attribute: false), where each run is `{ id, label, status,
16424
+ metrics?: Record<string, number> }`; `metricId: string = ''`; `label: string = ''`; `showChart:
16425
+ boolean = true`; `chartHeight: string = '220px'`.
16426
+
16427
+ **Events:** `lr-metric-change` (`{ metricId }`, emitted when a metric selector is activated) and
16428
+ `lr-run-select` (`{ runId }`).
16429
+
16430
+ **CSS parts:** `base`, `heading`, `metrics`, `metric`, `chart`, `runs`, `runs-heading`, `run`,
16431
+ `run-label`, `run-meta`, `run-status`, `empty`.
16432
+
16433
+ **Additional API surface:**
16434
+
16435
+ - `--lr-agent-eval-dashboard-active-border` — Active metric border. Default: `var(--lr-color-brand)`.
16436
+ - `--lr-agent-eval-dashboard-active-background` — Active metric background. Default: `var(--lr-color-brand-quiet)`.
16437
+
16438
+ ## `lr-approval-queue`
16439
+
16440
+ Keyboard-accessible queue of pending tool calls backed by one reusable `lr-tool-approval-dialog`.
16441
+ It never executes tools or persists decisions.
16442
+
16443
+ **Properties:** `requests: ToolApprovalRequest[] = []` (attribute: false), where each request is
16444
+ `{ id, toolName, args, status?: 'pending' | 'approved' | 'denied' }`; `selectedId: string = ''`;
16445
+ `open: boolean = false`; `editable: boolean = true`; `label: string = ''`.
16446
+
16447
+ **Events:** `lr-approval-select` (`{ invocationId }`), `lr-approval-decision` (`{ invocationId,
16448
+ approved, args? }`), and `lr-approval-close` (`{ invocationId, reason }`).
16449
+
16450
+ **CSS parts:** `base`, `heading-row`, `heading`, `count`, `list`, `request`, `request-info`,
16451
+ `tool-name`, `request-id`, `status`, `empty`.
16452
+
16453
+ **Additional API surface:**
16454
+
16455
+ - `--lr-approval-queue-selected-border` — Selected request border. Default: `var(--lr-color-brand)`.
16456
+
16457
+ ## `lr-mcp-app`
16458
+
16459
+ Sandbox host for executable MCP App-style resources. Inline documents run in a unique-origin iframe
16460
+ with injected CSP; remote documents are URL-validated. The frame can only request tool calls,
16461
+ messages, navigation, logs, and clamped resizing through typed events. Capabilities are denied
16462
+ unless explicitly enabled in `resource.permissions`.
16463
+
16464
+ **Properties:**
16465
+
16466
+ - `resource: McpAppResource | null = null` (attribute: false) — either inline `html` or a safe
16467
+ remote `src`, plus the required logical `uri`. `McpAppResource = { uri: string; title?: string;
16468
+ html?: string; src?: string; csp?: McpAppCsp; permissions?: McpAppPermissions; metadata?:
16469
+ Record<string, unknown> }`. CSP domain arrays accept HTTP(S) origins only. Permissions are
16470
+ optional booleans for camera, microphone, geolocation, clipboard read, and clipboard write.
16471
+ - `height: number = 320`, `maxHeight: number = 800` (attribute `max-height`) — requested and maximum
16472
+ frame heights in pixels; runtime values and resize requests clamp to 120–10,000.
16473
+ - `label: string = ''`; `accessibleLabel: string | null = null` (attribute `aria-label`) — frame
16474
+ title precedence is host `aria-label`, `label`, resource title, then the localized fallback.
16475
+
16476
+ **Methods:** `postHostContext(context: unknown): void` posts host state into the active frame;
16477
+ `postToolResult(requestId: string, result?: unknown, error?: string): void` resolves a prior tool
16478
+ request. Both are no-ops before a frame exists.
16479
+
16480
+ **Exported types:** `McpAppResource`, `McpAppCsp`, `McpAppPermissions`,
16481
+ `McpAppToolCallDetail`, and `LyraMcpAppEventMap`.
16482
+
16483
+ **Events:** `lr-mcp-ready` (`{ uri }`), `lr-mcp-tool-call` (`{ requestId?, name, args }`),
16484
+ `lr-mcp-send-message` (`{ message }`), `lr-mcp-open-link` (`{ href }`), `lr-mcp-log`
16485
+ (`{ level, value }`), and `lr-mcp-resize` (`{ height }`). These are host-authorized requests; the
16486
+ component does not execute tools, send messages, or navigate itself.
16487
+
16488
+ **CSS parts:** `base`, `frame`, `loading`, `error`.
16489
+
16490
+ **Slots:** none. **Optional peer deps:** none.
16491
+
16492
+ ```ts
16493
+ import '@aceshooting/lyra-ui/components/agent-tools/mcp-app/mcp-app.js';
16494
+ ```
16495
+
16496
+ ## `lr-prompt-studio`
16497
+
16498
+ Prompt-development workbench for ordered role messages, `{{variable}}` substitution, saved
16499
+ versions, resolved preview, and save/run intents. Message and variable edits update the component's
16500
+ current arrays before emitting their complete next state; persistence and execution remain
16501
+ host-owned.
16502
+
16503
+ **Properties:** `messages: PromptStudioMessage[] = []` and
16504
+ `variables: PromptStudioVariable[] = []` are property-only editor state: user edits update the
16505
+ current arrays before `lr-change` is emitted, while the host remains responsible for persistence.
16506
+ `versions: PromptStudioVersion[] = []` is a property-only host-controlled input;
16507
+ `selectedVersionId: string = ''` (attribute `selected-version-id`); `label: string = ''`;
16508
+ `running: boolean = false` and `disabled: boolean = false` (both reflected).
16509
+
16510
+ **Exported types:** `PromptStudioRole = 'system' | 'user' | 'assistant' | 'tool'`;
16511
+ `PromptStudioMessage = { id, role, content, name? }`; `PromptStudioVariable = { name, value,
16512
+ description? }`; `PromptStudioVersion = { id: string; label: string; messages:
16513
+ PromptStudioMessage[]; variables?: PromptStudioVariable[]; createdAt?: string }`; and
16514
+ `PromptStudioState = { messages, variables }`.
16515
+
16516
+ **Events:** `lr-change`, `lr-run`, `lr-save` (all carry complete messages/variables);
16517
+ `lr-version-select` (`{ version }`).
16518
+
16519
+ **CSS parts:** `base`, `toolbar`, `editor`, `messages`, `message`, `message-role`,
16520
+ `message-content`, `remove-message`, `add-message`, `variables`, `variable`, `versions`, `version`,
16521
+ `preview`, `save`, `run`.
16522
+
16523
+ **Slots:** none. **Optional peer deps:** none.
16524
+
16525
+ ```ts
16526
+ import '@aceshooting/lyra-ui/components/agent-tools/prompt-studio/prompt-studio.js';
16527
+ ```
16528
+
16529
+ **Additional API surface:**
16530
+
16531
+ - `--lr-prompt-studio-field-hover-border` — Enabled field hover border. Default: `var(--lr-color-brand)`.
16532
+ - `--lr-prompt-studio-version-selected-border` — Selected version border. Default: `var(--lr-color-brand)`.
16533
+ - `--lr-prompt-studio-version-selected-bg` — Selected version background. Default: `var(--lr-color-brand-quiet)`.
16534
+ - `--lr-prompt-studio-version-selected-color` — Selected version foreground. Default: `var(--lr-color-text)`.
16535
+ - `--lr-prompt-studio-version-selected-hover-bg` — Selected version hover background. Default: `var(--lr-color-brand-quiet)`.
16536
+
16537
+ ## `lr-schema-viewer`
16538
+
16539
+ Recursive JSON Schema inspector with property/branch selection, required and constraint display,
16540
+ validation issues, `$ref` visibility, composition branches, cycle protection, and a depth ceiling.
16541
+ It intentionally does not fetch remote references or validate values.
16542
+
16543
+ **Properties:** `schema: JsonSchemaNode | null = null` and `issues: SchemaValidationIssue[] = []`
16544
+ (attribute: false); `selectedPath: string = ''` (attribute `selected-path`);
16545
+ `maxDepth: number = 20` (attribute `max-depth`, clamped to 100); `label: string = ''`.
16546
+
16547
+ **Exported types:** `JsonSchemaNode` covers `$ref`, type/title/description, properties/items,
16548
+ required/enum/const/default/examples, and oneOf/anyOf/allOf while preserving unknown schema
16549
+ keywords. `SchemaValidationIssue = { path: string; message: string; severity?: 'error' | 'warning'
16550
+ | 'info' }`.
16551
+
16552
+ **Events:** `lr-schema-select` (`{ path, schema }`, with an RFC 6901-style JSON Pointer).
16553
+
16554
+ **CSS parts:** `base`, `tree`, `node`, `node-selected`, `node-trigger`, `name`, `type`, `required`,
16555
+ `description`, `constraints`, `issue`, `limit`, `empty`.
16556
+
16557
+ Rendering is capped at 500 schema nodes; `limit` reports truncation. Cycles stop at the repeated
16558
+ node rather than recursing. **Slots:** none. **Optional peer deps:** none.
16559
+
16560
+ ```ts
16561
+ import '@aceshooting/lyra-ui/components/agent-tools/schema-viewer/schema-viewer.js';
16562
+ ```
16563
+
16564
+ **Additional API surface:**
16565
+
16566
+ - `part="limit"` — Resource-ceiling status shown when additional nodes are omitted.
16567
+ - `--lr-schema-viewer-selected-border` — Selected node branch. Default: `var(--lr-color-brand)`.
16568
+ - `--lr-schema-viewer-error-border` — Error issue border. Default: `var(--lr-color-danger)`.
16569
+ - `--lr-schema-viewer-error-bg` — Error issue background. Default: `var(--lr-color-danger-quiet)`.
16570
+ - `--lr-schema-viewer-warning-border` — Warning issue border. Default: `var(--lr-color-warning)`.
16571
+ - `--lr-schema-viewer-warning-bg` — Warning issue background. Default: `var(--lr-color-warning-quiet)`.
16572
+
16573
+ ## `lr-subagent-panel`
16574
+
16575
+ Controlled nested-agent hierarchy with lifecycle badges, task/model context, guarded progress,
16576
+ selection, cancel, and retry intents. `SubagentRun.parentId` creates nesting; cycles and orphan
16577
+ parents remain renderable instead of recursing forever.
16578
+
16579
+ **Properties:** `runs: SubagentRun[] = []` (attribute: false);
16580
+ `selectedRunId: string = ''` (attribute `selected-run-id`); `label: string = ''`.
16581
+ `SubagentRun = { id: string; parentId?: string; label: string; status: AgentStatusKind; task?:
16582
+ string; model?: string; progress?: number; startedAt?: number; endedAt?: number; metadata?:
16583
+ Record<string, unknown> }`.
16584
+
16585
+ **Events:** `lr-run-select` (`{ run }`), `lr-cancel`/`lr-retry` (`{ runId }`).
16586
+
16587
+ **CSS parts:** `base`, `list`, `run`, `run-selected`, `run-row`, `run-trigger`, `label`, `status`,
16588
+ `task`, `model`, `progress`, `actions`, `cancel`, `retry`, `limit`, `empty`.
16589
+
16590
+ At most 500 runs render, and visual indentation is capped at 12 levels while ARIA hierarchy keeps
16591
+ the logical depth. Progress is finite and clamped. **Slots:** none. **Optional peer deps:** none.
16592
+
16593
+ ```ts
16594
+ import '@aceshooting/lyra-ui/components/agent-tools/subagent-panel/subagent-panel.js';
16595
+ ```
16596
+
16597
+ **Additional API surface:**
16598
+
16599
+ - `part="limit"` — Resource-ceiling status shown when additional runs are omitted.
16600
+ - `--lr-subagent-panel-selected-border` — Selected run border. Default: `var(--lr-color-brand)`.
16601
+ - `--lr-subagent-panel-progress-track` — Progress track. Default: `var(--lr-color-border)`.
16602
+ - `--lr-subagent-panel-progress-fill` — Progress fill. Default: `var(--lr-color-brand)`.
16603
+
15067
16604
  # Retrieval, knowledge graph & grounding (`components/retrieval/`)
15068
16605
 
15069
16606
  ## `lr-graph`
@@ -15226,9 +16763,9 @@ install with `pnpm add d3-force d3-drag d3-zoom d3-selection`).
15226
16763
  zoom/drag are still pointer-only with no keyboard equivalent. Links (`<line part="link">`) are now
15227
16764
  keyboard-operable too (`tabindex="0"`, `role="button"`, `aria-label`, Enter/Space), matching nodes.
15228
16765
  - while the `d3-force`/`d3-drag`/`d3-zoom`/`d3-selection` peers are resolving, the host shows a
15229
- `<lr-skeleton>` sized to `width`/`height` with `aria-busy="true"` but if they fail to load
15230
- (not installed), it still settles into a permanently empty `<svg>` (0 nodes/0 links) plus a
15231
- one-time console warning, same as before; the skeleton only covers the loading window itself.
16766
+ `<lr-skeleton>` sized to `width`/`height` with `aria-busy="true"`. If they fail to load (for
16767
+ example, because they are not installed), the graph fails closed with a localized
16768
+ `part="error"` / `role="alert"` message instead of leaving an empty SVG.
15232
16769
  - `GraphNode.color` is sanitized (rejects `;`/`{`/`}`) before being written into the
15233
16770
  `--lr-node-fill` inline custom property, so an untrusted color string can't break out of that
15234
16771
  CSS declaration.
@@ -15754,9 +17291,9 @@ fired after every toggle including select-all).
15754
17291
 
15755
17292
  **CSS parts:** `base`, `search` (the built-in filter `lr-input`, only when `searchable`),
15756
17293
  `select-all` (only when `showSelectAll`), `summary` ("{selected} of {total} selected"), `tree`
15757
- (`role="tree"`), `item` (`role="treeitem"`), `checkbox` (tri-state glyph), `icon` (the
15758
- `lr-file-icon` type badge), `label`, `empty` (`noData` when `sources` is empty, `noMatches` when a
15759
- filter empties the tree).
17294
+ (`role="tree"`), `item` (`role="treeitem"`), `disclosure` (a folder row's expand/collapse button),
17295
+ `checkbox` (tri-state glyph), `icon` (the `lr-file-icon` type badge), `label`, `empty` (`noData`
17296
+ when `sources` is empty, `noMatches` when a filter empties the tree).
15760
17297
 
15761
17298
  **Themeable custom properties:** `--lr-source-picker-checked-bg` — the background of a fully-checked
15762
17299
  selection control: the `select-all` pill (whose resting default is `var(--lr-color-brand-quiet)`) and
@@ -15939,6 +17476,11 @@ directly — set instead by the `:host([status=...])` rules), plus shared tokens
15939
17476
  `--lr-color-surface`, `--lr-color-border`, `--lr-shadow`, `--lr-space-s`/`-m`,
15940
17477
  `--lr-transition-fast`, `--lr-focus-ring-*`.
15941
17478
 
17479
+ > Retheming a badge from outside `<lr-citation-badge>` (e.g. per-source or per-confidence colors)?
17480
+ > Set `--lr-theme-*` on the ancestor wrapper, not `--lr-*` directly — see `llms/shared.md`'s
17481
+ > "Theming and design tokens" section for why a `--lr-*` override on a wrapper only reaches that
17482
+ > wrapper's *direct* children, not a nested `<lr-*>` host's shadow DOM.
17483
+
15942
17484
  **Optional peer deps:** none.
15943
17485
 
15944
17486
  ```html
@@ -16000,7 +17542,7 @@ direct light-DOM children of the list (plain composition — no `.items` array p
16000
17542
  - `labelPlural: string = ''` (attribute `label-plural`) — fully consumer-built, already-pluralized
16001
17543
  header summary, e.g. `"3 sources"` or `"1 source"`; this component never counts or pluralizes on
16002
17544
  its own. Takes precedence over `label` when both are set. If neither is set, the header falls back
16003
- to the literal word `"Sources"`.
17545
+ to the localized `sourceListDefaultLabel` string (English default: `"Sources"`).
16004
17546
 
16005
17547
  **Getters:** `sourceCount: number` — read-only, live-updated count of the currently-slotted children,
16006
17548
  handy for building a `label-plural` string reactively, e.g. `` list.labelPlural = `${list.sourceCount} sources` ``.
@@ -16101,10 +17643,9 @@ forwarding scenarios or engines that don't fire `slotchange` for content already
16101
17643
  time.
16102
17644
 
16103
17645
  **Known gotchas:**
16104
- - This library has no built-in i18n/pluralization (the same stance `<lr-empty>`'s plain
16105
- `description` prop takes) `lr-source-list`'s header text is entirely consumer-supplied via
16106
- `label`/`label-plural`; there's no automatic "N sources" string generation beyond the literal
16107
- `"Sources"` fallback.
17646
+ - `lr-source-list` does not automatically build an “N sources” plural summary: provide
17647
+ `labelPlural` when that is wanted. Its no-label fallback is localized through
17648
+ `sourceListDefaultLabel`, and a per-instance `.strings` override reaches the rendered header.
16108
17649
  - `lr-source-card`'s own expand/collapse (`full` slot, `lr-expand` event) is completely
16109
17650
  independent of the parent list's `expanded`/`lr-toggle` — collapsing the list doesn't reset an
16110
17651
  individual card's `fullExpanded` state, and there is no cross-talk between the two components at
@@ -16187,8 +17728,9 @@ and `lr-citation-badge` for each evidence entry.
16187
17728
  **Properties:**
16188
17729
  - `assessment: GroundingAssessment | null = null` (attribute: false) — **`GroundingAssessment`,
16189
17730
  imported from `@aceshooting/lyra-ui/ai`** (`src/ai/types.ts`): `{ supportedClaims: number;
16190
- unsupportedClaims: number; coverage: number; confidence?: number; warnings?: string[] }`, where
16191
- `coverage` and `confidence` are 0–1 fractions. `null` renders the empty state
17731
+ unsupportedClaims: number; coverage: number; confidence?: number; warnings?: string[];
17732
+ claims?: GroundedClaim[] }`, where `coverage` and `confidence` are 0–1 fractions. `null` renders
17733
+ the empty state
16192
17734
  - `citations: Citation[] = []` (attribute: false) — **`Citation` from `@aceshooting/lyra-ui/ai`**:
16193
17735
  `{ id: string; chunkId?: string; sourceId?: string; span?: { start: number; end: number };
16194
17736
  label?: string }`. Independent of `assessment`; empty omits the whole evidence section. Each entry
@@ -16198,8 +17740,10 @@ and `lr-citation-badge` for each evidence entry.
16198
17740
  `GroundingSummaryThresholds { high: number; medium: number }` (exported here), both 0–1 fractions,
16199
17741
  applied to both `coverage` and `confidence`: `>= high` → `success` tone, `>= medium` → `warning`,
16200
17742
  below → `danger`
16201
- - `label: string = ''` — accessible group label; falls back to a host `aria-label`, then the
16202
- localized `groundingSummaryLabel`
17743
+ - `label: string = ''` — accessible group label. A host `aria-label` takes precedence, followed by
17744
+ `label`, then the localized `groundingSummaryLabel`
17745
+ - `showClaims: boolean = true` (attribute `show-claims`) — renders `assessment.claims` through
17746
+ `lr-claim-evidence`; set false to keep the aggregate scorecard only
16203
17747
 
16204
17748
  **Events:** `lr-citation-select` (`detail: CitationSelectEventDetail` from
16205
17749
  `@aceshooting/lyra-ui/ai` = `{ citation: Citation }`) — emitted when an evidence badge is activated.
@@ -16214,7 +17758,8 @@ row), `warnings` (omitted when there are none), `warnings-heading`, `warnings-co
16214
17758
  `warnings-list` (a `<ul>`), `warning` (one `<li>`), `evidence` (omitted when `citations` is empty),
16215
17759
  `evidence-heading`, `evidence-count`, `evidence-item` (badge + always-visible label/span text),
16216
17760
  `evidence-label` (omitted when `Citation.label` is unset), `evidence-span` (the formatted
16217
- `Citation.span` range, omitted when unset), `empty` (shown when `assessment` is `null`).
17761
+ `Citation.span` range, omitted when unset), `claims` (the composed claim-evidence audit), `empty`
17762
+ (shown when `assessment` is `null`).
16218
17763
 
16219
17764
  **Themeable custom properties:** shared tokens only.
16220
17765
 
@@ -16260,8 +17805,10 @@ Both `RetryEventDetail` and `CancelEventDetail` come from `@aceshooting/lyra-ui/
16260
17805
  per-item stage label), `item-progress`,
16261
17806
  `item-chunk-count`, `item-embedding-status` (the "N of M chunks embedded" text, only once both
16262
17807
  `chunkCount` and `embeddedChunkCount` are set), `item-attempts` (only once `attempts > 0`),
16263
- `item-error` (only for `stage="failed"` with `error` set), `item-actions`, `retry-button`,
16264
- `cancel-button`, `empty`.
17808
+ `item-error` (only for `stage="failed"` with `error` set), `failure-live` (the visually hidden
17809
+ assertive region that announces only failures added or transitioned after mount; historical failed
17810
+ rows remain visible without being re-announced), `item-actions`, `retry-button`, `cancel-button`,
17811
+ `empty`.
16265
17812
 
16266
17813
  In virtualized mode (at or above `virtualizeThreshold`) the rows live in the internal
16267
17814
  `lr-virtual-list`'s shadow root, and `item`, `item-header`, `item-name`, `item-progress`,
@@ -16657,8 +18204,9 @@ fetches, ranks, or computes retrieval results itself.
16657
18204
  stage whose evidence has none of the three renders no disclosure row at all
16658
18205
  - `activeStageId: string | null = null` (attribute `active-stage-id`) — controlled selection,
16659
18206
  forwarded verbatim to the internal `lr-span-waterfall`'s `activeSpanId`
16660
- - `label: string = ''` — accessible name for the timeline; falls back to a host `aria-label`, then
16661
- the waterfall's own localized default
18207
+ - `label: string = ''` — accessible name for the timeline. A host `aria-label` takes precedence,
18208
+ followed by `label`, then the waterfall's own localized default; late attribute changes and
18209
+ removal update that resolved name
16662
18210
 
16663
18211
  **Events:** `lr-stage-select` (`detail: { id: string }`, a stage's bar was activated — click, Enter,
16664
18212
  Space), `lr-stage-toggle` (`detail: { id: string; expanded: boolean }`, an evidence panel was
@@ -16687,3 +18235,142 @@ falls back to that token, so rendering is unchanged. Plus shared tokens otherwis
16687
18235
  **Known gotchas:**
16688
18236
  - Every stage starts collapsed; expansion state is internal `@state` keyed by stage id, not a
16689
18237
  controlled property.
18238
+
18239
+ ## `lr-rag-answer`
18240
+
18241
+ Controlled grounded-answer surface combining sanitized Markdown, citation badges, grounding
18242
+ assessment, and expandable source previews. It performs no model call, retrieval, citation parsing,
18243
+ or source fetching.
18244
+
18245
+ **Properties:** `answer: string = ''`; `citations: Citation[] = []` (attribute: false);
18246
+ `sources: DocumentRef[] = []` (attribute: false); `assessment: GroundingAssessment | null = null`
18247
+ (attribute: false); `loading: boolean = false`; `error: string = ''`; `showSources: boolean = true`;
18248
+ `showClaims: boolean = true` (attribute `show-claims`); `label: string = ''`; `accessibleLabel:
18249
+ string | null = null` (attribute `aria-label`).
18250
+
18251
+ **Events:** `lr-citation-select` (`{ citation }`), `lr-claim-select` (`{ claim }`), and `lr-retry`.
18252
+
18253
+ **Slots:** `answer` replaces the data-driven Markdown body; `sources` replaces the data-driven
18254
+ source list.
18255
+
18256
+ **CSS parts:** `base`, `answer`, `loading`, `error`, `retry`, `grounding`, `citations`,
18257
+ `citation-list`, `sources`, `source-list`, `section-heading`.
18258
+
18259
+ ## `lr-embedding-explorer`
18260
+
18261
+ Dependency-free accessible 2D embedding projection viewer. Coordinates are projected by the host;
18262
+ the component only normalizes them into SVG, colors optional clusters, and emits selection events.
18263
+
18264
+ **Properties:** `points: EmbeddingPoint[] = []` (attribute: false), where each point is `{ id, x,
18265
+ y, label?, sourceId?, cluster? }`; `selectedId: string = ''`; `height: string = '360px'`;
18266
+ `accessibleLabel: string | null = null` (attribute `aria-label`). Non-finite coordinates are
18267
+ omitted.
18268
+
18269
+ **Events:** `lr-point-select` (`{ point }`), activated by click or Enter/Space.
18270
+
18271
+ **CSS parts:** `base`, `plot`, `point`, `empty`.
18272
+
18273
+ **Themeable custom properties:** `--lr-embedding-explorer-selected-stroke` (default
18274
+ `var(--lr-color-brand)`) — stroke color of the selected point. Plus shared tokens.
18275
+
18276
+ ## `lr-knowledge-base-admin`
18277
+
18278
+ Tabbed operations shell composing `lr-knowledge-base` and `lr-ingestion-queue`. It forwards source
18279
+ and ingestion actions under namespaced events; host-owned controls such as chunking, embedding,
18280
+ permissions, and connector settings go in the `settings` slot.
18281
+
18282
+ **Properties:** `sources: KnowledgeSource[] = []` (attribute: false); `ingestionItems:
18283
+ IngestionQueueItem[] = []` (attribute: false); `activeTab: 'sources' | 'ingestion' = 'sources'`;
18284
+ `label: string = ''`; `hideIngestion: boolean = false`.
18285
+
18286
+ **Events:** `lr-tab-change` (`{ tab }`), `lr-source-create`, `lr-source-sync`, `lr-source-pause`,
18287
+ `lr-source-delete`, `lr-ingestion-retry`, and `lr-ingestion-cancel` (the latter four preserve the
18288
+ correlated ids/details from their composed primitives).
18289
+
18290
+ **Slots:** `settings` — host-owned KB configuration controls.
18291
+
18292
+ **CSS parts:** `base`, `heading`, `tabs`, `tab`, `panel`, `settings`.
18293
+
18294
+ ## `lr-claim-evidence`
18295
+
18296
+ Controlled claim-by-claim grounding audit relating `GroundedClaim[]` to complete `Citation[]`
18297
+ records. Dangling citation ids are ignored rather than rendered as invented evidence.
18298
+
18299
+ **Properties:** `claims: GroundedClaim[] = []` and `citations: Citation[] = []` (attribute: false);
18300
+ `selectedClaimId: string = ''` (attribute `selected-claim-id`); `label: string = ''`.
18301
+ `GroundedClaim = { id, text, status, citationIds, answerRange?, confidence?, explanation? }`, with
18302
+ `status: 'supported' | 'partially-supported' | 'unsupported' | 'contradicted'`. Claim confidence
18303
+ is clamped to 0–1 for localized percent display. `Citation` is the shared AI citation record
18304
+ (`id`, source/chunk ids, label, locator/ranges, quote, metadata).
18305
+
18306
+ **Events:** `lr-claim-select` (`{ claim }`), `lr-citation-select` (`{ citation }`).
18307
+
18308
+ **CSS parts:** `base`, `list`, `claim`, `claim-selected`, `claim-trigger`, `status`, `claim-text`,
18309
+ `confidence`, `explanation`, `evidence`, `empty`.
18310
+
18311
+ Selection is controlled: activation emits the complete claim but does not assign
18312
+ `selectedClaimId`. Evidence preserves `citations` order and silently skips dangling ids.
18313
+ **Slots:** none. **Optional peer deps:** none.
18314
+
18315
+ ```ts
18316
+ import '@aceshooting/lyra-ui/components/retrieval/claim-evidence/claim-evidence.js';
18317
+ ```
18318
+
18319
+ ## `lr-retrieval-compare`
18320
+
18321
+ Side-by-side retrieval/reranking workbench showing effective rank, top-k Jaccard overlap, and
18322
+ dense/sparse/rerank/final score breakdowns.
18323
+
18324
+ **Properties:** `sets: RetrievalComparisonSet[] = []` (attribute: false), where
18325
+ `RetrievalComparisonSet = { id: string; label: string; chunks: RetrievalChunk[] }`;
18326
+ `topK: number = 10` (attribute `top-k`, finite integer with minimum 1);
18327
+ `selectedChunkId: string = ''` (attribute `selected-chunk-id`); `label: string = ''`.
18328
+ `RetrievalChunk` is the shared AI record carrying id/text/score/source plus optional rank, locator,
18329
+ trace metadata, and `scores?: { dense?, sparse?, rerank?, final }`.
18330
+
18331
+ **Events:** `lr-chunk-select` (`{ setId, chunk }`).
18332
+
18333
+ **CSS parts:** `base`, `overlap`, `sets`, `set`, `set-heading`, `chunks`, `chunk`,
18334
+ `chunk-selected`, `chunk-rank`, `chunk-title`, `chunk-text`, `scores`, `score`, `empty`.
18335
+
18336
+ Chunks are ordered by effective rank, then score, then input order before the top-k slice. Overlap
18337
+ is pairwise Jaccard similarity across those visible chunk ids. Selection is controlled.
18338
+ **Slots:** none. **Optional peer deps:** none.
18339
+
18340
+ ```ts
18341
+ import '@aceshooting/lyra-ui/components/retrieval/retrieval-compare/retrieval-compare.js';
18342
+ ```
18343
+
18344
+ ## `lr-rag-eval-dashboard`
18345
+
18346
+ Controlled RAG evaluation overview with latest metric cards, per-metric trends, evaluation slices,
18347
+ and run history. The host computes metrics and owns evaluation execution.
18348
+
18349
+ **Properties:** `metrics: RagEvaluationMetric[] = []` and `runs: RagEvaluationRun[] = []`
18350
+ (attribute: false); `metricId: string = ''` (attribute `metric-id`, with the first metric used for
18351
+ display when unset/unmatched); `slice: string = ''`; `label: string = ''`;
18352
+ `showChart: boolean = true` (attribute `show-chart`, reflected, string-aware true-default
18353
+ converter); `chartHeight: string = '220px'` (attribute `chart-height`).
18354
+
18355
+ `RagEvaluationMetric = { id, label, category, format? }`, where category is
18356
+ `'retrieval' | 'generation' | 'system' | custom-string` and format is `'number' | 'percent'`.
18357
+ `RagEvaluationRun = { id, label, metrics: Record<string, number>; slice?, timestamp?, metadata? }`.
18358
+
18359
+ **Events:** `lr-metric-change` (`{ metricId }`), `lr-slice-change` (`{ slice }`), and
18360
+ `lr-run-select` (`{ run }`). All are controlled intents; the component does not mutate the
18361
+ corresponding selection properties.
18362
+
18363
+ **CSS parts:** `base`, `heading`, `slices`, `slice`, `slice-selected`, `metrics`, `metric`,
18364
+ `metric-selected`, `chart`, `runs`, `runs-heading`, `run`, `empty`.
18365
+
18366
+ Percent values clamp to 0–1 and all numbers use `effectiveLocale`. The chart is built from the
18367
+ filtered run order; the host computes every metric and owns evaluation execution.
18368
+ **Slots:** none. **Optional peer deps:** none.
18369
+
18370
+ ```ts
18371
+ import '@aceshooting/lyra-ui/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.js';
18372
+ ```
18373
+
18374
+ `lr-grounding-summary` and `lr-rag-answer` now accept `GroundingAssessment.claims` and expose
18375
+ `showClaims: boolean = true`; `lr-retrieval-results` forwards `RetrievalChunk.locator` as the
18376
+ document-viewer-compatible `anchor` in `lr-chunk-open`.