@aceshooting/lyra-ui 7.3.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 (363) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/custom-elements.json +1703 -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/widget/widget.class.d.ts +4 -0
  213. package/dist/components/layout/widget/widget.class.d.ts.map +1 -1
  214. package/dist/components/layout/widget/widget.class.js +4 -0
  215. package/dist/components/layout/widget/widget.class.js.map +1 -1
  216. package/dist/components/layout/widget/widget.styles.d.ts.map +1 -1
  217. package/dist/components/layout/widget/widget.styles.js +9 -3
  218. package/dist/components/layout/widget/widget.styles.js.map +1 -1
  219. package/dist/components/media/flag/flag.class.d.ts +1 -1
  220. package/dist/components/media/flag/flag.class.d.ts.map +1 -1
  221. package/dist/components/media/flag/flag.class.js +2 -1
  222. package/dist/components/media/flag/flag.class.js.map +1 -1
  223. package/dist/components/media/image-viewer/image-viewer.styles.d.ts.map +1 -1
  224. package/dist/components/media/image-viewer/image-viewer.styles.js +1 -0
  225. package/dist/components/media/image-viewer/image-viewer.styles.js.map +1 -1
  226. package/dist/components/overlays/chip/chip-group.class.d.ts +4 -0
  227. package/dist/components/overlays/chip/chip-group.class.d.ts.map +1 -1
  228. package/dist/components/overlays/chip/chip-group.class.js +4 -0
  229. package/dist/components/overlays/chip/chip-group.class.js.map +1 -1
  230. package/dist/components/overlays/chip/chip-group.styles.d.ts.map +1 -1
  231. package/dist/components/overlays/chip/chip-group.styles.js +7 -2
  232. package/dist/components/overlays/chip/chip-group.styles.js.map +1 -1
  233. package/dist/components/overlays/rating/rating.styles.d.ts.map +1 -1
  234. package/dist/components/overlays/rating/rating.styles.js +11 -4
  235. package/dist/components/overlays/rating/rating.styles.js.map +1 -1
  236. package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts.map +1 -1
  237. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +4 -1
  238. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js.map +1 -1
  239. package/dist/components/retrieval/graph/graph-canvas.d.ts +25 -0
  240. package/dist/components/retrieval/graph/graph-canvas.d.ts.map +1 -1
  241. package/dist/components/retrieval/graph/graph-canvas.js +30 -1
  242. package/dist/components/retrieval/graph/graph-canvas.js.map +1 -1
  243. package/dist/components/retrieval/graph/graph.class.d.ts +2 -1
  244. package/dist/components/retrieval/graph/graph.class.d.ts.map +1 -1
  245. package/dist/components/retrieval/graph/graph.class.js +12 -1
  246. package/dist/components/retrieval/graph/graph.class.js.map +1 -1
  247. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts +5 -0
  248. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts.map +1 -1
  249. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js +5 -0
  250. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js.map +1 -1
  251. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.d.ts.map +1 -1
  252. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js +7 -3
  253. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js.map +1 -1
  254. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts.map +1 -1
  255. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +10 -1
  256. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js.map +1 -1
  257. package/dist/components/utility/diff-view/diff-view.styles.d.ts.map +1 -1
  258. package/dist/components/utility/diff-view/diff-view.styles.js +11 -0
  259. package/dist/components/utility/diff-view/diff-view.styles.js.map +1 -1
  260. package/dist/components/viewers/archive-viewer/archive-viewer-register.js +16 -3
  261. package/dist/components/viewers/archive-viewer/archive-viewer-register.js.map +1 -1
  262. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts.map +1 -1
  263. package/dist/components/viewers/document-viewer/document-viewer.class.js +1 -0
  264. package/dist/components/viewers/document-viewer/document-viewer.class.js.map +1 -1
  265. package/dist/components/viewers/docx-viewer/docx-viewer.js +6 -1
  266. package/dist/components/viewers/docx-viewer/docx-viewer.js.map +1 -1
  267. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +10 -4
  268. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts.map +1 -1
  269. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +31 -6
  270. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js.map +1 -1
  271. package/dist/components/viewers/html-viewer/html-viewer.js +7 -0
  272. package/dist/components/viewers/html-viewer/html-viewer.js.map +1 -1
  273. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.d.ts +3 -0
  274. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.d.ts.map +1 -1
  275. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +7 -1
  276. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js.map +1 -1
  277. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts +4 -0
  278. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts.map +1 -1
  279. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +8 -4
  280. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js.map +1 -1
  281. package/dist/components/viewers/pptx-viewer/pptx-viewer.js +11 -1
  282. package/dist/components/viewers/pptx-viewer/pptx-viewer.js.map +1 -1
  283. package/dist/components/viewers/svg-viewer/svg-viewer.class.d.ts +29 -17
  284. package/dist/components/viewers/svg-viewer/svg-viewer.class.d.ts.map +1 -1
  285. package/dist/components/viewers/svg-viewer/svg-viewer.class.js +27 -22
  286. package/dist/components/viewers/svg-viewer/svg-viewer.class.js.map +1 -1
  287. package/dist/components/viewers/svg-viewer/svg-viewer.d.ts.map +1 -1
  288. package/dist/components/viewers/svg-viewer/svg-viewer.js +7 -6
  289. package/dist/components/viewers/svg-viewer/svg-viewer.js.map +1 -1
  290. package/dist/internal/form-associated.d.ts +21 -0
  291. package/dist/internal/form-associated.d.ts.map +1 -1
  292. package/dist/internal/form-associated.js +25 -8
  293. package/dist/internal/form-associated.js.map +1 -1
  294. package/dist/internal/localization.d.ts +1 -1
  295. package/dist/internal/localization.d.ts.map +1 -1
  296. package/dist/internal/localization.js +17 -0
  297. package/dist/internal/localization.js.map +1 -1
  298. package/llms/components/lr-agent-run.md +3 -2
  299. package/llms/components/lr-approval-queue.md +6 -1
  300. package/llms/components/lr-archive-viewer.md +6 -2
  301. package/llms/components/lr-artifact-panel.md +7 -3
  302. package/llms/components/lr-attachment-chip.md +8 -6
  303. package/llms/components/lr-avatar.md +6 -4
  304. package/llms/components/lr-bar-chart.md +4 -2
  305. package/llms/components/lr-bubble-chart.md +4 -2
  306. package/llms/components/lr-button-group.md +10 -0
  307. package/llms/components/lr-button.md +11 -6
  308. package/llms/components/lr-chart.md +8 -2
  309. package/llms/components/lr-chip-group.md +9 -2
  310. package/llms/components/lr-chip.md +8 -1
  311. package/llms/components/lr-commit-card.md +11 -3
  312. package/llms/components/lr-confirm-bar.md +9 -1
  313. package/llms/components/lr-date-input.md +4 -0
  314. package/llms/components/lr-date-picker.md +5 -1
  315. package/llms/components/lr-document-viewer.md +1 -1
  316. package/llms/components/lr-doughnut-chart.md +4 -2
  317. package/llms/components/lr-emoji-picker.md +16 -4
  318. package/llms/components/lr-export-button.md +2 -1
  319. package/llms/components/lr-flag.md +9 -5
  320. package/llms/components/lr-graph-query-builder.md +6 -5
  321. package/llms/components/lr-heatmap.md +12 -7
  322. package/llms/components/lr-histogram.md +3 -2
  323. package/llms/components/lr-html-viewer.md +4 -1
  324. package/llms/components/lr-json-viewer.md +2 -1
  325. package/llms/components/lr-knowledge-base-admin.md +10 -1
  326. package/llms/components/lr-known-date.md +8 -4
  327. package/llms/components/lr-line-chart.md +4 -2
  328. package/llms/components/lr-locale-picker.md +1 -1
  329. package/llms/components/lr-model-select.md +3 -0
  330. package/llms/components/lr-notebook-viewer.md +4 -2
  331. package/llms/components/lr-pagination.md +6 -3
  332. package/llms/components/lr-pdf-viewer.md +5 -2
  333. package/llms/components/lr-pie-chart.md +4 -2
  334. package/llms/components/lr-polar-area-chart.md +4 -2
  335. package/llms/components/lr-pptx-viewer.md +3 -1
  336. package/llms/components/lr-push-to-talk.md +4 -0
  337. package/llms/components/lr-radar-chart.md +4 -2
  338. package/llms/components/lr-radio.md +7 -1
  339. package/llms/components/lr-result-card.md +9 -3
  340. package/llms/components/lr-result-field.md +8 -2
  341. package/llms/components/lr-retrieval-results.md +12 -7
  342. package/llms/components/lr-scatter-chart.md +4 -2
  343. package/llms/components/lr-schema-viewer.md +13 -1
  344. package/llms/components/lr-sequence-strip.md +21 -16
  345. package/llms/components/lr-slider.md +4 -0
  346. package/llms/components/lr-split.md +9 -1
  347. package/llms/components/lr-stepper.md +5 -3
  348. package/llms/components/lr-svg-viewer.md +24 -8
  349. package/llms/components/lr-table.md +21 -3
  350. package/llms/components/lr-task-list.md +7 -3
  351. package/llms/components/lr-terminal.md +10 -4
  352. package/llms/components/lr-time-range.md +6 -0
  353. package/llms/components/lr-tool-call-chip.md +4 -3
  354. package/llms/components/lr-tool-param-form.md +7 -2
  355. package/llms/components/lr-tool-result-dialog.md +2 -1
  356. package/llms/components/lr-tree-node.md +1 -1
  357. package/llms/components/lr-widget.md +6 -1
  358. package/llms/shared.md +1 -1
  359. package/llms-full.txt +353 -117
  360. package/package.json +7 -4
  361. package/vscode-css-data.json +141 -1
  362. package/vscode-html-data.json +29 -36
  363. package/web-types.json +111 -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`
@@ -5520,8 +5612,10 @@ text color of the `current` step. `--lr-stepper-current-font-weight` (default
5520
5612
  `var(--lr-font-weight-semibold)`) — font weight of the `current` step's label.
5521
5613
  `--lr-stepper-error-color` (default `var(--lr-color-danger)`) —
5522
5614
  text color of an `error` step. `--lr-stepper-current-index-bg` (default `var(--lr-color-brand)`) and
5523
- `--lr-stepper-current-index-color` (default `var(--lr-color-surface)`) — background and text color
5524
- 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
5525
5619
  of use, never declared on `:host`, so it can be set on the element or on any ancestor; and each is
5526
5620
  scoped to its own `data-state`, so recoloring the current step leaves `pending`/`completed`/`error`
5527
5621
  steps alone. The hooks exist because `::part(step)[data-state='current']` is invalid CSS — Shadow
@@ -5529,7 +5623,7 @@ Parts forbids an attribute selector after `::part()` — so state-specific themi
5529
5623
  overriding a library-wide `--lr-color-*` token and repainting everything else that read it. Unset,
5530
5624
  each falls back to the token its rule used before. Otherwise shared tokens —
5531
5625
  `--lr-space-m`/`-xs`/`-2xs`,
5532
- `--lr-color-text-quiet`/`-text`/`-danger`/`-brand`/`-surface`, `--lr-radius`/`-pill`,
5626
+ `--lr-color-text-quiet`/`-text`/`-danger`/`-brand`/`-on-brand`, `--lr-radius`/`-pill`,
5533
5627
  `--lr-font-size-xs`, `--lr-font-weight-semibold`, `--lr-opacity-disabled`,
5534
5628
  `--lr-focus-ring-*`.
5535
5629
 
@@ -7495,7 +7589,14 @@ usage)
7495
7589
  `overflow-indicator` (the "+N" / "Show less" toggle button; only rendered while `max-visible` is
7496
7590
  actively causing an overflow — a locally-styled pill, not an instantiated real `<lr-chip>`)
7497
7591
 
7498
- **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`,
7499
7600
  `--lr-color-border`, `--lr-color-surface`, `--lr-color-text-quiet`, `--lr-color-text`,
