@aceshooting/lyra-ui 7.2.0 → 7.4.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 (370) hide show
  1. package/CHANGELOG.md +94 -0
  2. package/custom-elements.json +1723 -379
  3. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts.map +1 -1
  4. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +1 -0
  5. package/dist/components/agent-tools/activity-feed/activity-feed.class.js.map +1 -1
  6. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts.map +1 -1
  7. package/dist/components/agent-tools/approval-queue/approval-queue.class.js +1 -0
  8. package/dist/components/agent-tools/approval-queue/approval-queue.class.js.map +1 -1
  9. package/dist/components/agent-tools/browser-frame/browser-frame.styles.d.ts.map +1 -1
  10. package/dist/components/agent-tools/browser-frame/browser-frame.styles.js +3 -0
  11. package/dist/components/agent-tools/browser-frame/browser-frame.styles.js.map +1 -1
  12. package/dist/components/agent-tools/commit-card/commit-card.class.d.ts +3 -0
  13. package/dist/components/agent-tools/commit-card/commit-card.class.d.ts.map +1 -1
  14. package/dist/components/agent-tools/commit-card/commit-card.class.js +21 -1
  15. package/dist/components/agent-tools/commit-card/commit-card.class.js.map +1 -1
  16. package/dist/components/agent-tools/compare-panel/compare-panel.class.d.ts.map +1 -1
  17. package/dist/components/agent-tools/compare-panel/compare-panel.class.js +7 -1
  18. package/dist/components/agent-tools/compare-panel/compare-panel.class.js.map +1 -1
  19. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.d.ts +4 -0
  20. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.d.ts.map +1 -1
  21. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js +4 -0
  22. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js.map +1 -1
  23. package/dist/components/agent-tools/confirm-bar/confirm-bar.styles.js +2 -2
  24. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +2 -0
  25. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts.map +1 -1
  26. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +24 -9
  27. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js.map +1 -1
  28. package/dist/components/agent-tools/prompt-studio/prompt-studio.styles.d.ts.map +1 -1
  29. package/dist/components/agent-tools/prompt-studio/prompt-studio.styles.js +23 -2
  30. package/dist/components/agent-tools/prompt-studio/prompt-studio.styles.js.map +1 -1
  31. package/dist/components/agent-tools/result-card/result-card.class.d.ts +4 -0
  32. package/dist/components/agent-tools/result-card/result-card.class.d.ts.map +1 -1
  33. package/dist/components/agent-tools/result-card/result-card.class.js +4 -0
  34. package/dist/components/agent-tools/result-card/result-card.class.js.map +1 -1
  35. package/dist/components/agent-tools/result-card/result-card.styles.d.ts.map +1 -1
  36. package/dist/components/agent-tools/result-card/result-card.styles.js +2 -0
  37. package/dist/components/agent-tools/result-card/result-card.styles.js.map +1 -1
  38. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +2 -0
  39. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts.map +1 -1
  40. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +2 -0
  41. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js.map +1 -1
  42. package/dist/components/agent-tools/schema-viewer/schema-viewer.styles.d.ts.map +1 -1
  43. package/dist/components/agent-tools/schema-viewer/schema-viewer.styles.js +4 -0
  44. package/dist/components/agent-tools/schema-viewer/schema-viewer.styles.js.map +1 -1
  45. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.d.ts +6 -1
  46. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.d.ts.map +1 -1
  47. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +61 -3
  48. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js.map +1 -1
  49. package/dist/components/agent-tools/task-list/task-list.class.d.ts +2 -0
  50. package/dist/components/agent-tools/task-list/task-list.class.d.ts.map +1 -1
  51. package/dist/components/agent-tools/task-list/task-list.class.js +2 -0
  52. package/dist/components/agent-tools/task-list/task-list.class.js.map +1 -1
  53. package/dist/components/agent-tools/task-list/task-list.styles.d.ts.map +1 -1
  54. package/dist/components/agent-tools/task-list/task-list.styles.js +1 -0
  55. package/dist/components/agent-tools/task-list/task-list.styles.js.map +1 -1
  56. package/dist/components/agent-tools/test-results/test-results.class.d.ts.map +1 -1
  57. package/dist/components/agent-tools/test-results/test-results.class.js +15 -10
  58. package/dist/components/agent-tools/test-results/test-results.class.js.map +1 -1
  59. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts +3 -0
  60. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts.map +1 -1
  61. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +5 -0
  62. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js.map +1 -1
  63. package/dist/components/charts/chart/box-plot.class.d.ts.map +1 -1
  64. package/dist/components/charts/chart/box-plot.class.js +31 -0
  65. package/dist/components/charts/chart/box-plot.class.js.map +1 -1
  66. package/dist/components/charts/chart/chart-loader.d.ts +2 -2
  67. package/dist/components/charts/chart/chart-loader.d.ts.map +1 -1
  68. package/dist/components/charts/chart/chart-loader.js +7 -1
  69. package/dist/components/charts/chart/chart-loader.js.map +1 -1
  70. package/dist/components/charts/chart/chart.class.d.ts +5 -1
  71. package/dist/components/charts/chart/chart.class.d.ts.map +1 -1
  72. package/dist/components/charts/chart/chart.class.js +17 -2
  73. package/dist/components/charts/chart/chart.class.js.map +1 -1
  74. package/dist/components/charts/chart/chart.styles.d.ts.map +1 -1
  75. package/dist/components/charts/chart/chart.styles.js +5 -1
  76. package/dist/components/charts/chart/chart.styles.js.map +1 -1
  77. package/dist/components/charts/chart/lite-chart.class.d.ts.map +1 -1
  78. package/dist/components/charts/chart/lite-chart.class.js +2 -0
  79. package/dist/components/charts/chart/lite-chart.class.js.map +1 -1
  80. package/dist/components/conversation/code-block/code-block-core.class.d.ts +7 -8
  81. package/dist/components/conversation/code-block/code-block-core.class.d.ts.map +1 -1
  82. package/dist/components/conversation/code-block/code-block-core.class.js +75 -227
  83. package/dist/components/conversation/code-block/code-block-core.class.js.map +1 -1
  84. package/dist/components/conversation/code-block/code-block-shared.d.ts +173 -7
  85. package/dist/components/conversation/code-block/code-block-shared.d.ts.map +1 -1
  86. package/dist/components/conversation/code-block/code-block-shared.js +312 -6
  87. package/dist/components/conversation/code-block/code-block-shared.js.map +1 -1
  88. package/dist/components/conversation/code-block/code-block.class.d.ts +6 -7
  89. package/dist/components/conversation/code-block/code-block.class.d.ts.map +1 -1
  90. package/dist/components/conversation/code-block/code-block.class.js +70 -231
  91. package/dist/components/conversation/code-block/code-block.class.js.map +1 -1
  92. package/dist/components/conversation/markdown/markdown-core.class.d.ts +9 -22
  93. package/dist/components/conversation/markdown/markdown-core.class.d.ts.map +1 -1
  94. package/dist/components/conversation/markdown/markdown-core.class.js +87 -314
  95. package/dist/components/conversation/markdown/markdown-core.class.js.map +1 -1
  96. package/dist/components/conversation/markdown/markdown-shared.d.ts +213 -9
  97. package/dist/components/conversation/markdown/markdown-shared.d.ts.map +1 -1
  98. package/dist/components/conversation/markdown/markdown-shared.js +362 -8
  99. package/dist/components/conversation/markdown/markdown-shared.js.map +1 -1
  100. package/dist/components/conversation/markdown/markdown.class.d.ts +9 -22
  101. package/dist/components/conversation/markdown/markdown.class.d.ts.map +1 -1
  102. package/dist/components/conversation/markdown/markdown.class.js +81 -311
  103. package/dist/components/conversation/markdown/markdown.class.js.map +1 -1
  104. package/dist/components/conversation/message-feedback/message-feedback.class.d.ts.map +1 -1
  105. package/dist/components/conversation/message-feedback/message-feedback.class.js +4 -1
  106. package/dist/components/conversation/message-feedback/message-feedback.class.js.map +1 -1
  107. package/dist/components/conversation/prompt-input/prompt-input.styles.d.ts.map +1 -1
  108. package/dist/components/conversation/prompt-input/prompt-input.styles.js +9 -2
  109. package/dist/components/conversation/prompt-input/prompt-input.styles.js.map +1 -1
  110. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts.map +1 -1
  111. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +8 -1
  112. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js.map +1 -1
  113. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts.map +1 -1
  114. package/dist/components/conversation/voice-picker/voice-picker.class.js +5 -1
  115. package/dist/components/conversation/voice-picker/voice-picker.class.js.map +1 -1
  116. package/dist/components/data/document-library/document-library.class.d.ts.map +1 -1
  117. package/dist/components/data/document-library/document-library.class.js +4 -1
  118. package/dist/components/data/document-library/document-library.class.js.map +1 -1
  119. package/dist/components/data/env-list/env-list.styles.d.ts.map +1 -1
  120. package/dist/components/data/env-list/env-list.styles.js +5 -0
  121. package/dist/components/data/env-list/env-list.styles.js.map +1 -1
  122. package/dist/components/data/flow-canvas/flow-canvas.class.js +1 -1
  123. package/dist/components/data/flow-canvas/flow-canvas.class.js.map +1 -1
  124. package/dist/components/data/flow-minimap/flow-minimap.styles.d.ts.map +1 -1
  125. package/dist/components/data/flow-minimap/flow-minimap.styles.js +6 -0
  126. package/dist/components/data/flow-minimap/flow-minimap.styles.js.map +1 -1
  127. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts.map +1 -1
  128. package/dist/components/data/graph-query-builder/graph-query-builder.class.js +10 -1
  129. package/dist/components/data/graph-query-builder/graph-query-builder.class.js.map +1 -1
  130. package/dist/components/data/heatmap/heatmap.class.d.ts.map +1 -1
  131. package/dist/components/data/heatmap/heatmap.class.js +17 -2
  132. package/dist/components/data/heatmap/heatmap.class.js.map +1 -1
  133. package/dist/components/data/pagination/pagination.class.d.ts +2 -0
  134. package/dist/components/data/pagination/pagination.class.d.ts.map +1 -1
  135. package/dist/components/data/pagination/pagination.class.js +2 -0
  136. package/dist/components/data/pagination/pagination.class.js.map +1 -1
  137. package/dist/components/data/pagination/pagination.styles.d.ts.map +1 -1
  138. package/dist/components/data/pagination/pagination.styles.js +7 -2
  139. package/dist/components/data/pagination/pagination.styles.js.map +1 -1
  140. package/dist/components/data/table/table.class.d.ts +7 -2
  141. package/dist/components/data/table/table.class.d.ts.map +1 -1
  142. package/dist/components/data/table/table.class.js +40 -6
  143. package/dist/components/data/table/table.class.js.map +1 -1
  144. package/dist/components/data/tree/tree-node.class.d.ts +2 -0
  145. package/dist/components/data/tree/tree-node.class.d.ts.map +1 -1
  146. package/dist/components/data/tree/tree-node.class.js +2 -0
  147. package/dist/components/data/tree/tree-node.class.js.map +1 -1
  148. package/dist/components/forms/color-picker/color-picker.class.d.ts.map +1 -1
  149. package/dist/components/forms/color-picker/color-picker.class.js +9 -0
  150. package/dist/components/forms/color-picker/color-picker.class.js.map +1 -1
  151. package/dist/components/forms/date-picker/date-picker.class.d.ts +2 -0
  152. package/dist/components/forms/date-picker/date-picker.class.d.ts.map +1 -1
  153. package/dist/components/forms/date-picker/date-picker.class.js +2 -0
  154. package/dist/components/forms/date-picker/date-picker.class.js.map +1 -1
  155. package/dist/components/forms/date-picker/date-picker.styles.d.ts.map +1 -1
  156. package/dist/components/forms/date-picker/date-picker.styles.js +8 -3
  157. package/dist/components/forms/date-picker/date-picker.styles.js.map +1 -1
  158. package/dist/components/forms/emoji-picker/emoji-data-loader.js +28 -2
  159. package/dist/components/forms/emoji-picker/emoji-data-loader.js.map +1 -1
  160. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +4 -0
  161. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts.map +1 -1
  162. package/dist/components/forms/emoji-picker/emoji-picker.class.js +8 -2
  163. package/dist/components/forms/emoji-picker/emoji-picker.class.js.map +1 -1
  164. package/dist/components/forms/emoji-picker/emoji-types.d.ts +9 -0
  165. package/dist/components/forms/emoji-picker/emoji-types.d.ts.map +1 -1
  166. package/dist/components/forms/input/input.styles.d.ts.map +1 -1
  167. package/dist/components/forms/input/input.styles.js +17 -4
  168. package/dist/components/forms/input/input.styles.js.map +1 -1
  169. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +1 -1
  170. package/dist/components/forms/locale-picker/locale-picker.class.d.ts.map +1 -1
  171. package/dist/components/forms/locale-picker/locale-picker.class.js +3 -1
  172. package/dist/components/forms/locale-picker/locale-picker.class.js.map +1 -1
  173. package/dist/components/forms/radio/radio.class.d.ts +5 -0
  174. package/dist/components/forms/radio/radio.class.d.ts.map +1 -1
  175. package/dist/components/forms/radio/radio.class.js +5 -0
  176. package/dist/components/forms/radio/radio.class.js.map +1 -1
  177. package/dist/components/forms/radio/radio.styles.d.ts.map +1 -1
  178. package/dist/components/forms/radio/radio.styles.js +5 -2
  179. package/dist/components/forms/radio/radio.styles.js.map +1 -1
  180. package/dist/components/forms/select/select.class.d.ts +9 -1
  181. package/dist/components/forms/select/select.class.d.ts.map +1 -1
  182. package/dist/components/forms/select/select.class.js +9 -1
  183. package/dist/components/forms/select/select.class.js.map +1 -1
  184. package/dist/components/forms/slider/slider.class.d.ts +8 -0
  185. package/dist/components/forms/slider/slider.class.d.ts.map +1 -1
  186. package/dist/components/forms/slider/slider.class.js +14 -0
  187. package/dist/components/forms/slider/slider.class.js.map +1 -1
  188. package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts +12 -0
  189. package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts.map +1 -1
  190. package/dist/components/forms/swatch-picker/swatch-picker.class.js +22 -0
  191. package/dist/components/forms/swatch-picker/swatch-picker.class.js.map +1 -1
  192. package/dist/components/forms/time-range/time-range.class.d.ts +9 -0
  193. package/dist/components/forms/time-range/time-range.class.d.ts.map +1 -1
  194. package/dist/components/forms/time-range/time-range.class.js +15 -0
  195. package/dist/components/forms/time-range/time-range.class.js.map +1 -1
  196. package/dist/components/layout/button-group/button-group.styles.d.ts.map +1 -1
  197. package/dist/components/layout/button-group/button-group.styles.js +10 -1
  198. package/dist/components/layout/button-group/button-group.styles.js.map +1 -1
  199. package/dist/components/layout/drilldown-panel/drilldown-panel.class.d.ts.map +1 -1
  200. package/dist/components/layout/drilldown-panel/drilldown-panel.class.js +5 -1
  201. package/dist/components/layout/drilldown-panel/drilldown-panel.class.js.map +1 -1
  202. package/dist/components/layout/filter-bar/filter-bar.class.d.ts.map +1 -1
  203. package/dist/components/layout/filter-bar/filter-bar.class.js +4 -1
  204. package/dist/components/layout/filter-bar/filter-bar.class.js.map +1 -1
  205. package/dist/components/layout/split/split.class.d.ts +8 -0
  206. package/dist/components/layout/split/split.class.d.ts.map +1 -1
  207. package/dist/components/layout/split/split.class.js +8 -0
  208. package/dist/components/layout/split/split.class.js.map +1 -1
  209. package/dist/components/layout/split/split.styles.d.ts.map +1 -1
  210. package/dist/components/layout/split/split.styles.js +26 -10
  211. package/dist/components/layout/split/split.styles.js.map +1 -1
  212. package/dist/components/layout/stepper/stepper.class.d.ts +4 -0
  213. package/dist/components/layout/stepper/stepper.class.d.ts.map +1 -1
  214. package/dist/components/layout/stepper/stepper.class.js +7 -0
  215. package/dist/components/layout/stepper/stepper.class.js.map +1 -1
  216. package/dist/components/layout/stepper/stepper.styles.d.ts.map +1 -1
  217. package/dist/components/layout/stepper/stepper.styles.js +13 -0
  218. package/dist/components/layout/stepper/stepper.styles.js.map +1 -1
  219. package/dist/components/layout/widget/widget.class.d.ts +4 -0
  220. package/dist/components/layout/widget/widget.class.d.ts.map +1 -1
  221. package/dist/components/layout/widget/widget.class.js +4 -0
  222. package/dist/components/layout/widget/widget.class.js.map +1 -1
  223. package/dist/components/layout/widget/widget.styles.d.ts.map +1 -1
  224. package/dist/components/layout/widget/widget.styles.js +9 -3
  225. package/dist/components/layout/widget/widget.styles.js.map +1 -1
  226. package/dist/components/media/flag/flag.class.d.ts +1 -1
  227. package/dist/components/media/flag/flag.class.d.ts.map +1 -1
  228. package/dist/components/media/flag/flag.class.js +2 -1
  229. package/dist/components/media/flag/flag.class.js.map +1 -1
  230. package/dist/components/media/image-viewer/image-viewer.styles.d.ts.map +1 -1
  231. package/dist/components/media/image-viewer/image-viewer.styles.js +1 -0
  232. package/dist/components/media/image-viewer/image-viewer.styles.js.map +1 -1
  233. package/dist/components/overlays/chip/chip-group.class.d.ts +4 -0
  234. package/dist/components/overlays/chip/chip-group.class.d.ts.map +1 -1
  235. package/dist/components/overlays/chip/chip-group.class.js +4 -0
  236. package/dist/components/overlays/chip/chip-group.class.js.map +1 -1
  237. package/dist/components/overlays/chip/chip-group.styles.d.ts.map +1 -1
  238. package/dist/components/overlays/chip/chip-group.styles.js +7 -2
  239. package/dist/components/overlays/chip/chip-group.styles.js.map +1 -1
  240. package/dist/components/overlays/rating/rating.styles.d.ts.map +1 -1
  241. package/dist/components/overlays/rating/rating.styles.js +11 -4
  242. package/dist/components/overlays/rating/rating.styles.js.map +1 -1
  243. package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts.map +1 -1
  244. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +4 -1
  245. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js.map +1 -1
  246. package/dist/components/retrieval/graph/graph-canvas.d.ts +25 -0
  247. package/dist/components/retrieval/graph/graph-canvas.d.ts.map +1 -1
  248. package/dist/components/retrieval/graph/graph-canvas.js +30 -1
  249. package/dist/components/retrieval/graph/graph-canvas.js.map +1 -1
  250. package/dist/components/retrieval/graph/graph.class.d.ts +2 -1
  251. package/dist/components/retrieval/graph/graph.class.d.ts.map +1 -1
  252. package/dist/components/retrieval/graph/graph.class.js +12 -1
  253. package/dist/components/retrieval/graph/graph.class.js.map +1 -1
  254. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts +5 -0
  255. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts.map +1 -1
  256. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js +5 -0
  257. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js.map +1 -1
  258. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.d.ts.map +1 -1
  259. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js +7 -3
  260. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js.map +1 -1
  261. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts.map +1 -1
  262. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +10 -1
  263. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js.map +1 -1
  264. package/dist/components/utility/diff-view/diff-view.styles.d.ts.map +1 -1
  265. package/dist/components/utility/diff-view/diff-view.styles.js +11 -0
  266. package/dist/components/utility/diff-view/diff-view.styles.js.map +1 -1
  267. package/dist/components/viewers/archive-viewer/archive-viewer-register.js +16 -3
  268. package/dist/components/viewers/archive-viewer/archive-viewer-register.js.map +1 -1
  269. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts.map +1 -1
  270. package/dist/components/viewers/document-viewer/document-viewer.class.js +1 -0
  271. package/dist/components/viewers/document-viewer/document-viewer.class.js.map +1 -1
  272. package/dist/components/viewers/docx-viewer/docx-viewer.js +6 -1
  273. package/dist/components/viewers/docx-viewer/docx-viewer.js.map +1 -1
  274. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +10 -4
  275. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts.map +1 -1
  276. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +31 -6
  277. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js.map +1 -1
  278. package/dist/components/viewers/html-viewer/html-viewer.js +7 -0
  279. package/dist/components/viewers/html-viewer/html-viewer.js.map +1 -1
  280. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.d.ts +3 -0
  281. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.d.ts.map +1 -1
  282. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +7 -1
  283. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js.map +1 -1
  284. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts +4 -0
  285. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts.map +1 -1
  286. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +8 -4
  287. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js.map +1 -1
  288. package/dist/components/viewers/pptx-viewer/pptx-viewer.js +11 -1
  289. package/dist/components/viewers/pptx-viewer/pptx-viewer.js.map +1 -1
  290. package/dist/components/viewers/svg-viewer/svg-viewer.class.d.ts +29 -17
  291. package/dist/components/viewers/svg-viewer/svg-viewer.class.d.ts.map +1 -1
  292. package/dist/components/viewers/svg-viewer/svg-viewer.class.js +27 -22
  293. package/dist/components/viewers/svg-viewer/svg-viewer.class.js.map +1 -1
  294. package/dist/components/viewers/svg-viewer/svg-viewer.d.ts.map +1 -1
  295. package/dist/components/viewers/svg-viewer/svg-viewer.js +7 -6
  296. package/dist/components/viewers/svg-viewer/svg-viewer.js.map +1 -1
  297. package/dist/internal/form-associated.d.ts +21 -0
  298. package/dist/internal/form-associated.d.ts.map +1 -1
  299. package/dist/internal/form-associated.js +25 -8
  300. package/dist/internal/form-associated.js.map +1 -1
  301. package/dist/internal/localization.d.ts +1 -1
  302. package/dist/internal/localization.d.ts.map +1 -1
  303. package/dist/internal/localization.js +17 -0
  304. package/dist/internal/localization.js.map +1 -1
  305. package/llms/components/lr-agent-run.md +3 -2
  306. package/llms/components/lr-approval-queue.md +6 -1
  307. package/llms/components/lr-archive-viewer.md +6 -2
  308. package/llms/components/lr-artifact-panel.md +7 -3
  309. package/llms/components/lr-attachment-chip.md +8 -6
  310. package/llms/components/lr-avatar.md +6 -4
  311. package/llms/components/lr-bar-chart.md +4 -2
  312. package/llms/components/lr-bubble-chart.md +4 -2
  313. package/llms/components/lr-button-group.md +10 -0
  314. package/llms/components/lr-button.md +11 -6
  315. package/llms/components/lr-chart.md +8 -2
  316. package/llms/components/lr-chip-group.md +9 -2
  317. package/llms/components/lr-chip.md +8 -1
  318. package/llms/components/lr-commit-card.md +11 -3
  319. package/llms/components/lr-confirm-bar.md +9 -1
  320. package/llms/components/lr-date-input.md +4 -0
  321. package/llms/components/lr-date-picker.md +5 -1
  322. package/llms/components/lr-document-viewer.md +1 -1
  323. package/llms/components/lr-doughnut-chart.md +4 -2
  324. package/llms/components/lr-emoji-picker.md +16 -4
  325. package/llms/components/lr-export-button.md +2 -1
  326. package/llms/components/lr-flag.md +9 -5
  327. package/llms/components/lr-graph-query-builder.md +6 -5
  328. package/llms/components/lr-heatmap.md +12 -7
  329. package/llms/components/lr-histogram.md +3 -2
  330. package/llms/components/lr-html-viewer.md +4 -1
  331. package/llms/components/lr-json-viewer.md +2 -1
  332. package/llms/components/lr-knowledge-base-admin.md +10 -1
  333. package/llms/components/lr-known-date.md +8 -4
  334. package/llms/components/lr-line-chart.md +4 -2
  335. package/llms/components/lr-locale-picker.md +1 -1
  336. package/llms/components/lr-model-select.md +3 -0
  337. package/llms/components/lr-notebook-viewer.md +4 -2
  338. package/llms/components/lr-pagination.md +6 -3
  339. package/llms/components/lr-pdf-viewer.md +5 -2
  340. package/llms/components/lr-pie-chart.md +4 -2
  341. package/llms/components/lr-polar-area-chart.md +4 -2
  342. package/llms/components/lr-pptx-viewer.md +3 -1
  343. package/llms/components/lr-push-to-talk.md +4 -0
  344. package/llms/components/lr-radar-chart.md +4 -2
  345. package/llms/components/lr-radio.md +7 -1
  346. package/llms/components/lr-result-card.md +9 -3
  347. package/llms/components/lr-result-field.md +8 -2
  348. package/llms/components/lr-retrieval-results.md +12 -7
  349. package/llms/components/lr-scatter-chart.md +4 -2
  350. package/llms/components/lr-schema-viewer.md +13 -1
  351. package/llms/components/lr-sequence-strip.md +21 -16
  352. package/llms/components/lr-slider.md +4 -0
  353. package/llms/components/lr-split.md +9 -1
  354. package/llms/components/lr-stepper.md +9 -3
  355. package/llms/components/lr-svg-viewer.md +24 -8
  356. package/llms/components/lr-table.md +21 -3
  357. package/llms/components/lr-task-list.md +7 -3
  358. package/llms/components/lr-terminal.md +10 -4
  359. package/llms/components/lr-time-range.md +6 -0
  360. package/llms/components/lr-tool-call-chip.md +4 -3
  361. package/llms/components/lr-tool-param-form.md +7 -2
  362. package/llms/components/lr-tool-result-dialog.md +2 -1
  363. package/llms/components/lr-tree-node.md +1 -1
  364. package/llms/components/lr-widget.md +6 -1
  365. package/llms/shared.md +1 -1
  366. package/llms-full.txt +357 -117
  367. package/package.json +7 -4
  368. package/vscode-css-data.json +141 -1
  369. package/vscode-html-data.json +36 -36
  370. package/web-types.json +120 -35
