@aceshooting/lyra-ui 19.0.0 → 20.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (419) hide show
  1. package/CHANGELOG.md +163 -0
  2. package/custom-elements.json +1 -1
  3. package/dist/cli/migration-contract.json +1 -1
  4. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts +14 -4
  5. package/dist/components/agent-tools/activity-feed/activity-feed.styles.js +1 -1
  6. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +1 -0
  7. package/dist/components/agent-tools/approval-queue/approval-queue.class.js +4 -3
  8. package/dist/components/agent-tools/approval-queue/approval-queue.styles.js +1 -1
  9. package/dist/components/agent-tools/artifact-panel/artifact-panel.class.d.ts +3 -1
  10. package/dist/components/agent-tools/context-inspector/context-inspector.class.d.ts +1 -0
  11. package/dist/components/agent-tools/context-inspector/context-inspector.class.js +4 -3
  12. package/dist/components/agent-tools/context-inspector/context-inspector.styles.js +1 -1
  13. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.js +1 -1
  14. package/dist/components/agent-tools/eval-result/eval-result.class.js +1 -1
  15. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.d.ts +1 -0
  16. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js +4 -3
  17. package/dist/components/agent-tools/evaluation-run/evaluation-run.styles.js +1 -1
  18. package/dist/components/agent-tools/policy-summary/policy-summary.class.d.ts +1 -0
  19. package/dist/components/agent-tools/policy-summary/policy-summary.class.js +4 -3
  20. package/dist/components/agent-tools/policy-summary/policy-summary.styles.js +1 -1
  21. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +1 -1
  22. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +10 -1
  23. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +3 -3
  24. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +1 -1
  25. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts +6 -3
  26. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +1 -1
  27. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +14 -3
  28. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +2 -2
  29. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts +12 -2
  30. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +3 -1
  31. package/dist/components/charts/chart/box-plot.class.d.ts +15 -3
  32. package/dist/components/charts/chart/box-plot.class.js +3 -3
  33. package/dist/components/charts/chart/box-plot.styles.js +1 -1
  34. package/dist/components/charts/chart/chart.class.d.ts +24 -6
  35. package/dist/components/charts/chart/chart.class.js +3 -3
  36. package/dist/components/charts/chart/chart.styles.js +1 -1
  37. package/dist/components/charts/chart/lite-chart.class.js +1 -1
  38. package/dist/components/charts/chart/lite-chart.styles.js +1 -1
  39. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +4 -2
  40. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +1 -1
  41. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts +4 -2
  42. package/dist/components/conversation/branch-picker/branch-picker.class.js +1 -1
  43. package/dist/components/conversation/chat-viewport/chat-viewport.class.d.ts +4 -3
  44. package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
  45. package/dist/components/conversation/code-block/code-block-core.class.d.ts +6 -11
  46. package/dist/components/conversation/code-block/code-block-core.class.js +1 -1
  47. package/dist/components/conversation/code-block/code-block-shared.d.ts +29 -1
  48. package/dist/components/conversation/code-block/code-block-shared.js +1 -1
  49. package/dist/components/conversation/code-block/code-block.class.d.ts +6 -11
  50. package/dist/components/conversation/code-block/code-block.class.js +1 -1
  51. package/dist/components/conversation/markdown/markdown-shared.js +2 -2
  52. package/dist/components/conversation/message-actions/message-actions.class.d.ts +4 -2
  53. package/dist/components/conversation/message-actions/message-actions.class.js +2 -2
  54. package/dist/components/conversation/message-parts/message-parts.class.d.ts +17 -2
  55. package/dist/components/conversation/model-select/model-select.class.js +1 -0
  56. package/dist/components/conversation/model-select/model-select.styles.js +1 -1
  57. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +5 -1
  58. package/dist/components/conversation/prompt-input/prompt-input.class.js +2 -2
  59. package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +6 -1
  60. package/dist/components/conversation/prompt-queue/prompt-queue.class.js +2 -2
  61. package/dist/components/conversation/realtime-session/realtime-session.class.d.ts +5 -1
  62. package/dist/components/conversation/realtime-session/realtime-session.class.js +1 -1
  63. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts +5 -1
  64. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
  65. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +13 -2
  66. package/dist/components/conversation/voice-picker/voice-picker.class.js +5 -3
  67. package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
  68. package/dist/components/data/calendar/calendar.class.d.ts +9 -0
  69. package/dist/components/data/calendar/calendar.class.js +2 -2
  70. package/dist/components/data/calendar/calendar.styles.js +1 -1
  71. package/dist/components/data/condition-builder/condition-builder.class.d.ts +5 -1
  72. package/dist/components/data/context-meter/context-meter.class.d.ts +4 -0
  73. package/dist/components/data/context-meter/context-meter.styles.js +1 -1
  74. package/dist/components/data/data-grid/data-grid.class.d.ts +8 -2
  75. package/dist/components/data/data-grid/data-grid.class.js +1 -2
  76. package/dist/components/data/flow-node/flow-node.class.d.ts +7 -4
  77. package/dist/components/data/flow-node/flow-node.styles.js +1 -1
  78. package/dist/components/data/funnel/funnel.class.d.ts +5 -0
  79. package/dist/components/data/funnel/funnel.class.js +4 -3
  80. package/dist/components/data/funnel/funnel.styles.js +1 -1
  81. package/dist/components/data/gauge/gauge.class.d.ts +12 -1
  82. package/dist/components/data/gauge/gauge.styles.js +1 -1
  83. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +50 -13
  84. package/dist/components/data/graph-query-builder/graph-query-builder.class.js +2 -2
  85. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +1 -1
  86. package/dist/components/data/heatmap/heatmap.class.d.ts +27 -9
  87. package/dist/components/data/heatmap/heatmap.class.js +5 -3
  88. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +2 -0
  89. package/dist/components/data/sequence-strip/sequence-strip.styles.js +1 -1
  90. package/dist/components/data/table/table.class.d.ts +10 -1
  91. package/dist/components/data/table/table.class.js +3 -2
  92. package/dist/components/data/tree/tree.class.d.ts +20 -1
  93. package/dist/components/data/tree/tree.class.js +1 -1
  94. package/dist/components/data/word-cloud/word-cloud.class.d.ts +4 -1
  95. package/dist/components/data/word-cloud/word-cloud.class.js +2 -2
  96. package/dist/components/forms/button/button.class.js +1 -1
  97. package/dist/components/forms/checkbox/checkbox.class.d.ts +11 -8
  98. package/dist/components/forms/checkbox/checkbox.class.js +1 -1
  99. package/dist/components/forms/checkbox/checkbox.styles.js +1 -1
  100. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +2 -2
  101. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  102. package/dist/components/forms/code-editor/code-editor.class.d.ts +2 -0
  103. package/dist/components/forms/code-editor/code-editor.class.js +1 -1
  104. package/dist/components/forms/code-editor/code-editor.styles.js +1 -1
  105. package/dist/components/forms/color-picker/color-picker.class.d.ts +11 -1
  106. package/dist/components/forms/color-picker/color-picker.class.js +4 -3
  107. package/dist/components/forms/combobox/combobox.class.d.ts +69 -20
  108. package/dist/components/forms/combobox/combobox.class.js +8 -6
  109. package/dist/components/forms/combobox/combobox.styles.js +1 -1
  110. package/dist/components/forms/date-picker/date-input.class.d.ts +22 -2
  111. package/dist/components/forms/date-picker/date-input.class.js +4 -2
  112. package/dist/components/forms/date-picker/date-input.styles.js +1 -1
  113. package/dist/components/forms/emoji-picker/emoji-data-loader.d.ts +18 -4
  114. package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
  115. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +18 -4
  116. package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
  117. package/dist/components/forms/emoji-picker/emoji-picker.styles.js +1 -1
  118. package/dist/components/forms/icon-button/icon-button.class.d.ts +1 -1
  119. package/dist/components/forms/input/time-input.class.d.ts +11 -1
  120. package/dist/components/forms/input/time-input.class.js +4 -3
  121. package/dist/components/forms/input/time-input.styles.js +1 -1
  122. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +17 -3
  123. package/dist/components/forms/locale-picker/locale-picker.class.js +3 -2
  124. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
  125. package/dist/components/forms/otp-input/otp-input.class.d.ts +13 -5
  126. package/dist/components/forms/otp-input/otp-input.class.js +2 -2
  127. package/dist/components/forms/otp-input/otp-input.styles.js +1 -1
  128. package/dist/components/forms/phone-input/phone-input.class.d.ts +10 -3
  129. package/dist/components/forms/phone-input/phone-input.class.js +6 -2
  130. package/dist/components/forms/phone-input/phone-input.styles.js +1 -1
  131. package/dist/components/forms/radio/radio-group.class.d.ts +1 -1
  132. package/dist/components/forms/radio/radio-group.class.js +2 -2
  133. package/dist/components/forms/rubric-form/rubric-form.class.d.ts +9 -1
  134. package/dist/components/forms/rubric-form/rubric-form.class.js +5 -3
  135. package/dist/components/forms/select/select.class.d.ts +6 -2
  136. package/dist/components/forms/select/select.class.js +4 -2
  137. package/dist/components/forms/select/select.styles.js +1 -1
  138. package/dist/components/forms/slider/slider.class.d.ts +5 -1
  139. package/dist/components/forms/slider/slider.class.js +3 -3
  140. package/dist/components/forms/switch/switch.class.d.ts +6 -5
  141. package/dist/components/forms/switch/switch.class.js +1 -1
  142. package/dist/components/forms/time-range/time-range.class.d.ts +2 -2
  143. package/dist/components/forms/token-input/token-input.class.d.ts +13 -3
  144. package/dist/components/forms/token-input/token-input.class.js +3 -1
  145. package/dist/components/layout/carousel/carousel.class.d.ts +4 -1
  146. package/dist/components/layout/carousel/carousel.class.js +1 -1
  147. package/dist/components/layout/command-palette/command-palette.class.d.ts +8 -2
  148. package/dist/components/layout/command-palette/command-palette.class.js +1 -1
  149. package/dist/components/layout/command-palette/command-palette.styles.js +1 -1
  150. package/dist/components/layout/details/accordion.class.js +1 -1
  151. package/dist/components/layout/dock-panel/dock-panel.class.d.ts +10 -7
  152. package/dist/components/layout/dock-panel/dock-panel.class.js +2 -2
  153. package/dist/components/layout/dock-panel/dock-panel.styles.js +1 -1
  154. package/dist/components/layout/menu/menu.class.d.ts +13 -3
  155. package/dist/components/layout/menu/menu.class.js +4 -3
  156. package/dist/components/layout/menu/menu.styles.js +1 -1
  157. package/dist/components/layout/page/page.class.d.ts +7 -1
  158. package/dist/components/layout/reorder-list/reorder-list.class.d.ts +1 -1
  159. package/dist/components/layout/reorder-list/reorder-list.class.js +1 -1
  160. package/dist/components/layout/segmented/segmented.class.d.ts +2 -0
  161. package/dist/components/layout/segmented/segmented.styles.js +1 -1
  162. package/dist/components/layout/virtual-list/virtual-list.styles.js +1 -1
  163. package/dist/components/layout/widget/widget.class.d.ts +15 -2
  164. package/dist/components/layout/widget/widget.class.js +1 -1
  165. package/dist/components/layout/widget/widget.styles.js +1 -1
  166. package/dist/components/media/avatar/avatar.class.d.ts +4 -0
  167. package/dist/components/media/avatar/avatar.styles.js +1 -1
  168. package/dist/components/media/avatar-group/avatar-group.class.d.ts +8 -1
  169. package/dist/components/media/avatar-group/avatar-group.styles.js +1 -1
  170. package/dist/components/media/drop-zone/drop-zone.class.d.ts +10 -4
  171. package/dist/components/media/drop-zone/drop-zone.class.js +2 -2
  172. package/dist/components/media/drop-zone/drop-zone.styles.js +1 -1
  173. package/dist/components/media/flag/flag.class.js +1 -1
  174. package/dist/components/media/map/map.class.d.ts +19 -5
  175. package/dist/components/media/map/map.class.js +3 -3
  176. package/dist/components/media/video-playlist/video-playlist.class.d.ts +6 -3
  177. package/dist/components/media/video-playlist/video-playlist.class.js +1 -1
  178. package/dist/components/overlays/callout/callout.class.d.ts +4 -1
  179. package/dist/components/overlays/dialog/dialog.class.d.ts +4 -1
  180. package/dist/components/overlays/overlay/overlay.styles.js +1 -1
  181. package/dist/components/overlays/overlay/popover.class.d.ts +9 -1
  182. package/dist/components/overlays/overlay/popover.class.js +3 -2
  183. package/dist/components/overlays/overlay/tooltip.class.d.ts +14 -4
  184. package/dist/components/overlays/overlay/tooltip.class.js +3 -2
  185. package/dist/components/overlays/popup/popup.class.d.ts +15 -1
  186. package/dist/components/overlays/popup/popup.class.js +3 -3
  187. package/dist/components/overlays/popup/popup.styles.js +1 -1
  188. package/dist/components/overlays/progress/progress-bar.class.d.ts +2 -0
  189. package/dist/components/overlays/progress/progress.styles.js +1 -1
  190. package/dist/components/retrieval/citation-badge/citation-badge.class.d.ts +4 -2
  191. package/dist/components/retrieval/citation-badge/citation-badge.class.js +1 -1
  192. package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts +4 -0
  193. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +4 -3
  194. package/dist/components/retrieval/claim-evidence/claim-evidence.styles.js +1 -1
  195. package/dist/components/retrieval/community-card/community-card.class.d.ts +6 -1
  196. package/dist/components/retrieval/community-card/community-card.styles.js +1 -1
  197. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.d.ts +9 -1
  198. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +4 -3
  199. package/dist/components/retrieval/entity-card/entity-card.styles.js +1 -1
  200. package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts +4 -2
  201. package/dist/components/retrieval/entity-chip/entity-chip.class.js +1 -1
  202. package/dist/components/retrieval/entity-dossier/entity-dossier.class.js +2 -2
  203. package/dist/components/retrieval/graph-legend/graph-legend.class.d.ts +18 -4
  204. package/dist/components/retrieval/graph-legend/graph-legend.class.js +2 -2
  205. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +7 -0
  206. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +4 -3
  207. package/dist/components/retrieval/grounding-summary/grounding-summary.styles.js +1 -1
  208. package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +6 -0
  209. package/dist/components/retrieval/memory-panel/memory-panel.class.js +4 -3
  210. package/dist/components/retrieval/memory-panel/memory-panel.styles.js +1 -1
  211. package/dist/components/retrieval/mind-map/mind-map-layout.d.ts +17 -1
  212. package/dist/components/retrieval/mind-map/mind-map-layout.js +1 -1
  213. package/dist/components/retrieval/mind-map/mind-map.class.d.ts +8 -1
  214. package/dist/components/retrieval/mind-map/mind-map.class.js +3 -2
  215. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.d.ts +5 -0
  216. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js +6 -5
  217. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.styles.js +1 -1
  218. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.js +5 -5
  219. package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.js +1 -1
  220. package/dist/components/retrieval/source-list/source-list.class.d.ts +21 -2
  221. package/dist/components/retrieval/source-list/source-list.class.js +2 -2
  222. package/dist/components/retrieval/source-list/source-list.styles.js +1 -1
  223. package/dist/components/retrieval/source-picker/source-picker.class.d.ts +3 -1
  224. package/dist/components/retrieval/source-picker/source-picker.class.js +2 -2
  225. package/dist/components/utility/diff-view/diff-view.class.d.ts +105 -8
  226. package/dist/components/utility/diff-view/diff-view.class.js +21 -5
  227. package/dist/components/utility/diff-view/diff-view.styles.js +1 -1
  228. package/dist/components/utility/export-button/export-button.class.d.ts +26 -2
  229. package/dist/components/utility/export-button/export-button.class.js +4 -2
  230. package/dist/components/utility/export-button/export-button.styles.js +1 -1
  231. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +19 -1
  232. package/dist/components/utility/mention-popover/mention-popover.class.js +3 -2
  233. package/dist/components/utility/mention-popover/mention-popover.styles.js +1 -1
  234. package/dist/components/utility/tour/tour.class.d.ts +1 -3
  235. package/dist/components/utility/tour/tour.class.js +1 -1
  236. package/dist/components/viewers/archive-viewer/archive-viewer.class.d.ts +20 -3
  237. package/dist/components/viewers/archive-viewer/archive-viewer.class.js +1 -1
  238. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
  239. package/dist/components/viewers/geojson-view/geojson-view.styles.js +1 -1
  240. package/dist/components/viewers/geojson-view/geojson-viewer.class.d.ts +5 -0
  241. package/dist/components/viewers/geojson-view/geojson-viewer.class.js +6 -3
  242. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts +7 -1
  243. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +1 -1
  244. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.d.ts +7 -1
  245. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.js +1 -1
  246. package/dist/components/viewers/xml-viewer/xml-viewer.class.d.ts +5 -0
  247. package/dist/components/viewers/xml-viewer/xml-viewer.class.js +1 -1
  248. package/dist/custom-elements-jsx.d.ts +1 -1
  249. package/dist/events.d.ts +79 -30
  250. package/dist/internal/accessibility-visibility.js +1 -1
  251. package/dist/internal/aria-reflection.js +1 -1
  252. package/dist/internal/catalog-picker.d.ts +14 -3
  253. package/dist/internal/catalog-picker.js +1 -1
  254. package/dist/internal/default-strings.generated.d.ts +1 -1
  255. package/dist/internal/default-strings.generated.js +2 -2
  256. package/dist/internal/localization-types.d.ts +1 -1
  257. package/dist/internal/localization.js +2 -2
  258. package/dist/internal/lyra-element.d.ts +17 -0
  259. package/dist/internal/lyra-element.js +2 -2
  260. package/dist/internal/package-metadata.d.ts +1 -1
  261. package/dist/internal/package-metadata.js +1 -1
  262. package/dist/svelte.d.ts +1 -1
  263. package/dist/testing/lyra-tag-event-map.js +1 -1
  264. package/dist/translations/ar/agent-tools.js +1 -1
  265. package/dist/translations/ar/data.js +1 -1
  266. package/dist/translations/ar/retrieval.js +1 -1
  267. package/dist/translations/ar/shared.js +1 -1
  268. package/dist/translations/ar/viewers.js +1 -1
  269. package/dist/translations/de/agent-tools.js +1 -1
  270. package/dist/translations/de/data.js +1 -1
  271. package/dist/translations/de/retrieval.js +1 -1
  272. package/dist/translations/de/shared.js +1 -1
  273. package/dist/translations/de/viewers.js +1 -1
  274. package/dist/translations/es/agent-tools.js +1 -1
  275. package/dist/translations/es/data.js +1 -1
  276. package/dist/translations/es/retrieval.js +1 -1
  277. package/dist/translations/es/shared.js +1 -1
  278. package/dist/translations/es/viewers.js +1 -1
  279. package/dist/translations/fa/agent-tools.js +1 -1
  280. package/dist/translations/fa/data.js +1 -1
  281. package/dist/translations/fa/retrieval.js +1 -1
  282. package/dist/translations/fa/shared.js +1 -1
  283. package/dist/translations/fa/viewers.js +1 -1
  284. package/dist/translations/fr/agent-tools.js +1 -1
  285. package/dist/translations/fr/data.js +1 -1
  286. package/dist/translations/fr/retrieval.js +1 -1
  287. package/dist/translations/fr/shared.js +1 -1
  288. package/dist/translations/fr/viewers.js +1 -1
  289. package/dist/translations/he/agent-tools.js +1 -1
  290. package/dist/translations/he/data.js +1 -1
  291. package/dist/translations/he/retrieval.js +1 -1
  292. package/dist/translations/he/shared.js +1 -1
  293. package/dist/translations/he/viewers.js +1 -1
  294. package/dist/translations/it/agent-tools.js +1 -1
  295. package/dist/translations/it/data.js +1 -1
  296. package/dist/translations/it/retrieval.js +1 -1
  297. package/dist/translations/it/shared.js +1 -1
  298. package/dist/translations/it/viewers.js +1 -1
  299. package/dist/translations/ja/agent-tools.js +1 -1
  300. package/dist/translations/ja/data.js +1 -1
  301. package/dist/translations/ja/retrieval.js +1 -1
  302. package/dist/translations/ja/shared.js +1 -1
  303. package/dist/translations/ja/viewers.js +1 -1
  304. package/dist/translations/pt-BR/agent-tools.js +1 -1
  305. package/dist/translations/pt-BR/data.js +1 -1
  306. package/dist/translations/pt-BR/retrieval.js +1 -1
  307. package/dist/translations/pt-BR/shared.js +1 -1
  308. package/dist/translations/pt-BR/viewers.js +1 -1
  309. package/dist/translations/ro/agent-tools.js +1 -1
  310. package/dist/translations/ro/data.js +1 -1
  311. package/dist/translations/ro/retrieval.js +1 -1
  312. package/dist/translations/ro/shared.js +1 -1
  313. package/dist/translations/ro/viewers.js +1 -1
  314. package/dist/translations/ru/agent-tools.js +1 -1
  315. package/dist/translations/ru/data.js +1 -1
  316. package/dist/translations/ru/retrieval.js +1 -1
  317. package/dist/translations/ru/shared.js +1 -1
  318. package/dist/translations/ru/viewers.js +1 -1
  319. package/dist/translations/zh-CN/agent-tools.js +1 -1
  320. package/dist/translations/zh-CN/data.js +1 -1
  321. package/dist/translations/zh-CN/retrieval.js +1 -1
  322. package/dist/translations/zh-CN/shared.js +1 -1
  323. package/dist/translations/zh-CN/viewers.js +1 -1
  324. package/dist/vue.d.ts +1 -1
  325. package/llms/components/lr-activity-feed.md +20 -9
  326. package/llms/components/lr-approval-queue.md +3 -2
  327. package/llms/components/lr-archive-viewer.md +8 -1
  328. package/llms/components/lr-artifact-panel.md +3 -1
  329. package/llms/components/lr-audio-visualizer.md +3 -1
  330. package/llms/components/lr-avatar-group.md +13 -6
  331. package/llms/components/lr-avatar.md +6 -2
  332. package/llms/components/lr-bar-chart.md +6 -3
  333. package/llms/components/lr-box-plot.md +6 -2
  334. package/llms/components/lr-branch-picker.md +3 -1
  335. package/llms/components/lr-bubble-chart.md +6 -3
  336. package/llms/components/lr-calendar.md +10 -3
  337. package/llms/components/lr-carousel.md +4 -2
  338. package/llms/components/lr-chart.md +12 -4
  339. package/llms/components/lr-chat-viewport.md +3 -2
  340. package/llms/components/lr-checkbox.md +8 -5
  341. package/llms/components/lr-citation-badge.md +2 -0
  342. package/llms/components/lr-claim-evidence.md +6 -2
  343. package/llms/components/lr-code-editor.md +3 -1
  344. package/llms/components/lr-color-picker.md +20 -8
  345. package/llms/components/lr-combobox.md +26 -3
  346. package/llms/components/lr-command-palette.md +6 -3
  347. package/llms/components/lr-community-card.md +7 -4
  348. package/llms/components/lr-context-inspector.md +3 -2
  349. package/llms/components/lr-context-meter.md +13 -5
  350. package/llms/components/lr-data-grid.md +2 -0
  351. package/llms/components/lr-date-input.md +12 -3
  352. package/llms/components/lr-date-picker.md +11 -2
  353. package/llms/components/lr-diff-view.md +46 -5
  354. package/llms/components/lr-doughnut-chart.md +6 -3
  355. package/llms/components/lr-drop-zone.md +7 -3
  356. package/llms/components/lr-embedding-explorer.md +8 -2
  357. package/llms/components/lr-emoji-picker.md +5 -1
  358. package/llms/components/lr-entity-chip.md +2 -0
  359. package/llms/components/lr-eval-run.md +3 -2
  360. package/llms/components/lr-export-button.md +5 -2
  361. package/llms/components/lr-flow-node.md +7 -4
  362. package/llms/components/lr-funnel.md +7 -2
  363. package/llms/components/lr-gauge.md +7 -2
  364. package/llms/components/lr-geojson-view.md +10 -2
  365. package/llms/components/lr-geojson-viewer.md +10 -2
  366. package/llms/components/lr-graph-legend.md +6 -3
  367. package/llms/components/lr-graph-query-builder.md +21 -11
  368. package/llms/components/lr-grounding-summary.md +8 -2
  369. package/llms/components/lr-heatmap.md +5 -2
  370. package/llms/components/lr-histogram.md +4 -2
  371. package/llms/components/lr-json-schema-viewer.md +7 -5
  372. package/llms/components/lr-line-chart.md +6 -3
  373. package/llms/components/lr-locale-picker.md +4 -1
  374. package/llms/components/lr-map.md +5 -3
  375. package/llms/components/lr-memory-panel.md +6 -2
  376. package/llms/components/lr-mention-popover.md +7 -4
  377. package/llms/components/lr-message-actions.md +3 -1
  378. package/llms/components/lr-message-parts.md +8 -2
  379. package/llms/components/lr-mind-map.md +11 -2
  380. package/llms/components/lr-option.md +25 -2
  381. package/llms/components/lr-otp-input.md +3 -1
  382. package/llms/components/lr-phone-input.md +9 -5
  383. package/llms/components/lr-pie-chart.md +6 -3
  384. package/llms/components/lr-polar-area-chart.md +6 -3
  385. package/llms/components/lr-policy-summary.md +3 -2
  386. package/llms/components/lr-progress-bar.md +4 -1
  387. package/llms/components/lr-prompt-input.md +4 -1
  388. package/llms/components/lr-prompt-queue.md +5 -2
  389. package/llms/components/lr-radar-chart.md +6 -3
  390. package/llms/components/lr-rag-eval-dashboard.md +7 -2
  391. package/llms/components/lr-realtime-session.md +3 -1
  392. package/llms/components/lr-rubric-form.md +6 -1
  393. package/llms/components/lr-scatter-chart.md +6 -3
  394. package/llms/components/lr-segmented.md +3 -1
  395. package/llms/components/lr-select.md +7 -1
  396. package/llms/components/lr-selection-toolbar.md +4 -1
  397. package/llms/components/lr-sequence-strip.md +7 -3
  398. package/llms/components/lr-source-card.md +16 -1
  399. package/llms/components/lr-source-list.md +17 -2
  400. package/llms/components/lr-source-picker.md +3 -1
  401. package/llms/components/lr-subagent-panel.md +6 -3
  402. package/llms/components/lr-switch.md +4 -3
  403. package/llms/components/lr-table.md +6 -1
  404. package/llms/components/lr-thinking-panel.md +8 -5
  405. package/llms/components/lr-token-input.md +15 -1
  406. package/llms/components/lr-tool-call-chip.md +2 -0
  407. package/llms/components/lr-tool-param-form.md +15 -4
  408. package/llms/components/lr-tooltip.md +8 -4
  409. package/llms/components/lr-trace-tree.md +7 -4
  410. package/llms/components/lr-video-playlist.md +7 -5
  411. package/llms/components/lr-voice-picker.md +7 -4
  412. package/llms/components/lr-widget.md +15 -2
  413. package/llms/migration.md +4 -4
  414. package/llms-full.txt +552 -159
  415. package/package.json +10 -8
  416. package/registrations.json +1 -1
  417. package/vscode-css-data.json +1 -1
  418. package/vscode-html-data.json +1 -1
  419. package/web-types.json +1 -1