7500
7601
  `--lr-color-brand`, `--lr-focus-ring-width`, `--lr-focus-ring-color`,
7501
7602
  `--lr-focus-ring-offset`, `--lr-transition-fast`).
@@ -7887,7 +7988,8 @@ shared-clamp note.
7887
7988
  ```
7888
7989
 
7889
7990
  Package-level CSV utilities (used internally, also exported for standalone use — `import {
7890
- escapeCsvField, buildCsv, downloadBlob } from '@aceshooting/lyra-ui'`):
7991
+ escapeCsvField, buildCsv, downloadBlob } from
7992
+ '@aceshooting/lyra-ui/components/utility/export-button/csv.js'`):
7891
7993
  ```ts
7892
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)
7893
7995
  buildCsv(rows: Record<string, unknown>[], columns: CsvColumn[]): string // CRLF-joined, header row included
@@ -8052,7 +8154,8 @@ while it matches `search`, and `data-active` while it is the current cursor posi
8052
8154
  present for row alignment on leaf/empty nodes),
8053
8155
  `copy-button` (a copy-to-clipboard button — the top-level one in `toolbar` (aria-label "Copy JSON to
8054
8156
  clipboard") or a per-node one (aria-label `Copy ${key/type}`, e.g. "Copy age"); only rendered when
8055
- `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)
8056
8159
 