package/llms-full.txt CHANGED
@@ -381,7 +381,7 @@ The side-effect-free `@aceshooting/lyra-ui/localization.js` entry exports
381
381
  `LYRA_DEFAULT_STRINGS`, and the types `LyraLocaleStrings` / `LyraMessageKey`. The package root
382
382
  continues to re-export the same surface for compatibility, but it also registers the non-peer-gated
383
383
  component graph; use the dedicated entry when the application only needs locale setup.
384
- **`LYRA_DEFAULT_STRINGS` is the authoritative key list** (1005 keys, matching the
384
+ **`LYRA_DEFAULT_STRINGS` is the authoritative key list** (1170 keys, matching the
385
385
  `LyraMessageKey` union) — read it to find the key to override rather than guessing one. Lookup
386
386
  falls back exact locale → base language → English. Date, number, byte, relative-time and calendar
387
387
  output goes through `Intl`.
@@ -1291,6 +1291,10 @@ and `dateTimeFormat(locale, options)`.
1291
1291
  - `--lr-date-picker-month-gap` — Gap between visible months. Default: `var(--lr-space-l)`.
1292
1292
  - `--lr-date-picker-header-gap` — Month-header child gap. Default: `var(--lr-space-s)`.
1293
1293
  - `--lr-date-picker-radius` — Calendar and control corner radius. Default: `var(--lr-radius)`.
1294
+ - `--lr-date-picker-nav-hover-bg` — Hover background of the previous/next month-navigation buttons.
1295
+ Default: `var(--lr-color-brand-quiet)`. An inline `var()` fallback rather than a `:host`
1296
+ declaration, and the rule wraps its selector in `:where()` so a consumer's own
1297
+ `::part(previous):hover` still wins without `!important`.
1294
1298
  - `--lr-date-input-placeholder-color` — Placeholder text color. Default: `var(--lr-color-text-quiet)`.
1295
1299
  - `--lr-date-input-gap` — Gap between input-row children. Default: `var(--lr-space-xs)`.
1296
1300
  - `--lr-date-input-radius` — Input-row corner radius. Default: `var(--lr-radius)`.
@@ -1500,18 +1504,23 @@ loud fill token), `--lr-button-outlined-border` (default `--lr-color-border-stro
1500
1504
  `--lr-color-border`) — the `appearance="quiet"` foreground/border pair, also variant-independent,
1501
1505
  `--lr-button-hover-brightness` (default `1.08`, the `:hover` filter intensity),
1502
1506
  `--lr-button-active-scale` (default `0.9875`, the `:active` press-scale, disabled under
1503
- `prefers-reduced-motion`), `--lr-button-spinner-duration` (default `1s`, the `loading` spinner's
1504
- rotation period; forced to `0.001ms` under `prefers-reduced-motion`),
1507
+ `prefers-reduced-motion`), `--lr-button-spinner-duration` (default `var(--lr-transition-ambient)`, i.e.
1508
+ `1.8s ease-in-out`, the `loading` spinner's rotation period; that token itself collapses to
1509
+ `0.001ms linear` under `prefers-reduced-motion`, so the spinner effectively stops),
1505
1510
  `--lr-button-outlined-fill` (default `transparent`, the `appearance="outlined"` background — also
1506
1511
  variant-independent; set it to tint an outlined button with, say, a faint surface wash behind the
1507
1512
  outline, without a `::part(base)` rule. Note that the `:hover` `filter: brightness()` applies to
1508
1513
  whatever fill is set, so a tinted outlined button visibly brightens on hover where a transparent
1509
1514
  one did not),
1510
1515
  and the per-`size`
1511
- `min-block-size` floors `--lr-button-size-2xs` (`1.25rem`), `--lr-button-size-xs` (`1.5rem`),
1512
- `--lr-button-size-s` (`1.75rem`), `--lr-button-size-m` (`2rem`), `--lr-button-size-l` (`2.5rem`),
1513
- `--lr-button-size-xl` (`3rem`) — each read only by its own `size` tier, and all ignored by
1514
- `appearance="link"`. `--lr-button-gap` (default `--lr-space-2xs`, the gap between the icon/label
1516
+ `min-block-size` floors `--lr-button-size-2xs` (`var(--lr-size-1-25rem)`, 1.25rem),
1517
+ `--lr-button-size-xs` (`var(--lr-size-1-5rem)`, 1.5rem), `--lr-button-size-s`
1518
+ (`var(--lr-size-1-875rem)`, 1.875rem), `--lr-button-size-m` (`var(--lr-size-2-5rem)`, 2.5rem),
1519
+ `--lr-button-size-l` (`var(--lr-size-3rem)`, 3rem), `--lr-button-size-xl`
1520
+ (`var(--lr-size-3-5rem)`, 3.5rem) — each read only by its own `size` tier, and all ignored by
1521
+ `appearance="link"`. The `s`/`m`/`l`/`xl` floors are deliberately at or above the
1522
+ `--lr-icon-button-size` (2.5rem) hit-area minimum from `m` upward; they resolve through shared
1523
+ `--lr-size-*` tokens rather than literal rem values, so a retheme moves them together. `--lr-button-gap` (default `--lr-space-2xs`, the gap between the icon/label
1515
1524
  and any slotted content) and `--lr-button-radius` (default `--lr-radius`, the corner radius) are
1516
1525
  both retunable without a `::part(base)` rule but — unlike the four size knobs below — do not vary
1517
1526
  by `size` tier; `appearance="link"` ignores `--lr-button-radius` (it renders with zero radius).
@@ -2098,6 +2107,12 @@ consumer-facing `disabled` property/attribute itself.
2098
2107
  PageDown key press, `detail: { start, end }`), `lr-change` (fired on pointer release /
2099
2108
  key-up-commit, or when a preset button is clicked, `detail: { start, end }`)
2100
2109
 
2110
+ **Methods:** `focus(options?)`, `blur()`, and `click()` forward to `[part="handle-start"]`. A
2111
+ two-handle control has no single canonical target, so the start handle is the one they address —
2112
+ call `.focus()` on `::part(handle-end)` yourself if you need the other. Without these overrides the
2113
+ host's own `focus()`/`blur()`/`click()` are no-ops, because the real control lives in the shadow
2114
+ root.
2115
+
2101
2116
  **Slots:** none.
2102
2117
 
2103
2118
  **CSS parts:** `base`, `track`, `range`, `handle-start`, `handle-end`, `presets`, `preset-button`
@@ -2514,6 +2529,10 @@ pointerup for a drag, or on keyup for a keyboard step, so a single Arrow/Home/En
2514
2529
  fires both `lr-input` and `lr-change`, mirroring native `<input type=range>`'s own `change`-on-every-
2515
2530
  committed-step behavior)
2516
2531
 
2532
+ **Methods:** `focus(options?)`, `blur()`, and `click()` forward to the internal `[part="thumb"]`
2533
+ control — without them the host's own `focus()`/`blur()`/`click()` would be no-ops, because the
2534
+ `role="slider"` element they need to reach lives in the shadow root.
2535
+
2517
2536
  **Slots:** none.
2518
2537
 
2519
2538
  **CSS parts:** `base` (row wrapping the track and optional value readout), `track`, `fill` (filled
@@ -2586,6 +2605,12 @@ element (or on `lr-radio` in your own stylesheet) moves the label. Exactly the s
2586
2605
  purpose, and sideways-inheritance caveat as `--lr-checkbox-label-indent` — see `lr-checkbox` above
2587
2606
  for the formula to align a sibling hint element.
2588
2607
 
2608
+ `--lr-radio-checked-border-color` (default `var(--lr-color-brand)`) and `--lr-radio-checked-dot-color`
2609
+ (default `var(--lr-color-brand)`) recolor `[part='circle']`'s border and `[part='dot']`'s background
2610
+ while `checked` — a component-scoped indirection (the same pattern `lr-checkbox`'s own
2611
+ `--lr-checkbox-checked-bg`/`-border` pair uses) so a consumer can retint just this control's checked
2612
+ ring/dot without hijacking the shared `--lr-color-brand` token everything else reads.
2613
+
2589
2614
  ```html
2590
2615
  <lr-radio name="format" value="json">JSON</lr-radio>
2591
2616
  ```
@@ -2810,9 +2835,14 @@ Ships the same opt-in `label`/`hint`/`errorText` form-control chrome as `lr-sele
2810
2835
  `error` CSS parts) — left unset, none of that chrome renders.