package/llms-full.txt CHANGED
@@ -4963,7 +4963,22 @@ An async `source` row can carry the same two fields (`start`, `end`) alongside i
4963
4963
  none. A blank return falls back to the raw value. Not consulted while an async `source` fetch has
4964
4964
  never yet resolved for this element — see "Unknown committed values" below; `loadingText` covers
4965
4965
  that window instead, since the value is not yet known to be unmatched at all
4966
- - `appearance: 'filled' | 'outlined' | 'filled-outlined' = 'outlined'` (reflected)
4966
+ - `loading: boolean = false` (reflected) — mirrors `lr-select`'s own `loading`: whether a
4967
+ committed value's real label may still be pending because its `<lr-option>` catalog hasn't
4968
+ arrived yet (e.g. mounted asynchronously with no `source` involved). While `true`, a committed
4969
+ value that currently matches no option/row renders the localized `loadingText` placeholder in the
4970
+ trigger label or the relevant `multiple` tag instead of the raw value, with no
4971
+ `notInCatalog`/`[part='unknown-value']` badge, and the open listbox shows the same loading row a
4972
+ `source` fetch in flight shows. Independent of `source`'s own async lifecycle — either condition
4973
+ alone suppresses the unknown-value presentation. Never mutates `value`/`selectedOptions` itself,
4974
+ and does not itself disable the trigger
4975
+ - `appearance: 'accent' | 'filled' | 'outlined' | 'filled-outlined' | 'plain' = 'outlined'`
4976
+ (reflected) — the library's shared field-surface vocabulary, matching `lr-select`'s trigger.
4977
+ `outlined` (the default) is a bordered surface; `filled` swaps the border for a raised fill;
4978
+ `filled-outlined` keeps both; `plain` drops both; `accent` paints the loud brand fill with
4979
+ on-brand text (the placeholder, expand icon, adornments and `multiple` tags all ride that
4980
+ on-brand color rather than the quiet-text tokens). An unsupported value, including a raw
4981
+ attribute/property write outside this type, clamps to the `'outlined'` default
4967
4982
  - `placement: 'top' | 'bottom' = 'bottom'` (reflected; flip/shift can still keep the listbox in view)
4968
4983
  - `positioningStrategy: PlaceStrategy = 'fixed'` (attribute `positioning-strategy`, reflected) —
4969
4984
  the CSS positioning scheme the listbox is laid out with, spelled the same as on `lr-select`,
@@ -5303,6 +5318,11 @@ standard size supplies an aligned default), plus shared tokens. `--lr-combobox-g
5303
5318
  `--lr-space-xs`, the gap inside `[part='combobox']`) and `--lr-combobox-radius` (default
5304
5319
  `--lr-radius`, its corner radius) are both retunable without a `::part(combobox)` rule but, unlike
5305
5320
  the properties above, do not vary by `size` — the same `--lr-button-gap`/`-radius` pattern.
5321
+ `--lr-combobox-tag-bg` (default `var(--lr-color-brand-quiet)`), `--lr-combobox-tag-color` (default
5322
+ `var(--lr-color-text)`) and `--lr-combobox-tag-radius` (default `var(--lr-radius)`) retint a
5323
+ selected tag's background, text color and corner radius without a `::part(tag)` rule; `-tag-bg` is
5324
+ scoped independently of `--lr-combobox-option-active-bg`/`-option-badge-bg` below, which already
5325
+ scope the same shared `--lr-color-brand-quiet` token for their own purposes.
5306
5326
 
5307
5327
  The trigger row's own surface became public in 16.0.0, having been a private pair until then:
5308
5328
  `--lr-combobox-fill` (default `var(--lr-color-surface)`) and `--lr-combobox-border-color` (default
@@ -5313,7 +5333,10 @@ here wins over every treatment. `--lr-combobox-open-border-color` (default
5313
5333
  border before. Read the name as the state the listbox opens in rather than as a synonym for `open`:
5314
5334
  it is bound to `:focus-within`, so it also paints on a focused row whose listbox is closed — after
5315
5335
  an Escape dismissal, say. It is named for symmetry with `lr-select`'s
5316
- `--lr-select-open-border-color`, which really is gated on `open`.
5336
+ `--lr-select-open-border-color`, which really is gated on `open`. `--lr-combobox-text-color`
5337
+ (default `inherit`) recolors the trigger's own text the same way; `appearance="accent"` defaults it
5338
+ instead to `var(--lr-color-on-brand)`, keeping placeholder, adornments and tag text readable on the
5339
+ loud brand fill.
5317
5340
 
5318
5341
  The shared field halo `--lr-form-control-focus-shadow` (default `none`) paints a `box-shadow`
5319
5342
  while this control is focused — one name for every field-shaped control in the library, so a
@@ -5894,6 +5917,12 @@ invalid CSS and never matches — which is exactly why these tokens exist.
5894
5917
  `[part='option-badge']` "not in catalog" badge `show-unknown-option` renders on the synthetic
5895
5918
  listbox row, independent of the unknown-value chip's border above.
5896
5919
 
5920
+ `--lr-select-tag-remove-hover-bg` (default `var(--lr-color-brand-quiet)`) retints a hovered
5921
+ `[part='tag__remove-button']`'s background without a `::part(tag__remove-button)` rule; the pressed
5922
+ state mixes from this same token. Scoped independently of `--lr-select-trigger-hover-bg` and
5923
+ `--lr-select-option-active-bg` above, which already scope the identical shared token for their own
5924
+ purposes.
5925
+
5897
5926
  **Optional peer deps:** none.
5898
5927
 
5899
5928
  ```html