8057
8160
  **Themeable custom properties:** `--lr-json-viewer-max-height` (default `none` — grows with content
8058
8161
  until `max-height` is set), `--lr-json-viewer-font` (default `var(--lr-font-mono)`),
@@ -8716,10 +8819,14 @@ The two height knobs work as a pair on `[part='field-input']`, the same way
8716
8819
  - Auto-advance (typing a field's last digit moves to the next) and backspace-into-the-previous-field
8717
8820
  are this library's own additions, not Web Awesome parity. Auto-advance is purely digit-count
8718
8821
  based, never value based.
8719
- - Each `<input>` shows exactly what was typed and is never reformatted or reverted; only the
8720
- composite `value` is zero-padded.
8721
- - Non-digit keystrokes are rejected before reaching field state — locale-specific numerals
8722
- (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`.
8723
8830
  - ArrowLeft/ArrowRight cross fields at a field's text boundary, and the *physical* key meaning
8724
8831
  "next field" flips under an inherited `dir="rtl"`; the locale-derived field order itself does not.
8725
8832
  - A blank composite is `valueMissing` only when **all three** fields are blank; a partially typed
@@ -8920,7 +9027,8 @@ Country/language flag image. Flag artwork ships in a **separate, optional peer p
8920
9027
 
8921
9028
  **Slots:** none.
8922
9029
 
8923
- **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)
8924
9032
 
8925
9033
  **Themeable custom properties:** `--lr-flag-radius` (default `calc(var(--lr-radius) * 0.33)` —
8926
9034
  non-`round` corner radius), `--lr-flag-aspect-ratio` (default `4 / 3`), and
@@ -8929,7 +9037,7 @@ non-`round` corner radius), `--lr-flag-aspect-ratio` (default `4 / 3`), and
8929
9037
  **Optional peer deps:** `@aceshooting/lyra-flags` — required for the component to actually render an
8930
9038
  image when `country` or `language` is used. Import `components/flag/flag-peer.js` once to opt into
8931
9039
  that resolver; a pre-resolved `src` works without the peer registration entry. If the peer is not
8932
- installed, renders an empty template (see gotchas).
9040
+ installed, the component fails closed with a localized `[part="error"]` alert (see gotchas).
8933
9041
 
8934
9042
  Also exported from the package root:
8935
9043
  `languageToCountry(language: string): string | undefined` and the `LANGUAGE_TO_COUNTRY` lookup
@@ -8969,7 +9077,7 @@ pronounces the endonym in its own language, and use `variant="compact"` at icon
8969
9077
  ```
8970
9078
 
8971
9079
  ```js
8972
- import { localeNativeName, languageToCountry } from '@aceshooting/lyra-ui';
9080
+ import { localeNativeName, languageToCountry } from '@aceshooting/lyra-ui/components/media/flag/language-map.js';
8973
9081
 
8974
9082
  const rows = ['en', 'fr', 'de', 'pt-BR', 'ja', 'ar'].map((tag) => ({
8975
9083
  tag,
@@ -8998,9 +9106,12 @@ import '@aceshooting/lyra-ui/components/media/flag/flag-peer.js';
8998
9106
  registers the component without importing the optional flag asset graph. Requires the optional
8999
9107
  peer `@aceshooting/lyra-flags` to actually render an image; without it the component still shows a
9000
9108
  `<lr-skeleton variant="rect">` placeholder (with `aria-busy="true"` on
9001
- 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`
9002
9111
  once the resolver rejects (lazy `import()`, cached module-wide so the warning fires only once per
9003
- 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.
9004
9115
  - Rendering is async even when the peer *is* installed: `src` resolves after an `import()` +
9005
9116
  resolver call, so there's a brief loading-skeleton window on first paint/attribute change — don't
9006
9117
  assume the `<img>` exists synchronously right after setting `country`/`language`.
@@ -9519,7 +9630,7 @@ size renders nothing instead of `"NaN B"`.
9519
9630
  <lr-attachment-chip name="report.pdf" size="245000" mime-type="application/pdf" status="done"></lr-attachment-chip>
9520
9631
  <lr-attachment-chip id="att-2" status="uploading" progress="42"></lr-attachment-chip>
9521
9632
  <script type="module">
9522
- import { formatFileSize } from '@aceshooting/lyra-ui';
9633
+ import { formatFileSize } from '@aceshooting/lyra-ui/components/media/attachment-chip/file-size.js';
9523
9634
 
9524
9635
  const chip = document.createElement('lr-attachment-chip');
9525
9636
  chip.file = pickedFile; // name/size/mime-type/thumbnail all derived from the File
@@ -9530,11 +9641,13 @@ size renders nothing instead of `"NaN B"`.
9530
9641
  </script>
9531
9642
  ```
9532
9643
 
9533
- The image thumbnail for a real `File` is a lazily-created `URL.createObjectURL()` blob URL
9534
- created only from `render()`, i.e. only once a thumbnail is actually about to paint, never eagerly
9535
- on `file` assignment and revoked automatically once `file` changes to a different `File` (or to
9536
- `undefined`) and on disconnect, so reassigning `file` several times before the next paint never
9537
- 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.
9538
9651
 
9539
9652
  **Known gotchas:**
9540
9653
  - `file` always wins over `name`/`size`/`mimeType` when both are set — assigning those props while
@@ -9797,10 +9910,12 @@ icon/glyph, only shown while the slot has assigned content), `image` (the `<img>
9797
9910
  while `src` is set, hasn't failed to load, and no icon is slotted), `initials` (the fallback
9798
9911
  initials text, rendered whenever neither `icon` nor `image` is).
9799
9912
 
9800
- **Themeable custom properties:** `--lr-avatar-size` (default `2rem`, swapped to `1.5rem`/`2.5rem`
9801
- per `size="sm"`/`"lg"`), `--lr-avatar-bg` (default `var(--lr-color-surface-alt,
9802
- var(--lr-color-border))`, swapped per `tone`), `--lr-avatar-color` (default
9803
- `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
9804
9919
  `var(--lr-font-size-sm)`) — the font size of the initials fallback, and of any `em`-sized slotted
9805
9920
  glyph. `size` swaps it per tier too (`var(--lr-font-size-xs)` at `sm`, `var(--lr-font-size-md)` at
9806
9921
  `lg`), so the initials track the circle instead of staying one fixed size across every tier;
@@ -10338,7 +10453,13 @@ properties only cascade downward); `--lr-chart-grid-color` (default `var(--lr-co
10338
10453
  `getComputedStyle` on every draw (Chart.js renders to canvas, not the DOM, so it can't consume CSS
10339
10454
  `var()` directly), driving the grid lines, tick labels **and axis titles** (`xLabel`/`yLabel`/
10340
10455
  `y2Label` title text reuses `--lr-chart-tick-color` too — there's no separate title-color token),
10341
- 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`.
10342
10463
 
10343
10464
  **Optional peer deps:** `chart.js` (mandatory peer, lazy-imported on every `connectedCallback()`
10344
10465
  regardless of `zoom`), `chartjs-plugin-zoom` (lazy-imported *additionally* only when `zoom` is — or
@@ -10595,7 +10716,9 @@ dependency fails to load — see `llms/components/lr-chart.md`).
10595
10716
 
10596
10717
  **Themeable custom properties:** `--lr-chart-height`, `--lr-chart-grid-color`,
10597
10718
  `--lr-chart-tick-color`, `--lr-chart-legend-color`, `--lr-chart-tooltip-bg`,
10598
- `--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.
10599
10722
 
10600
10723
  **Optional peer deps:** same as `lr-chart` — `chart.js`, plus `chartjs-plugin-zoom` only once
10601
10724
  `zoom` is set, and `chartjs-plugin-datalabels` only once `data-labels`/`stack-totals` is set.
@@ -10659,7 +10782,8 @@ dependency fails to load — inherited from `LyraChart`, unaffected by the binni
10659
10782
 
10660
10783
  **Themeable custom properties:** `--lr-chart-height`, `--lr-chart-grid-color`,
10661
10784
  `--lr-chart-tick-color`, `--lr-chart-legend-color`, `--lr-chart-tooltip-bg`,
10662
- `--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.
10663
10787
 
10664
10788
  **Optional peer deps:** the same `chart.js` (+ `chartjs-plugin-zoom` when `zoom` is set) peers.
10665
10789
 
@@ -11000,7 +11124,7 @@ Register a renderer once during application setup. The definition may load a hea
11000
11124
  only when a matching document is opened:
11001
11125
 
11002
11126
  ```ts
11003
- import { registerDocumentRenderer } from '@aceshooting/lyra-ui';
11127
+ import { registerDocumentRenderer } from '@aceshooting/lyra-ui/components/viewers/document-viewer/registry.js';
11004
11128
 
11005
11129
  registerDocumentRenderer('application/x-example', {
11006
11130
  render: (file) => `Preview: ${file.name}`,
@@ -11175,8 +11299,12 @@ stylesheet.
11175
11299
 
11176
11300
  **Optional peer dependency:** install `jszip` with `pnpm add jszip`. The lazy registry registers
11177
11301
  `application/zip` and `application/x-zip-compressed`, with a `.zip` filename fallback, and imports
11178
- the viewer only when a matching archive is opened. `.tar`, `.rar`, and other archive formats fall
11179
- 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.
11180
11308
 
11181
11309
  Remote resources are capped at 25 MB; exceeding it surfaces the localized
11182
11310
  `documentPreviewResourceTooLarge` message instead of the entry listing.
@@ -11257,7 +11385,9 @@ and `lr-render-error` with `detail.error`.
11257
11385
 
11258
11386
  **Optional peer dependency:** install `@aiden0z/pptx-renderer` with
11259
11387
  `pnpm add @aiden0z/pptx-renderer`. The registry matches the official PPTX MIME type and `.pptx`
11260
- 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.
11261
11391
 
11262
11392
  Remote resources are capped at 25 MB; exceeding it surfaces the localized
11263
11393
  `documentPreviewResourceTooLarge` message instead of the presentation.
@@ -11266,26 +11396,42 @@ Remote resources are capped at 25 MB; exceeding it surfaces the localized
11266
11396
 
11267
11397
  Fetches an SVG document, sanitizes it with the optional `dompurify` peer, and renders it inline.
11268
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
+
11269
11406
  **Properties:** `src`, `name`, and `maxHeight` (attribute `max-height`) are strings. `maxHeight` caps
11270
11407
  the scrollable body. `zoomable: boolean = false` (reflected) — wraps the rendered content in an
11271
11408
  internal `<lr-zoomable-frame>`. `false` (the default) preserves the exact pre-`zoomable` DOM — an
11272
11409
  inline thumbnail (e.g. in a chat stream) must not unexpectedly grow a focusable zoom-chrome viewport;
11273
- an inspection surface opts in. `highlights: LyraHighlight[] = []` (attribute: false) — display-only
11274
- `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`
11275
11416
  (attribute `active-highlight-id`) — the `highlights` entry, if any, currently treated as active
11276
11417
  (`data-active` on its `region-highlight`). `anchorKinds` is a readonly `['region']` (this viewer's
11277
11418
  supported `LyraAnchor.kind` values for the shared anchor-target contract).
11278
11419
 
11279
- **Methods:** `scrollToAnchor(target)` — scrolls a `region` highlight (by id, or a `LyraAnchor` matched
11280
- back to its owning `LyraHighlight` by reference) into view; resolves `false` when nothing matches, the
11281
- anchor isn't `region`, or the document isn't loaded yet (no retry loop — a caller invoking this before
11282
- `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.
11283
11426
 
11284
11427
  **Events:** `lr-render-error` with `detail.error` when fetching or sanitizing fails.
11285
11428
  `lr-highlight-activate` (`detail: { id }`) — a region highlight was clicked or activated via
11286
- 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.
11287
11431
 
11288
- **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
11289
11435
  rendered region highlight), `region-highlight` (one region highlight, `data-tone`, `data-active`),
11290
11436
  `region-highlight-target` (transparent activation geometry with an independent minimum hit area),
11291
11437
  `highlight-actions` (non-overlapping actions for multiple highlights), `region-highlight-action`
@@ -11332,7 +11478,10 @@ inside a bounded, scrollable body.
11332
11478
  **Themeable custom properties:** `--lr-html-viewer-max-height` (default `none`) — maximum block size
11333
11479
  of `[part="body"]`; also settable via the `max-height` property, which writes this token inline.
11334
11480
 
11335
- **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.
11336
11485
 
11337
11486
  Remote resources are capped at 25 MB; exceeding it surfaces the localized
11338
11487
  `documentPreviewResourceTooLarge` message instead of the document.
@@ -11468,7 +11617,10 @@ table of contents as `PdfOutlineItem[]` (`{ title, page?, children? }`), `[]` wh
11468
11617
  `clearSearch()`); `searchNext()` and `searchPrevious()` advance/step back through matches (wrapping,
11469
11618
  resolving `false` when there are none); `clearSearch()` clears the query, matches, and painted marks.
11470
11619
 
11471
- **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`
11472
11624
  (the canvas one page's content is painted onto), `text-layer`, `text-span` (one generated text run
11473
11625
  inside a page's text layer — PDF.js creates these imperatively, and they carry the part so a rule can
11474
11626
  reach them without a descendant combinator), `search-match` (a `<mark>` painted into a mounted page's
@@ -11726,8 +11878,10 @@ Execution is a hard non-goal. Markdown cells render through `lr-markdown`, code
11726
11878
  `lr-code-block` (using the notebook's kernel language for syntax highlighting), and raw cells as
11727
11879
  plain preformatted text. A code cell's `execute_result`/`display_data` outputs prefer, in order,
11728
11880
  `image/png`, `image/jpeg`, `image/svg+xml` (sanitized), `text/html` (sanitized), `application/json`
11729
- (via `lr-json-viewer`), then `text/plain`. Stream/error outputs render as plain preformatted text
11730
- (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
11731
11885
  optional peer `dompurify`; without it, the output renders a localized notice instead of raw markup.
11732
11886
  Cells are virtualized through `lr-virtual-list`. `node-path` anchors resolve `path[0]` as a cell
11733
11887
  index; `fragment` anchors resolve a cell's own `id`. No execution, no kernels, no editing, no
@@ -12951,6 +13105,9 @@ visually-distinct row (dashed border, italic label, "not in catalog" badge) comp
12951
13105
  from the listbox or committed in free-text mode; `inCatalog` reflects whether that value was
12952
13106
  actually present in `normalizedCatalog`, so a consumer can flag a freshly-typed custom value
12953
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.
12954
13111
  - `blur` (no detail) — re-dispatched from the free-text mode's internal `<input>`'s own `blur`,
12955
13112
  bubbling and composed unlike the native event. Closed-dropdown mode's trigger `<button>` has no
12956
13113
  equivalent re-dispatch, matching `<lr-select>`'s own trigger.
@@ -13742,6 +13899,10 @@ and it repainted every other danger surface with it.
13742
13899
 
13743
13900
  - `blur()` — Forwards host blur to the internal push-to-talk control.
13744
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.
13745
13906
 
13746
13907
  ## `lr-transcript-feed`
13747
13908
 
@@ -14591,9 +14752,10 @@ the built-in glyph for the current `status` is used)
14591
14752
  `summary`), `category`, `name`, `summary`, `meta` (wrapper around `status-text` and `duration`),
14592
14753
  `status-text`, `duration`, `tooltip` (the floating detail popup, only meaningful while open)
14593
14754
 
14594
- **Themeable custom properties:** `--lr-tool-call-chip-spin` (default `1s linear` — running-icon
14595
- animation duration/timing) and `--lr-transition-ambient` (default `1.8s ease-in-out` pending-icon
14596
- 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
14597
14759
  `--lr-tool-call-chip-border` are internal per-status variables reassigned by this component's own
14598
14760
  `:host([status="…"])` rules (e.g. `pending` → `--lr-color-text-quiet`/`--lr-color-surface`/
14599
14761
  `--lr-color-border`; `running` → brand; `success` → success; `error` → danger; `denied` → warning),
@@ -14892,7 +15054,8 @@ tool name/status/duration), `tool-name`, `status`, `duration`, `header-actions`,
14892
15054
  0.5)` — the backdrop scrim color; component-specific since no shared overlay token exists),
14893
15055
  `--lr-tool-result-dialog-maximized-inset` (default `var(--lr-space-l)` — inset applied to the
14894
15056
  panel while `[maximized]`, overridable e.g. to leave a persistent app rail visible), and
14895
- `--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
14896
15059
  tokens `--lr-color-surface/-border/-text-quiet/-brand/-brand-quiet/-success/-success-quiet/
14897
15060
  -danger/-danger-quiet/-warning/-warning-quiet`, `--lr-space-*`, `--lr-radius`, `--lr-shadow`,
14898
15061
  `--lr-icon-button-size`, `--lr-focus-ring-*`, `--lr-transition-base`.
@@ -15426,7 +15589,12 @@ set `valid: false` while `formError`, rather than a fabricated field key, carrie
15426
15589
 
15427
15590
  **Slots:** none.
15428
15591
 
15429
- **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.
15430
15598
 
15431
15599
  **Themeable custom properties:** no component-specific custom properties; shared tokens only —
15432
15600
  `--lr-space-l/-xs/-s`, `--lr-color-border`, `--lr-radius`, `--lr-color-surface`,
@@ -15541,8 +15709,14 @@ whenever the slot has no assigned content), `body`.
15541
15709
 
15542
15710
  **Themeable custom properties:** `--lr-result-card-compact-header-padding` (default
15543
15711
  `var(--lr-space-xs)`) — `[part="header"]` block/inline padding while `compact`;
15544
- `--lr-result-card-compact-body-padding` (default `var(--lr-space-xs)`) — `[part="body"]` padding
15545
- 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`,
15546
15720
  `--lr-radius`.
15547
15721
 
15548
15722
  ### `lr-result-field`
@@ -15692,9 +15866,13 @@ indicator, only rendered when `collapsible`), `body` (the list of items, `hidden
15692
15866
  `item-detail`, and `item-children` (the nested `role="list"` wrapper around a top-level item's
15693
15867
  children).
15694
15868
 
15695
- **Themeable custom properties:** `--lr-task-list-spin` (default `1s linear`) — running-status icon
15696
- 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
15697
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;
15698
15876
  `--lr-task-list-compact-gap` (default `var(--lr-space-2xs)`) — gap between `[part="body"]`'s item
15699
15877
  rows while `compact`; `--lr-task-list-compact-body-padding` (default `var(--lr-space-2xs)
15700
15878
  var(--lr-space-s) var(--lr-space-s)`) — `[part="body"]` padding while `compact`.
@@ -15711,12 +15889,18 @@ codes. `maxScrollback: number = 5000` (attribute `max-scrollback`), `follow: boo
15711
15889
  string = 'terminal.log'`, `announceOutput: boolean = false` (attribute `announce-output`),
15712
15890
  `accessibleLabel: string = ''` (attribute `aria-label`), `highlights: LyraHighlight[] = []` (attribute:
15713
15891
  false), and `activeHighlightId: string | null = null` (attribute: false). `anchorKinds` is a readonly
15714
- `['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.
15715
15896
 
15716
15897
  **Methods:** `write(text)` appends ANSI-parsed text to the buffer. `clear()` empties the buffer.
15717
- `scrollToBottom()` and `scrollToAnchor(anchor)` control scroll position. `search(query)`,
15718
- `searchNext()`, `searchPrevious()`, and `clearSearch()` drive in-buffer text search. `getPlainText()`
15719
- 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.
15720
15904
 
15721
15905
  **Events:** `lr-copy` (`detail: { text }`), `lr-download` (`detail: { filename }`),
15722
15906
  `lr-follow-change` (`detail: { following }`), `lr-search-change` (`detail: { query, matchCount,
@@ -15876,8 +16060,16 @@ when both are set.
15876
16060
  }`), and `lr-copy` (`detail: { text: string }`, the full hash was copied).
15877
16061
 
15878
16062
  **CSS parts:** `base`, `subject`, `body`, `hash`, `meta`, `author`, `time`, `diffstat`, `additions`,
15879
- `deletions`, `files-toggle`, `file` (carries `data-status`), `file-path`, `file-additions`,
15880
- `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.
15881
16073
 
15882
16074
  **Themeable custom properties:** `--lr-commit-card-compact-padding` (default `var(--lr-space-s)`) —
15883
16075
  `[part="base"]` padding while `compact`.
@@ -15976,6 +16168,14 @@ They are inline `var()` fallbacks at their point of use rather than `:host` decl
15976
16168
  them can be set on the element *or on any ancestor*, which is what makes "give every compact confirm
15977
16169
  bar in this panel a hairline border" a one-rule change on the panel.
15978
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
+
15979
16179
  **Known gotchas:**
15980
16180
  - `[part="status"]` is always rendered and must never be given `display: none`. Deciding moves focus
15981
16181
  to it synchronously, before the Deny/Approve buttons unmount, so hiding it would drop focus to
@@ -16076,9 +16276,13 @@ entry is the latest version. `activeVersionId: string | null = null` (attribute
16076
16276
  `aria-busy` on the body and shows a text indicator (not animated, so it stays legible under reduced
16077
16277
  motion). `copyText: string = ''` (attribute `copy-text`) — the text copied to the clipboard by the
16078
16278
  copy button; empty hides the button. `downloadSrc: string = ''` (attribute `download-src`) — the
16079
- download URL, sanitized through `safeMediaSrc()`; empty hides the button. `downloadName: string =
16080
- ''` (attribute `download-name`) the suggested filename reported in the `lr-download` event
16081
- 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.
16082
16286
 
16083
16287
  **Slots:** default — preview-view content (markdown/html-viewer/browser-frame/image). `code` —
16084
16288
  code-view content (typically a `lr-code-block`); the preview/code toggle only renders once this
@@ -16179,8 +16383,9 @@ this component's own retry counter, reset when `run.id` changes).
16179
16383
  `reasoning`, `output`, `actions`, `cancel-button`, `retry-button`, `metric-label`, `metric-value`
16180
16384
  (carries `data-variant`), `empty`.
16181
16385
 
16182
- **Themeable custom properties:** `--lr-agent-run-spin` (default `1s linear`) — the running-status
16183
- 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
16184
16389
  `var(--lr-space-s)`) and `--lr-agent-run-compact-gap` (default `var(--lr-space-s)`) — `[part="base"]`'s
16185
16390
  padding, and the gap between its header and body, while `compact`; both are ignored while `compact`
16186
16391
  is unset. Like the other density/state properties in this family they are inline `var()` fallbacks at
@@ -16513,7 +16718,12 @@ It never executes tools or persists decisions.
16513
16718
  approved, args? }`), and `lr-approval-close` (`{ invocationId, reason }`).
16514
16719
 
16515
16720
  **CSS parts:** `base`, `heading-row`, `heading`, `count`, `list`, `request`, `request-info`,
16516
- `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.
16517
16727
 
16518
16728
  **Additional API surface:**
16519
16729
 
@@ -16619,6 +16829,18 @@ keywords. `SchemaValidationIssue = { path: string; message: string; severity?: '
16619
16829
  **CSS parts:** `base`, `tree`, `node`, `node-selected`, `node-trigger`, `name`, `type`, `required`,
16620
16830
  `description`, `constraints`, `issue`, `limit`, `empty`.
16621
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
+
16622
16844
  Rendering is capped at 500 schema nodes; `limit` reports truncation. Cycles stop at the repeated
16623
16845
  node rather than recursing. **Slots:** none. **Optional peer deps:** none.
16624
16846
 
@@ -18102,19 +18324,24 @@ Large sets window through an internal `lr-virtual-list`.
18102
18324
  **Properties:**
18103
18325
  - `chunks: RetrievalChunk[] = []` (attribute: false) — **`RetrievalChunk`, imported from
18104
18326
  `@aceshooting/lyra-ui/ai`** (`src/ai/types.ts`): `{ id: string; text: string; score: number;
18105
- source: DocumentRef; metadata?: Record<string, unknown> }`. The raw, un-deduplicated/unsorted/
18106
- ungrouped result set; host-owned. Internally mapped to `lr-chunk-inspector`'s flatter `LyraChunk`
18107
- via `source.id sourceId`, `source.name title` (no `page`/`anchor` — `RetrievalChunk` carries
18108
- 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
18109
18334
  - `selectedIds: string[] = []` (attribute: false) — controlled selection by chunk `id`. The component
18110
18335
  updates its own copy on toggle *then* emits `lr-select`; reassign to control. An id with no
18111
18336
  matching chunk is harmless
18112
18337
  - `selectable: boolean = true` (reflected) — shows a per-row `lr-checkbox`
18113
18338
  - `dedupe: boolean = true` (reflected) — drops duplicate `id`s, keeping the higher `score`
18114
18339
  - `sort: 'score' | 'none' = 'score'` — `'score'` sorts descending; `'none'` preserves given order
18115
- - `grouping: 'source' | 'none' = 'none'` — `'source'` buckets rows under a header per `source.id`,
18116
- each bucket ordered by its own best-scoring chunk, and **always** virtualizes regardless of
18117
- `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`
18118
18345
  - `presentation: 'compact' | 'expanded' = 'expanded'` — `'expanded'` shows each chunk's full row
18119
18346
  (score bar, text preview with its own toggle) plus any `metadata`; `'compact'` shows title + score
18120
18347
  bar only and omits `metadata` entirely
@@ -18361,6 +18588,15 @@ correlated ids/details from their composed primitives).
18361
18588
 
18362
18589
  **CSS parts:** `base`, `heading`, `tabs`, `tab`, `panel`, `settings`.
18363
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
+
18364
18600
  ## `lr-claim-evidence`
18365
18601
 
18366
18602
  Controlled claim-by-claim grounding audit relating `GroundedClaim[]` to complete `Citation[]`