2811
2836
 
2812
2837
  **Properties:** the shared form properties `name`, `value`, `disabled`, and `required`, plus
2813
- `groups: EmojiPickerGroup[] = []` (attribute: false) — `EmojiPickerGroup { key, label, emojis:
2814
- EmojiPickerItem[] }`, `EmojiPickerItem { emoji, name, shortcodes? }`; the search field matches `name`
2815
- and every `shortcodes` entry, case-insensitively. Empty (the default, before the auto-loader
2838
+ `groups: EmojiPickerGroup[] = []` (attribute: false) — `EmojiPickerGroup { key, label, labelKey?,
2839
+ emojis: EmojiPickerItem[] }`, `EmojiPickerItem { emoji, name, shortcodes? }`; the search field matches
2840
+ `name` and every `shortcodes` entry, case-insensitively. `labelKey` is an optional `LyraMessageKey`
2841
+ naming `label`'s localized form — set only by the built-in `emoji-picker-element-data` adapter, whose
2842
+ headings come from emojibase's fixed group ids, so an auto-loaded emoji set's group headings follow
2843
+ `registerLyraLocale()`/`.strings` instead of staying English. A hand-authored group leaves it unset
2844
+ and its `label` renders verbatim, because a consumer-supplied heading is caller-owned content this
2845
+ library never translates. Empty (the default, before the auto-loader
2816
2846
  resolves) renders just the search input and the empty state. `accessibleLabel` (`aria-label`)
2817
2847
  forwards a host-supplied accessible name to the internal `role="listbox"` grid; empty falls back to
2818
2848
  the localized default grid label. `label: string = ''` — visible label rendered above the
@@ -2884,7 +2914,14 @@ windowed row are additionally capped at 20 regardless of available width.
2884
2914
  **Optional peer dependency:** install `emoji-picker-element-data` with
2885
2915
  `pnpm add emoji-picker-element-data` for the built-in auto-loaded default emoji set — omit it and
2886
2916
  supply `groups` directly instead. The loader never throws; a missing or failed peer logs one
2887
- `console.warn` and simply leaves `groups` empty.
2917
+ `console.warn` and simply leaves `groups` empty. The adapter buckets the peer's flat entry list by
2918
+ its numeric `group` id and tags each bucket with both the English `label` and the matching
2919
+ `labelKey` — `emojiPickerGroupSmileysEmotion`, `emojiPickerGroupPeopleBody`,
2920
+ `emojiPickerGroupComponent`, `emojiPickerGroupAnimalsNature`, `emojiPickerGroupFoodDrink`,
2921
+ `emojiPickerGroupTravelPlaces`, `emojiPickerGroupActivities`, `emojiPickerGroupObjects`,
2922
+ `emojiPickerGroupSymbols`, `emojiPickerGroupFlags` (group ids 0–9, in that order). Override any of
2923
+ them through `registerLyraLocale()` or a `.strings` object to translate the headings. An unknown
2924
+ future group id gets no `labelKey` and falls back to a generated `Group {id}` label.
2888
2925
 
2889
2926
  **Additional API surface:**
2890
2927
 
@@ -2989,7 +3026,7 @@ peer warning duplication; `lr-flag` itself already logs one) when the optional
2989
3026
  ```html
2990
3027
  <lr-locale-picker label="Language"></lr-locale-picker>
2991
3028
  <script type="module">
2992
- import { registerLyraLocale } from '@aceshooting/lyra-ui';
3029
+ import { registerLyraLocale } from '@aceshooting/lyra-ui/localization.js';
2993
3030
  registerLyraLocale('fr', { close: 'Fermer' });
2994
3031
  document
2995
3032
  .querySelector('lr-locale-picker')
@@ -3209,7 +3246,8 @@ own "consumer computes/renders" contract rather than assuming addition.
3209
3246
  via the retheme-able `--lr-table-heat-tint-lo`/`-hi` custom properties, matching `lr-heatmap`'s
3210
3247
  own ramp-token convention; `cellStyle` is applied directly to the generated `<td>` via `styleMap` — e.g. a computed heat-tint
3211
3248
  background a `cell()`-returned inner element can't paint into the cell's own padding — omit it for
3212
- no per-cell style override (the default, unchanged output); `editable` enables inline editing —
3249
+ no per-cell style override (the default, unchanged output);
3250
+ `editable` enables inline editing —
3213
3251
  `true` opens a native editor on that cell's double-click (one cell at a time), `'always'` instead
3214
3252
  renders a persistent editor in every body cell of the column from first paint, for a
3215
3253
  settings/rate-style column meant to be typed straight into — while `editValue` supplies the editor
@@ -3221,7 +3259,16 @@ own "consumer computes/renders" contract rather than assuming addition.
3221
3259
  the live width in CSS pixels. Drag it, or use logical ArrowLeft/ArrowRight for 10px steps (mirrored
3222
3260
  under RTL), Shift+Arrow for 50px steps, Home for the minimum, and End for an explicit pixel
3223
3261
  `maxWidth`; explicit pixel `minWidth`/`maxWidth` values bound both input paths. The separator
3224
- exposes its current/minimum/bounded-maximum pixel width through ARIA value attributes.
3262
+ exposes its current/minimum/bounded-maximum pixel width through ARIA value attributes. Only the
3263
+ *commit* is vetoable — see `lr-column-resize` under Events.
3264
+ - **`cellStyle` beats `heatValue`, always.** `styleMap` writes an inline `style=` attribute, and an
3265
+ inline style outranks any stylesheet rule in the cascade regardless of specificity, while the heat
3266
+ tint is painted by a shadow-stylesheet rule. So a `cellStyle` returning
3267
+ `background`/`backgroundColor` on a column that also defines `heatValue` silently and completely
3268
+ erases that column's tint — no warning, and the cell still contributes to the shared domain, so the
3269
+ *other* tinted columns' scale shifts around a cell that shows no tint at all. Define both on one
3270
+ column only when that override is the intent; to tint *and* style, return only non-background
3271
+ declarations (`color`, `fontWeight`, `textAlign`, …) from `cellStyle`.
3225
3272
  - `columns[].editable: boolean | 'always'` — a widening of the original `boolean`, non-breaking.
3226
3273
  `true` is unchanged: double-click a cell to open its editor, one at a time, Enter commits and
3227
3274
  closes, Escape cancels and closes, blur-after-change commits. `'always'` renders an editor in
@@ -3382,7 +3429,15 @@ own "consumer computes/renders" contract rather than assuming addition.
3382
3429
  `lr-selection-change` (`detail: { keys }`) when selection is enabled, `lr-filter-change`
3383
3430
  (`detail: { text }`), and `lr-page-change` (`detail: { page }`) from the controlled
3384
3431
  filter/pagination surfaces, and `lr-cell-edit` (`detail: { row, key, value }`) for editable
3385
- columns, and `lr-column-resize` (`detail: { key, width }`) on every pointer or keyboard resize step.
3432
+ columns, and `lr-column-resize` (`detail: { key, width }`, `width` in CSS pixels) on every pointer or
3433
+ keyboard resize step. **Only the commit is cancelable.** A pointer drag fires the event once per
3434
+ pixel of movement as non-cancelable live feedback, then exactly once more — `cancelable: true` — for
3435
+ the width committed at drag-end (and only when that width actually differs from the pre-drag one).
3436
+ A keyboard step (Arrow/Shift+Arrow/Home/End) is already one discrete action, so it fires that single
3437
+ cancelable commit directly, with no live-feedback stream. Calling `preventDefault()` on a cancelable
3438
+ emission reverts the column to its pre-gesture width (or removes the override entirely if the column
3439
+ had never been resized); calling it on a mid-drag step does nothing, by design — a veto is a decision
3440
+ about the final width, not about every pixel the pointer passes through.
3386
3441
  The internal filter/cell-editor native inputs' `focus` and `blur` are also re-dispatched from the
3387
3442
  host as bubbling, composed events (the native ones are neither).
3388
3443
 
@@ -3583,8 +3638,11 @@ The internal page input's `focus` and `blur` are also bridged as bubbling, compo
3583
3638
  `--lr-pagination-font-size` (both default from `size`), `--lr-pagination-control-padding` (default
3584
3639
  `var(--lr-space-xs)`) — inner padding of the previous/next buttons and the page input, deliberately
3585
3640
  uniform across every `size` tier because the control's outer footprint is already fixed by
3586
- `--lr-pagination-control-size`, so this only adjusts the icon/digit inset — plus shared color,
3587
- spacing, border, radius, disabled-opacity, and focus-ring tokens.
3641
+ `--lr-pagination-control-size`, so this only adjusts the icon/digit inset —
3642
+ `--lr-pagination-invalid-border` (default `var(--lr-color-danger)`) border color of
3643
+ `[part="page-input"]` while the typed page is out of range (`aria-invalid="true"`); a state hook
3644
+ declared as an inline `var()` fallback, since `::part(page-input)[aria-invalid='true']` is invalid
3645
+ CSS — plus shared color, spacing, border, radius, disabled-opacity, and focus-ring tokens.
3588
3646
 
3589
3647
  **Optional peer deps:** none.
3590
3648
 
@@ -3940,13 +3998,18 @@ bar between them, while `legendStops` is supplied), `legend-stop` (one per `lege
3940
3998
  closes the legend row, present in both the gradient and the `legendStops` branch),