@@ -6139,7 +6168,13 @@ Text field + calendar popover, **form-associated** via the shared `FormAssociate
6139
6168
 
6140
6169
  **Properties (44):**
6141
6170
 
6142
- - `appearance: 'filled'|'outlined'|'filled-outlined' = 'outlined'` (reflected)
6171
+ - `appearance: 'accent' | 'filled' | 'outlined' | 'filled-outlined' | 'plain' = 'outlined'`
6172
+ (reflected) — the library's shared field-surface vocabulary, matching `lr-select`'s trigger and
6173
+ `lr-combobox`'s own `appearance`. `outlined` (the default) is a bordered surface; `filled` swaps
6174
+ the border for a raised fill; `filled-outlined` keeps both; `plain` drops both; `accent` paints
6175
+ the loud brand fill with on-brand text (the placeholder, start/end adornments and clear/expand
6176
+ buttons all ride that on-brand color rather than the quiet-text tokens). An unsupported value,
6177
+ including a raw attribute/property write outside this type, clamps to the `'outlined'` default
6143
6178
  - `appliedPreset: LyraDateRangePreset | undefined` (read-only, new in 12.0.0) — the `presets` entry
6144
6179
  whose button produced the current `value`, or `undefined` when the value was picked on the
6145
6180
  calendar, typed into the field, cleared, or reset. Read it inside your own `change`/`input`
@@ -6278,7 +6313,10 @@ With no label text the part is hidden and no glyph is painted.
6278
6313
  `--lr-form-control-height`. All four defaults follow the shared size ladder, including
6279
6314
  `small`/`medium`/`large` aliases and inherited `--lr-theme-form-control-height-*` overrides.
6280
6315
  Inherited or direct public values win. `pill` changes the private radius default to
6281
- `--lr-radius-pill`; a public `--lr-date-input-radius` still wins.
6316
+ `--lr-radius-pill`; a public `--lr-date-input-radius` still wins. `--lr-date-input-text-color`
6317
+ (default `inherit`) recolors the row's own text; `appearance="accent"` defaults it instead to
6318
+ `var(--lr-color-on-brand)`, keeping the placeholder and clear/calendar actions readable on the loud
6319
+ brand fill.
6282
6320
 
6283
6321
  Calendar and clear actions fit inside the selected row height while retaining at least 24×24
6284
6322
  CSS-pixel targets. At the default root size, rows measure 30/40/48/56px for s/m/l/xl; 2xs and xs
@@ -8236,9 +8274,13 @@ the reset default, or prior interaction state.
8236
8274
  `form.reset()` restores the original declarative `value` and the default country.
8237
8275
 
8238
8276
  **Slots:** `label`, `hint`, `error`, `country-prefix` (optional visual before the country selector,
8239
- such as a consumer-owned `<lr-flag>`; no flag package is imported automatically).
8277
+ such as a consumer-owned `<lr-flag>`; no flag package is imported automatically), `start` (alias
8278
+ for `country-prefix`, matching the leading-adornment slot name every other forms/ single-line
8279
+ field uses — both feed the same wrapper), `end` (optional trailing adornment after the telephone
8280
+ input, matching the trailing-adornment slot name every other forms/ single-line field uses).
8240
8281
 
8241
- **CSS parts:** `form-control`, `form-control-label`, `input-wrapper`, `country-prefix`, `country`
8282
+ **CSS parts:** `form-control`, `form-control-label`, `input-wrapper`, `country-prefix` (also
8283
+ receives the `start` alias slot's content), `end`, `country`
8242
8284
  (the selector region: invisible native select layered over the visual trigger), `country-select`,
8243
8285
  `country-trigger` (visible, `aria-hidden` closed-state box), `flag` (the `<lr-flag>`, only with
8244
8286
  `flags`), `country-code` (selected alpha-2 code, `data-placeholder` when no country exists),
@@ -8317,8 +8359,8 @@ import "@aceshooting/lyra-ui/components/media/flag/flag-peer.js";
8317
8359
  - The component never imports `@aceshooting/lyra-flags` itself, with `flags` or without. `flags`
8318
8360
  lazily registers only the `<lr-flag>` element; the artwork resolver comes from the consumer's own
8319
8361
  `flag-peer.js` import (plus the installed peer package), so forgetting either shows a flagless
8320
- trigger rather than erroring. `country-prefix` remains available for a fully consumer-owned
8321
- adornment instead.
8362
+ trigger rather than erroring. `country-prefix` (or its `start` alias) remains available for a
8363
+ fully consumer-owned adornment instead.
8322
8364
  - The visible trigger (`country-trigger` and everything inside it) is `aria-hidden` by design; the
8323
8365
  layered native select is the accessible control. Don't move interactive content into those parts
8324
8366
  via `::part` styling tricks, and don't expect the flag inside the open popup list — a native
@@ -8810,12 +8852,13 @@ Explicit empty text stays empty; later supplied text renders normally.
8810
8852
 
8811
8853
  **Events:** user toggles emit, in order, bubbling/composed `input`, the compatibility `lr-input`
8812
8854
  alias, bubbling/composed `change`, then the compatibility `lr-change` alias (both aliases carry
8813
- `detail: { checked: boolean }`). Programmatic `.checked` assignments are
8814
- silent. Internal `focus`/`blur` are re-dispatched as bubbling, composed host events. `lr-invalid` (no detail) fires when a
8815
- validity check finds the checkbox invalid.
8855
+ `detail: { checked: boolean, value: string }`, matching `lr-radio`'s shape). Programmatic `.checked`
8856
+ assignments are silent. Internal `focus`/`blur` are re-dispatched as bubbling, composed host events.
8857
+ `lr-invalid` (no detail) fires when a validity check finds the checkbox invalid.
8816
8858
  **Refusing a toggle.** `lr-checkbox-toggle-request` is cancelable and fires *before* `checked`
8817
8859
  moves, on every user path (click, Space, and the host `click()` activation it forwards).
8818
- `detail: { checked: boolean }` is the state the control **would** take; `checked` itself still holds
8860
+ `detail: { checked: boolean, value: string }` is the state the control **would** take (`value` is
8861
+ the current `.value`, unaffected by the toggle); `checked` itself still holds
8819
8862
  the old value while the event dispatches. `preventDefault()` keeps the current state, so the box
8820
8863
  never flips at all rather than flipping and snapping back, and none of
8821
8864
  `input`/`lr-input`/`change`/`lr-change` follow. A listener can instead answer by assigning `checked`
@@ -8890,6 +8933,8 @@ State paint is independently themeable through `--lr-checkbox-hover-border`,
8890
8933
  `--lr-checkbox-active-border`, `--lr-checkbox-active-ring`, `--lr-checkbox-invalid-border`,
8891
8934
  `--lr-checkbox-checked-bg`, and `--lr-checkbox-checked-border`; every default preserves the
8892
8935
  corresponding brand/brand-quiet/danger token.
8936
+ `--lr-checkbox-box-radius` (default `calc(var(--lr-form-control-radius) * 0.6)`) retunes
8937
+ `[part='box']`'s corner radius without a `::part(box)` rule.
8893
8938
 
8894
8939
  **`--lr-checkbox-box-size`** — the edge length of `[part='box']`, defaulting to
8895
8940
  `min(var(--lr-icon-button-size), calc(var(--lr-form-control-height) * 0.7))`. Derived from the
@@ -9011,7 +9056,7 @@ normally.
9011
9056
  **Events:** a user state change (click, Space, a logical ArrowLeft/ArrowRight change, or the
9012
9057
  programmatic `click()` activation path) emits
9013
9058
  `input`, then `lr-input`, then `change`, then `lr-change` (both aliases carry
9014
- `detail: { checked: boolean }`) — in that order, matching
9059
+ `detail: { checked: boolean, value: string }`, matching `lr-radio`'s shape) — in that order, matching
9015
9060
  the native checkbox/radio contract. The two native-style events are **new in 8.0.0**: a boolean
9016
9061
  control that emitted only the `lr-`-prefixed alias was invisible to every form library, validation
9017
9062
  helper, and `<form>`-level `change` listener that binds the native names, which is the ordinary way
@@ -9023,8 +9068,9 @@ assignment, `form.reset()`, or session-state restoration. The internal control's
9023
9068
  check finds the switch invalid.
9024
9069
  **Refusing a toggle.** `lr-switch-toggle-request` is cancelable and fires *before* `checked` moves,
9025
9070
  on every user path (click, Space, a logical ArrowLeft/ArrowRight change, and the host `click()`
9026
- activation it forwards). `detail: { checked: boolean }` is the state the switch **would** take;
9027
- `checked` itself still holds the old value while the event dispatches. `preventDefault()` keeps the
9071
+ activation it forwards). `detail: { checked: boolean, value: string }` is the state the switch
9072
+ **would** take (`value` is the current `.value`, unaffected by the toggle); `checked` itself still
9073
+ holds the old value while the event dispatches. `preventDefault()` keeps the
9028
9074
  current state, so the switch never slides at all rather than sliding and snapping back, and none of
9029
9075
  `input`/`lr-input`/`change`/`lr-change` follow. A listener can instead answer by assigning `checked`
9030
9076
  itself during the dispatch, which suppresses the built-in write the same way. It does not fire for a
@@ -9683,7 +9729,9 @@ Public `--lr-otp-input-*` theme inputs stay undeclared on the host, so an ancest
9683
9729
  can override appearance fallbacks; a value set directly on the element still wins.
9684
9730
 
9685
9731
  **Properties:** `label`, `hint`, `errorText` (`error-text`);
9686
- `appearance: 'outlined' | 'filled' | 'filled-outlined' | 'contained' = 'outlined'` (reflected);
9732
+ `appearance: 'outlined' | 'filled' | 'filled-outlined' | 'contained' = 'outlined'` (reflected) —
9733
+ does not implement the shared vocabulary's `accent`/`plain` tiers; an unsupported value, including
9734
+ a raw attribute/property write outside this type, clamps to the `'outlined'` default;
9687
9735
  `autofocus: boolean = false`; `autosubmit: boolean = false` (reflected);
9688
9736
  `size: LyraSize = 'm'` (reflected after an explicit property/attribute write, accepting
9689
9737
  `2xs`/`xs`/`s`/`m`/`l`/`xl` and the shared aliases). While unset, its generic font/radius/height
@@ -10055,7 +10103,12 @@ noneditable token layout remains the default.
10055
10103
  **Properties:** live, non-reflecting `value`, reflected `defaultValue` (attribute `value`, encoded
10056
10104
  as a JSON string array), `customError` (`custom-error`), `label`, `hint`, `errorText`
10057
10105
  (`error-text`), `placeholder`, `name`,
10058
- `required`, `disabled`, `accessibleLabel` (attribute `aria-label` — forwarded to the input wrapper
10106
+ `required`, `disabled`,
10107
+ `readonly: boolean = false` (reflected — forwards native read-only behavior to the draft input and
10108
+ the inline token editor, and blocks adding, removing or editing a token while leaving the draft
10109
+ input, tokens and remove buttons focusable and the current value submitted with the form, mirroring
10110
+ `lr-input`'s `readonly`),
10111
+ `accessibleLabel` (attribute `aria-label` — forwarded to the input wrapper
10059
10112
  and draft text input; precedence is presence-based, so `aria-label=""` remains an explicit empty
10060
10113
  override and suppresses visible-label linkage), `spellcheck: boolean = true`, `autocapitalize: string = ''`, and `autocorrect` (read: `boolean = true`; write: `boolean | string`, attribute values
10061
10114
  `on`/`off`) — all three native text-entry hints are forwarded to both the draft input and the inline
@@ -10139,6 +10192,15 @@ controlled `value`/pristine `defaultValue` shrink, DOM focus moves to the neares
10139
10192
  equivalent surface at the clamped index. If no token remains it moves to the draft input; a newer
10140
10193
  explicit focus destination outside the component is never reclaimed.
10141
10194
 
10195
+ **`readonly` — locking the committed list.** Reflects native read-only behavior onto both the draft
10196
+ input and the inline token editor, and blocks every other value-committing affordance: typing (or a
10197
+ programmatic `input`/`change` dispatch) into the draft, Enter/delimiter/Tab draft commits,
10198
+ Backspace-removes-last-token, clicking a remove button, and opening or committing the inline
10199
+ editor (`editable`). Unlike `disabled`, it never removes the draft input, a token label, or a
10200
+ remove button from the tab order, never blocks `focus()`, and never excludes the current value from
10201
+ `FormData` on submit — only `disabled` does that. Turning it on while a draft is half-typed or an
10202
+ inline editor is open discards that uncommitted state without moving focus.
10203
+
10142
10204
  **`delimiter` is nullable, and only a single character acts as a commit key.** It does two separate
10143
10205
  jobs: it splits a committed draft into several tokens, and — _only when it is exactly one
10144
10206
  character_ — it is the keystroke that commits the draft. A multi-character delimiter still splits a
@@ -10309,6 +10371,8 @@ hover and invalid states below.
10309
10371
  `--lr-code-editor-hover-border` (default `var(--lr-color-brand)`) and
10310
10372
  `--lr-code-editor-invalid-border` (default `var(--lr-color-danger)`) retint those frame states
10311
10373
  without changing brand/danger paint in sibling components.
10374
+ `--lr-code-editor-radius` (default `var(--lr-radius)`) retunes the editor frame's corner radius
10375
+ without a `::part(editor)` rule.
10312
10376
  The `editor` scroll frame also honors the opt-in theme-level
10313
10377
  `--lr-theme-scrollbar-width`/`--lr-theme-scrollbar-gutter` hooks (defaults `auto`/`auto`, matching
10314
10378
  its previous unconditional `scrollbar-width: auto`) — set either on `:root` or any ancestor for one
@@ -10389,7 +10453,14 @@ designer-chosen colours; reach for this when it must not.
10389
10453
  **Properties:** the shared
10390
10454
  form properties `name`, `value`, `defaultValue` (canonical content attribute `value`),
10391
10455
  `customError` (`custom-error`), `disabled`, and
10392
- `required`, plus `label`, `hint`, `errorText`
10456
+ `required`,
10457
+ `readonly: boolean = false` (reflected — forwards native read-only behavior to the panel's value
10458
+ field and blocks every other value-committing affordance: the popup panel opening, the
10459
+ saturation/hue/opacity handles, palette swatches, the eyedropper, and Enter/blur-driven text
10460
+ commits; the trigger, value field and palette stay focusable, and the current value still submits
10461
+ with the form -- only `disabled` excludes it. Toggling it on while the panel is open closes it, and
10462
+ cancels an in-flight drag without committing, mirroring `disabled`'s own mid-interaction handling),
10463
+ plus `label`, `hint`, `errorText`
10393
10464
  (`error-text`), `accessibleLabel` (`aria-label`), and `size: LyraSize = 'm'`
10394
10465
  (reflected — the same visual-density scale as `lr-input`, applied to the centered visible swatch;
10395
10466
  accepts `2xs`/`xs`/`s`/`m`/`l`/`xl` and `small`/`medium`/`large`; the interactive target
@@ -10405,15 +10476,19 @@ and:
10405
10476
  applies to the whole string, function names included (`RGB(255, 0, 0)`)
10406
10477
  - `swatches: string | string[] | LyraColorPickerSwatch[] = ''` — a predefined palette, given as a
10407
10478
  `;`-separated string, an array of colour strings, or an array of
10408
- `{ color: string; label?: string; disabled?: boolean }` objects. Any colour the picker can parse
10409
- is accepted; blank entries are dropped. An entry that is _not_ parseable is kept in the list and
10410
- still renders a swatch — it just paints no colour (the bare checkerboard) and clicking it does
10411
- nothing, so filter the palette yourself if that matters. `label` becomes the swatch's accessible
10412
- name; a missing, empty, or whitespace-only label falls back to announcing the raw colour string.
10479
+ `{ color: string; label?: string; disabled?: boolean; icon?: unknown }` objects. Any colour the
10480
+ picker can parse is accepted; blank entries are dropped. An entry that is _not_ parseable is kept
10481
+ in the list and still renders a swatch — it just paints no colour (the bare checkerboard) and
10482
+ clicking it does nothing, so filter the palette yourself if that matters. `label` becomes the
10483
+ swatch's accessible name; a missing, empty, or whitespace-only label falls back to announcing the
10484
+ raw colour string.
10413
10485
  `disabled` marks that one swatch non-actionable, independent of the whole control's own
10414
10486
  `disabled`: it renders a genuinely disabled `<button>` (no tab stop, no hover/press affordance)
10415
10487
  and clicking it commits nothing; omitted or `false` renders the swatch exactly as before this
10416
- field existed. The palette container renders only while the normalized list is non-empty
10488
+ field existed. `icon` is an optional decorative custom shape rendered inside the swatch button
10489
+ behind the `swatch-icon` part -- inert and `aria-hidden`, matching `<lr-swatch-picker>`'s
10490
+ identical `SwatchPickerItem.icon` field. The palette container renders only while the normalized
10491
+ list is non-empty
10417
10492
  - `withoutFormatToggle: boolean = false` (attribute `without-format-toggle`) — removes the button
10418
10493
  that cycles between formats. `noFormatToggle` (`no-format-toggle`) is the Shoelace spelling and
10419
10494
  reaches the same behavior; either one wins
@@ -10515,7 +10590,8 @@ absent with either format-toggle suppression property), plus `format-button__bas
10515
10590
  `eyedropper-button` / `eye-dropper-button` (rendered only where the browser exposes the EyeDropper
10516
10591
  API), with the corresponding `eyedropper-button__base|start|label|end|caret` and Shoelace
10517
10592
  `eye-dropper-button__base|prefix|label|suffix|caret` aliases; `swatches` (the palette container, rendered only when the normalized `swatches`
10518
- list is non-empty), `swatch` (one palette entry), `swatch-selected` (a token **added to** the
10593
+ list is non-empty), `swatch` (one palette entry), `swatch-icon` (a swatch entry's optional
10594
+ decorative icon, inert and `aria-hidden`), `swatch-selected` (a token **added to** the
10519
10595
  swatch matching the current value — state after `::part()` never matches, so write
10520
10596
  `::part(swatch-selected)`), `hint`, `error`.
10521
10597
 
@@ -10646,7 +10722,11 @@ A searchable, keyboard-navigable, form-associated emoji picker. `groups` is full
10646
10722
  — the component ships no emoji data of its own — in the same "zero/optional-peer dependency" spirit
10647
10723
  as `<lr-lite-chart>`/`<lr-heatmap>`; an optional convenience auto-loader fetches a default set on
10648
10724
  connect from the `emoji-picker-element-data` peer, but only when `groups` hasn't already been
10649
- supplied (an explicit empty array still counts as supplied and skips the auto-load).
10725
+ supplied (an explicit empty array still counts as supplied and skips the auto-load). The auto-loader
10726
+ picks the peer's locale directory closest to `effectiveLocale` (an exact match, then the base
10727
+ language, else English), so each emoji's name — and therefore both its accessible name and the
10728
+ search index, not just the group headings — follows the page's locale; a later locale change
10729
+ reloads it. This only applies to the built-in dataset, never to a consumer-supplied `groups`.
10650
10730
  When the filtered set reaches 200 items, the grid automatically windows its visible rows while
10651
10731
  preserving the full option count through `aria-setsize`/`aria-posinset`.
10652
10732
 
@@ -10844,7 +10924,10 @@ discriminated union is `ScoreRubricKey | CategoryRubricKey | CommentRubricKey`.
10844
10924
  first-wins identity and retained valid spelling is not rewritten. Shared fields are
10845
10925
  `key`, `label?`, `description?`, and `required?`; only scores expose `min?`/`max?`/`step?`, only
10846
10926
  categories expose readonly `RubricKeyOption[]` plus `multiple?`, and only comments expose
10847
- `placeholder?`. Runtime schema normalization retains the first occurrence of each nonempty key and
10927
+ `placeholder?`. Each `RubricKeyOption` also accepts an optional `icon?: unknown` -- a decorative
10928
+ leading visual rendered into `<lr-option>`'s `start` slot in the single-select branch, or inline
10929
+ before the label in the multiple-select `<lr-checkbox>` branch, inert and `aria-hidden` either way,
10930
+ matching `LyraFilterBarOption.icon`. Runtime schema normalization retains the first occurrence of each nonempty key and
10848
10931
  rejects malformed rows. `value: RubricValue = {}` is a defensive readonly snapshot and
10849
10932
  `defaultValue: RubricValue = {}` is its explicit form-reset baseline (both attribute: false).
10850
10933
  `itemId: string = ''`
@@ -10891,6 +10974,8 @@ state exposed as `errors.base`, rather than being attributed to one rubric key.
10891
10974
  clearing it hides that region unless the `error` slot supplies other content.
10892
10975
  `click()` forwards to the active field (the same one a submit-and-next transition auto-focuses),
10893
10976
  so the host behaves like a single control under both a `<label>`-driven and a programmatic click.
10977
+ `focus(options?)` moves focus to that same active field, matching `click()`'s target; this is also
10978
+ what lets the native `autofocus` attribute reach the rubric.
10894
10979
 
10895
10980
  **CSS parts:** `base` (the outer `role="group"` wrapper), `form-control` (aggregate chrome wrapper),
10896
10981
  `aggregate-label` / `form-control-label`, `fields` / `form-control-input`, `aggregate-hint` /
@@ -10948,7 +11033,10 @@ wrapper can override size-tier fallbacks; a value set directly on the element st
10948
11033
  readonly LyraLocaleEntry[]`, `LyraLocaleEntry { tag: string; label?: string; country?: string }`.
10949
11034
  `undefined` (the default) auto-discovers the registry; every supplied array (either form),
10950
11035
  including an authoritative `[]`, overrides it entirely — a curated subset, custom order,
10951
- custom labels, or a locale offered before its strings are registered. Explicit catalogs are
11036
+ custom labels, or a locale offered before its strings are registered. An entry's `label` overrides
11037
+ the derived `localeNativeName(tag)` endonym only when it is non-blank; an explicitly blank (or
11038
+ whitespace-only) `label` is treated the same as an omitted one and still falls back to
11039
+ `localeNativeName(tag)`. Explicit catalogs are
10952
11040
  capped, cloned and frozen at assignment; mutate a new array/entry and reassign it to update the
10953
11041
  list. `country` (ISO 3166-1 alpha-2 or alpha-3) overrides a row's derived flag — e.g.
10954
11042
  showing Lebanon's flag for an `'ar'` row instead of the library's default Saudi Arabia mapping;
@@ -11160,6 +11248,7 @@ These named interfaces and helper signatures are available to typed integrations
11160
11248
  color: string;
11161
11249
  label?: string;
11162
11250
  disabled?: boolean;
11251
+ icon?: unknown;
11163
11252
  }`
11164
11253
 
11165
11254
  - **`components-forms-combobox-combobox-contracts`** — Supporting data types and helpers for this component family.
@@ -11330,6 +11419,7 @@ These named interfaces and helper signatures are available to typed integrations
11330
11419
  readonly value: string;
11331
11420
  readonly label?: string;
11332
11421
  readonly description?: string;
11422
+ readonly icon?: unknown;
11333
11423
  }`
11334
11424
  Import: `@aceshooting/lyra-ui/components/forms/rubric-form/rubric-form.class.js`.
11335
11425
  `ScoreRubricKey extends RubricKeyBase {
@@ -11768,6 +11858,8 @@ ARIA values as page-local positions rather than as the dataset-wide total.
11768
11858
  `filterType`, `filterFn`, `hidden`, `hideable`, `resizable`, `movable`, `pinnable`, `pinned`,
11769
11859
  `footer`, `aggregation`, and `aggregatedFormatter`. A column with neither `field` nor `value` is an
11770
11860
  action column: its formatter receives `undefined`, and it is not sorted or searched by default.
11861
+ An omitted or explicitly blank (or whitespace-only) `label` both render the same humanized
11862
+ `field`/`id` fallback for the header cell — only a non-blank `label` overrides it.
11771
11863
  `cellTitle(row) => string | undefined` renders as the generated cell's native `title`, symmetrical
11772
11864
  with `<lr-table>`'s `columns[].cellTitle` — e.g. the untruncated text behind an ellipsized cell, or
11773
11865
  a formatted timestamp behind a relative one. Returning `undefined` or `''` omits the `title`
@@ -12005,7 +12097,7 @@ unchanged.
12005
12097
 
12006
12098
  - `columns: readonly TableColumn<T>[] = []` (attribute: false; clone-owned frozen collection,
12007
12099
  bounded to the first 10,000 source positions; blank keys and later duplicates are omitted first-wins
12008
- before header, cell, sort, focus, and event paths; reassign to update) — `{ key, label,
12100
+ before header, cell, sort, focus, and event paths; reassign to update) — `{ key, label, ariaLabel?,
12009
12101
  headerCell?, width?, minWidth?, maxWidth?,
12010
12102
  resizable?, sortable?, sortValue?, defaultSortDir?: 'asc'|'desc', align?: 'start'|'end',
12011
12103
  priority?: 'medium'|'low',
@@ -12014,6 +12106,11 @@ editType?: 'text'|'number'|'select',
12014
12106
  editOptions?: { value: string; label: string }[], footer?, cellStyle?, heatValue?,
12015
12107
  cell: (row) => unknown }` — `cell` is required for every `editTrigger` except `'always'`, whose
12016
12108
  persistent editor renders unconditionally so the table's render path never falls back to it —
12109
+ `ariaLabel` overrides that column header's accessible name (applied as the `<th>`'s `aria-label`
12110
+ whenever set) — e.g. an icon-only `headerCell` with no plain-text `label` to fall back on; when
12111
+ `label` is blank (or whitespace-only) and `ariaLabel` is also omitted, the header's accessible
12112
+ name falls back to `key` while the visible header itself stays blank, matching a deliberate
12113
+ icon-only column —
12017
12114
  `sortValue(row) => string | number | null | undefined` supplies the comparable value backing
12018
12115
  client-mode sorting for that column: a finite number sorts numerically, a string sorts through an
12019
12116
  `Intl.Collator` built from the component's effective locale with `numeric: true` (so `item2`
@@ -13035,7 +13132,12 @@ true), `label` (rendered only while `label` is non-empty)
13035
13132
 
13036
13133
  **Themeable custom properties:** `--lr-gauge-fill` (fill stroke; overrides `variant`/`thresholds`
13037
13134
  entirely and falls back to the effective variant's shared semantic token —
13038
- `--lr-color-brand` by default).
13135
+ `--lr-color-brand` by default). Each variant also has its own scoped fill, read as the innermost
13136
+ fallback before the shared token so a consumer can retint one variant without `--lr-gauge-fill`'s
13137
+ uniform override touching the others: `--lr-gauge-neutral-fill` (default `var(--lr-color-neutral)`),
13138
+ `--lr-gauge-brand-fill` (default `var(--lr-color-brand)`), `--lr-gauge-success-fill` (default
13139
+ `var(--lr-color-success)`), `--lr-gauge-warning-fill` (default `var(--lr-color-warning)`), and
13140
+ `--lr-gauge-danger-fill` (default `var(--lr-color-danger)`).
13039
13141
 
13040
13142
  **Optional peer deps:** none.
13041
13143
 
@@ -13156,13 +13258,18 @@ interface LyraFunnelStage {
13156
13258
  }
13157
13259
  ```
13158
13260
 
13261
+ At most 500 valid stages render, each as its own bar row; a `stages` array past that length renders
13262
+ a localized `limit` notice after the list rather than mounting an unbounded number of bars. Every
13263
+ stage's share is still measured against the true first stage regardless of truncation.
13264
+
13159
13265
  **Events:** none.
13160
13266
 
13161
13267
  **Slots:** none.
13162
13268
 
13163
13269
  **CSS parts:** `base`, `stages` (the `<ol>`), `stage`, `dropoff`, `stage-header`, `stage-label`,
13164
13270
  `stage-value`, `stage-share`, `comparison-value`, `track`, `bar`, `bar-overflow` (a second token on
13165
- `bar` when the stage exceeds the first stage), `comparison-bar`, `empty`
13271
+ `bar` when the stage exceeds the first stage), `comparison-bar`, `empty`, `limit` (localized notice
13272
+ shown when `stages` exceeds the 500-stage render ceiling)
13166
13273
 
13167
13274
  **Themeable custom properties:** `--lr-funnel-bar-color` (default `var(--lr-color-brand)`),
13168
13275
  `--lr-funnel-comparison-color` (default `var(--lr-color-border-strong)`), `--lr-funnel-track-color`
@@ -13702,8 +13809,11 @@ color?: string; label?: string; partOfRamp?: boolean }`: a discrete legend key r
13702
13809
  "no data" color next to an N-step ramp) to exclude just that stop from the comparison; defaults to
13703
13810
  `true`. A caption-only stop (no `color`) is already excluded regardless of this flag.
13704
13811
 
13705
- **Getters/methods:** `exportData('png')` returns a PNG data URL for the most recently completed
13706
- canvas paint. It includes the painted axes, cells, focus/selection/annotation overlays, and frozen
13812
+ **Getters/methods:** `exportData('csv'|'png')` returns a spreadsheet-safe CSV snapshot of the
13813
+ underlying matrix/calendar values or a PNG data URL for the most recently completed canvas paint.
13814
+ The CSV form reads `data` directly (not any bounded render cache) and omits no-data cells — one
13815
+ `row,column,value` row per real matrix cell, or `date,value` per real calendar day. The PNG form
13816
+ includes the painted axes, cells, focus/selection/annotation overlays, and frozen
13707
13817
  label bands while `stickyLabels` is enabled; the DOM legend, tooltip, and accessible-cell buttons
13708
13818
  are deliberately excluded. It returns `''` before a completed paint, while rendering is deferred or
13709
13819
  zero-sized, after disconnect, or when the browser cannot encode the snapshot. `refreshTheme()` —
@@ -14029,8 +14139,12 @@ block-size), `--lr-sequence-strip-marker-color` (default `var(--lr-color-text)`
14029
14139
  (default `0.625rem` — a legend swatch's inline- and block-size, category and marker rows alike), and
14030
14140
  `--lr-sequence-strip-legend-marker-bg` (default `var(--lr-color-surface-raised)` — the neutral chip
14031
14141
  background behind the marker legend row's bar; it stands in for "any cell", so it deliberately
14032
- matches no category color), and `--lr-sequence-strip-disabled-opacity` (default `var(--lr-opacity-disabled)` — opacity of
14033
- a cell whose activated item sets `disabled`); the tooltip also consumes shared tokens
14142
+ matches no category color), `--lr-sequence-strip-disabled-opacity` (default `var(--lr-opacity-disabled)` — opacity of
14143
+ a cell whose activated item sets `disabled`), `--lr-sequence-strip-selected-color` (default
14144
+ `var(--lr-color-text)` — colour of the persistent selection ring on a cell whose index is in
14145
+ `selectedIndex`), and `--lr-sequence-strip-selected-focus-color` (default
14146
+ `var(--lr-focus-ring-color)` — colour of that same ring while the cell also has keyboard focus); the
14147
+ tooltip also consumes shared tokens
14034
14148
  `--lr-color-surface`, `--lr-color-text`, `--lr-font-size-xs`, `--lr-radius`, and `--lr-shadow`, and
14035
14149
  the legend consumes `--lr-space-2xs`, `--lr-space-xs`, `--lr-space-s`, `--lr-font-size-xs`,
14036
14150
  `--lr-color-text-quiet`, and `--lr-radius-xs`.
@@ -14660,8 +14774,9 @@ owns none of that.
14660
14774
  - `statusDetail: string = ''` (attribute `status-detail`) — appended to the status line
14661
14775
  - `durationMs: number | null = null` (attribute `duration-ms`) — formatted into the status line
14662
14776
  - `selected: boolean = false` (reflected)
14663
- - `compact: boolean = false` (reflected) — tighter card padding for dense canvases and palette
14664
- previews; the border, background, shadow and the `selected`/`status="running"` treatments all stay
14777
+ - `compact: boolean = false` (reflected) — tighter card padding, row gap, and header icon-to-heading
14778
+ gap for dense canvases and palette previews; the border, background, shadow and the
14779
+ `selected`/`status="running"` treatments all stay
14665
14780
  - `inputs: readonly FlowHandle[] = [{ id: 'in' }]`, `outputs: readonly FlowHandle[] = [{ id: 'out'
14666
14781
  }]` (attribute: false) — detached, frozen snapshots of at most the first 10,000 readonly
14667
14782
  `{ id, label? }` handles; blank ids and later duplicates are omitted first-valid/first-wins
@@ -14683,7 +14798,9 @@ carries no card chrome of its own), `card` (the bordered, filled node card), `he
14683
14798
 
14684
14799
  **Themeable custom properties:** `--lr-flow-node-min-inline-size` (default `11rem`),
14685
14800
  `--lr-flow-node-compact-padding` (default `var(--lr-space-xs)`) and `--lr-flow-node-compact-gap`
14686
- (default `var(--lr-space-2xs)`) — `[part="card"]`'s padding and row gap while `compact` — and
14801
+ (default `var(--lr-space-2xs)`) — `[part="card"]`'s padding and row gap while `compact`;
14802
+ `--lr-flow-node-compact-header-gap` (default `var(--lr-space-2xs)`) — `[part="header"]`'s own
14803
+ icon-to-heading gap while `compact` — and
14687
14804
  `--lr-flow-node-selected-outline-color` (default `var(--lr-color-brand)`) — the card's outline color
14688
14805
  while `selected`. Like the other state-scoped custom properties here, it is an inline `var()`
14689
14806
  fallback at its point of use rather than a `:host` declaration, so it can be set on the element _or any
@@ -15057,9 +15174,15 @@ ring stays intact. `--lr-context-meter-selected-arc-stroke` (default `16`, in th
15057
15174
  one bounding box, so a selected arc reports itself by thickening in place rather than by an outline
15058
15175
  that would trace the whole ring identically for every selection.
15059
15176
  `--lr-context-meter-disabled-opacity` (default `var(--lr-opacity-disabled)`) dims a band or legend row whose entry sets
15060
- `disabled`; the band keeps its own colour, since that colour is the datum. Otherwise the component consumes shared tokens
15177
+ `disabled`; the band keeps its own colour, since that colour is the datum. Each `data-tone` band
15178
+ color is independently retintable, scoped to just this component rather than the shared token
15179
+ every other component also reads: `--lr-context-meter-tone-brand-bg` (default
15180
+ `var(--lr-color-brand)`), `--lr-context-meter-tone-success-bg` (default `var(--lr-color-success)`),
15181
+ `--lr-context-meter-tone-warning-bg` (default `var(--lr-color-warning)`) and
15182
+ `--lr-context-meter-tone-danger-bg` (default `var(--lr-color-danger)`) — each read by the bar
15183
+ segment, its legend swatch, and (as the `stroke`) the ring shape's arc, so all three surfaces for a
15184
+ tone stay in sync. Otherwise the component consumes shared tokens
15061
15185
  `--lr-space-xs`, `--lr-color-text-quiet`, `--lr-font`, `--lr-radius`, `--lr-color-border`,
15062
- `--lr-color-brand`, `--lr-color-success`, `--lr-color-warning`, `--lr-color-danger`,
15063
15186
  `--lr-transition-base`.
15064
15187
 
15065
15188
  **Optional peer deps:** none.
@@ -15094,8 +15217,10 @@ bar/ring either: an over-`total` `segments` array renders as a fully (not over-)
15094
15217
  later segments truncated or squeezed to zero width/arc-length as the budget runs out. `total <= 0`
15095
15218
  (or non-finite) renders zero segments — an empty track/ring — and the announced summary falls back to
15096
15219
  just `"{used} used"` with no `"of {total}"` clause, regardless of what's in `segments`. Ring geometry
15097
- (a 40-radius circle, 12px stroke, centered at 50,50) intentionally matches `lr-gauge`'s own radial
15098
- numbers, so the two circular-meter components in the library share one visual scale.
15220
+ (a 40-radius circle centered at 50,50) has its RADIUS/CENTER match `lr-gauge`'s own radial numbers,
15221
+ so both components' rings sit on the same circle within their viewBox. The stroke does not match:
15222
+ at 12px it is intentionally heavier than `lr-gauge`'s 10px, since tightly-packed multi-tone arcs
15223
+ need more width to stay visually distinct than a gauge's single fill arc.
15099
15224
 
15100
15225
  **Known gotchas:**
15101
15226
 
@@ -15153,6 +15278,11 @@ title, readonly color?, readonly data? }`; `date` accepts an ISO `YYYY-MM-DD` st
15153
15278
  section retains the localized purpose name rather than duplicating an authored host name; when
15154
15279
  set programmatically without a host attribute, this value names the section
15155
15280
 
15281
+ At most 4 events render as `event` buttons inside a single month-view day cell, and at most 500
15282
+ events render as `agenda-event` buttons in agenda view; either ceiling past that count renders a
15283
+ localized `event-limit`/`agenda-limit` "+N more" notice rather than mounting an unbounded number of
15284
+ buttons.
15285
+
15156
15286
  **Keyboard:** the month grid is a fixed 6×7 matrix (leading/trailing days of adjacent months fill it
15157
15287
  out) with one roving tab stop — `focusedDate`, else `value`, else today, else the first rendered day.
15158
15288
  Arrows move by 1 day (Left/Right swapped under RTL) or 7; stepping past the rendered grid rolls
@@ -15166,8 +15296,10 @@ Arrows move by 1 day (Left/Right swapped under RTL) or 7; stepping past the rend
15166
15296
  **CSS parts:** `header` and `navigation` are aliases on the header wrapper; `nav` is shared by both
15167
15297
  month-navigation buttons; `previous-button` and `next-button` identify each direct button;
15168
15298
  `nav-glyph` is the chevron (`scaleX(-1)`-mirrored under RTL); `title`, `weekdays`, `weekday`,
15169
- `grid`, `week` (`display: contents`), `day`, `date`, `event` (a month-view marker), `agenda`, and
15170
- `agenda-event`.
15299
+ `grid`, `week` (`display: contents`), `day`, `date`, `event` (a month-view marker), `event-limit`
15300
+ (localized "+N more" notice shown in a day cell whose events exceed the 4-event per-cell render
15301
+ ceiling), `agenda`, `agenda-event`, and `agenda-limit` (localized "+N more" notice shown in agenda
15302
+ view when the visible month's events exceed the 500-event render ceiling).
15171
15303
 
15172
15304
  **Themeable custom properties:** `--lr-calendar-day-min-block-size` (default `var(--lr-size-6rem)`)
15173
15305
  and `--lr-calendar-day-min-block-size-narrow` (default `var(--lr-size-4rem)`, applied at container inline-size
@@ -15496,21 +15628,28 @@ visible label element, so slotted/property/localized label text is also the anno
15496
15628
  effective native validity, including custom errors and own/fieldset validation barring.
15497
15629
  `lr-invalid` is a cancelable bubbling/composed alias; vetoing it suppresses the native invalid
15498
15630
  default. Run, save, load, and delete share one two-phase contract: cancelable
15499
- `lr-before-query-run`, `lr-before-query-save`, `lr-before-query-load`, and
15500
- `lr-before-query-delete` requests precede any local effect; non-cancelable `lr-query-run`,
15631
+ `lr-query-run-request`, `lr-query-save-request`, `lr-query-load-request`, and
15632
+ `lr-query-delete-request` requests precede any local effect; non-cancelable `lr-query-run`,
15501
15633
  `lr-query-save`, `lr-query-load`, and `lr-query-delete` notifications follow only when accepted.
15502
- The matching before/accepted pair reuses one frozen payload: `{ query }` for run,
15634
+ The matching request/accepted pair reuses one frozen payload: `{ query }` for run,
15503
15635
  `{ name, query }` for save, `{ queryId, query }` for load, and `{ queryId }` for delete.
15504
15636
  Run validates before its request. Save veto preserves the draft name. Load requests frozen
15505
15637
  `{ queryId, query }` before changing `value`, so veto preserves the current query; its accepted event
15506
15638
  fires after the new value is applied. Delete remains controlled, so the host removes the accepted
15507
- id from `savedQueries`. The full set is `lr-input`, `lr-validity-change`, `lr-invalid`, and those
15508
- eight phased action events.
15509
-
15510
- Migration note: veto save in `lr-before-query-save`, not `lr-query-save`; the existing
15511
- `lr-query-*` action events are accepted, non-cancelable notifications. **Slots:** `actions`,
15639
+ id from `savedQueries`. Each request also fires a **deprecated** `lr-before-query-run` /
15640
+ `lr-before-query-save` / `lr-before-query-load` / `lr-before-query-delete` alias immediately after
15641
+ its canonical `-request` counterpart, from the same gesture with the same frozen detail; either
15642
+ event may veto. The aliases are slated for removal in 21.0.0 — migrate listeners to the
15643
+ `lr-query-*-request` names. The full set is `lr-input`, `lr-validity-change`, `lr-invalid`, and
15644
+ those twelve phased action events (four requests, four deprecated aliases, four accepted
15645
+ notifications).
15646
+
15647
+ Migration note: veto save in `lr-query-save-request` (or its deprecated `lr-before-query-save`
15648
+ alias), not `lr-query-save`; the existing `lr-query-*` action events are accepted, non-cancelable
15649
+ notifications. **Slots:** `actions`,
15512
15650
  `label`, `hint`, `error`. **CSS
15513
- parts:** `base`, `label`, `hint`, `error` (the three form-control chrome parts every
15651
+ parts:** `base`, `form-control-label` (`label` remains as a compatibility alias on the same node),
15652
+ `hint`, `error` (the three form-control chrome parts every
15514
15653
  form-associated control in this library exposes — see `lr-select`), `path-fields`, `start-input`,
15515
15654
  `end-input`, `relationship-picker`, `relationship-chips`, `node-type-picker`, `node-type-chips`,
15516
15655
  `direction`, `filter-group`, `min-hops`, `max-hops`, `footer`, `run-button`, `save-button`,
@@ -16838,7 +16977,9 @@ toggle button. Not emitted when a consumer assigns `fullscreen` directly), `lr-v
16838
16977
  (cancelable; `detail: { viewId }` is the view proposed by a header view-toggle click. Call
16839
16978
  `preventDefault()` to leave `activeViewId` unchanged. Not emitted when a consumer assigns
16840
16979
  `activeViewId` directly), `lr-view-change` (non-cancelable; `detail: { viewId }`, the accepted
16841
- active view's `viewId`. Not emitted when a consumer sets `activeViewId` directly), and
16980
+ active view's `viewId`. Also emitted when a `views` reassignment drops the currently-active view,
16981
+ forcing a fallback to the first remaining view. Not emitted when a consumer sets `activeViewId`
16982
+ directly, even to a now-invalid id), and
16842
16983
  `lr-activate` (non-cancelable; `detail: { value }` — note the key is `value`, not `viewId` — is the
16843
16984
  activated view's `viewId`, fired on **every** accepted header view-toggle activation whether or not
16844
16985
  `activeViewId` actually moved. `lr-view-request` stays the veto point, and a vetoed activation emits
@@ -16902,6 +17043,17 @@ rendering is unchanged.
16902
17043
  _hover_ state, and the `:hover` rule wraps its selector in `:where()` so a consumer's own
16903
17044
  `::part(view-toggle):hover` override wins without `!important`.
16904
17045
 
17046
+ `--lr-widget-collapse-button-hover-bg` (default `var(--lr-color-brand-quiet)`) and
17047
+ `--lr-widget-collapse-button-hover-color` (default `var(--lr-color-brand)`), plus
17048
+ `--lr-widget-fullscreen-button-hover-bg` (default `var(--lr-color-brand-quiet)`) and
17049
+ `--lr-widget-fullscreen-button-hover-color` (default `var(--lr-color-brand)`), are
17050
+ the same inline-`var()`-fallback shape for `[part="collapse-button"]` and `[part="fullscreen-button"]`
17051
+ respectively; each button's pressed fill mixes from its own `-hover-bg` token. Before these existed,
17052
+ both buttons read the library-wide `--lr-color-brand-quiet`/`--lr-color-brand` tokens directly, so a
17053
+ consumer retinting those tokens upstream to change only the view toggle's hover (the reason the
17054
+ view-toggle pair above exists) also silently repainted these two buttons; each now has its own scoped
17055
+ escape hatch, independent of the other and of the view toggle.
17056
+
16905
17057
  **Optional peer deps:** none.
16906
17058
 