3941
3999
  `legend-annotation` (one per labeled `annotations` entry)
3942
4000
 
3943
- **Themeable custom properties:** `--lr-heatmap-scale-lo` (default `#cde2fb`),
3944
- `--lr-heatmap-scale-hi` (default `#0969da`) — the sequential color-ramp endpoints (matrix mode) or
3945
- quartile-bucket ramp endpoints (calendar mode), resolved via `getComputedStyle` each draw (any valid
3946
- CSS color syntax — hex/rgb/hsl/oklch/named — works, resolved through a scratch canvas).
3947
- `--lr-heatmap-no-data-fill` (default `rgba(128,128,128,0.25)` the no-data cell fill, same
3948
- resolve-via-`getComputedStyle` pattern), `--lr-heatmap-label-font` (default `10px sans-serif` the
3949
- canvas-drawn axis/month/weekday label font), `--lr-heatmap-focus-ring-color` (default
4001
+ **Themeable custom properties:** `--lr-heatmap-scale-lo` (default `var(--lr-color-brand-quiet)`),
4002
+ `--lr-heatmap-scale-hi` (default `var(--lr-color-brand)`) — the sequential color-ramp endpoints
4003
+ (matrix mode) or quartile-bucket ramp endpoints (calendar mode), resolved via `getComputedStyle` each
4004
+ draw (any valid CSS color syntax — hex/rgb/hsl/oklch/named — works, resolved through a scratch
4005
+ canvas). These defaults are declared on `:host`, so they follow the theme (including dark mode)
4006
+ rather than being pinned to a literal color; the hard-coded `#cde2fb`/`#0969da` pair in the source is
4007
+ only a last-resort constant for the case where the custom property resolves to an empty string (no
4008
+ stylesheet applied at all), not the shipped default.
4009
+ `--lr-heatmap-no-data-fill` (default `var(--lr-color-no-data)` — the no-data cell fill, same
4010
+ resolve-via-`getComputedStyle` pattern), `--lr-heatmap-label-font` (default
4011
+ `var(--lr-size-10px) var(--lr-font)` — the canvas-drawn axis/month/weekday label font),
4012
+ `--lr-heatmap-focus-ring-color` (default
3950
4013
  `var(--lr-focus-ring-color)` — the canvas-drawn ring stroked around the keyboard-focused cell;
3951
4014
  also reused by `[part="canvas"]`'s own `:focus-visible` outline so the two stay visually in sync),
3952
4015
  `--lr-heatmap-color-steps-gradient` (default
@@ -4030,20 +4093,24 @@ same color as `--lr-heatmap-focus-ring-color`).
4030
4093
 
4031
4094
  A compact, one-thin-cell-per-item strip visualizing a sequence of categorical states, with an
4032
4095
  optional secondary per-cell marker. Pure CSS/flex — no chart.js, no SVG, no canvas — sized/named
4033
- consistently with the sparkline/heatmap family, but a glanceable *aggregate* visualization
4034
- (`role="img"`, one summarizing `aria-label`) rather than a `role="list"` of separately-operable
4035
- items: there is no per-cell keyboard focus and no per-cell click event, matching `<lr-sparkline>`'s
4036
- accessibility model rather than `<lr-heatmap>`'s heavier canvas-plus-keyboard-roving one. Hovering a
4037
- cell (pointer only) shows `[part="tooltip"]` with that item's label. Setting `showLegend`
4038
- additionally renders a static `[part="legend"]` key below the strip, so the color-to-category
4039
- mapping is readable without hovering each cell.
4096
+ consistently with the sparkline/heatmap family, and read as a glanceable aggregate. `[part="base"]`
4097
+ is a labeled `role="list"` and each cell a named `role="listitem"` (`aria-label`, `aria-posinset`,
4098
+ `aria-setsize`), so the sequence is walkable item by item rather than collapsed into one summary
4099
+ string. Exactly one cell is tabbable at a time (roving `tabindex`); ArrowLeft/ArrowRight and
4100
+ Home/End move the stop direction-aware, so the arrows swap under RTL — and focusing a cell shows
4101
+ the same `[part="tooltip"]` detail that pointer hover does, wired through `aria-describedby`. Cells
4102
+ are inspectable, not actionable: there is no per-cell click/activation event, so unlike
4103
+ `<lr-heatmap>` there is nothing to fire on Enter/Space. Setting `showLegend` additionally renders a
4104
+ static `[part="legend"]` key below the strip, so the color-to-category mapping is readable without
4105
+ visiting each cell.
4040
4106
 
4041
4107
  **Properties:**
4042
4108
  - `items: SequenceStripItem[] = []` (attribute: false) — `{ id, category, marker?, label? }`;
4043
4109
  `marker` renders a small bottom marker on that cell independent of the category color (e.g. a
4044
- subagent-dispatched turn); `label` is per-item hover-tooltip text, falling back to the matching
4045
- category's own `label` (or its `key`) when unset — not read by the auto-generated `aria-label`,
4046
- which summarizes by category/count only
4110
+ subagent-dispatched turn); `label` is per-item hover/focus tooltip text *and* that cell's own
4111
+ `role="listitem"` accessible name, falling back to the matching category's own `label` (or its
4112
+ `key`) when unset — it is not read by `[part="base"]`'s auto-generated `aria-label`, which
4113
+ summarizes by category/count only
4047
4114
  - `categories: SequenceStripCategory[] = []` (attribute: false) — `{ key, color, label? }`; `color`
4048
4115
  is the cell background for every item whose `category` matches `key` (an item whose `category`
4049
4116
  matches no entry renders `transparent`); `label` is used in the auto-generated `aria-label` summary
@@ -4058,9 +4125,9 @@ mapping is readable without hovering each cell.
4058
4125
  order. The key describes the *scheme*, not the current data: a category with no matching item
4059
4126
  still gets a row, and an item whose `category` matches no entry adds none. Deliberately
4060
4127
  non-interactive — it toggles nothing and emits nothing (`lr-graph-legend` is the interactive,
4061
- filtering legend). Because it only repeats the category names `[part="base"]` already announces
4062
- through its `role="img"` summary, the legend is `aria-hidden` — visible on screen, announced
4063
- exactly once — and it wraps onto further rows in a narrow allocation rather than overflowing
4128
+ filtering legend). Because it only repeats the category names `[part="base"]`'s own `aria-label`
4129
+ summary already announces, the legend is `aria-hidden` — visible on screen, announced exactly
4130
+ once — and it wraps onto further rows in a narrow allocation rather than overflowing
4064
4131
  - `markerLabel?: string` (attribute `marker-label`) — names what an item's `marker` *means* (e.g.
4065
4132
  `"Subagent"`). Setting it does two things: with `showLegend` on it adds one trailing
4066
4133
  `[part="legend-item"]`, whose `[part="legend-marker-swatch"]` reproduces the cell's own marker
@@ -4072,9 +4139,10 @@ mapping is readable without hovering each cell.
4072
4139
 
4073
4140
  **Slots:** none.
4074
4141
 