16907
17059
  ```html
@@ -17020,8 +17172,10 @@ retain their mapped opt-in defaults, and the autoplay interval remains 3000ms.
17020
17172
  automatically
17021
17173
 
17022
17174
  **Events:** `lr-slide-change` (`detail: { index, slide }`) — emitted after the active slide changes
17023
- from a method, button, key, pagination item, autoplay tick, or settled user scroll. `slide` is the
17024
- original assigned element at `index`, never a loop endcap.
17175
+ from a method, button, key, pagination item, autoplay tick, or settled user scroll. Also emitted
17176
+ when a `slidesPerPage` change or a slide's removal forces the active index onto a different slide.
17177
+ Not emitted when a consumer sets `currentSlide` directly to an out-of-range value; that assignment
17178
+ is clamped silently. `slide` is the original assigned element at `index`, never a loop endcap.
17025
17179
 
17026
17180
  **Paging and scrolling.** In non-loop mode the page count is the set of reachable starts from zero
17027
17181
  to `slideCount - slidesPerPage`, stepping by `slidesPerMove` and always including the final start.
@@ -18130,6 +18284,8 @@ resolves.
18130
18284
 
18131
18285
  - `--lr-segmented-track-gap` — Gap between segments. Default: `var(--lr-size-0-125rem)`.
18132
18286
  - `--lr-segmented-track-radius` — Track corner radius. Default: `var(--lr-radius)`.
18287
+ - `--lr-segmented-segment-radius` — Each segment's own corner radius, independent of the track's.
18288
+ Default: `calc(var(--lr-form-control-radius) * 0.7)`.
18133
18289
  - `--lr-segmented-track-padding` — Track inset padding. Default: `var(--lr-size-0-125rem)`.
18134
18290
  - `--lr-segmented-track-bg` — Background of the `base` track. Undeclared by default (transparent),
18135
18291
  matching its own current absence of a background.
@@ -19949,11 +20105,14 @@ no-op if already open),
19949
20105
  cycling) at the ends; the active row is scrolled into view. Enter selects. Hovering a non-disabled
19950
20106
  row also makes it active.
19951
20107
 
19952
- **Events:** `lr-open`, `lr-close` (both `detail: null`, cancelable — fired before the
20108
+ **Events:** `lr-show`, `lr-close` (both `detail: null`, cancelable — fired before the
19953
20109
  mutation, `preventDefault()` keeps the palette in its current open state), `lr-select`
19954
20110
  (`detail: { command }`, fired before the command's own `onSelect` runs and before the palette
19955
20111
  closes), and no-detail `focus`/`blur` events re-dispatched from the host whenever the search input
19956
- gains or loses focus. The `focus`/`blur` bridge is new in 10.0.0: native `focus`/`blur` neither
20112
+ gains or loses focus. `lr-open` is a deprecated alias for `lr-show` (same `detail: null`,
20113
+ cancelability, and timing, fired at the same call site; either event's `preventDefault()` vetoes
20114
+ the open) kept for the 20.x line and removed no earlier than 21.0.0. The `focus`/`blur` bridge is
20115
+ new in 10.0.0: native `focus`/`blur` neither
19957
20116
  bubble nor cross the shadow boundary, so a host-level `el.addEventListener('focus', …)` previously
19958
20117
  never fired at all.
19959
20118
 
@@ -23674,10 +23833,14 @@ Tooltip motion resolves `tooltip.show` / `tooltip.hide` through the public anima
23674
23833
  The same per-element/global precedence, RTL keyframe selection, token-timing fallback,
23675
23834
  reduced-motion flattening, and null-disable lifecycle rules documented for `lr-popover` apply.
23676
23835
 
23677
- **Slots:** both mapped shapes are supported. Web Awesome uses named `trigger` plus default tooltip
23678
- content. Shoelace uses the default slot for the trigger and `slot="content"` (or the `content`
23679
- property) for tooltip content. A named trigger always selects the first shape; without one, an
23680
- explicit content source makes the default slot unambiguously the trigger.
23836
+ **Slots:** both mapped shapes are supported, plus a Lyra-original addition. `trigger` (the
23837
+ highest-priority interaction/ARIA owner, mirroring `<lr-popover>`'s own `trigger` slot) is not a
23838
+ Web Awesome shape: `wa-tooltip` has only its single unnamed default slot for tooltip content, and
23839
+ its own anchor mechanism is the `for` attribute plus the unrelated `trigger` activation-mode
23840
+ attribute documented above. Shoelace uses the default slot for the trigger and `slot="content"`
23841
+ (or the `content` property) for tooltip content. A named `trigger` slot always selects that shape;
23842
+ without one, an explicit content source (`slot="content"` or the `content` property) makes the
23843
+ default slot unambiguously the trigger, matching Shoelace.
23681
23844
 
23682
23845
  **CSS parts:** `popup base tooltip base__popup` are aliases on the same wrapper; `trigger`; `body`;
23683
23846
  and `arrow base__arrow` (rendered unless suppressed). The arrow also carries the resolved side —
@@ -23991,6 +24154,9 @@ presence-based, so an explicitly empty value remains empty rather than invoking
23991
24154
  fallback, and the private `--_lr-progress-track-height` is the `size` property's own tier value,
23992
24155
  `1rem` at the `m` default, unchanged),
23993
24156
  `--lr-progress-track-color` (default `var(--lr-color-brand-quiet)`),
24157
+ `--lr-progress-track-radius` (default `var(--lr-radius-pill)`; `indicator`'s `border-radius:
24158
+ inherit` picks up the same value, so retuning the track retunes both without a
24159
+ `::part(track)`/`::part(indicator)` rule),
23994
24160
  `--lr-progress-indicator-color` (default `var(--lr-progress-indicator-variant-color)`), and
23995
24161
  `--lr-progress-label-color` (default `var(--lr-color-text)`). Upstream aliases are `--height` and
23996
24162
  `--track-height`, plus `--track-color`, `--indicator-color`, and `--label-color`.
@@ -24884,7 +25050,10 @@ hover, `--lr-export-button-hover-background`, `--lr-export-button-hover-color` a
24884
25050
  the current `appearance` resolves to and leaves the other paints alone, so they are also the way to
24885
25051
  keep `appearance="outlined"` chrome while returning its label to neutral text — `outlined` paints
24886
25052
  the label `--lr-color-brand` and, unlike `lr-button`, this component has no `variant` of its own to
24887
- opt out. Before 18.4.0 none of these existed and the only lever was `::part(trigger)`. Plus shared
25053
+ opt out. Before 18.4.0 none of these existed and the only lever was `::part(trigger)`.
25054
+ `--lr-export-button-gap` (default `var(--lr-space-xs)`, constant across the `size` ladder) and
25055
+ `--lr-export-button-radius` (default `var(--lr-radius)`) retune the trigger's icon/label gap and
25056
+ corner radius without a `::part(trigger)` rule. Plus shared
24888
25057
  tokens, including `--lr-popover-viewport-clamp` (default `92vw`) — the shared narrow-viewport ceiling the `menu`'s max-inline-size is `min()`ed
24889
25058
  against, alongside its own `20rem` cap and the positioner's available space. See `lr-tour` for the
24890
25059
  shared-clamp note.
@@ -25750,13 +25919,16 @@ renders `open="false"` on first paint)
25750
25919
  `--lr-color-brand-quiet` token, so a consumer can retheme just this highlighted/active row without
25751
25920
  repainting every other component that reuses the same shared token.
25752
25921
  `--lr-mention-popover-option-disabled-opacity` (default `0.5`) — opacity of a row whose `items`
25753
- entry sets `disabled`. Plus shared tokens —
25922
+ entry sets `disabled`. `--lr-mention-popover-option-active-color` (default `var(--lr-color-brand)`)
25923
+ — text color of the `aria-selected="true"` (keyboard-highlighted) suggestion row, independent of
25924
+ `--lr-mention-popover-option-active-bg`: the same component-scoped indirection over
25925
+ `--lr-color-brand`, applied to the row's own sibling text-color rule. Plus shared tokens —
25754
25926
  `--lr-space-xs`/`-s`/`-m` (popup padding,
25755
25927
  row padding/gap), `--lr-radius`
25756
25928
  (row corners — the popup's own corner is the overlay family's, below),
25757
25929
  `--lr-transition-fast` (open/close
25758
- transition), `--lr-color-brand` (selected-row
25759
- text), `--lr-color-text-quiet`/`--lr-color-text` (description text, full-contrast on the active
25930
+ transition),
25931
+ `--lr-color-text-quiet`/`--lr-color-text` (description text, full-contrast on the active
25760
25932
  row), and `--lr-popover-viewport-clamp` (default `92vw`) — the shared narrow-viewport ceiling the
25761
25933
  popup's max-inline-size is `min()`ed against, alongside its own `24rem` cap and the positioner's
25762
25934
  available space. See `lr-tour` for the shared-clamp note.
@@ -25890,6 +26062,14 @@ over an already-formatted string (`<lr-code-block>`'s `language="diff"` only lex
25890
26062
  string the consumer already unified-diffed; it has no two-string-compare entry point of its own).
25891
26063
  First-party invention (no Web Awesome equivalent).
25892
26064
 
26065
+ Adopts `DocumentAnchorTarget`: a `line-range` anchor's `start` (and, for `highlights`, the optional
26066
+ `end`) addresses the 0-based index into the rendered diff's own op sequence — not an old-file/
26067
+ new-file source line number, since those diverge on any insertion or deletion. `scrollToAnchor()`
26068
+ resolves it, and both it and search navigation transparently expand (and, for a `highlights` range,
26069
+ paint through) any `contextLines` fold currently hiding the target run instead of leaving it
26070
+ inaccessible behind a static marker. `search()` is a locale-aware case-insensitive substring match
26071
+ over each rendered line's own text, one match per line ordered by that same op index.
26072
+
25893
26073
  **Properties:**
25894
26074
 
25895
26075
  - `oldText: string = ''` (attribute: false) — the "before" text. Default `''` renders an
@@ -25917,6 +26097,8 @@ First-party invention (no Web Awesome equivalent).
25917
26097
  side. Larger input renders the localized `diffViewTooLarge` fallback without computing or
25918
26098
  highlighting the diff. `Infinity` relaxes this line-count ceiling, but the fixed aggregate
25919
26099
  character and comparison-work ceilings remain in force.
26100
+ - `anchorKinds: readonly LyraAnchorKind[] = ['line-range']` (this viewer's supported
26101
+ `LyraAnchor.kind` values for the shared anchor-target contract).
25920
26102
 
25921
26103
  Grammar entries are read from own enumerable data fields into a bounded frozen map. A getter,
25922
26104
  unreadable field, non-enumerable field, or malformed proxy branch is skipped without preventing a
@@ -25924,6 +26106,13 @@ later valid grammar from being used; grammar values themselves remain opaque to
25924
26106
  Non-enumerable names do not consume language slots, but every inspected name counts toward the
25925
26107
  20,000 structural ceiling.
25926
26108
 
26109
+ **Methods:** `search(query)` resolves the match count via a case-insensitive substring match over
26110
+ each rendered line's own text, ordered by `line-range` op index (empty/whitespace query behaves like
26111
+ `clearSearch()`); `searchNext()`/`searchPrevious()` advance/step back through matches (wrapping,
26112
+ resolving `false` when there are none); `clearSearch()` clears the query, matches, and painted
26113
+ marks. `scrollToAnchor(target)` (inherited from `DocumentAnchorTarget`) resolves a `line-range`
26114
+ anchor or a `highlights` id string.
26115
+
25927
26116
  **Events:**
25928
26117
 
25929
26118
  - `lr-copy` (`detail: LyraClipboardWriteSuccess`, `{ ok: true; text: string }`) — the frozen full
@@ -25932,6 +26121,14 @@ Non-enumerable names do not consume language slots, but every inspected name cou
25932
26121
  - `lr-copy-error` (`detail: LyraClipboardWriteFailure`) — the frozen failure outcome contains
25933
26122
  `ok: false`, the text, a `LyraCopyErrorReason`, and the original error. The reason is
25934
26123
  `'unsupported' | 'denied' | 'failed'`.
26124
+ - `lr-search-change` (`detail: { query, matchCount, matchCountExact, activeIndex }`) — from
26125
+ search/navigation/clear, and effective-locale re-evaluation. Search accepts at most 4,096 query
26126
+ code units, scans at most 4,000,000 line code units, and retains at most 10,000 matches;
26127
+ `matchCountExact=false` identifies a ceiling-truncated lower bound.
26128
+ - `lr-highlight-activate` (`detail: { highlightId }`) — a `highlights` entry's
26129
+ `[part="line-highlight-action"]` button was clicked or activated via Enter/Space.
26130
+ - `lr-anchor-result` (`detail: { found }`) — fired after an `anchor` assignment or a
26131
+ `scrollToAnchor()` call.
25935
26132
 
25936
26133
  The copy button stays in its resting state until `writeText()` resolves. Success renders and
25937
26134
  announces localized `copied`; failure renders and announces localized `copyFailed`. A newer
@@ -25943,13 +26140,29 @@ retires an older pending outcome, so stale writes cannot confirm or fail a hidde
25943
26140
  **CSS parts:** `base` (the root wrapper), `line` (a single line; carries
25944
26141
  `data-type="equal"|"add"|"remove"|"empty"|"fold"` — `"empty"` is an unbalanced-replace placeholder cell in
25945
26142
  `layout="split"` and never carries a `+`/`-` prefix; `"fold"` is the localized unchanged-lines
25946
- marker), `copy-button` (the copy affordance, only
25947
- rendered while `copyable`), `limit` (the localized over-`maxLines` fallback), `side` (one column in
25948
- `layout="split"`, `data-side="old"|"new"`).
26143
+ marker — plus `data-match`/`data-active-match` while a search result covers it, and
26144
+ `data-highlight` (the resolved tone, default `accent`) with `data-active-highlight` while a
26145
+ `highlights` entry covers it), `line-highlight-action` (the focusable button a resolved
26146
+ `highlights` entry adds to the line it first covers; emits `lr-highlight-activate`), `copy-button`
26147
+ (the copy affordance, only rendered while `copyable`), `limit` (the localized over-`maxLines`
26148
+ fallback), `side` (one column in `layout="split"`, `data-side="old"|"new"`), `anchor-live-region`
26149
+ (an aria-hidden, non-live shadow mirror of the latest anchor-jump message; the spoken copy is
26150
+ appended to the shared document-level polite sink only while the viewer and its composed ancestors
26151
+ are exposed to the accessibility tree).
25949
26152
 
25950
26153
  **Themeable custom properties:** `--lr-diff-view-max-height` (default `none` — an independently
25951
26154
  settable scroll cap on `[part="base"]`; the `maxHeight` property writes the same custom property
25952
- inline on `[part="base"]`), `--lr-diff-view-font` (default `var(--lr-font-mono)`), plus
26155
+ inline on `[part="base"]`), `--lr-diff-view-font` (default `var(--lr-font-mono)`),
26156
+ `--lr-diff-view-match-color`/`--lr-diff-view-active-match-color` (default
26157
+ `var(--lr-color-warning)` for both — outline of a line carrying a non-active/active search match),
26158
+ `--lr-diff-view-highlight-accent-background` (default `var(--lr-color-brand-quiet)`),
26159
+ `--lr-diff-view-highlight-success-background` (default `var(--lr-color-success-quiet)`),
26160
+ `--lr-diff-view-highlight-warning-background` (default `var(--lr-color-warning-quiet)`),
26161
+ `--lr-diff-view-highlight-danger-background` (default `var(--lr-color-danger-quiet)`), and
26162
+ `--lr-diff-view-highlight-neutral-background` (default `var(--lr-color-surface-raised)`) —
26163
+ background of a `highlights` line by tone,
26164
+ `--lr-diff-view-highlight-active-outline` (default `var(--lr-color-brand)` — outline of the line
26165
+ whose covering highlight is `activeHighlightId`), plus
25953
26166
  shared tokens `--lr-color-border`/`-surface`/`-success`/`-success-quiet`/`-danger`/
25954
26167
  `-danger-quiet`/`-text`, `--lr-radius`, `--lr-space-xs`/`-s`, `--lr-font-size-sm`,
25955
26168
  `--lr-line-height-snug`, `--lr-focus-ring-*`.
@@ -27689,10 +27902,12 @@ large collection is invisible until someone walks the data by hand. Both `chorop
27689
27902
  reduced figure in the feature — a log, a bucket, an index — and keep the exact value in your own
27690
27903
  payload beside the map.
27691
27904
 
27692
- - `label: string = ''` — purpose-specific accessible name for MapLibre's actual focusable canvas.
27905
+ - `label?: string` — purpose-specific accessible name for MapLibre's actual focusable canvas.
27693
27906
  A nonempty host `aria-label` remains on the host and is not duplicated onto the canvas; the canvas
27694
- uses `label` or the localized map name. An explicitly empty host `aria-label` is preserved as an
27695
- empty canvas name. The non-semantic `[part="base"]` wrapper is not named instead.
27907
+ uses `label` or the localized map name. Omitting `label` localizes the default `map` message; an
27908
+ explicit empty string suppresses that default and renders an empty canvas name. An explicitly
27909
+ empty host `aria-label` is separately preserved as an empty canvas name. The non-semantic
27910
+ `[part="base"]` wrapper is not named instead.
27696
27911
 
27697
27912
  **Authoring types:** `LyraMapLegendEntry`, `LyraMapLegendPattern`, `LyraMapLegendProjection`, `LyraMapChoroplethLayer`,
27698
27913
  `LyraMapGeoJsonDataLayer`, `LyraMapDataLayerKind`, `LyraMapClusterOptions`, `LyraMapHeatmapOptions`,
@@ -28012,6 +28227,9 @@ reimplemented.
28012
28227
  behavior exactly, and a negative, `NaN`, or `Infinity` override is normalized to `0` via
28013
28228
  `finiteCount` rather than corrupting every later comparison.
28014
28229
  - `readonly dragging: boolean` — `true` during an active drag session
28230
+ - `size: LyraSize = 'm'` (reflected) — density tier for the overlay's padding, icon and
28231
+ instructional text; identical contract and scale to `lr-file-input`'s own `size`, so a drop-zone
28232
+ can match a neighboring compact `lr-file-input` in the same dense layout.
28015
28233
 
28016
28234
  **Events:** `lr-files` (`detail: LyraDropZoneFilesDetail`, with fresh frozen readonly `files` and
28017
28235
  `rejected` arrays and frozen rejected-file records, plus `remainingFiles`/`remainingTotalSize`
@@ -28038,8 +28256,9 @@ while one exists).
28038
28256
  `--lr-drop-zone-overlay-border-color` (default `var(--lr-color-brand)`, the dashed overlay border in
28039
28257
  its neutral drag state, before an accept/reject verdict) and `--lr-drop-zone-overlay-bg` (default
28040
28258
  `color-mix(in srgb, var(--lr-color-brand) 8%, transparent)`, that same neutral state's fill),
28041
- `--lr-drop-zone-overlay-font-size` (default `var(--lr-font-size-md-sm)`),
28042
- `--lr-drop-zone-overlay-icon-size` (default `var(--lr-font-size-xl)`),
28259
+ `--lr-drop-zone-overlay-font-size` (default `var(--lr-font-size-md-sm)`, retuned per `size` tier),
28260
+ `--lr-drop-zone-overlay-icon-size` (default `var(--lr-font-size-xl)`, retuned per `size` tier),
28261
+ `--lr-drop-zone-overlay-padding` (default `var(--lr-space-l)`, retuned per `size` tier),
28043
28262
  `--lr-drop-zone-overlay-gap` (default `var(--lr-space-xs)`), and the drag accept/reject highlight —
28044
28263
  `--lr-drop-zone-accept-border-color`/`--lr-drop-zone-accept-bg` (defaults `var(--lr-color-success)`/
28045
28264
  `color-mix(in srgb, var(--lr-color-success) 12%, transparent)`) and
@@ -29225,7 +29444,11 @@ private default changes for a non-neutral `variant` to that variant's loud color
29225
29444
  and of any `em`-sized slotted glyph. Its private default follows `size` alongside the diameter
29226
29445
  (`--lr-font-size-xs` at `2xs`, `--lr-font-size-sm` at `xs`, `--lr-font-size-md-sm` at `s`,
29227
29446
  `--lr-font-size-m` at `m`, `--lr-font-size-lg` at `l`, and `--lr-font-size-xl` at `xl`), so the
29228
- initials track the circle instead of staying one fixed size across every tier. Every public value
29447
+ initials track the circle instead of staying one fixed size across every tier. `--lr-avatar-radius`
29448
+ (default `var(--lr-radius-pill)`) — corner radius of the container. Its private default follows
29449
+ `shape` (`var(--lr-radius-pill)` for `circle`, `var(--lr-radius)` for `rounded`, `0` for `square`);
29450
+ an inherited or direct public value overrides uniformly across every shape, the same way
29451
+ `--lr-avatar-size` spans every size tier. Every public value
29229
29452
  above can be inherited from an ancestor or set directly on the avatar and remains authoritative
29230
29453
  across size/variant states. Plus shared tokens
29231
29454
  `--lr-radius`/`-pill`, `--lr-font-weight-semibold`.
@@ -29500,11 +29723,18 @@ that follows `variant`),
29500
29723
  badge label. Its private default follows `size` alongside the badge diameter, matching
29501
29724
  `<lr-avatar>`'s own `--lr-avatar-font-size` scale (`xs`/`sm`/`md-sm`/`m`/`lg`/`xl` font tokens from
29502
29725
  the `2xs` through `xl` size tiers), so the badge and the avatars it caps read at the same optical
29503
- weight. An inherited or direct public value remains authoritative for every hook.
29504
-
29505
- The overflow badge keeps a `--lr-icon-button-size` minimum activation target at every tier while
29506
- the nested visual disc stays exactly avatar-sized, so small tiers do not paint as oversized 40px
29507
- circles.
29726
+ weight. `--lr-avatar-group-radius` (default `var(--lr-radius-pill)`) — corner radius of the
29727
+ slotted avatars' ring and of the overflow badge's painted disc. Its private default follows
29728
+ `shape` (`var(--lr-radius-pill)` for `circle`, `var(--lr-radius)` for `rounded`, `0` for `square`);
29729
+ an inherited or direct public value overrides both uniformly, mirroring `<lr-avatar>`'s own
29730
+ `--lr-avatar-radius` — a per-avatar `shape` override still wins for that individual avatar's own
29731
+ ring, matching the existing mixed-shape-group support. An inherited or direct public value remains
29732
+ authoritative for every hook.
29733
+
29734
+ The overflow badge keeps a `--lr-icon-button-size` minimum activation target at every tier — a
29735
+ floor, not a cap, so the action surface grows past it to always contain the nested visual disc
29736
+ once `--lr-avatar-group-avatar-size` exceeds it (the default size and `l`/`xl`) — while small
29737
+ tiers still paint an exactly avatar-sized disc instead of an oversized 40px circle.
29508
29738
 
29509
29739
  **Optional peer deps:** none.
29510
29740
 
@@ -30115,11 +30345,13 @@ convenience; every enabled row is independently reachable through ordinary seque
30115
30345
  native `FocusEvent`s (bubbling and composed, preserving `relatedTarget`).
30116
30346
  `lr-video-change` is bubbling and composed but non-cancelable, with exact
30117
30347
  detail `{ previousIndex, currentIndex, video }`. `video` is a fresh detached, recursively frozen plain-data snapshot with
30118
- exact shape `{ title, poster, sources, tracks }`, not the live child element. `sources` contains
30119
- fresh `{ src, type, media }` records for the child's direct `src` and `<source>` declarations;
30120
- `tracks` contains fresh `{ src, kind, srclang, label, default }` records. A listener that needs to
30121
- annotate or reshape the payload must create its own mutable copy; the dispatched detail and every
30122
- nested record/array reject mutation.
30348
+ exact shape `{ title, poster, sources, tracks }`, not the live child element, or `null`. `sources`
30349
+ contains fresh `{ src, type, media }` records for the child's direct `src` and `<source>`
30350
+ declarations; `tracks` contains fresh `{ src, kind, srclang, label, default }` records. A listener
30351
+ that needs to annotate or reshape the payload must create its own mutable copy; the dispatched
30352
+ detail and every nested record/array reject mutation. Also fired when a light-DOM mutation (a video
30353
+ removed, or every remaining video made `inert`/disabled) leaves no enabled video to replace a
30354
+ previously active one: `video` is `null` and `currentIndex` is `-1` in that case.
30123
30355
 
30124
30356
  **Slot:** the default slot accepts direct `<lr-video>` children. Nested videos and other elements
30125
30357
  are not playlist items.
@@ -30646,7 +30878,7 @@ These named interfaces and helper signatures are available to typed integrations
30646
30878
  `LyraVideoPlaylistChangeDetail {
30647
30879
  readonly previousIndex: number;
30648
30880
  readonly currentIndex: number;
30649
- readonly video: LyraVideoPlaylistVideo;
30881
+ readonly video: LyraVideoPlaylistVideo | null;
30650
30882
  }`
30651
30883
  Import: `@aceshooting/lyra-ui/components/media/video-playlist/video-playlist.class.js`.
30652
30884
  `LyraVideoPlaylistItem {
@@ -31096,17 +31328,24 @@ including a string or finite-number `id` when supplied; invalid ids are omitted.
31096
31328
  is typed `unknown`. Validate or explicitly narrow the value itself before reading point fields;
31097
31329
  checking `detail.kind === 'point'` alone does not narrow `detail.value` in TypeScript.
31098
31330
  `lr-point-click` remains as a compatibility event. Also
31099
- `lr-before-legend-visibility-change` (cancelable proposal), and
31331
+ `lr-legend-visibility-change-request` (cancelable proposal), and
31100
31332
  `lr-legend-visibility-change` (accepted commit). Both legend events carry
31101
31333
  `{ datasetIndex: number, visible: boolean, hiddenDatasets: readonly number[] }`; the latter is the
31102
31334
  complete, sorted, valid next snapshot. Call `preventDefault()` on the proposal to veto the toggle;
31103
- then no property change or commit event occurs.
31104
- Category toggles use a separate pair, `lr-before-datum-visibility-change` (cancelable proposal) and
31335
+ then no property change or commit event occurs. `lr-before-legend-visibility-change` is a
31336
+ **deprecated** alias of `lr-legend-visibility-change-request`, fired immediately after it from the
31337
+ same gesture with the same frozen detail; either event may veto. It is slated for removal in
31338
+ 21.0.0 — migrate listeners to `lr-legend-visibility-change-request`.
31339
+ Category toggles use a separate pair, `lr-datum-visibility-change-request` (cancelable proposal) and
31105
31340
  `lr-datum-visibility-change` (accepted commit), carrying
31106
31341
  `{ index: number, visible: boolean, hiddenDatums: readonly number[] }`. Both details and their
31107
31342
  complete, sorted index snapshots are frozen. `index` is the source category index, including when
31108
31343
  the displayed data is sampled; it applies across all rings. Programmatic assignments emit neither
31109
31344
  pair. `preventDefault()` leaves both controlled state and the chart unchanged.
31345
+ `lr-before-datum-visibility-change` is a **deprecated** alias of
31346
+ `lr-datum-visibility-change-request`, fired immediately after it from the same gesture with the
31347
+ same frozen detail; either event may veto. It is slated for removal in 21.0.0 — migrate listeners
31348
+ to `lr-datum-visibility-change-request`.
31110
31349
 
31111
31350
  ```html
31112
31351
  <lr-doughnut-chart
@@ -31654,11 +31893,14 @@ of every entry in these lists.**
31654
31893
  `refreshTheme()`.
31655
31894
 
31656
31895
  **Events:** `lr-zoom` (`detail: { zoomed: boolean }`), `lr-datum-activate`, `lr-point-click` (`detail: { datasetIndex,
31657
- index, label, value }`), `lr-before-legend-visibility-change` (cancelable), and
31896
+ index, label, value }`), `lr-legend-visibility-change-request` (cancelable), and
31658
31897
  `lr-legend-visibility-change` (commit; both legend events carry `datasetIndex`, `visible`, and the
31659
- complete `hiddenDatasets` snapshot).
31660
- Radial category legends additionally emit `lr-before-datum-visibility-change` (cancelable) and
31898
+ complete `hiddenDatasets` snapshot). `lr-before-legend-visibility-change` is a **deprecated** alias
31899
+ of `lr-legend-visibility-change-request` (removal not before 21.0.0).
31900
+ Radial category legends additionally emit `lr-datum-visibility-change-request` (cancelable) and
31661
31901
  `lr-datum-visibility-change`, carrying `index`, `visible` and the frozen `hiddenDatums` snapshot.
31902
+ `lr-before-datum-visibility-change` is a **deprecated** alias of `lr-datum-visibility-change-request`
31903
+ (removal not before 21.0.0).
31662
31904
 
31663
31905
  **Slots:** default JSON configuration script, `data-table`, `center`.
31664
31906
 
@@ -31742,10 +31984,12 @@ maxSamples?)` appends finite raw samples and optionally retains only the newest
31742
31984
  `appendData()` remains a working compatibility adapter (no longer deprecated); prefer
31743
31985
  `appendSamples()` for new code.
31744
31986
 
31745
- **Events:** `lr-zoom`, `lr-datum-activate`, `lr-point-click`, `lr-before-datum-visibility-change`
31746
- (cancelable), `lr-datum-visibility-change`, `lr-before-legend-visibility-change` (cancelable), and
31987
+ **Events:** `lr-zoom`, `lr-datum-activate`, `lr-point-click`, `lr-datum-visibility-change-request`
31988
+ (cancelable), `lr-datum-visibility-change`, `lr-legend-visibility-change-request` (cancelable), and
31747
31989
  `lr-legend-visibility-change` — inherited; `lr-point-click`'s `index` is the bucket index and
31748
31990
  `label` the generated bucket range string (`"lo–hi"`, both bounds at one decimal place).
31991
+ `lr-before-datum-visibility-change`/`lr-before-legend-visibility-change` are deprecated aliases of
31992
+ the two `*-request` events above (removal not before 21.0.0).
31749
31993
  The inherited datum-visibility events apply only to radial controllers; the histogram keeps its
31750
31994
  bar controller and dataset legend even with `legend-mode="datum"`.
31751
31995
 
@@ -31838,6 +32082,7 @@ apply when the component reconnects.
31838
32082
  - `height: string = '280px'` — valid CSS height used as a private fallback only. A consumer-set
31839
32083
  `--lr-chart-height` always wins; invalid values remove the fallback and leave the public
31840
32084
  token/default in control.
32085
+ - `xLabel: string = ''` (attribute `x-label`) — category axis title, mirroring `yLabel`
31841
32086
  - `yLabel: string = ''` (attribute `y-label`)
31842
32087
  - `beginAtZero: boolean = true` (attribute `begin-at-zero`)
31843
32088
  - `label: string | null = null`, `description: string | null = null` — canonical accessible name
@@ -31867,11 +32112,14 @@ change. Canvas work remains connected/visible-gated, while a rendered DOM legend
31867
32112
  its computed color swatches.
31868
32113
 
31869
32114
  **Events:** `lr-datum-activate` (canonical detail with `kind: 'box'`), `lr-point-click`
31870
- (compatibility), `lr-before-legend-visibility-change` (cancelable proposed legend
32115
+ (compatibility), `lr-legend-visibility-change-request` (cancelable proposed legend
31871
32116
  toggle) and `lr-legend-visibility-change` (accepted commit). The two legend events carry
31872
32117
  `{ datasetIndex: number, visible: boolean, hiddenDatasets: readonly number[] }`, where
31873
32118
  `hiddenDatasets` is the complete sorted, valid next snapshot. Calling `preventDefault()` on the
31874
32119
  proposal leaves state untouched and suppresses the commit event.
32120
+ `lr-before-legend-visibility-change` is a **deprecated** alias of
32121
+ `lr-legend-visibility-change-request`, fired immediately after it from the same gesture with the
32122
+ same detail; either event may veto (removal not before 21.0.0).
31875
32123
 
31876
32124
  `lr-point-click` fires when pointer input lands on a box, or when Enter/Space activates the
31877
32125
  keyboard-current box — the same event name and role `lr-chart` and `lr-lite-chart` expose. Its
@@ -32998,7 +33246,14 @@ complete entry path; both forms first mount the absolute virtualized row and onl
32998
33246
  shared DOM-level anchor resolution. Rendered rows intentionally do not expose entry paths as DOM
32999
33247
  ids; the fragment mapping is resolved against archive metadata. A jump whose archive is replaced
33000
33248
  by a concurrent `src` reassignment mid-flight, or whose row cannot be located after the wait,
33001
- reports `found: false` rather than a phantom success.
33249
+ reports `found: false` rather than a phantom success. A ZIP central directory may legally repeat
33250
+ an entry path across multiple entries; since a fragment id names only the path, it always
33251
+ resolves to that path's first central-directory occurrence (the same first-match precedent as
33252
+ `document.getElementById()`/`:target` for a duplicated DOM id) — a later duplicate is not
33253
+ independently addressable through the fragment/anchor API. `search()`/`searchNext()`/
33254
+ `searchPrevious()` are unaffected: they track each occurrence by its true row position, so
33255
+ navigating search matches (and the resulting active-row highlight) correctly reaches every
33256
+ duplicate-named entry, not just the first.
33002
33257
 
33003
33258
  **Events:** `lr-render-error` with `detail.error` when fetching or parsing fails;
33004
33259
  `lr-search-change` (`detail: { query, matchCount, matchCountExact, activeIndex }`) from search,
@@ -34458,7 +34713,11 @@ unbroken values from widening a 320px allocation.
34458
34713
 
34459
34714
  **Properties:** `src: string = ''` — URL to fetch and parse. `name: string = ''` — accessible label,
34460
34715
  used as `<lr-map>`'s `label` and the root's `aria-label` (falling back to the localized
34461
- `geojsonViewLabel` when unset). A host `aria-label` takes precedence over `name`. The shared
34716
+ `geojsonViewLabel` when unset). A host `aria-label` takes precedence over `name`.
34717
+ `maxHeight: string = ''` (attribute `max-height`) is a CSS length that caps `[part="base"]` —
34718
+ covering the loaded map, the serialized metadata, and the missing-peer fallback alike — by writing
34719
+ `--lr-geojson-viewer-max-height` inline on it; invalid CSS `max-height` values, declaration breaks,
34720
+ and `url()` are ignored. The shared
34462
34721
  text-viewer contract adds `highlights`, `activeHighlightId`, `anchor`, and
34463
34722
  `anchorKinds` (`['text-quote', 'fragment']`), plus `search()`, `searchNext()`, `searchPrevious()`,
34464
34723
  `clearSearch()`, and `scrollToAnchor()` for the ordinary-DOM serialized feature metadata and status
@@ -34500,6 +34759,10 @@ body text: `error` is `--lr-color-danger` (matching `lr-docx-viewer`/`lr-email-v
34500
34759
  but working state, since the `lr-json-viewer` fallback below it still renders the data, not a failure
34501
34760
  -- and `status` is the quiet `--lr-color-text-quiet` metadata tone.
34502
34761
 
34762
+ **Themeable custom properties:** `--lr-geojson-viewer-max-height` (default `none`) — maximum block
34763
+ size of `[part="base"]`, matching every other viewer in this family. It is also settable via the
34764
+ `maxHeight` property, which writes this token inline on `[part="base"]`.
34765
+
34503
34766
  The canonical tag is registered by importing `geojson-viewer/geojson-viewer.js`; the permanent
34504
34767
  compatibility tag and old deep route remain available through `geojson-view/geojson-view.js`.
34505
34768
  Remote
@@ -37341,7 +37604,9 @@ hosts that already have one (e.g. `lr-push-to-talk`'s `lr-level` detail); `state
37341
37604
  animation and per-state coloring; `mode: AudioVisualizerMode = 'bars'` (`'bars' | 'waveform'`,
37342
37605
  reflected); `barCount: number = 5` (attribute `bar-count`, normalized to an integer in `[1, 64]`);
37343
37606
  `gain: number = 1` — multiplier applied to the resolved amplitude, with a non-finite value treated
37344
- as `1`; `label: string = ''` — accessible-name override. `level` is clamped to `[0, 1]`; after gain,
37607
+ as `1`; `label?: string` — accessible-name override. Omitting it auto-generates "Voice activity:
37608
+ {state}"; an explicit empty string suppresses that default and renders an empty accessible name.
37609
+ `level` is clamped to `[0, 1]`; after gain,
37345
37610
  waveform and bar values are clamped to `[-1, 1]` and `[0, 1]` respectively. Invalid `state` or
37346
37611
  `mode` attribute/property writes normalize to `idle` and `bars` respectively.
37347
37612
 
@@ -37379,7 +37644,9 @@ the new `index` back. Renders nothing at all while `count < 2`, so a host can bi
37379
37644
  on every message regardless of whether that message actually has multiple branches yet.
37380
37645
 
37381
37646
  **Properties:** `index: number = 0` (reflected) and `count: number = 1` (reflected) — the current
37382
- 0-based branch and the total branch count. `label: string = ''`.
37647
+ 0-based branch and the total branch count. `label?: string` — accessible name for the group.
37648
+ Omitting it localizes the default `branchPickerLabel` message; an explicit empty string suppresses
37649
+ that default and renders no label.
37383
37650
 
37384
37651
  **Methods:** `focus(options?)` forwards to the currently enabled chevron (falling back to the first
37385
37652
  rendered chevron), `blur()` blurs both chevrons, `click()` activates that same enabled target, and
@@ -37428,7 +37695,9 @@ opens). `feedbackPending: boolean` (read-only, nonreflecting) — true only whil
37428
37695
  feedback control awaits settlement; it has no `feedback-pending` attribute or change event.
37429
37696
  `revealOnInteraction: boolean = false` (reflected, attribute `reveal-on-interaction`) — hides
37430
37697
  the bar until the closest `lr-chat-message` ancestor is hovered, or the toolbar contains focus.
37431
- `label: string = ''` — accessible name override for the toolbar. `accessibleLabel: string | null =
37698
+ `label?: string` — accessible name override for the toolbar. Omitting it localizes the default
37699
+ `messageActionsLabel` message; an explicit empty string suppresses that default and renders no
37700
+ label. `accessibleLabel: string | null =
37432
37701
  null` (attribute `aria-label`) — overrides the toolbar's computed accessible name, winning over
37433
37702
  `label` and the localized default; attribute-reflects from a host-level `aria-label`.
37434
37703
 
@@ -37740,8 +38009,9 @@ index of the first unread item (element-child index in slotted mode, `items` ind
37740
38009
  'off'` (reflected) — policy for the shared light-DOM announcement sink; the internal log itself
37741
38010
  remains non-live. Keep `off` for token-by-token streaming and opt in only when complete messages are
37742
38011
  appended as direct children at an announcement-safe cadence.
37743
- `label: string = ''` — accessible name
37744
- for the log region, defaults to the localized `chatViewportLabel`. `accessibleLabel: string | null =
38012
+ `label?: string` — accessible name
38013
+ for the log region. Omitting it localizes the default `chatViewportLabel` message; an explicit
38014
+ empty string suppresses that default and renders no label. `accessibleLabel: string | null =
37745
38015
  null` (attribute `aria-label`) — host `aria-label`, forwarded to the internal `role="log"` element
37746
38016
  (an `aria-label` left on the host itself names nothing, since the log role lives inside the shadow
37747
38017
  root); wins over `label` and the localized default.
@@ -38490,8 +38760,10 @@ custom-value editor: they do not navigate options, commit a selection or custom
38490
38760
  popup. Ordinary keyboard behavior resumes after composition.
38491
38761
 
38492
38762
  **Exported types:** `LyraVoiceCatalogEntry extends LyraCatalogEntry { language?: string;
38493
- description?: string; previewUrl?: string }` — `language`/`description` render as a quiet
38494
- `[part="option-meta"]` second line. Voice catalogs use the shared
38763
+ description?: string; previewUrl?: string; icon?: string }` — `language`/`description` render as a
38764
+ quiet `[part="option-meta"]` second line; `icon` is an optional literal icon hint (for example, an
38765
+ emoji), rendered decoratively as the leading `[part="option-icon"]`, matching
38766
+ `lr-model-select`'s identical `LyraModelCatalogEntry.icon` field. Voice catalogs use the shared
38495
38767
  `LyraCatalog<LyraVoiceCatalogEntry>` homogeneous readonly union documented under `lr-model-select`,
38496
38768
  including the shared `disabled` field: a disabled voice row cannot be selected by click or keyboard
38497
38769
  and is stepped over by arrow-key/Home/End navigation, but its own `[part="option-preview"]` stays
@@ -38582,7 +38854,8 @@ reports no violation and publishes neither `:state(invalid)` nor
38582
38854
  `:state(user-invalid)`.
38583
38855
 
38584
38856
  **CSS parts:** `form-control` (the complete field frame), `form-control-label`, `trigger` (closed-dropdown mode), `combobox`/`combobox-input`
38585
- (free-text mode), `provider-badge`, `listbox`, `option`, `option-label`, `option-meta` (the quiet
38857
+ (free-text mode), `provider-badge`, `listbox`, `option`, `option-icon` (an object-shaped catalog
38858
+ row's optional decorative leading icon), `option-label`, `option-meta` (the quiet
38586
38859
  `language · description` second line), `option-badge` (the "not in catalog" badge on a synthetic
38587
38860
  stale-value row), `option-preview` (a pointer-only per-row preview icon, `tabindex="-1"`,
38588
38861
  `aria-hidden`), `preview-button` (the standalone, keyboard-reachable preview toggle beside the
@@ -38816,8 +39089,14 @@ are still derived from the full sequence first, in the same linear prepass, so a
38816
39089
  stays stable even once an earlier citation rolls out of the rendered window. Opt in for a message
38817
39090
  that can grow an unusually large number of interleaved parts (e.g. a long agentic run with many
38818
39091
  tool-call/tool-result pairs), where unbounded live DOM can visibly stall the main thread.
38819
- `renderPart?: MessagePartRenderer` (attribute: false), where returning `undefined` delegates that
38820
- part to the built-in renderer; `accessibleLabel: string | null = null` (attribute `aria-label`).
39092
+ `renderPart?: MessagePartRenderer` (attribute: false) — returning `undefined` for a part delegates
39093
+ it to the built-in renderer, keeping every built-in affordance intact; any other return fully
39094
+ replaces that part's built-in rendering, including every interactive affordance the built-in
39095
+ renderer would otherwise wire up for it (the `error` part's retry button's `lr-part-retry`, a
39096
+ `citation` part's activation `lr-citation-select`, and the composed `<lr-tool-call-chip>`/
39097
+ `<lr-tool-result-view>`/`<lr-attachment-chip>`/`<lr-widget-renderer>` children's own events) — a
39098
+ host overriding an interactive part type must reimplement whatever of that interaction it still
39099
+ wants; `accessibleLabel: string | null = null` (attribute `aria-label`).
38821
39100
 
38822
39101
  Unsupported direct or `content-mode` attribute values normalize and reflect as `markdown`.
38823
39102
 
@@ -38910,7 +39189,10 @@ LyraAttachmentCapability[] = ['files', 'image', 'audio']`, `mentionItems: readon
38910
39189
  `voiceCatalog?: LyraCatalog<LyraVoiceCatalogEntry>`,
38911
39190
  `sources: readonly LyraSourceEntry[] = []`, `selectedSourceIds: readonly string[] = []`, and `queue:
38912
39191
  readonly PromptQueueItem[] = []` (all attribute: false); `model: string = ''`; `voice: string = ''`;
38913
- `label: string = ''`; `accessibleLabel: string | null = null` (attribute `aria-label`).
39192
+ `label?: string` — accessible name for the prompt section. Omitting it localizes the default
39193
+ `promptInputLabel` message; an explicit empty string suppresses that default and renders no label.
39194
+ `accessibleLabel: string | null = null` (attribute `aria-label`) — wins over `label` and the
39195
+ localized default.
38914
39196
  Source roots and queued prompts require unique nonblank `id` values; malformed rows and later
38915
39197
  duplicates are omitted first-wins before section gating and child forwarding. Controlled selected
38916
39198
  source ids use the same unique nonblank projection.
@@ -38980,13 +39262,16 @@ receives focus. Removing an unfocused row does not move focus.
38980
39262
 
38981
39263
  **Properties:** `items: readonly PromptQueueItem[] = []` (attribute: false); `editable: boolean = true`
38982
39264
  (reflected, string-aware true-default converter); `disabled: boolean = false` (reflected);
38983
- `label: string = ''`; `accessibleLabel: string | null = null` (attribute `aria-label`).
39265
+ `label?: string`; `accessibleLabel: string | null = null` (attribute `aria-label`).
38984
39266
  `PromptQueueItem = { id: string; value: string; attachments?: readonly DocumentRef[]; createdAt?: number;
38985
39267
  metadata?: Record<string, unknown> }`.
38986
39268
 
38987
39269
  Item ids are occurrence identities. Empty ids and later duplicates are ignored before rendering or
38988
39270
  proposing a mutation, preserving one unambiguous `itemId`. Attachment names render visibly for both
38989
- editable and read-only rows; the host `label` is also the visible queue heading.
39271
+ editable and read-only rows; the host `label` is also the visible queue heading. Omitting `label`
39272
+ localizes the default `promptQueueLabel` message; an explicit empty string suppresses that default
39273
+ and renders no visible heading (`accessibleLabel` still overrides the region's accessible name
39274
+ independently).
38990
39275
 
38991
39276
  Supported item and attachment fields are read once when `items` is assigned; create and reassign a
38992
39277
  new collection after changes, because changing an assigned record or reassigning the same mutated
@@ -39015,7 +39300,10 @@ Nonmodal, Escape-dismissible text-selection toolbar carrying selected text plus
39015
39300
  **Properties:** `open: boolean = false` (reflected); `text: string = ''`;
39016
39301
  clone-owned `anchor: DocumentLocator | null = null`, `rect: DOMRectReadOnly | null = null`, and
39017
39302
  clone-owned `actions: readonly SelectionAction[] = ['ask', 'quote', 'cite', 'copy']` (attribute: false);
39018
- `label: string = ''`; `accessibleLabel: string | null = null` (attribute `aria-label`).
39303
+ `label?: string` — accessible name for the toolbar. Omitting it localizes the default
39304
+ `selectionToolbarLabel` message; an explicit empty string suppresses that default and renders no
39305
+ label. `accessibleLabel: string | null = null` (attribute `aria-label`) — wins over `label` and
39306
+ the localized default.
39019
39307
  `SelectionAction = 'ask' | 'quote' | 'cite' | 'copy'`. Duplicate built-in names are omitted
39020
39308
  first-wins before rendering, roving focus, and action events. The anchor (including any path) and
39021
39309
  actions are bounded frozen snapshots; reassign a new record or array after changes.
@@ -39081,7 +39369,9 @@ clamped by the composed visualizer); `stream: MediaStream | null = null`; `sessi
39081
39369
  entry announcement identity; `entries: LyraTranscriptEntry[] = []` (attribute: false);
39082
39370
  `muted: boolean = false` (reflected);
39083
39371
  `showCapture: boolean = true` (attribute `show-capture`, reflected, string-aware true-default
39084
- converter); `label: string = ''`. Invalid attribute or direct-property values for `state` and
39372
+ converter); `label?: string` — accessible name for the session shell. Omitting it localizes the
39373
+ default `realtimeSessionLabel` message; an explicit empty string suppresses that default and
39374
+ renders no label. Invalid attribute or direct-property values for `state` and
39085
39375
  `voiceState` normalize to their safe defaults (`'disconnected'` and `'idle'`) through the same
39086
39376
  closed-set converter.
39087
39377
 
@@ -39530,6 +39820,7 @@ These named interfaces and helper signatures are available to typed integrations
39530
39820
  language?: string;
39531
39821
  description?: string;
39532
39822
  previewUrl?: string;
39823
+ icon?: string;
39533
39824
  // Inherited from LyraCatalogEntry.
39534
39825
  id: string;
39535
39826
  label: string;
@@ -39699,6 +39990,8 @@ duration"`). A host `aria-label` remains on the host and is not cloned onto that
39699
39990
  not place links, buttons, or other controls there; use the chip activation or detail slot instead
39700
39991
  - Escape only dismisses the tooltip when it's open; it does not fire any event or otherwise affect
39701
39992
  `status`/`open` state, since the chip has no "open" state of its own beyond the tooltip
39993
+ - An open tooltip participates in shared Escape ordering even while only hovered, deferring to a
39994
+ genuinely topmost overlay opened on top of it
39702
39995
 
39703
39996
  ---
39704
39997
 
@@ -40236,9 +40529,10 @@ plain text) — this component has no dependency on either.
40236
40529
  - `label?: string` — omitted localizes `thinkingPanelLabel` (`'Thinking'` in the built-in English
40237
40530
  catalog). Any supplied string is an explicit override and renders verbatim, including