4075
- **CSS parts:** `base` (the root strip, `role="img"`), `cell` (each item's cell, background-colored
4076
- by its category), `marker` (the small bottom marker on a cell whose item sets `marker: true`),
4077
- `tooltip` (the hover tooltip showing the hovered item's label, hidden until a cell is hovered),
4142
+ **CSS parts:** `base` (the root strip, `role="list"`), `cell` (each item's `role="listitem"` cell,
4143
+ background-colored by its category and carrying the roving `tabindex`), `marker` (the small bottom
4144
+ marker on a cell whose item sets `marker: true`), `tooltip` (the detail tooltip showing the active
4145
+ item's label, hidden until a cell is hovered or focused),
4078
4146
  `legend` (the static category key rendered below the strip when `showLegend` is set — `aria-hidden`,
4079
4147
  as it repeats the strip's own `aria-label`), `legend-item` (one swatch + label pair, one per
4080
4148
  `categories` entry, plus one trailing marker row when `markerLabel` is set), `legend-swatch` (the
@@ -4860,11 +4928,12 @@ relationship and node-type filters, hop limits, validation, and saved queries.
4860
4928
  `validationMessage`, `willValidate`, `checkValidity`, `reportValidity`, `formDisabledCallback`,
4861
4929
  `formResetCallback`, `formStateRestoreCallback`. **Events:** `lr-input`, `lr-validity-change`,
4862
4930
  `lr-query-run`, `lr-query-save`, `lr-query-load`, `lr-query-delete`. **Slots:** `actions`. **CSS
4863
- parts:** `base`, `path-fields`, `start-input`, `end-input`, `relationship-picker`,
4864
- `relationship-chips`, `node-type-picker`, `node-type-chips`, `direction`, `filter-group`,
4865
- `min-hops`, `max-hops`, `footer`, `run-button`, `save-button`, `save-row`, `save-name-input`,
4866
- `saved-queries`, `saved-queries-label`, `saved-list`, `saved-item`, `saved-load-button`,
4867
- `saved-delete-button`, `saved-empty`.
4931
+ parts:** `base`, `label`, `hint`, `error` (the three form-control chrome parts every
4932
+ form-associated control in this library exposes — see `lr-select`), `path-fields`, `start-input`,
4933
+ `end-input`, `relationship-picker`, `relationship-chips`, `node-type-picker`, `node-type-chips`,
4934
+ `direction`, `filter-group`, `min-hops`, `max-hops`, `footer`, `run-button`, `save-button`,
4935
+ `save-row`, `save-name-input`, `saved-queries`, `saved-queries-label`, `saved-list`, `saved-item`,
4936
+ `saved-load-button`, `saved-delete-button`, `saved-empty`.
4868
4937
 
4869
4938
  **Additional API surface:**
4870
4939
 
@@ -5042,6 +5111,14 @@ fired only when an enabled `orientationBreakpoint` actually changes `effectiveOr
5042
5111
 
5043
5112
  **Themeable custom properties:** `--lr-split-overlay-color` (default `var(--lr-color-overlay)`) —
5044
5113
  the `'floating'` drawer's `[part='backdrop']` scrim; scoped to `[part='base']`, not the viewport.
5114
+ `--lr-split-divider-hit-slop` (default `calc((var(--lr-size-3px) - var(--lr-icon-button-size)) / 2)`,
5115
+ i.e. `-18.5px` at the shipped token values) — the per-side inset of `[part='divider']`'s invisible
5116
+ `::before` hit area along the resize axis. It is negative on purpose: the `::before` box extends past
5117
+ the divider's own edges so the *effective* pointer/touch target reaches the shared
5118
+ `--lr-icon-button-size` WCAG 2.5.8 floor (40px) while the divider anyone can see stays 3px. Unlike
5119
+ most properties here it is **declared on `:host`**, so an override has to target the element itself —
5120
+ an ancestor rule is shadowed. Overriding it directly is rarely the right move: retheme
5121
+ `--lr-size-3px` or `--lr-icon-button-size` and the slop recomputes to keep exactly closing the gap.
5045
5122
  Otherwise shared tokens only.
5046
5123
 
5047
5124
  **Optional peer deps:** none.
@@ -5202,6 +5279,11 @@ override the library-wide `--lr-color-brand-quiet`/`--lr-color-brand` tokens, re
5202
5279
  element that reads them. Left unset, each falls back to exactly the token the rule used before, so
5203
5280
  rendering is unchanged.
5204
5281
 
5282
+ `--lr-widget-view-toggle-hover-bg` (default `var(--lr-color-brand-quiet)`) and
5283
+ `--lr-widget-view-toggle-hover-color` (default `var(--lr-color-text)`) are the same shape for the
5284
+ *hover* state, and the `:hover` rule wraps its selector in `:where()` so a consumer's own
5285
+ `::part(view-toggle):hover` override wins without `!important`.
5286
+
5205
5287
  **Optional peer deps:** none.
5206
5288
 
5207
5289
  ```html
@@ -5322,6 +5404,16 @@ container inline-size).
5322
5404
  **Themeable custom properties:** `--lr-button-group-gap` (default `var(--lr-space-2xs)`) — gap
5323
5405
  between slotted controls on both axes.
5324
5406
 
5407
+ **Sizing gotcha — give it an explicit width.** `:host` is `display: inline-flex` *and* declares
5408
+ `container-type: inline-size` unconditionally (that is what makes the 20rem `@container` rule above
5409
+ fire at all). Inline-size containment means the box's own content can no longer contribute to its
5410
+ width, so in any context where the host would otherwise be shrink-to-fit — plain block flow, an
5411
+ `inline-flex`/`flex` parent, anywhere with no definite width — the group collapses to its
5412
+ `min-inline-size` floor of `var(--lr-icon-button-size)` (2.5rem) instead of growing to fit the
5413
+ slotted buttons. Give `<lr-button-group>` a definite width (`inline-size`, `width: 100%`, `flex: 1`,
5414
+ or a grid track) whenever it isn't already in a layout that supplies one. The floor itself is the
5415
+ safeguard: without it the same shape rendered at literally `0px`.
5416
+
5325
5417
  ---
5326
5418
 
5327
5419
  ## `lr-scroller`
@@ -5487,6 +5579,10 @@ decides whether/how `steps` changes in response.
5487
5579
  identically-named contract.
5488
5580
  - `narrowOrientation: 'horizontal' | 'vertical' = 'vertical'` (reflected, attribute
5489
5581
  `narrow-orientation`)
5582
+ - `wrapLabels: boolean = false` (reflected, attribute `wrap-labels`) — when true, allows long
5583
+ labels to wrap when the effective orientation is vertical. The default preserves single-line
5584
+ labels, and horizontal labels remain single-line even when this is enabled. Set this when a
5585
+ narrow or localized vertical stepper would otherwise clip labels or overflow its allocation.
5490
5586
  - `effectiveOrientation: 'horizontal' | 'vertical'` (readonly getter) — the live layout/navigation
5491
5587
  axis actually in effect; identical to `orientation` whenever `orientationBreakpoint` is unset or
5492
5588
  doesn't resolve to a length. Also reflected as `data-effective-orientation` (only present while
@@ -5516,8 +5612,10 @@ text color of the `current` step. `--lr-stepper-current-font-weight` (default
5516
5612
  `var(--lr-font-weight-semibold)`) — font weight of the `current` step's label.
5517
5613
  `--lr-stepper-error-color` (default `var(--lr-color-danger)`) —
5518
5614
  text color of an `error` step. `--lr-stepper-current-index-bg` (default `var(--lr-color-brand)`) and
5519
- `--lr-stepper-current-index-color` (default `var(--lr-color-surface)`) — background and text color
5520
- of the `current` step's numbered `step-index` chip. Each is an inline `var()` fallback at the point
5615
+ `--lr-stepper-current-index-color` (default `var(--lr-color-on-brand)`) — background and text color
5616
+ of the `current` step's numbered `step-index` chip. The text color reads the dedicated on-brand
5617
+ foreground token, not `--lr-color-surface`, so the chip stays legible in dark mode and under forced
5618
+ colors, where surface and on-brand diverge. Each is an inline `var()` fallback at the point
5521
5619
  of use, never declared on `:host`, so it can be set on the element or on any ancestor; and each is
5522
5620
  scoped to its own `data-state`, so recoloring the current step leaves `pending`/`completed`/`error`
5523
5621
  steps alone. The hooks exist because `::part(step)[data-state='current']` is invalid CSS — Shadow
@@ -5525,7 +5623,7 @@ Parts forbids an attribute selector after `::part()` — so state-specific themi
5525
5623
  overriding a library-wide `--lr-color-*` token and repainting everything else that read it. Unset,
5526
5624
  each falls back to the token its rule used before. Otherwise shared tokens —
5527
5625
  `--lr-space-m`/`-xs`/`-2xs`,
5528
- `--lr-color-text-quiet`/`-text`/`-danger`/`-brand`/`-surface`, `--lr-radius`/`-pill`,
5626
+ `--lr-color-text-quiet`/`-text`/`-danger`/`-brand`/`-on-brand`, `--lr-radius`/`-pill`,
5529
5627
  `--lr-font-size-xs`, `--lr-font-weight-semibold`, `--lr-opacity-disabled`,
5530
5628
  `--lr-focus-ring-*`.
5531
5629
 
@@ -7491,7 +7589,14 @@ usage)
7491
7589
  `overflow-indicator` (the "+N" / "Show less" toggle button; only rendered while `max-visible` is
7492
7590
  actively causing an overflow — a locally-styled pill, not an instantiated real `<lr-chip>`)
7493
7591
 
7494
- **Themeable custom properties:** shared tokens only (`--lr-space-xs`, `--lr-space-s`,
7592
+ **Themeable custom properties:** `--lr-chip-group-overflow-expanded-color` (default
7593
+ `var(--lr-color-text)`) — text color of `[part="overflow-indicator"]` while expanded
7594
+ (`aria-expanded="true"`). A state hook: an inline `var()` fallback at the point of use, never a
7595
+ `:host` declaration, so it can be set on the element *or on any ancestor*. It exists because
7596
+ `::part(overflow-indicator)[aria-expanded='true']` is invalid CSS — Shadow Parts forbids an attribute
7597
+ selector after `::part()` — so retinting only the expanded state otherwise meant re-pointing the
7598
+ library-wide `--lr-color-text` token. Left unset, rendering is unchanged. Otherwise shared tokens
7599
+ (`--lr-space-xs`, `--lr-space-s`,
7495
7600
  `--lr-color-border`, `--lr-color-surface`, `--lr-color-text-quiet`, `--lr-color-text`,
7496
7601
  `--lr-color-brand`, `--lr-focus-ring-width`, `--lr-focus-ring-color`,
7497
7602
  `--lr-focus-ring-offset`, `--lr-transition-fast`).
@@ -7883,7 +7988,8 @@ shared-clamp note.
7883
7988
  ```
7884
7989
 
7885
7990
  Package-level CSV utilities (used internally, also exported for standalone use — `import {
7886
- escapeCsvField, buildCsv, downloadBlob } from '@aceshooting/lyra-ui'`):
7991
+ escapeCsvField, buildCsv, downloadBlob } from
7992
+ '@aceshooting/lyra-ui/components/utility/export-button/csv.js'`):
7887
7993
  ```ts
7888
7994
  escapeCsvField(value: unknown): string // quotes/escapes; neutralizes formula-injection (=,+,@,tab,CR) with a leading apostrophe — a bare leading '-' is deliberately left alone (OWASP guidance: it's not itself formula syntax, and guarding it would mangle ordinary negative numbers)
7889
7995
  buildCsv(rows: Record<string, unknown>[], columns: CsvColumn[]): string // CRLF-joined, header row included
@@ -8048,7 +8154,8 @@ while it matches `search`, and `data-active` while it is the current cursor posi
8048
8154
  present for row alignment on leaf/empty nodes),
8049
8155
  `copy-button` (a copy-to-clipboard button — the top-level one in `toolbar` (aria-label "Copy JSON to
8050
8156
  clipboard") or a per-node one (aria-label `Copy ${key/type}`, e.g. "Copy age"); only rendered when
8051
- `copyable`)
8157
+ `copyable`), `limit` (the localized notice rendered below the tree when the depth/node traversal
8158
+ budget truncates rendering or search — absent entirely for any document within budget)
8052
8159
 
8053
8160
  **Themeable custom properties:** `--lr-json-viewer-max-height` (default `none` — grows with content
8054
8161
  until `max-height` is set), `--lr-json-viewer-font` (default `var(--lr-font-mono)`),
@@ -8712,10 +8819,14 @@ The two height knobs work as a pair on `[part='field-input']`, the same way
8712
8819
  - Auto-advance (typing a field's last digit moves to the next) and backspace-into-the-previous-field
8713
8820
  are this library's own additions, not Web Awesome parity. Auto-advance is purely digit-count
8714
8821
  based, never value based.
8715
- - Each `<input>` shows exactly what was typed and is never reformatted or reverted; only the
8716
- composite `value` is zero-padded.
8717
- - Non-digit keystrokes are rejected before reaching field state — locale-specific numerals
8718
- (e.g. Arabic-Indic digits) are not accepted as input.
8822
+ - Each `<input>` keeps exactly the digits that were typed never zero-padded, range-clamped, or
8823
+ reverted to a previous value; only the composite `value` is normalized to zero-padded ISO.
8824
+ - Non-digit characters are stripped in the `input` handler before they reach field state (the
8825
+ native `<input>`'s own value is rewritten in the same tick). Locale-specific numerals *are*
8826
+ accepted and transliterated to ASCII, not rejected: Arabic-Indic (`٠`–`٩`) and Extended
8827
+ Arabic-Indic/Persian (`۰`–`۹`) digits are mapped unconditionally, and the digits of
8828
+ `effectiveLocale`'s own numbering system are added on top via `Intl.NumberFormat`, so typing
8829
+ `٢٠٢٦` into the year field commits `2026`.
8719
8830
  - ArrowLeft/ArrowRight cross fields at a field's text boundary, and the *physical* key meaning
8720
8831
  "next field" flips under an inherited `dir="rtl"`; the locale-derived field order itself does not.
8721
8832
  - A blank composite is `valueMissing` only when **all three** fields are blank; a partially typed
@@ -8916,7 +9027,8 @@ Country/language flag image. Flag artwork ships in a **separate, optional peer p
8916
9027
 
8917
9028
  **Slots:** none.
8918
9029
 
8919
- **CSS parts:** `image`
9030
+ **CSS parts:** `image` (the underlying `<img>`, present only once a URL has resolved), `error`
9031
+ (the localized `role="alert"` rendered instead when the peer resolver is unavailable or rejects)
8920
9032
 
8921
9033
  **Themeable custom properties:** `--lr-flag-radius` (default `calc(var(--lr-radius) * 0.33)` —
8922
9034
  non-`round` corner radius), `--lr-flag-aspect-ratio` (default `4 / 3`), and
@@ -8925,7 +9037,7 @@ non-`round` corner radius), `--lr-flag-aspect-ratio` (default `4 / 3`), and
8925
9037
  **Optional peer deps:** `@aceshooting/lyra-flags` — required for the component to actually render an
8926
9038
  image when `country` or `language` is used. Import `components/flag/flag-peer.js` once to opt into
8927
9039
  that resolver; a pre-resolved `src` works without the peer registration entry. If the peer is not
8928
- installed, renders an empty template (see gotchas).
9040
+ installed, the component fails closed with a localized `[part="error"]` alert (see gotchas).
8929
9041
 
8930
9042
  Also exported from the package root:
8931
9043
  `languageToCountry(language: string): string | undefined` and the `LANGUAGE_TO_COUNTRY` lookup
@@ -8965,7 +9077,7 @@ pronounces the endonym in its own language, and use `variant="compact"` at icon
8965
9077
  ```
8966
9078
 
8967
9079
  ```js
8968
- import { localeNativeName, languageToCountry } from '@aceshooting/lyra-ui';
9080
+ import { localeNativeName, languageToCountry } from '@aceshooting/lyra-ui/components/media/flag/language-map.js';
8969
9081
 
8970
9082
  const rows = ['en', 'fr', 'de', 'pt-BR', 'ja', 'ar'].map((tag) => ({
8971
9083
  tag,
@@ -8994,9 +9106,12 @@ import '@aceshooting/lyra-ui/components/media/flag/flag-peer.js';
8994
9106
  registers the component without importing the optional flag asset graph. Requires the optional
8995
9107
  peer `@aceshooting/lyra-flags` to actually render an image; without it the component still shows a
8996
9108
  `<lr-skeleton variant="rect">` placeholder (with `aria-busy="true"` on
8997
- the host) while resolving, then settles into an **empty template** plus a one-time `console.warn`
9109
+ the host) while resolving, then **fails closed** into a localized `<span part="error" role="alert">`
9110
+ (the `flagLoadError` message key, `"Flag unavailable"` by default) plus a one-time `console.warn`
8998
9111
  once the resolver rejects (lazy `import()`, cached module-wide so the warning fires only once per
8999
- page even with many `<lr-flag>` instances).
9112
+ page even with many `<lr-flag>` instances). An *empty* template is a different, non-error outcome:
9113
+ the peer resolved fine but returned no URL for that code (e.g. `country="zz"`) — no `[part="error"]`,
9114
+ no `<img>`, no warning.
9000
9115
  - Rendering is async even when the peer *is* installed: `src` resolves after an `import()` +
9001
9116
  resolver call, so there's a brief loading-skeleton window on first paint/attribute change — don't
9002
9117
  assume the `<img>` exists synchronously right after setting `country`/`language`.
@@ -9515,7 +9630,7 @@ size renders nothing instead of `"NaN B"`.
9515
9630
  <lr-attachment-chip name="report.pdf" size="245000" mime-type="application/pdf" status="done"></lr-attachment-chip>
9516
9631
  <lr-attachment-chip id="att-2" status="uploading" progress="42"></lr-attachment-chip>
9517
9632
  <script type="module">
9518
- import { formatFileSize } from '@aceshooting/lyra-ui';
9633
+ import { formatFileSize } from '@aceshooting/lyra-ui/components/media/attachment-chip/file-size.js';
9519
9634
 
9520
9635
  const chip = document.createElement('lr-attachment-chip');
9521
9636
  chip.file = pickedFile; // name/size/mime-type/thumbnail all derived from the File
@@ -9526,11 +9641,13 @@ size renders nothing instead of `"NaN B"`.
9526
9641
  </script>
9527
9642
  ```
9528
9643
 
9529
- The image thumbnail for a real `File` is a lazily-created `URL.createObjectURL()` blob URL
9530
- created only from `render()`, i.e. only once a thumbnail is actually about to paint, never eagerly
9531
- on `file` assignment and revoked automatically once `file` changes to a different `File` (or to
9532
- `undefined`) and on disconnect, so reassigning `file` several times before the next paint never
9533
- leaks URLs that were created but never shown.
9644
+ The image thumbnail for a real `File` is a cached `URL.createObjectURL()` blob URL, allocated in
9645
+ `willUpdate()` the update lifecycle, deliberately **never** from `render()`, so rendering stays a
9646
+ pure projection of already-prepared state and URL allocation never happens as a render side effect.
9647
+ It is created only when `file` is an image (or `previewable` is set), reused for as long as the same
9648
+ `File` object stays assigned, and revoked when `file` changes to a different `File`, to a non-image,
9649
+ or to `undefined`, and again on disconnect. Because the same pass that allocates also revokes the
9650
+ previous entry, reassigning `file` several times before the next paint leaks nothing.
9534
9651
 
9535
9652
  **Known gotchas:**
9536
9653
  - `file` always wins over `name`/`size`/`mimeType` when both are set — assigning those props while
@@ -9793,10 +9910,12 @@ icon/glyph, only shown while the slot has assigned content), `image` (the `<img>
9793
9910
  while `src` is set, hasn't failed to load, and no icon is slotted), `initials` (the fallback
9794
9911
  initials text, rendered whenever neither `icon` nor `image` is).
9795
9912
 
9796
- **Themeable custom properties:** `--lr-avatar-size` (default `2rem`, swapped to `1.5rem`/`2.5rem`
9797
- per `size="sm"`/`"lg"`), `--lr-avatar-bg` (default `var(--lr-color-surface-alt,
9798
- var(--lr-color-border))`, swapped per `tone`), `--lr-avatar-color` (default
9799
- `var(--lr-color-text)`, swapped per `tone`), `--lr-avatar-font-size` (default
9913
+ **Themeable custom properties:** `--lr-avatar-size` (default `var(--lr-size-2rem)`, swapped to
9914
+ `var(--lr-size-1-5rem)`/`var(--lr-size-2-5rem)` per `size="sm"`/`"lg"`), `--lr-avatar-bg` (default
9915
+ `var(--lr-color-border)`, swapped per non-neutral `tone` to that tone's `-quiet` fill; there is no
9916
+ `--lr-color-surface-alt` token in this library, despite what older copies of this page claimed),
9917
+ `--lr-avatar-color` (default `var(--lr-color-text)`, swapped per non-neutral `tone` to that tone's
9918
+ loud color), `--lr-avatar-font-size` (default
9800
9919
  `var(--lr-font-size-sm)`) — the font size of the initials fallback, and of any `em`-sized slotted
9801
9920
  glyph. `size` swaps it per tier too (`var(--lr-font-size-xs)` at `sm`, `var(--lr-font-size-md)` at
9802
9921
  `lg`), so the initials track the circle instead of staying one fixed size across every tier;
@@ -10334,7 +10453,13 @@ properties only cascade downward); `--lr-chart-grid-color` (default `var(--lr-co
10334
10453
  `getComputedStyle` on every draw (Chart.js renders to canvas, not the DOM, so it can't consume CSS
10335
10454
  `var()` directly), driving the grid lines, tick labels **and axis titles** (`xLabel`/`yLabel`/
10336
10455
  `y2Label` title text reuses `--lr-chart-tick-color` too — there's no separate title-color token),
10337
- legend text, and tooltip background/text respectively; plus shared `--lr-space-xs`.
10456
+ legend text, and tooltip background/text respectively; plus
10457
+ `--lr-chart-canvas-hover-outline-width` (default `var(--lr-border-width-thin)`) — the width of
10458
+ `[part="canvas"]`'s own `:hover` outline. Unlike the tokens above, this one is a real CSS
10459
+ declaration on a DOM element (the outline is painted by the stylesheet, not by Chart.js), so it is
10460
+ consumed directly with no `getComputedStyle` bridging; it is an inline `var()` fallback at the point
10461
+ of use, so it can be set on the element or any ancestor, and left unset the outline is exactly the
10462
+ `--lr-border-width-thin` it always was. Plus shared `--lr-space-xs`.
10338
10463
 
10339
10464
  **Optional peer deps:** `chart.js` (mandatory peer, lazy-imported on every `connectedCallback()`
10340
10465
  regardless of `zoom`), `chartjs-plugin-zoom` (lazy-imported *additionally* only when `zoom` is — or
@@ -10591,7 +10716,9 @@ dependency fails to load — see `llms/components/lr-chart.md`).
10591
10716
 
10592
10717
  **Themeable custom properties:** `--lr-chart-height`, `--lr-chart-grid-color`,
10593
10718
  `--lr-chart-tick-color`, `--lr-chart-legend-color`, `--lr-chart-tooltip-bg`,
10594
- `--lr-chart-tooltip-text`.
10719
+ `--lr-chart-tooltip-text`, `--lr-chart-canvas-hover-outline-width` — all inherited from `LyraChart`,
10720
+ identical in meaning and default (see `lr-chart` above); each of the eight variants below reads the
10721
+ same set, so one rule retunes them together.
10595
10722
 
10596
10723
  **Optional peer deps:** same as `lr-chart` — `chart.js`, plus `chartjs-plugin-zoom` only once
10597
10724
  `zoom` is set, and `chartjs-plugin-datalabels` only once `data-labels`/`stack-totals` is set.
@@ -10655,7 +10782,8 @@ dependency fails to load — inherited from `LyraChart`, unaffected by the binni
10655
10782
 
10656
10783
  **Themeable custom properties:** `--lr-chart-height`, `--lr-chart-grid-color`,
10657
10784
  `--lr-chart-tick-color`, `--lr-chart-legend-color`, `--lr-chart-tooltip-bg`,
10658
- `--lr-chart-tooltip-text` — inherited from `LyraChart`, identical in meaning.
10785
+ `--lr-chart-tooltip-text`, `--lr-chart-canvas-hover-outline-width` — inherited from `LyraChart`,
10786
+ identical in meaning.
10659
10787
 
10660
10788
  **Optional peer deps:** the same `chart.js` (+ `chartjs-plugin-zoom` when `zoom` is set) peers.
10661
10789
 
@@ -10996,7 +11124,7 @@ Register a renderer once during application setup. The definition may load a hea
10996
11124
  only when a matching document is opened:
10997
11125
 
10998
11126
  ```ts
10999
- import { registerDocumentRenderer } from '@aceshooting/lyra-ui';
11127
+ import { registerDocumentRenderer } from '@aceshooting/lyra-ui/components/viewers/document-viewer/registry.js';
11000
11128
 
11001
11129
  registerDocumentRenderer('application/x-example', {
11002
11130
  render: (file) => `Preview: ${file.name}`,
@@ -11171,8 +11299,12 @@ stylesheet.
11171
11299
 
11172
11300
  **Optional peer dependency:** install `jszip` with `pnpm add jszip`. The lazy registry registers
11173
11301
  `application/zip` and `application/x-zip-compressed`, with a `.zip` filename fallback, and imports
11174
- the viewer only when a matching archive is opened. `.tar`, `.rar`, and other archive formats fall
11175
- through to `<lr-document-preview>`'s generic download fallback.
11302
+ the viewer only when a matching archive is opened. Both registrations declare
11303
+ `capabilities: { anchors: ['text-quote', 'fragment'], search: true, textSelect: true }` — sibling to
11304
+ `load`, not inside it, so feature detection can read the capabilities without paying for the lazy
11305
+ import. Opening a `.zip` through `<lr-document-viewer>` forwards `anchor`/`highlights` to the mounted
11306
+ viewer, so a deep link into an entry name survives the registry hop. `.tar`, `.rar`, and other
11307
+ archive formats fall through to `<lr-document-preview>`'s generic download fallback.
11176
11308
 
11177
11309
  Remote resources are capped at 25 MB; exceeding it surfaces the localized
11178
11310
  `documentPreviewResourceTooLarge` message instead of the entry listing.
@@ -11253,7 +11385,9 @@ and `lr-render-error` with `detail.error`.
11253
11385
 
11254
11386
  **Optional peer dependency:** install `@aiden0z/pptx-renderer` with
11255
11387
  `pnpm add @aiden0z/pptx-renderer`. The registry matches the official PPTX MIME type and `.pptx`
11256
- filenames.
11388
+ filenames, declaring `{ anchors: ['text-quote', 'fragment'], search: true, textSelect: true }`
11389
+ capabilities and forwarding `anchor`/`highlights` to the mounted viewer, so a deep link opened
11390
+ through `<lr-document-viewer>` survives the registry hop.
11257
11391
 
11258
11392
  Remote resources are capped at 25 MB; exceeding it surfaces the localized
11259
11393
  `documentPreviewResourceTooLarge` message instead of the presentation.
@@ -11262,26 +11396,42 @@ Remote resources are capped at 25 MB; exceeding it surfaces the localized
11262
11396
 
11263
11397
  Fetches an SVG document, sanitizes it with the optional `dompurify` peer, and renders it inline.
11264
11398
 
11399
+ Adopts `DocumentAnchorTarget` (the same shared mixin `lr-pdf-viewer`/`lr-csv-viewer` use): a `region`
11400
+ anchor addresses one `highlights` entry, matched by reference or by structural equality of its `rect`
11401
+ (and optional `page`). Assigning `anchor` or calling `scrollToAnchor()` scrolls the matching
11402
+ `[part="region-highlight"]` into view and fires `lr-anchor-result`. No other anchor kind resolves
11403
+ here — a sanitized SVG document has neither pages nor extractable text to quote, which is also why
11404
+ its registry entry declares `capabilities: { anchors: ['region'], search: false, textSelect: false }`.
11405
+
11265
11406
  **Properties:** `src`, `name`, and `maxHeight` (attribute `max-height`) are strings. `maxHeight` caps
11266
11407
  the scrollable body. `zoomable: boolean = false` (reflected) — wraps the rendered content in an
11267
11408
  internal `<lr-zoomable-frame>`. `false` (the default) preserves the exact pre-`zoomable` DOM — an
11268
11409
  inline thumbnail (e.g. in a chat stream) must not unexpectedly grow a focusable zoom-chrome viewport;
11269
- an inspection surface opts in. `highlights: LyraHighlight[] = []` (attribute: false) — display-only
11270
- `region` highlights painted over the rendered SVG. `activeHighlightId: string | null = null`
11410
+ an inspection surface opts in. `anchor: LyraAnchor | string | null = null` (attribute: false) —
11411
+ declaratively jump to an anchor (a `LyraAnchor` object, or a `highlights` entry's `id`). Assigning it
11412
+ calls `scrollToAnchor()` and fires `lr-anchor-result`; re-assigning the same value re-triggers the
11413
+ scroll, it is not reference-gated. `highlights: LyraHighlight[] = []` (attribute: false) —
11414
+ display-only `region` highlights painted over the rendered SVG; unchanged behavior, now inherited
11415
+ from `DocumentAnchorTarget` rather than declared locally. `activeHighlightId: string | null = null`
11271
11416
  (attribute `active-highlight-id`) — the `highlights` entry, if any, currently treated as active
11272
11417
  (`data-active` on its `region-highlight`). `anchorKinds` is a readonly `['region']` (this viewer's
11273
11418
  supported `LyraAnchor.kind` values for the shared anchor-target contract).
11274
11419
 
11275
- **Methods:** `scrollToAnchor(target)` — scrolls a `region` highlight (by id, or a `LyraAnchor` matched
11276
- back to its owning `LyraHighlight` by reference) into view; resolves `false` when nothing matches, the
11277
- anchor isn't `region`, or the document isn't loaded yet (no retry loop — a caller invoking this before
11278
- `src` resolves simply gets `false`).
11420
+ **Methods:** `scrollToAnchor(target): Promise<boolean>` — scrolls the `highlights` entry matching
11421
+ `target` (a `region`-kind `LyraAnchor`, matched by reference or by structural equality of
11422
+ `rect`/`page`; or a `highlights[].id` string) into view, honoring `prefers-reduced-motion`. Resolves
11423
+ `true` when a match was found and scrolled, `false` otherwise, and always fires `lr-anchor-result`
11424
+ carrying the same boolean. Called before the SVG has finished loading it retries for up to 5s (real
11425
+ timers) rather than failing immediately.
11279
11426
 
11280
11427
  **Events:** `lr-render-error` with `detail.error` when fetching or sanitizing fails.
11281
11428
  `lr-highlight-activate` (`detail: { id }`) — a region highlight was clicked or activated via
11282
- Enter/Space.
11429
+ Enter/Space. `lr-anchor-result` (`detail: { found: boolean }`) — fired after an `anchor` assignment
11430
+ or a `scrollToAnchor()` call is applied, whether or not a match was found.
11283
11431
 
11284
- **CSS parts:** `base`, `body`, `svg`, `spinner`, `error`, `highlight-layer` (wrapper around every
11432
+ **CSS parts:** `base`, `body`, `svg`, `spinner`, `error`, `anchor-live-region` (the visually-hidden
11433
+ `role="status"` element announcing anchor-jump results to assistive tech),
11434
+ `highlight-layer` (wrapper around every
11285
11435
  rendered region highlight), `region-highlight` (one region highlight, `data-tone`, `data-active`),
11286
11436
  `region-highlight-target` (transparent activation geometry with an independent minimum hit area),
11287
11437
  `highlight-actions` (non-overlapping actions for multiple highlights), `region-highlight-action`
@@ -11328,7 +11478,10 @@ inside a bounded, scrollable body.
11328
11478
  **Themeable custom properties:** `--lr-html-viewer-max-height` (default `none`) — maximum block size
11329
11479
  of `[part="body"]`; also settable via the `max-height` property, which writes this token inline.
11330
11480
 
11331
- **Optional peer dependency:** `dompurify`.
11481
+ **Optional peer dependency:** `dompurify`. The registry matches `text/html` and `.htm`/`.html`
11482
+ filenames, declaring `{ anchors: ['text-quote', 'fragment'], search: true, textSelect: true }`
11483
+ capabilities and forwarding `anchor`/`highlights` onto the created element, so a deep link opened
11484
+ through `<lr-document-viewer>` survives the registry hop.
11332
11485
 
11333
11486
  Remote resources are capped at 25 MB; exceeding it surfaces the localized
11334
11487
  `documentPreviewResourceTooLarge` message instead of the document.
@@ -11464,7 +11617,10 @@ table of contents as `PdfOutlineItem[]` (`{ title, page?, children? }`), `[]` wh
11464
11617
  `clearSearch()`); `searchNext()` and `searchPrevious()` advance/step back through matches (wrapping,
11465
11618
  resolving `false` when there are none); `clearSearch()` clears the query, matches, and painted marks.
11466
11619
 
11467
- **CSS parts:** `base`, `toolbar`, `page-indicator`, `zoom-indicator`, `pages`, `page`, `page-canvas`
11620
+ **CSS parts:** `base`, `toolbar`, `previous-button`, `next-button`, `zoom-out-button`,
11621
+ `zoom-in-button` (the four toolbar controls — previously reachable only through `::part(toolbar)
11622
+ button`, which is invalid: a descendant combinator after `::part()` never matches, so each button now
11623
+ carries its own part name), `page-indicator`, `zoom-indicator`, `pages`, `page`, `page-canvas`
11468
11624
  (the canvas one page's content is painted onto), `text-layer`, `text-span` (one generated text run
11469
11625
  inside a page's text layer — PDF.js creates these imperatively, and they carry the part so a rule can
11470
11626
  reach them without a descendant combinator), `search-match` (a `<mark>` painted into a mounted page's
@@ -11722,8 +11878,10 @@ Execution is a hard non-goal. Markdown cells render through `lr-markdown`, code
11722
11878
  `lr-code-block` (using the notebook's kernel language for syntax highlighting), and raw cells as
11723
11879
  plain preformatted text. A code cell's `execute_result`/`display_data` outputs prefer, in order,
11724
11880
  `image/png`, `image/jpeg`, `image/svg+xml` (sanitized), `text/html` (sanitized), `application/json`
11725
- (via `lr-json-viewer`), then `text/plain`. Stream/error outputs render as plain preformatted text
11726
- (tinted `danger` for stderr/tracebacks). Sanitizing raw HTML/SVG output markup lazy-loads the
11881
+ (via `lr-json-viewer`), then `text/plain`. Stream/error outputs render as preformatted text (tinted
11882
+ `danger` for stderr/tracebacks) with embedded ANSI SGR color/style escapes interpreted through the
11883
+ same shared `internal/ansi.ts` parser `lr-terminal` uses — a traceback keeps its coloring instead of
11884
+ showing raw `ESC[` sequences. Sanitizing raw HTML/SVG output markup lazy-loads the
11727
11885
  optional peer `dompurify`; without it, the output renders a localized notice instead of raw markup.
11728
11886
  Cells are virtualized through `lr-virtual-list`. `node-path` anchors resolve `path[0]` as a cell
11729
11887
  index; `fragment` anchors resolve a cell's own `id`. No execution, no kernels, no editing, no
@@ -12947,6 +13105,9 @@ visually-distinct row (dashed border, italic label, "not in catalog" badge) comp
12947
13105
  from the listbox or committed in free-text mode; `inCatalog` reflects whether that value was
12948
13106
  actually present in `normalizedCatalog`, so a consumer can flag a freshly-typed custom value
12949
13107
  distinctly from a real catalog pick)
13108
+ - `change` (`Event`, no detail) — fired alongside `lr-change`, mirroring `<lr-select>`/
13109
+ `<lr-combobox>`'s native-style value-change pair so native form bindings/framework `v-model`
13110
+ handlers behave consistently across the picker family.
12950
13111
  - `blur` (no detail) — re-dispatched from the free-text mode's internal `<input>`'s own `blur`,
12951
13112
  bubbling and composed unlike the native event. Closed-dropdown mode's trigger `<button>` has no
12952
13113
  equivalent re-dispatch, matching `<lr-select>`'s own trigger.
@@ -13738,6 +13899,10 @@ and it repainted every other danger surface with it.
13738
13899
 
13739
13900
  - `blur()` — Forwards host blur to the internal push-to-talk control.
13740
13901
  - `focus()` — Forwards host focus to the internal push-to-talk control.
13902
+ - `click()` — Programmatically starts or stops a take, mirroring a real pointer/keyboard
13903
+ activation: in `mode="toggle"` it forwards to the trigger's native `click()`; otherwise it calls
13904
+ `stop()` while `state` is `recording` or `start()` otherwise. A no-op while `disabled` or
13905
+ unsupported.
13741
13906
 
13742
13907
  ## `lr-transcript-feed`
13743
13908
 
@@ -14587,9 +14752,10 @@ the built-in glyph for the current `status` is used)
14587
14752
  `summary`), `category`, `name`, `summary`, `meta` (wrapper around `status-text` and `duration`),
14588
14753
  `status-text`, `duration`, `tooltip` (the floating detail popup, only meaningful while open)
14589
14754
 
14590
- **Themeable custom properties:** `--lr-tool-call-chip-spin` (default `1s linear` — running-icon
14591
- animation duration/timing) and `--lr-transition-ambient` (default `1.8s ease-in-out` pending-icon
14592
- pulse duration/timing). `--lr-tool-call-chip-accent`, `--lr-tool-call-chip-bg`, and
14755
+ **Themeable custom properties:** `--lr-tool-call-chip-spin` (default `var(--lr-transition-ambient)`,
14756
+ i.e. `1.8s ease-in-out` at the shipped token value and `0.001ms linear` under
14757
+ `prefers-reduced-motion` — running-icon animation duration/timing) and `--lr-transition-ambient`
14758
+ (default `1.8s ease-in-out` — pending-icon pulse duration/timing). `--lr-tool-call-chip-accent`, `--lr-tool-call-chip-bg`, and
14593
14759
  `--lr-tool-call-chip-border` are internal per-status variables reassigned by this component's own
14594
14760
  `:host([status="…"])` rules (e.g. `pending` → `--lr-color-text-quiet`/`--lr-color-surface`/
14595
14761
  `--lr-color-border`; `running` → brand; `success` → success; `error` → danger; `denied` → warning),
@@ -14888,7 +15054,8 @@ tool name/status/duration), `tool-name`, `status`, `duration`, `header-actions`,
14888
15054
  0.5)` — the backdrop scrim color; component-specific since no shared overlay token exists),
14889
15055
  `--lr-tool-result-dialog-maximized-inset` (default `var(--lr-space-l)` — inset applied to the
14890
15056
  panel while `[maximized]`, overridable e.g. to leave a persistent app rail visible), and
14891
- `--lr-tool-result-dialog-spin` (default `1s linear`, stopped under reduced motion), plus shared
15057
+ `--lr-tool-result-dialog-spin` (default `var(--lr-transition-ambient)`, i.e. `1.8s ease-in-out`,
15058
+ and effectively stopped under reduced motion because that token collapses to `0.001ms linear`), plus shared
14892
15059
  tokens `--lr-color-surface/-border/-text-quiet/-brand/-brand-quiet/-success/-success-quiet/
14893
15060
  -danger/-danger-quiet/-warning/-warning-quiet`, `--lr-space-*`, `--lr-radius`, `--lr-shadow`,
14894
15061
  `--lr-icon-button-size`, `--lr-focus-ring-*`, `--lr-transition-base`.
@@ -15422,7 +15589,12 @@ set `valid: false` while `formError`, rather than a fabricated field key, carrie
15422
15589
 
15423
15590
  **Slots:** none.
15424
15591
 
15425
- **CSS parts:** `base`, `field`, `label`, `description`, `error`, `unsupported`, `empty`
15592
+ **CSS parts:** `base`, `field`, `label`, `control`, `description`, `error`, `unsupported`, `empty`.
15593
+ `control` is the native `<input>` for a `'string'` (non-enum) or `'number'`/`'integer'` field — one
15594
+ shared part name across both the text and number inputs, and deliberately *not* present on the
15595
+ `'boolean'` (`<lr-checkbox>`), enum (`<lr-select>`), or unsupported-type fallback branches, which are
15596
+ composed components with their own part surfaces rather than raw natives. It is purely an additive
15597
+ external theming hook: the internal `.control` class the stylesheet targets is unchanged.
15426
15598
 
15427
15599
  **Themeable custom properties:** no component-specific custom properties; shared tokens only —
15428
15600
  `--lr-space-l/-xs/-s`, `--lr-color-border`, `--lr-radius`, `--lr-color-surface`,
@@ -15537,8 +15709,14 @@ whenever the slot has no assigned content), `body`.
15537
15709
 
15538
15710
  **Themeable custom properties:** `--lr-result-card-compact-header-padding` (default
15539
15711
  `var(--lr-space-xs)`) — `[part="header"]` block/inline padding while `compact`;
15540
- `--lr-result-card-compact-body-padding` (default `var(--lr-space-xs)`) — `[part="body"]` padding
15541
- while `compact`; plus shared tokens `--lr-space-xs`/`-s`, `--lr-color-border`/`-surface`/`-text`,
15712
+ `--lr-result-card-compact-header-gap` (default `var(--lr-space-xs)`) — gap between
15713
+ `[part="header"]`'s title and actions while `compact`, one step tighter than the uncompacted
15714
+ `--lr-space-s`; `--lr-result-card-compact-body-padding` (default `var(--lr-space-xs)`) —
15715
+ `[part="body"]` padding while `compact`; `--lr-result-card-compact-body-gap` (default
15716
+ `var(--lr-space-2xs)`) — gap between `[part="body"]`'s children while `compact`, one step tighter
15717
+ than the uncompacted `--lr-space-xs`. The two gap knobs mean `compact` now tightens interior spacing,
15718
+ not only the padding box — a compact card no longer keeps full-size gaps inside a shrunken frame.
15719
+ Plus shared tokens — `--lr-space-2xs`/`-xs`/`-s`, `--lr-color-border`/`-surface`/`-text`,
15542
15720
  `--lr-radius`.
15543
15721
 
15544
15722
  ### `lr-result-field`
@@ -15688,9 +15866,13 @@ indicator, only rendered when `collapsible`), `body` (the list of items, `hidden
15688
15866
  `item-detail`, and `item-children` (the nested `role="list"` wrapper around a top-level item's
15689
15867
  children).
15690
15868
 
15691
- **Themeable custom properties:** `--lr-task-list-spin` (default `1s linear`) — running-status icon
15692
- spin animation duration/timing; `--lr-task-list-compact-header-padding` (default
15869
+ **Themeable custom properties:** `--lr-task-list-spin` (default `var(--lr-transition-ambient)`, i.e.
15870
+ `1.8s ease-in-out`, collapsing to `0.001ms linear` under `prefers-reduced-motion`) — running-status
15871
+ icon spin animation duration/timing; `--lr-task-list-compact-header-padding` (default
15693
15872
  `var(--lr-space-2xs) var(--lr-space-s)`) — `[part="header"]` padding while `compact`;
15873
+ `--lr-task-list-compact-header-gap` (default `var(--lr-space-2xs)`) — gap between `[part="header"]`'s
15874
+ label/summary/toggle while `compact`, one step tighter than the header's uncompacted
15875
+ `--lr-space-xs`, so `compact` tightens the header's *interior* spacing and not just its padding;
15694
15876
  `--lr-task-list-compact-gap` (default `var(--lr-space-2xs)`) — gap between `[part="body"]`'s item
15695
15877
  rows while `compact`; `--lr-task-list-compact-body-padding` (default `var(--lr-space-2xs)
15696
15878
  var(--lr-space-s) var(--lr-space-s)`) — `[part="body"]` padding while `compact`.
@@ -15707,12 +15889,18 @@ codes. `maxScrollback: number = 5000` (attribute `max-scrollback`), `follow: boo
15707
15889
  string = 'terminal.log'`, `announceOutput: boolean = false` (attribute `announce-output`),
15708
15890
  `accessibleLabel: string = ''` (attribute `aria-label`), `highlights: LyraHighlight[] = []` (attribute:
15709
15891
  false), and `activeHighlightId: string | null = null` (attribute: false). `anchorKinds` is a readonly
15710
- `['page', 'text-quote', 'region']` for the shared anchor-target contract.
15892
+ `['line-range']` a scrollback buffer addresses positions by line number, so `line-range` is the
15893
+ only kind `scrollToAnchor()` resolves; `page`/`text-quote`/`region` belong to the paginated document
15894
+ viewers, not here. `<lr-terminal>` is not registered in the document-renderer registry, so this field
15895
+ is a plain readonly property rather than the `DocumentAnchorTarget` mixin's `override readonly` one.
15711
15896
 
15712
15897
  **Methods:** `write(text)` appends ANSI-parsed text to the buffer. `clear()` empties the buffer.
15713
- `scrollToBottom()` and `scrollToAnchor(anchor)` control scroll position. `search(query)`,
15714
- `searchNext()`, `searchPrevious()`, and `clearSearch()` drive in-buffer text search. `getPlainText()`
15715
- returns the SGR-stripped plain text of the whole buffer.
15898
+ `scrollToBottom()` and `scrollToAnchor(anchor): Promise<boolean>` control scroll position.
15899
+ `search(query): Promise<number>` (resolves the match count after the resulting render),
15900
+ `searchNext()`, `searchPrevious()`, and `clearSearch()` drive in-buffer text search matching is
15901
+ line-granular (a match identifies a whole line, not a character range) and capped, so `matchCount`
15902
+ stops climbing on a pathologically repetitive buffer. `getPlainText()` returns the SGR-stripped
15903
+ plain text of the whole buffer.
15716
15904
 
15717
15905
  **Events:** `lr-copy` (`detail: { text }`), `lr-download` (`detail: { filename }`),
15718
15906
  `lr-follow-change` (`detail: { following }`), `lr-search-change` (`detail: { query, matchCount,
@@ -15872,8 +16060,16 @@ when both are set.
15872
16060
  }`), and `lr-copy` (`detail: { text: string }`, the full hash was copied).
15873
16061
 
15874
16062
  **CSS parts:** `base`, `subject`, `body`, `hash`, `meta`, `author`, `time`, `diffstat`, `additions`,
15875
- `deletions`, `files-toggle`, `file` (carries `data-status`), `file-path`, `file-additions`,
15876
- `file-deletions`, `copy-button`, and `actions`.
16063
+ `deletions`, `files-toggle`, `file` (carries `data-status`), `file-path`, `file-status`,
16064
+ `file-additions`, `file-deletions`, `copy-button`, and `actions`.
16065
+
16066
+ `file-status` is the one-letter git-status badge (`A`/`M`/`D`/`R`/`U`/`C`/`!`) rendered inside
16067
+ `[part="file-path"]`, present only for a file that has a `status`. The letter alone is meaningless to
16068
+ a screen reader, so the element carries the localized expansion as its `aria-label` — "Modified",
16069
+ "Added", … — reusing `<lr-file-tree>`'s shared `gitStatusAdded`/`gitStatusModified`/
16070
+ `gitStatusDeleted`/`gitStatusRenamed`/`gitStatusUntracked`/`gitStatusConflicted`/`gitStatusIgnored`
16071
+ message keys, so one `registerLyraLocale()` registration (or one `.strings` override) translates the
16072
+ badge in both components at once.
15877
16073
 
15878
16074
  **Themeable custom properties:** `--lr-commit-card-compact-padding` (default `var(--lr-space-s)`) —
15879
16075
  `[part="base"]` padding while `compact`.
@@ -15972,6 +16168,14 @@ They are inline `var()` fallbacks at their point of use rather than `:host` decl
15972
16168
  them can be set on the element *or on any ancestor*, which is what makes "give every compact confirm
15973
16169
  bar in this panel a hairline border" a one-rule change on the panel.
15974
16170
 
16171
+ Two further properties recolor the decided state: `--lr-confirm-bar-approved-color` (default
16172
+ `var(--lr-color-success)`) and `--lr-confirm-bar-denied-color` (default `var(--lr-color-danger)`) —
16173
+ `[part="status"]`'s text/icon color under `:host([decision='approved'])` and
16174
+ `:host([decision='denied'])` respectively. Same inline-`var()`-fallback shape as the compact set.
16175
+ They exist because `::part(status)[decision]` is invalid CSS, so recoloring just this component's
16176
+ decided state previously meant re-pointing the library-wide `--lr-color-success`/`-danger` tokens and
16177
+ repainting everything else that reads them.
16178
+
15975
16179
  **Known gotchas:**
15976
16180
  - `[part="status"]` is always rendered and must never be given `display: none`. Deciding moves focus
15977
16181
  to it synchronously, before the Deny/Approve buttons unmount, so hiding it would drop focus to
@@ -16072,9 +16276,13 @@ entry is the latest version. `activeVersionId: string | null = null` (attribute
16072
16276
  `aria-busy` on the body and shows a text indicator (not animated, so it stays legible under reduced
16073
16277
  motion). `copyText: string = ''` (attribute `copy-text`) — the text copied to the clipboard by the
16074
16278
  copy button; empty hides the button. `downloadSrc: string = ''` (attribute `download-src`) — the
16075
- download URL, sanitized through `safeMediaSrc()`; empty hides the button. `downloadName: string =
16076
- ''` (attribute `download-name`) the suggested filename reported in the `lr-download` event
16077
- detail.
16279
+ download URL, sanitized through `safeDownloadHref()` (`http:`/`https:`/`blob:` only narrower than
16280
+ the media/resource allowlist, which also permits `data:`); an empty value hides the button. The
16281
+ sanitizer runs at click time, not render time, so a *non-empty but rejected* URL still renders the
16282
+ button and simply emits nothing when pressed. The component never navigates on its own: it emits
16283
+ `lr-download` with the sanitized `src` and leaves the actual download to the host.
16284
+ `downloadName: string = ''` (attribute `download-name`) — the suggested filename reported in the
16285
+ `lr-download` event detail.
16078
16286
 
16079
16287
  **Slots:** default — preview-view content (markdown/html-viewer/browser-frame/image). `code` —
16080
16288
  code-view content (typically a `lr-code-block`); the preview/code toggle only renders once this
@@ -16175,8 +16383,9 @@ this component's own retry counter, reset when `run.id` changes).
16175
16383
  `reasoning`, `output`, `actions`, `cancel-button`, `retry-button`, `metric-label`, `metric-value`
16176
16384
  (carries `data-variant`), `empty`.
16177
16385
 
16178
- **Themeable custom properties:** `--lr-agent-run-spin` (default `1s linear`) — the running-status
16179
- spinner icon's rotation duration/timing. `--lr-agent-run-compact-padding` (default
16386
+ **Themeable custom properties:** `--lr-agent-run-spin` (default `var(--lr-transition-ambient)`, i.e.
16387
+ `1.8s ease-in-out`, collapsing to `0.001ms linear` under `prefers-reduced-motion`) — the
16388
+ current-step icon's rotation duration/timing. `--lr-agent-run-compact-padding` (default
16180
16389
  `var(--lr-space-s)`) and `--lr-agent-run-compact-gap` (default `var(--lr-space-s)`) — `[part="base"]`'s
16181
16390
  padding, and the gap between its header and body, while `compact`; both are ignored while `compact`
16182
16391
  is unset. Like the other density/state properties in this family they are inline `var()` fallbacks at
@@ -16509,7 +16718,12 @@ It never executes tools or persists decisions.
16509
16718
  approved, args? }`), and `lr-approval-close` (`{ invocationId, reason }`).
16510
16719
 
16511
16720
  **CSS parts:** `base`, `heading-row`, `heading`, `count`, `list`, `request`, `request-info`,
16512
- `tool-name`, `request-id`, `status`, `empty`.
16721
+ `tool-name`, `request-id`, `status`, `empty`. The `[part='request']` row matching `selectedId`
16722
+ carries both `data-selected` (the styling hook) and `aria-current="true"` (the semantic one), so the
16723
+ selection is announced, not merely painted. Following this library's convention for `aria-current` —
16724
+ and unlike `aria-pressed`/`aria-expanded`/`aria-selected`, which must render both states — an
16725
+ unselected row omits the attribute rather than writing `"false"`, because ARIA already defines
16726
+ `aria-current`'s own default as false.
16513
16727
 
16514
16728
  **Additional API surface:**
16515
16729
 
@@ -16615,6 +16829,18 @@ keywords. `SchemaValidationIssue = { path: string; message: string; severity?: '
16615
16829
  **CSS parts:** `base`, `tree`, `node`, `node-selected`, `node-trigger`, `name`, `type`, `required`,
16616
16830
  `description`, `constraints`, `issue`, `limit`, `empty`.
16617
16831
 
16832
+ `[part='issue']` carries `data-severity` and each severity has its own styling: `error` reads the
16833
+ danger tokens, `warning` the warning tokens, and `info` its own pair —
16834
+ `--lr-schema-viewer-info-border` (default `var(--lr-color-brand)`) and `--lr-schema-viewer-info-bg`
16835
+ (default `var(--lr-color-brand-quiet)`). Brand rather than a dedicated info palette because this
16836
+ library has no `--lr-color-info-*` token; before these existed an `info` issue rendered identically
16837
+ to an `error`, which read as a false alarm. Both are inline `var()` fallbacks at their point of use,
16838
+ so either can be set on the element or on any ancestor — `::part(issue)[data-severity='info']` is
16839
+ invalid CSS, so this is the only way to recolor one severity without touching the others.
16840
+
16841
+ **Themeable custom properties:** `--lr-schema-viewer-info-border`, `--lr-schema-viewer-info-bg` (see
16842
+ above); otherwise shared tokens only.
16843
+
16618
16844
  Rendering is capped at 500 schema nodes; `limit` reports truncation. Cycles stop at the repeated
16619
16845
  node rather than recursing. **Slots:** none. **Optional peer deps:** none.
16620
16846
 
@@ -18098,19 +18324,24 @@ Large sets window through an internal `lr-virtual-list`.
18098
18324
  **Properties:**
18099
18325
  - `chunks: RetrievalChunk[] = []` (attribute: false) — **`RetrievalChunk`, imported from
18100
18326
  `@aceshooting/lyra-ui/ai`** (`src/ai/types.ts`): `{ id: string; text: string; score: number;
18101
- source: DocumentRef; metadata?: Record<string, unknown> }`. The raw, un-deduplicated/unsorted/
18102
- ungrouped result set; host-owned. Internally mapped to `lr-chunk-inspector`'s flatter `LyraChunk`
18103
- via `source.id sourceId`, `source.name title` (no `page`/`anchor` — `RetrievalChunk` carries
18104
- neither, and they're left unset rather than guessed from `metadata`)
18327
+ source: DocumentRef; metadata?: Record<string, unknown>; rank?: number; locator?: DocumentLocator;
18328
+ queryId?: string; stage?: string; traceId?: string; scores?: RetrievalScoreBreakdown }`. The raw,
18329
+ un-deduplicated/unsorted/ungrouped result set; host-owned. Internally mapped to
18330
+ `lr-chunk-inspector`'s flatter `LyraChunk` via `source.id sourceId`, `source.name title`, and
18331
+ `locator → anchor`; a `page`-kind `locator` additionally supplies the inspector's visible `page`.
18332
+ Nothing is ever guessed from `metadata` — a chunk with no `locator` simply leaves `anchor`/`page`
18333
+ unset
18105
18334
  - `selectedIds: string[] = []` (attribute: false) — controlled selection by chunk `id`. The component
18106
18335
  updates its own copy on toggle *then* emits `lr-select`; reassign to control. An id with no
18107
18336
  matching chunk is harmless
18108
18337
  - `selectable: boolean = true` (reflected) — shows a per-row `lr-checkbox`
18109
18338
  - `dedupe: boolean = true` (reflected) — drops duplicate `id`s, keeping the higher `score`
18110
18339
  - `sort: 'score' | 'none' = 'score'` — `'score'` sorts descending; `'none'` preserves given order
18111
- - `grouping: 'source' | 'none' = 'none'` — `'source'` buckets rows under a header per `source.id`,
18112
- each bucket ordered by its own best-scoring chunk, and **always** virtualizes regardless of
18113
- `virtualizeAt`
18340
+ - `grouping: 'source' | 'none' = 'none'` — `'source'` buckets rows under a header per `source.id`
18341
+ (the header text is that source's `name`, or a localized "untitled source" when it has none).
18342
+ Buckets appear in order of first appearance in the already-`sort`ed list, so with the default
18343
+ `sort="score"` that is best-scoring-chunk order, and with `sort="none"` it is the order the chunks
18344
+ arrived in. Grouping **always** virtualizes, regardless of `virtualizeAt`
18114
18345
  - `presentation: 'compact' | 'expanded' = 'expanded'` — `'expanded'` shows each chunk's full row
18115
18346
  (score bar, text preview with its own toggle) plus any `metadata`; `'compact'` shows title + score
18116
18347
  bar only and omits `metadata` entirely
@@ -18357,6 +18588,15 @@ correlated ids/details from their composed primitives).
18357
18588
 
18358
18589
  **CSS parts:** `base`, `heading`, `tabs`, `tab`, `panel`, `settings`.
18359
18590
 
18591
+ **Themeable custom properties:** `--lr-knowledge-base-admin-tab-selected-border` (default
18592
+ `var(--lr-color-brand)`) and `--lr-knowledge-base-admin-tab-selected-color` (default
18593
+ `var(--lr-color-text)`) — the bottom-border and text color of the selected `[part="tab"]`. State
18594
+ hooks: inline `var()` fallbacks at the point of use rather than `:host` declarations, so either can
18595
+ be set on the element *or on any ancestor*, and the rule wraps its `[aria-selected='true']` qualifier
18596
+ in `:where()` so a consumer's own `::part(tab)` override still wins. They exist because
18597
+ `::part(tab)[aria-selected='true']` is invalid CSS — Shadow Parts forbids an attribute selector after
18598
+ `::part()`. Left unset, rendering is unchanged.
18599
+
18360
18600
  ## `lr-claim-evidence`
18361
18601
 
18362
18602
  Controlled claim-by-claim grounding audit relating `GroundedClaim[]` to complete `Citation[]`