40238
40531
  `label="Thinking"` under a non-English `.strings` catalog and `label=""`.
40239
- - `compact: boolean = false` (reflected) — tightens the header/body padding and the header's
40240
- internal gap for dense transcript rows. This is only a density control: its card border and
40241
- surface remain, so use `frame="plain"` when surrounding message chrome already supplies them.
40532
+ - `compact: boolean = false` (reflected) — tightens the header/body padding, the header's internal
40533
+ gap, and the header/body font size for dense transcript rows. This is only a density control: its
40534
+ card border and surface remain, so use `frame="plain"` when surrounding message chrome already
40535
+ supplies them.
40242
40536
  - `frame: LyraFrame = 'card'` (reflected) — the library-wide container-frame vocabulary
40243
40537
  (`'card' | 'plain'`). `'card'` keeps the bordered, filled outer container. `'plain'` removes its
40244
40538
  border, background, and corner radius so a nested panel does not double an existing frame;
@@ -40291,7 +40585,9 @@ pending duration/toggle accent without changing the shared brand token;
40291
40585
  `--lr-thinking-panel-compact-header-font-size` (default `var(--lr-font-size-sm)`) — font size of
40292
40586
  `[part="header"]` while `compact`; and
40293
40587
  `--lr-thinking-panel-compact-body-padding` (default `var(--lr-space-s)`) — `[part="body"]`
40294
- padding while `compact`. `--lr-thinking-panel-background` (default `var(--lr-color-surface)`),
40588
+ padding while `compact`; and `--lr-thinking-panel-compact-body-font-size` (default
40589
+ `var(--lr-font-size-sm)`) — font size of `[part="body"]` while `compact`.
40590
+ `--lr-thinking-panel-background` (default `var(--lr-color-surface)`),
40295
40591
  `--lr-thinking-panel-border-color` (default `var(--lr-color-border)`) and
40296
40592
  `--lr-thinking-panel-radius` (default `var(--lr-radius)`) retune `[part="base"]`'s card chrome
40297
40593
  without a `::part(base)` override; the border-color hook also colors the header/body divider that
@@ -40706,7 +41002,12 @@ boolean; readonly autocapitalize?: string; readonly autoCorrect?: string; readon
40706
41002
  string; readonly enterKeyHint?: string }` — one `schema.properties`
40707
41003
  entry. `enum` is only meaningful when `type` is `'string'` (rendered as a `<lr-select>`); `const`
40708
41004
  enforces one exact primitive value; `title` is the display label; `description` is helper text;
40709
- `default` pre-fills a field whenever `value` doesn't already have that key. For a free-form
41005
+ `default` pre-fills a field whenever `value` doesn't already have that key. For a `'string'`
41006
+ (non-enum) or `'number'`/`'integer'` field, `const` also pre-fills the field (taking priority
41007
+ over `default` when both are present) and renders its native control `readonly` — visible,
41008
+ focusable and copyable, but not editable, and still submitted as the locked value. The
41009
+ `'boolean'`/enum `<lr-select>` fields are unaffected: `const` there remains pure post-touch
41010
+ validation, as before. For a free-form
40710
41011
  string field, `autocomplete`, `spellcheck`, `autocapitalize`, `autoCorrect`, `inputMode`, and
40711
41012
  `enterKeyHint` forward the corresponding native editing hints to the rendered text input;
40712
41013
  `spellcheck` defaults to `true`, and the other hints are omitted unless supplied.
@@ -40730,7 +41031,9 @@ Readonly<Record<string, ToolParamFormProperty>>; readonly required?: readonly st
40730
41031
  `lr-input`) as that default, but the `value` property itself is left alone until the user actually
40731
41032
  edits that field. JSON Schema ordinarily treats `default` as an annotation; this renderer
40732
41033
  deliberately materializes it before validation/submission, so a valid default can satisfy
40733
- `required`.
41034
+ `required`. A `const` on a `'string'` (non-enum) or `'number'`/`'integer'` field takes priority
41035
+ over `default` for this same materialization, and additionally renders that field's control
41036
+ `readonly` so the locked value is visible and submitted but not editable.
40734
41037
  - `name: string = ''` — submission key for optional native `<form>` participation
40735
41038
  - `disabled: boolean = false` (reflected)
40736
41039
  - `customError: string | null = null` (attribute `custom-error`) — reflected consumer validation
@@ -40743,9 +41046,10 @@ Readonly<Record<string, ToolParamFormProperty>>; readonly required?: readonly st
40743
41046
 
40744
41047
  - `effectiveValue: ToolParamFormValue` — a detached, deeply frozen `value` snapshot with every
40745
41048
  property missing from it filled in
40746
- from `schema`'s own `default`; this is what actually renders and what `lr-input`'s detail carries.
41049
+ from `schema`'s own `const` (when present) or `default`; this is what actually renders and what
41050
+ `lr-input`'s detail carries.
40747
41051
  A key the user has explicitly cleared (a real own property set to `undefined`) stays cleared rather
40748
- than snapping back to its default — only a key genuinely absent from `value` falls back.
41052
+ than snapping back to its `const`/default — only a key genuinely absent from `value` falls back.
40749
41053
  - `errors: Readonly<Record<string, string>>` — a frozen effective validation-error snapshot.
40750
41054
  Intrinsic errors use their schema property key; a schema-wide/serialization error or consumer
40751
41055
  custom-validity message uses `base`, the whole-control part. It is independent of which fields
@@ -40777,6 +41081,9 @@ Readonly<Record<string, ToolParamFormProperty>>; readonly required?: readonly st
40777
41081
  - `click(): void` — forwards a host click to the first generated field's control, so the form
40778
41082
  behaves like a single control under both a `<label>`-driven and a programmatic click; a no-op
40779
41083
  while `disabled`.
41084
+ - `focus(options?: FocusOptions): void` — moves focus to the first generated field's control,
41085
+ mirroring `click()`; a no-op while `disabled`.
41086
+ - `blur(): void` — blurs whichever generated field currently holds focus.
40780
41087
 
40781
41088
  **Events:** `lr-input` (deeply frozen `detail: { value: ToolParamFormValue }` — the full detached
40782
41089
  current value snapshot, every property with defaults resolved, not just the field that changed),
@@ -41418,13 +41725,16 @@ element or any ancestor, and they exist because `::part(row)[data-active]` is in
41418
41725
  `--lr-trace-tree-max-indent` (default `var(--lr-size-12rem)`) caps visual nesting indentation;
41419
41726
  semantic `aria-level` remains exact at deeper levels.
41420
41727
 
41421
- **Contrast note:** the active row is more than a tint. Its secondary text would sit at ~4.25:1
41728
+ **Contrast note:** the active row is more than a tint. Its secondary text would sit at ~4.17:1
41422
41729
  against the default tint if it stayed at `--lr-color-text-quiet`, so it rises to full-strength
41423
41730
  `--lr-color-text` while the row is active, and the semantic `status-text` labels are rendered as
41424
41731
  `color-mix(in srgb, var(--lr-color-<tone>) 75%, var(--lr-color-text))` — keeping the status hue
41425
- (an error row stays red) while clearing the 4.5:1 floor (success 4.46 → 6.18, `denied` 4.28 →
41426
- 5.96). Both adjustments are theme-symmetric, because `--lr-color-text` flips with the color
41427
- scheme. `[part='bar']` is deliberately untouched: it is a non-text graphic on a 3:1 floor, and its
41732
+ (an error row stays red) while clearing the 4.5:1 floor with a full point of margin or more for
41733
+ every currently shipped default tone. The exact ratio moves with every palette ramp revision
41734
+ (`src/internal/tokens/palette.styles.ts`), so no specific number is pinned here — recompute against
41735
+ the live tokens before quoting one. Both adjustments are theme-symmetric, because `--lr-color-text`
41736
+ flips with the color scheme. `[part='bar']` is deliberately untouched: it is a non-text graphic on
41737
+ a 3:1 floor, and its
41428
41738
  saturation is the row's primary status signal.
41429
41739
 
41430
41740
  The two properties are a **pair**. The defaults assume the active background stays on the same
@@ -41482,12 +41792,13 @@ plain and virtualized rendering paths while `label` remains the visible header t
41482
41792
  arbitrary rich content (e.g. rendered markdown, or markdown plus a trailing tool-call chip list),
41483
41793
  identically whether or not the feed is currently virtualized; replaces the plain text **inside**
41484
41794
  the persistent `[part="entry-text"]` wrapper rather than removing that part, and `virtualizeAt: number = 199` (attribute
41485
- `virtualize-at`). `compact: boolean = false` (reflected) — tighter header and entry-row padding for
41486
- dense transcript contexts, the same density-only convention `<lr-confirm-bar>`'s and
41795
+ `virtualize-at`). `compact: boolean = false` (reflected) — tighter header and entry-row padding and
41796
+ gap for dense transcript contexts, the same density-only convention `<lr-confirm-bar>`'s and
41487
41797
  `<lr-thinking-panel>`'s own `compact` establish: the outer border and surface stay, so pair it
41488
41798
  with `frame="plain"` to remove card chrome. Retune it through
41489
- `--lr-activity-feed-compact-header-padding`, `--lr-activity-feed-compact-header-gap`, and
41490
- `--lr-activity-feed-compact-entry-padding`. `frame: LyraFrame = 'card'` (reflected) — `'card' |
41799
+ `--lr-activity-feed-compact-header-padding`, `--lr-activity-feed-compact-header-gap`,
41800
+ `--lr-activity-feed-compact-entry-padding`, and `--lr-activity-feed-compact-entry-gap`.
41801
+ `frame: LyraFrame = 'card'` (reflected) — `'card' |
41491
41802
  'plain'`, imported from the library's shared container-frame vocabulary and behaving exactly as
41492
41803
  it does on `lr-confirm-bar`/`lr-thinking-panel`/`lr-agent-run`/etc.: `'plain'` removes the outer
41493
41804
  border, background, and corner radius so a feed nested inside existing message chrome doesn't
@@ -41509,13 +41820,19 @@ part is reachable in both rendering paths, virtualized or not.
41509
41820
  tall the expanded body grows before it scrolls internally; and
41510
41821
  `--lr-activity-feed-live-status-color` (default `var(--lr-color-brand)`) — background color of
41511
41822
  `status-dot` while `mode="live"`, independently retunable without changing other brand surfaces.
41512
- The `compact` density is retunable through three properties: `--lr-activity-feed-compact-header-padding`
41823
+ The `compact` density is retunable through four properties: `--lr-activity-feed-compact-header-padding`
41513
41824
  (default `var(--lr-space-2xs) var(--lr-space-s)`) and `--lr-activity-feed-compact-header-gap`
41514
41825
  (default `var(--lr-space-2xs)`) both scoped to `[part="header"]` while `compact`, and
41515
- `--lr-activity-feed-compact-entry-padding` (default `var(--lr-space-2xs) var(--lr-space-s)`)
41516
- scoped to `[part="entry"]` while `compact`. All three are inline `var()` fallbacks at their point
41826
+ `--lr-activity-feed-compact-entry-padding` (default `var(--lr-space-2xs) var(--lr-space-s)`) and
41827
+ `--lr-activity-feed-compact-entry-gap` (default `var(--lr-space-2xs)`) both scoped to
41828
+ `[part="entry"]` while `compact`. All four are inline `var()` fallbacks at their point
41517
41829
  of use, so any can be set on the element or on an ancestor, same as `lr-confirm-bar`'s and
41518
- `lr-thinking-panel`'s own compact tokens. The card chrome itself is retunable the same way:
41830
+ `lr-thinking-panel`'s own compact tokens. `renderText`'s returned content is otherwise unreachable
41831
+ by selector from outside the shadow root it renders into (the plain or the internal
41832
+ `<lr-virtual-list>`'s), so a returned anchor specifically is given
41833
+ `--lr-activity-feed-entry-text-link-color` (default `var(--lr-color-brand)`), mirroring
41834
+ `lr-table`'s identical `cell(row)`-anchor hook; set it to `revert` for the UA default link color.
41835
+ The card chrome itself is retunable the same way:
41519
41836
  `--lr-activity-feed-background` (default `var(--lr-color-surface)`) fills `[part="base"]`,
41520
41837
  `--lr-activity-feed-border-color` (default `var(--lr-color-border)`) colors both its border and the
41521
41838
  header/body divider that `frame="plain"` keeps, and `--lr-activity-feed-radius` (default
@@ -41532,6 +41849,10 @@ hooks tune the card presentation rather than reinstating chrome you asked to dro
41532
41849
  and the dot for DOM queries.
41533
41850
  - `compact`/`frame` render byte-identically to the pre-existing default when unset — neither
41534
41851
  property changes anything about the plain-card presentation.
41852
+ - A `renderText`-returned anchor is the only descendant markup given a default styling hook
41853
+ (`--lr-activity-feed-entry-text-link-color`); other rich descendants (`<code>`, `<em>`, custom
41854
+ chips) stay reachable only through inheritance or an inline style on the callback's own return
41855
+ value, since `::part(entry-text)` cannot select past the wrapper.
41535
41856
  - Focus repair after an `entries` change is asynchronous while virtualized (it waits on the
41536
41857
  internal `<lr-virtual-list>`'s own follow-up render before deciding whether the previously
41537
41858
  focused row actually disappeared), but synchronous when collapsing (`expanded` going `false`)
@@ -41992,7 +42313,9 @@ slot has assigned content. Assigning `view='code'` without assigned code content
41992
42313
  navigation and the built-in copy/download buttons.
41993
42314
 
41994
42315
  **Events:** `lr-view-change` (`detail: { view }`), `lr-version-change` (`detail: { versionId }`,
41995
- fired when the previous/next navigation moves to a different version), `lr-restore` (`detail: {
42316
+ fired when the previous/next navigation moves to a different version; not fired when a `versions`
42317
+ reassignment drops the currently-active version id — `activeVersionId` resets to `null` silently,
42318
+ since `null` is already a documented steady state meaning "the latest version"), `lr-restore` (`detail: {
41996
42319
  versionId }`, fired by the restore-this-version button; mutates nothing itself), `lr-copy`
41997
42320
  (`detail: { ok: true, text }`, after the clipboard write fulfills), `lr-error` plus
41998
42321
  `lr-copy-error` (`detail: { ok: false, text, reason, error }`) on a localized failure, and
@@ -42228,7 +42551,8 @@ menu. These composed child events surface unchanged; the inspector does not emit
42228
42551
  **CSS parts:** `base`, `toolbar`,
42229
42552
  `segments`, `segment`, `segment-header`, `segment-label`, `segment-text`, `segment-tokens`,
42230
42553
  `meter` (the embedded `lr-context-meter`), `citation`, `redaction` (one redaction placeholder
42231
- marker), `truncation-boundary`, `copy-button`, `export-button`, `empty`.
42554
+ marker), `truncation-boundary`, `copy-button`, `export-button`, `empty`, `limit` (localized notice
42555
+ shown when `segments` exceeds the 500-row render ceiling).
42232
42556
 
42233
42557
  ## `lr-eval-dataset`
42234
42558
 
@@ -42392,7 +42716,8 @@ child events as `lr-example-claim-select` (`{ exampleId, claim }`),
42392
42716
  `header-label`, `progress`, `summary`, `counts`, `count`, `examples`, `example`, `example-summary`,
42393
42717
  `example-label`, `example-status`, `example-status-message`, `input-section`, `input`, `output-section`, `output`,
42394
42718
  `grounding-section`, `grounding-summary`, `tool-trace-section`, `tool-trace`, `section-heading`,
42395
- `live-region`, `empty`.
42719
+ `live-region`, `empty`, `limit` (localized notice shown when `examples` exceeds the 500-row render
42720
+ ceiling).
42396
42721
 
42397
42722
  ## `lr-policy-summary`
42398
42723
 
@@ -42417,7 +42742,8 @@ resolve/acknowledge action — see `lr-tool-approval-dialog`/`lr-confirm-bar` fo
42417
42742
  gate.
42418
42743
 
42419
42744
  **CSS parts:** `base`, `empty`, `summary`, `count`, `state-badge`,
42420
- `list`, `decision`, `decision-header`, `category`, `label`, `detail`, `explanation`.
42745
+ `list`, `decision`, `decision-header`, `category`, `label`, `detail`, `explanation`, `limit`
42746
+ (localized notice shown when `decisions` exceeds the 500-row render ceiling).
42421
42747
 
42422
42748
  **Themeable custom properties:** `--lr-policy-summary-count-allow-color` (default
42423
42749
  `var(--lr-color-success)`), `--lr-policy-summary-count-deny-color` (default
@@ -42598,7 +42924,8 @@ resolved while open closes the dialog, and reentrant host updates during selecti
42598
42924
  stale request.
42599
42925
 
42600
42926
  **CSS parts:** `base`, `heading-row`, `heading`, `count`, `list`, `request`, `request-info`,
42601
- `tool-name`, `request-id`, `status`, `empty`. The `[part='request']` row matching
42927
+ `tool-name`, `request-id`, `status`, `empty`, `limit` (localized notice shown when `requests`
42928
+ exceeds the 500-row render ceiling). The `[part='request']` row matching
42602
42929
  `selectedInvocationId`
42603
42930
  carries both `data-selected="true"` (the styling hook) and `aria-current="true"` (the semantic
42604
42931
  state), so the selection is announced, not merely painted. Other request rows explicitly render
@@ -42813,11 +43140,13 @@ caps visual nesting indentation while preserving complete JSON Pointer paths;
42813
43140
  only.
42814
43141
 
42815
43142
  Rendering is capped independently at 500 schema nodes and 500 validation issues; `limit` and
42816
- `issue-limit` show their respective truncation as ordinary, non-live status text. Newly reaching or
42817
- changing either ceiling after the initial baseline appends the localized message to the shared
42818
- polite light-DOM announcement sink; initial and reconnect renders stay silent. Issues are indexed by
42819
- path once before recursive rendering instead of rescanning the full input for every node. Cycles stop
42820
- at the repeated node rather than recursing. **Slots:** none. **Optional peer deps:** none.
43143
+ `issue-limit` show their respective truncation as ordinary, non-live status text. When `selectedPath`
43144
+ resolves beyond the 500-node ceiling, that node and its resolvable ancestor chain reserve positions
43145
+ inside the cap ahead of ordinary traversal order, so the controlled selection remains visible. Newly
43146
+ reaching or changing either ceiling after the initial baseline appends the localized message to the
43147
+ shared polite light-DOM announcement sink; initial and reconnect renders stay silent. Issues are
43148
+ indexed by path once before recursive rendering instead of rescanning the full input for every node.
43149
+ Cycles stop at the repeated node rather than recursing. **Slots:** none. **Optional peer deps:** none.
42821
43150
 
42822
43151
  ```ts
42823
43152
  import '@aceshooting/lyra-ui/components/lr-json-schema-viewer.js';
@@ -42864,9 +43193,12 @@ counts, selection, and events.
42864
43193
  `task`, `model`, `progress`, `actions`, `cancel`, `retry`, `limit`, `empty`.
42865
43194
 
42866
43195
  At most 500 runs render, and visual indentation is capped at 12 levels while ARIA hierarchy keeps
42867
- the logical depth. The visible `limit` text is ordinary and non-live; newly reaching or changing the
42868
- run ceiling after the initial baseline appends the localized message to the shared polite light-DOM
42869
- announcement sink, while initial and reconnect renders stay silent. The roving treeitem accepts
43196
+ the logical depth. When `selectedRunId` names a run beyond the 500-run ceiling, that run and its
43197
+ resolvable ancestor chain reserve positions inside the cap ahead of ordinary array order, so the
43198
+ controlled selection remains visible. The visible `limit` text is ordinary and non-live; newly
43199
+ reaching or changing the run ceiling after the initial baseline appends the localized message to the
43200
+ shared polite light-DOM announcement sink, while initial and reconnect renders stay silent. The
43201
+ roving treeitem accepts
42870
43202
  Enter/Space as well as pointer activation for `lr-run-activate`; cancel/retry action names include the
42871
43203
  run label so repeated row actions remain distinguishable to assistive technology. Progress is finite
42872
43204
  and clamped. **Slots:** none.
@@ -43964,10 +44296,13 @@ string; shape?: 'circle' | 'square' | 'diamond' }`, the shared `lr-graph.nodeTyp
43964
44296
  `aria-label` makes the host the sole overall owner (the wrapper omits its duplicate role/name);
43965
44297
  an explicitly empty host label stays empty on the wrapper
43966
44298
 
43967
- **Events:** cancelable `lr-before-visibility-change` (`detail: { hiddenTypes }`, a frozen complete
44299
+ **Events:** cancelable `lr-visibility-change-request` (`detail: { hiddenTypes }`, a frozen complete
43968
44300
  next array) fires before a toggle changes state or announces it. Preventing it suppresses all three.
43969
44301
  `lr-visibility-change` (`detail: { hiddenTypes }`, the complete updated array) fires after an
43970
- accepted assignment and announcement.
44302
+ accepted assignment and announcement. `lr-before-visibility-change` is a **deprecated** alias of
44303
+ `lr-visibility-change-request`, fired immediately after it from the same gesture with the same
44304
+ frozen detail; either event may veto. It is slated for removal in 21.0.0 — migrate listeners to
44305
+ `lr-visibility-change-request`.
43971
44306
 
43972
44307
  **Slots:** none.
43973
44308
 
@@ -44161,6 +44496,8 @@ ancestor to change every unset entity chip beneath it.
44161
44496
  `lr-entity-card` as shown above, and handle the chip's own `lr-entity-select`/`lr-entity-open`
44162
44497
  events for navigation.
44163
44498
  - A blank `entityId` disables the chip and cannot produce an activation/open event.
44499
+ - An open popover participates in shared Escape ordering even while only hovered, deferring to a
44500
+ genuinely topmost overlay opened on top of it.
44164
44501
 
44165
44502
  ---
44166
44503
 
@@ -44296,7 +44633,8 @@ string; summary?: string; memberCount?: number }`; `memberCount` is a non-negati
44296
44633
  - `members: LyraEntity[] = []` (attribute: false) — rendered as chips, up to `maxMembers`
44297
44634
  - `maxMembers: number = 8` (attribute `max-members`) — remaining members collapse into a "+N"
44298
44635
  overflow chip
44299
- - `compact: boolean = false` (reflected) — omits the summary excerpt and member chips
44636
+ - `compact: boolean = false` (reflected) — omits the summary excerpt and member chips, and tightens
44637
+ `[part='base']`'s padding/gap — same convention as the sibling `lr-entity-card`'s `compact`
44300
44638
  - `frame: LyraFrame = 'card'` (reflected) — container treatment, in the library-wide `frame`
44301
44639
  vocabulary (`'card' | 'plain'`), the same property this component's sibling `lr-entity-card`
44302
44640
  carries. `'card'` (the default) keeps the bordered, filled, padded box; `'plain'` removes the
@@ -44317,8 +44655,10 @@ activated).
44317
44655
 
44318
44656
  **Themeable custom properties:** `--lr-community-card-bg` (default `var(--lr-color-surface)`) —
44319
44657
  `[part='base']`'s RESTING background, so a panel retinting its `lr-entity-card`/`lr-source-card`
44320
- siblings can retint this card with it; `frame='plain'` still drops the fill entirely. Otherwise
44321
- shared tokens.
44658
+ siblings can retint this card with it; `frame='plain'` still drops the fill entirely.
44659
+ `--lr-community-card-compact-padding` (default `var(--lr-space-s)`) and
44660
+ `--lr-community-card-compact-gap` (default `var(--lr-space-xs)`) — `[part='base']` padding/gap
44661
+ while `compact`. Otherwise shared tokens.
44322
44662
 
44323
44663
  **Optional peer deps:** none.
44324
44664
 
@@ -44503,7 +44843,9 @@ string; mimeType?: string; name?: string; children?: LyraSourceEntry[] }`; flat
44503
44843
  omitted state and removes the attribute
44504
44844
 
44505
44845
  **Events:** `lr-sources-change` (`detail: { selectedSourceIds }`, the complete updated leaf-id array,
44506
- fired after every toggle including select-all).
44846
+ fired after every toggle including select-all. Also fired when a `sources` reassignment prunes a
44847
+ previously-selected id that is no longer a valid leaf. Not fired when a consumer sets
44848
+ `selectedSourceIds` directly; that assignment is normalized silently).
44507
44849
 
44508
44850
  **Slots:** none.
44509
44851
 
@@ -44657,6 +44999,14 @@ LyraTopic[] }`; a single root sits at the center, multiple roots hang off an imp
44657
44999
  ring); expansion state afterward is component-managed per topic id and survives `topics`
44658
45000
  reassignment
44659
45001
 
45002
+ Above 500 currently-visible nodes (per the current expand/collapse state), the SVG and the
45003
+ parallel sr-only tree both render a deterministic, connectivity-preserving, subtree-size-weighted
45004
+ sample instead of every node: a kept node's parent, if any, is always kept too (no floating nodes
45005
+ with a dangling connector or a gap in the `role="tree"` walk), and a larger branch keeps
45006
+ proportionally more of its own nodes than a small one, sampled evenly across a wide/flat branch's
45007
+ own child list rather than dropping its tail outright. A surviving node keeps the position the
45008
+ full layout gave it. A localized "showing N of M" notice appears in `[part="limit"]`.
45009
+
44660
45010
  **Events:** `lr-topic-select` (`detail: { topicId }`, a _leaf_ topic was activated),
44661
45011
  `lr-topic-toggle` (`detail: { topicId, expanded }`, a parent topic was activated, or auto-expanded by
44662
45012
  keyboard descent).
@@ -44664,7 +45014,8 @@ keyboard descent).
44664
45014
  **Slots:** none.
44665
45015
 
44666
45016
  **CSS parts:** `base`, `svg` (the single-tab-stop focus target), `node`, `node-label`, `link`
44667
- (parent-child connector), `focus-ring` (keyboard focus ring), `live-region` (visually hidden
45017
+ (parent-child connector), `focus-ring` (keyboard focus ring), `limit` (the "showing N of M"
45018
+ render-cap notice, present only above 500 currently-visible nodes), `live-region` (visually hidden
44668
45019
  announcement region), `empty` (shown when `topics` is empty).
44669
45020
 
44670
45021
  **Themeable custom properties:** `--lr-mind-map-ring-gap` (default `6rem`, radius step per depth
@@ -44816,6 +45167,8 @@ no background tint, for citations that carry no confidence/verification signal a
44816
45167
  `lr-citation-open` instead of triggering a second `lr-citation-activate`.
44817
45168
  - Escape closes the popover but calls `stopPropagation()`, so it won't also close a surrounding
44818
45169
  `<lr-dialog>` that has its own Escape-to-close handler.
45170
+ - An open popover participates in shared Escape ordering even while only hovered, deferring to a
45171
+ genuinely topmost overlay opened on top of it.
44819
45172
  - The preview slot's presence is tracked in JS (`hasPreviewSlot`), not via CSS `:empty` — the
44820
45173
  `[part="popover"]` always contains a literal `<slot>` child, so `:empty` would never match even
44821
45174
  with nothing assigned.
@@ -44840,6 +45193,15 @@ direct light-DOM children of the list (plain composition — no `.items` array p
44840
45193
  header summary, e.g. `"3 sources"` or `"1 source"`; this component never counts or pluralizes on
44841
45194
  its own. Takes precedence over `label` when both are set. If neither is set, the header falls back
44842
45195
  to the localized `sourceListDefaultLabel` string (English default: `"Sources"`).
45196
+ - `compact: boolean = false` (reflected) — tighter header and list padding/gap, for a panel
45197
+ rendered repeatedly down a message transcript — same convention as this list's own slotted
45198
+ `lr-source-card` children's `compact`. Purely a density knob: the outer border and surface stay,
45199
+ so pair it with `frame="plain"` to remove card chrome.
45200
+ - `frame: LyraFrame = 'card'` (reflected) — container treatment, in the library-wide `frame`
45201
+ vocabulary (`'card' | 'plain'`). `'card'` (the default) keeps the bordered, filled outer
45202
+ container. `'plain'` removes that outer border, background, and corner radius so a list nested
45203
+ inside existing message chrome does not double it. Plain preserves the header/list divider and
45204
+ whichever regular or compact padding applies.
44843
45205
 
44844
45206
  **Getters:** `sourceCount: number` — read-only, live-updated count of the currently-slotted children,
44845
45207
  handy for building a `label-plural` string reactively, e.g. `` list.labelPlural = `${list.sourceCount} sources` ``.
@@ -44859,7 +45221,13 @@ list/listitem semantics return.
44859
45221
  `toggle` (the chevron indicator inside the header), `list` (wrapper around the default slot, `hidden`
44860
45222
  while collapsed).
44861
45223
 
44862
- **Themeable custom properties:** shared tokens only — `--lr-color-border`, `--lr-color-surface`,
45224
+ **Themeable custom properties:** `--lr-source-list-compact-header-padding` (default
45225
+ `var(--lr-space-2xs) var(--lr-space-s)`) and `--lr-source-list-compact-header-gap` (default
45226
+ `var(--lr-space-2xs)`) — `[part="header"]` padding/gap while `compact`; `--lr-source-list-compact-gap`
45227
+ (default `var(--lr-space-2xs)`) and `--lr-source-list-compact-list-padding` (default
45228
+ `var(--lr-space-s)`) — `[part="list"]` gap/padding while `compact`. All four are inline `var()`
45229
+ fallbacks at their point of use, so any can be set on the element or an ancestor. Otherwise shared
45230
+ tokens — `--lr-color-border`, `--lr-color-surface`,
44863
45231
  `--lr-color-text`, `--lr-color-brand` / `-brand-quiet`, `--lr-radius`, `--lr-space-xs`/`-s`/
44864
45232
  `-m`, `--lr-transition-fast`, `--lr-focus-ring-*`.
44865
45233
 
@@ -45100,6 +45468,11 @@ rendering, or events. Usable display fields are captured once while emitted sele
45100
45468
  objects retain their original identity. Malformed rows and later duplicate ids are omitted; the
45101
45469
  first valid occurrence wins.
45102
45470
 
45471
+ At most 500 citations render as `evidence-item` rows; a `citations` array past that length still
45472
+ reports its true count in `evidence-count` but renders a localized `limit` notice after the list
45473
+ rather than mounting an unbounded number of rows. The full citation set is still forwarded to the
45474
+ composed `lr-claim-evidence` for claim-to-citation lookup, which applies its own render cap.
45475
+
45103
45476
  **Events:** `lr-citation-select` (`detail: CitationSelectEventDetail` from
45104
45477
  `@aceshooting/lyra-ui/ai` = `{ citation: Citation }`) — emitted when an evidence badge is activated.
45105
45478
  The inner `lr-citation-badge`'s generic activation is stopped at this composition boundary; this
@@ -45116,7 +45489,8 @@ row), `warnings` (omitted when there are none), `warnings-heading`, `warnings-co
45116
45489
  its semantics survive list-style resets),
45117
45490
  `evidence-item` (one `<li>` containing a badge + always-visible label/span text),
45118
45491
  `evidence-label` (omitted when `Citation.label` is unset), `evidence-span` (the formatted
45119
- `Citation.span` range, omitted when unset), `claims` (the claim/evidence region), `empty`
45492
+ `Citation.span` range, omitted when unset), `limit` (localized notice shown when `citations` exceeds
45493
+ the 500-citation render ceiling), `claims` (the claim/evidence region), `empty`
45120
45494
  (shown when `assessment` is `null`).
45121
45495
 
45122
45496
  **Themeable custom properties:** shared tokens only.
@@ -45503,6 +45877,9 @@ duplicates are omitted first-wins before empty state, focus/disclosure state, co
45503
45877
  rendering, or actions. Rows whose `text` is missing, nonstring, blank, or whitespace-only are also
45504
45878
  omitted without hiding later valid memories.
45505
45879
 
45880
+ At most 500 items per section render as `item` rows; a section's list past that length renders a
45881
+ localized `limit` notice after that section's list rather than mounting an unbounded number of rows.
45882
+
45506
45883
  **Events:**
45507
45884
 
45508
45885
  - `lr-add` (`detail: LyraMemoryAddDetail` = `{ memory: LyraMemoryItem }`) — a pending "promote to
@@ -45524,7 +45901,8 @@ somewhere to land after a confirmation resolves), `item-row`, `item-text`, `conf
45524
45901
  `data-tone`; omitted when `confidence` is unset), `expand-toggle` / `item-body` (both omitted when
45525
45902
  `provenance` is unset; `item-body` is `hidden` while collapsed), `item-actions`, `add-button`,
45526
45903
  `remove-button`, `forget-all-button`, `forget-all-confirm` (the `lr-confirm-bar` that replaces
45527
- `forget-all-button` while the bulk confirmation is pending).
45904
+ `forget-all-button` while the bulk confirmation is pending), `limit` (localized notice shown when a
45905
+ section's items exceed the 500-item render ceiling).
45528
45906
 
45529
45907
  **Keyboard/focus contract:** activating an action from the keyboard replaces that control with an
45530
45908
  `lr-confirm-bar`, and focus moves into the bar (landing on Deny, the safe action) rather than
@@ -45938,11 +46316,17 @@ Pointer and programmatic focus synchronize the single roving tab stop, and every
45938
46316
  least a 24×24 CSS px pointer target at narrow allocations without enlarging its marker. Optional
45939
46317
  cluster membership is exposed as each option's description and in a visible text legend, so the
45940
46318
  grouping never depends on color alone.
46319
+ Above 1,000 points, the plot renders a deterministic, evenly spaced sample of the whole array
46320
+ (spanning the full input, not a leading run) instead of every point, keeping DOM node and listener
46321
+ count bounded while the sampled points stay representative of the full plotted distribution; a
46322
+ localized "showing N of M" notice appears in `[part="limit"]`. `bounds` and the cluster legend
46323
+ still derive from the complete `points` array, so a decimated view keeps the same scale and the
46324
+ same complete legend as the full plot.
45941
46325
 
45942
46326
  **Events:** `lr-point-select` (`{ point }`), activated by click or Enter/Space.
45943
46327
 
45944
46328
  **CSS parts:** `base`, `plot`, `point`, `legend`, `legend-item`, `legend-swatch`, `legend-label`,
45945
- `empty`.
46329
+ `limit` (the "showing N of M" render-cap notice, present only above 1,000 points), `empty`.
45946
46330
 
45947
46331
  **Themeable custom properties:** `--lr-embedding-explorer-selected-stroke` (default
45948
46332
  `var(--lr-color-brand)`) — stroke color of the selected point; `--lr-embedding-explorer-height`
@@ -46019,6 +46403,9 @@ duplicates are omitted first-wins before empty state, controlled selection, evid
46019
46403
  rendering, or events. An unrecognized runtime claim status renders as localized “Unsupported” with
46020
46404
  the danger treatment instead of producing an empty or misleading badge.
46021
46405
 
46406
+ At most 500 claims render as `claim` rows; a `claims` array past that length renders a localized
46407
+ `limit` notice after the list rather than mounting an unbounded number of rows.
46408
+
46022
46409
  - `compact: boolean = false` (reflected) — tighter `claim-trigger` padding and column gap, for dense
46023
46410
  evidence lists — the same convention as `lr-source-card`'s/`lr-entity-card`'s `compact`. Purely a
46024
46411
  density knob: each claim's border and background stay. `false` (the default) keeps the full
@@ -46035,7 +46422,8 @@ composed `lr-citation-open` event intentionally crosses `lr-claim-evidence` unch
46035
46422
  `{ sourceId, index, href }` detail.
46036
46423
 
46037
46424
  **CSS parts:** `base`, `list`, `claim`, `claim-selected`, `claim-trigger`, `status`, `claim-text`,
46038
- `confidence`, `explanation`, `evidence`, `empty`.
46425
+ `confidence`, `explanation`, `evidence`, `limit` (localized notice shown when `claims` exceeds the
46426
+ 500-claim render ceiling), `empty`.
46039
46427
 
46040
46428
  **Themeable custom properties:** `--lr-claim-evidence-compact-padding` (default
46041
46429
  `var(--lr-space-xs)`) — `[part='claim-trigger']`'s padding while `compact`;
@@ -46108,13 +46496,18 @@ Metrics and runs are canonicalized independently by nonblank `id`. Malformed row
46108
46496
  duplicates are omitted first-wins before metric fallback, slice derivation/filtering, cards, charts,
46109
46497
  history, counts, rendering, or actions.
46110
46498
 
46499
+ At most 500 of the currently filtered runs render as `run` buttons and feed the trend chart; a
46500
+ filtered set past that length renders a localized `limit` notice after the run history rather than
46501
+ mounting an unbounded number of rows.
46502
+
46111
46503
  **Events:** `lr-metric-change` (`{ metricId }`), `lr-slice-change` (`{ slice }`), and
46112
46504
  `lr-run-change` (`{ run }`). All are controlled intents; the component does not mutate the
46113
46505
  corresponding selection properties.
46114
46506
 
46115
46507
  **CSS parts:** `base`, `heading`, `slices`, `slice`, `slice-selected`, `metrics`, `metric`,
46116
46508
  `metric-selected`, `metric-category` (the caller-supplied category rendered visibly on each metric),
46117
- `chart`, `runs`, `runs-heading`, `run`, `empty`.
46509
+ `chart`, `runs`, `runs-heading`, `run`, `limit` (localized notice shown when the filtered runs
46510
+ exceed the 500-run render ceiling), `empty`.
46118
46511
 
46119
46512
  **Themeable custom properties:** `--lr-rag-eval-dashboard-selected-border-color` (default
46120
46513
  `var(--lr-color-brand)`) — border color shared by the controlled active slice and metric.