@aceshooting/lyra-ui 13.0.0 → 14.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 (421) hide show
  1. package/CHANGELOG.md +212 -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 +23 -15
  5. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +9 -6
  6. package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts +12 -3
  7. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +2 -1
  8. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +4 -2
  9. package/dist/components/agent-tools/approval-queue/approval-queue.class.js +1 -1
  10. package/dist/components/agent-tools/artifact-panel/artifact-panel.styles.js +1 -1
  11. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +1 -1
  12. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +7 -7
  13. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +5 -5
  14. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +23 -10
  15. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts +13 -6
  16. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +3 -3
  17. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +1 -1
  18. package/dist/components/agent-tools/stack-trace/stack-trace-parse.js +3 -3
  19. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +1 -1
  20. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js +1 -1
  21. package/dist/components/agent-tools/task-list/task-list.class.d.ts +1 -2
  22. package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
  23. package/dist/components/agent-tools/terminal/terminal.class.d.ts +10 -1
  24. package/dist/components/agent-tools/terminal/terminal.class.js +3 -3
  25. package/dist/components/agent-tools/terminal/terminal.styles.js +1 -1
  26. package/dist/components/agent-tools/test-results/test-results.class.d.ts +4 -2
  27. package/dist/components/agent-tools/test-results/test-results.class.js +2 -2
  28. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts +2 -0
  29. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +1 -1
  30. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js +1 -1
  31. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +1 -1
  32. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +3 -2
  33. package/dist/components/agent-tools/tool-param-form/tool-param-form.d.ts +1 -1
  34. package/dist/components/agent-tools/tool-param-form/tool-param-form.js +1 -1
  35. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +1 -1
  36. package/dist/components/agent-tools/tool-result-view/registry.d.ts +2 -1
  37. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts +1 -1
  38. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +1 -1
  39. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.d.ts +18 -12
  40. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +6 -6
  41. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +9 -3
  42. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +1 -1
  43. package/dist/components/agent-tools/trace-tree/span.js +1 -1
  44. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +1 -1
  45. package/dist/components/charts/chart/box-plot.class.d.ts +10 -3
  46. package/dist/components/charts/chart/box-plot.class.js +9 -9
  47. package/dist/components/charts/chart/box-plot.styles.js +1 -1
  48. package/dist/components/charts/chart/chart-core-loader.js +1 -1
  49. package/dist/components/charts/chart/chart-feature-loader.js +1 -1
  50. package/dist/components/charts/chart/chart-preload.d.ts +1 -1
  51. package/dist/components/charts/chart/chart-preload.js +1 -1
  52. package/dist/components/charts/chart/chart.class.d.ts +27 -9
  53. package/dist/components/charts/chart/chart.class.js +23 -14
  54. package/dist/components/charts/chart/chart.styles.js +1 -1
  55. package/dist/components/charts/chart/histogram-bin.js +1 -1
  56. package/dist/components/charts/chart/lite-chart.class.js +7 -3
  57. package/dist/components/charts/chart/lite-chart.styles.js +1 -1
  58. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +1 -1
  59. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +2 -2
  60. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +10 -5
  61. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +1 -1
  62. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts +4 -2
  63. package/dist/components/conversation/branch-picker/branch-picker.class.js +1 -1
  64. package/dist/components/conversation/branch-picker/branch-picker.styles.js +1 -1
  65. package/dist/components/conversation/chat-composer/chat-composer.class.d.ts +6 -2
  66. package/dist/components/conversation/chat-composer/chat-composer.class.js +3 -3
  67. package/dist/components/conversation/chat-composer/chat-composer.styles.js +1 -1
  68. package/dist/components/conversation/chat-message/chat-message.class.js +2 -2
  69. package/dist/components/conversation/chat-message/chat-message.styles.js +1 -1
  70. package/dist/components/conversation/chat-viewport/chat-viewport.styles.js +1 -1
  71. package/dist/components/conversation/code-block/code-block-shared.js +1 -1
  72. package/dist/components/conversation/code-block/code-block.styles.js +1 -1
  73. package/dist/components/conversation/code-block/code-loader.d.ts +1 -1
  74. package/dist/components/conversation/code-block/code-loader.js +1 -1
  75. package/dist/components/conversation/code-block/shiki-types.js +1 -1
  76. package/dist/components/conversation/conversation-item/conversation-item.styles.js +1 -1
  77. package/dist/components/conversation/generation-metrics/generation-metrics.styles.js +1 -1
  78. package/dist/components/conversation/markdown/katex-loader.d.ts +4 -4
  79. package/dist/components/conversation/markdown/katex-loader.js +1 -1
  80. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  81. package/dist/components/conversation/markdown/markdown-loader.d.ts +1 -1
  82. package/dist/components/conversation/markdown/markdown-loader.js +1 -1
  83. package/dist/components/conversation/markdown/markdown-shared.d.ts +6 -1
  84. package/dist/components/conversation/markdown/markdown-shared.js +5 -4
  85. package/dist/components/conversation/message-actions/message-actions.class.d.ts +16 -3
  86. package/dist/components/conversation/message-actions/message-actions.class.js +2 -2
  87. package/dist/components/conversation/message-actions/message-actions.styles.js +1 -1
  88. package/dist/components/conversation/message-actions/toolbar-actions.d.ts +3 -1
  89. package/dist/components/conversation/message-actions/toolbar-actions.js +1 -1
  90. package/dist/components/conversation/message-feedback/message-feedback.class.d.ts +38 -15
  91. package/dist/components/conversation/message-feedback/message-feedback.class.js +7 -3
  92. package/dist/components/conversation/message-feedback/message-feedback.styles.js +1 -1
  93. package/dist/components/conversation/message-parts/message-parts.class.d.ts +7 -4
  94. package/dist/components/conversation/message-parts/message-parts.class.js +2 -2
  95. package/dist/components/conversation/message-parts/message-parts.styles.js +1 -1
  96. package/dist/components/conversation/model-select/model-select.class.d.ts +5 -2
  97. package/dist/components/conversation/model-select/model-select.class.js +5 -2
  98. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.d.ts +3 -5
  99. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js +2 -1
  100. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +9 -2
  101. package/dist/components/conversation/prompt-input/prompt-input.class.js +3 -3
  102. package/dist/components/conversation/prompt-input/prompt-input.styles.js +1 -1
  103. package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +20 -4
  104. package/dist/components/conversation/prompt-queue/prompt-queue.class.js +1 -1
  105. package/dist/components/conversation/prompt-queue/prompt-queue.styles.js +1 -1
  106. package/dist/components/conversation/push-to-talk/push-to-talk.class.d.ts +17 -8
  107. package/dist/components/conversation/push-to-talk/push-to-talk.class.js +1 -1
  108. package/dist/components/conversation/push-to-talk/push-to-talk.styles.js +1 -1
  109. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts +6 -3
  110. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
  111. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js +1 -1
  112. package/dist/components/conversation/thread-list/thread-list.class.d.ts +14 -4
  113. package/dist/components/conversation/thread-list/thread-list.class.js +11 -11
  114. package/dist/components/conversation/thread-list/thread-list.styles.js +1 -1
  115. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +1 -1
  116. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +12 -4
  117. package/dist/components/conversation/voice-picker/voice-picker.class.js +5 -2
  118. package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
  119. package/dist/components/data/calendar/calendar.class.d.ts +12 -4
  120. package/dist/components/data/calendar/calendar.class.js +2 -2
  121. package/dist/components/data/calendar/calendar.styles.js +1 -1
  122. package/dist/components/data/context-meter/context-meter.class.d.ts +3 -1
  123. package/dist/components/data/context-meter/context-meter.class.js +3 -3
  124. package/dist/components/data/data-grid/data-grid.class.d.ts +45 -4
  125. package/dist/components/data/data-grid/data-grid.class.js +25 -11
  126. package/dist/components/data/data-grid/data-grid.styles.js +1 -1
  127. package/dist/components/data/document-library/document-library.class.js +1 -1
  128. package/dist/components/data/env-list/env-list.class.js +1 -1
  129. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +19 -12
  130. package/dist/components/data/flow-canvas/flow-canvas.class.js +1 -2
  131. package/dist/components/data/flow-controls/flow-controls.styles.js +1 -1
  132. package/dist/components/data/flow-run-status/flow-run-status.class.js +1 -1
  133. package/dist/components/data/gauge/gauge.class.js +1 -1
  134. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +1 -1
  135. package/dist/components/data/heatmap/heatmap.class.js +1 -1
  136. package/dist/components/data/sequence-strip/sequence-strip.class.js +1 -1
  137. package/dist/components/data/stat/stat.class.js +1 -1
  138. package/dist/components/data/table/table.class.d.ts +10 -14
  139. package/dist/components/data/table/table.class.js +4 -3
  140. package/dist/components/data/table/table.styles.js +1 -1
  141. package/dist/components/data/timeline/timeline.class.js +1 -1
  142. package/dist/components/data/tree/tree-item.styles.js +1 -1
  143. package/dist/components/data/word-cloud/word-cloud.class.js +1 -1
  144. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +7 -2
  145. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  146. package/dist/components/forms/code-editor/code-editor.class.d.ts +8 -4
  147. package/dist/components/forms/code-editor/code-editor.class.js +16 -5
  148. package/dist/components/forms/code-editor/code-editor.styles.js +1 -1
  149. package/dist/components/forms/color-picker/color-picker.class.d.ts +1 -1
  150. package/dist/components/forms/color-picker/color-picker.class.js +1 -1
  151. package/dist/components/forms/combobox/combobox.styles.js +1 -1
  152. package/dist/components/forms/date-picker/date-input.class.js +1 -1
  153. package/dist/components/forms/date-picker/date-picker.class.d.ts +9 -2
  154. package/dist/components/forms/date-picker/date-picker.class.js +4 -4
  155. package/dist/components/forms/date-picker/date-picker.styles.js +1 -1
  156. package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
  157. package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
  158. package/dist/components/forms/input/input.class.d.ts +11 -4
  159. package/dist/components/forms/input/input.class.js +7 -1
  160. package/dist/components/forms/input/time-input.class.d.ts +8 -2
  161. package/dist/components/forms/input/time-input.class.js +1 -1
  162. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +17 -3
  163. package/dist/components/forms/locale-picker/locale-picker.class.js +1 -1
  164. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
  165. package/dist/components/forms/rubric-form/rubric-form.class.js +1 -1
  166. package/dist/components/forms/select/select.styles.js +1 -1
  167. package/dist/components/forms/slider/slider.class.js +1 -1
  168. package/dist/components/forms/swatch-picker/swatch-picker.class.js +1 -1
  169. package/dist/components/forms/token-input/token-input.class.js +1 -1
  170. package/dist/components/forms/token-input/token-input.styles.js +1 -1
  171. package/dist/components/layout/app-rail/app-rail.class.d.ts +6 -4
  172. package/dist/components/layout/app-rail/app-rail.class.js +4 -3
  173. package/dist/components/layout/app-rail/app-rail.styles.js +1 -1
  174. package/dist/components/layout/command-palette/command-palette.class.d.ts +2 -2
  175. package/dist/components/layout/command-palette/command-palette.class.js +1 -1
  176. package/dist/components/layout/command-palette/command-palette.styles.js +1 -1
  177. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +1 -1
  178. package/dist/components/layout/details/details.class.d.ts +13 -12
  179. package/dist/components/layout/details/details.class.js +43 -34
  180. package/dist/components/layout/details/details.styles.js +1 -1
  181. package/dist/components/layout/dock-panel/dock-panel.class.d.ts +4 -3
  182. package/dist/components/layout/dock-panel/dock-panel.class.js +2 -1
  183. package/dist/components/layout/filter-bar/filter-bar.class.js +2 -2
  184. package/dist/components/layout/menu/menu-item.class.js +2 -2
  185. package/dist/components/layout/menu/menu.class.js +1 -1
  186. package/dist/components/layout/multi-split/multi-split.class.d.ts +10 -5
  187. package/dist/components/layout/multi-split/multi-split.class.js +2 -1
  188. package/dist/components/layout/scroller/scroller.class.d.ts +4 -4
  189. package/dist/components/layout/scroller/scroller.styles.js +1 -1
  190. package/dist/components/layout/split-panel/split-panel.class.d.ts +3 -2
  191. package/dist/components/layout/split-panel/split-panel.class.js +3 -2
  192. package/dist/components/layout/tab-group/tab-group.styles.js +1 -1
  193. package/dist/components/layout/virtual-list/virtual-list.class.js +2 -2
  194. package/dist/components/layout/widget/widget.styles.js +1 -1
  195. package/dist/components/media/file-input/file-input.styles.js +1 -1
  196. package/dist/components/media/flag/flag.class.js +1 -1
  197. package/dist/components/media/lightbox/lightbox.styles.js +1 -1
  198. package/dist/components/media/map/map-loader.js +1 -1
  199. package/dist/components/media/map/map.class.d.ts +17 -31
  200. package/dist/components/media/map/map.class.js +1 -1
  201. package/dist/components/media/qr-code/qr-code-loader.js +1 -1
  202. package/dist/components/media/qr-code/qr-code.class.d.ts +5 -2
  203. package/dist/components/media/qr-code/qr-code.class.js +2 -2
  204. package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +2 -2
  205. package/dist/components/media/sequence-playback/sequence-playback.class.js +1 -1
  206. package/dist/components/overlays/alert/alert.styles.js +1 -1
  207. package/dist/components/overlays/callout/callout.styles.js +1 -1
  208. package/dist/components/overlays/dialog/dialog.styles.js +1 -1
  209. package/dist/components/overlays/kbd/kbd.class.js +1 -1
  210. package/dist/components/overlays/overlay/popover.class.js +1 -1
  211. package/dist/components/overlays/overlay/tooltip.class.js +1 -1
  212. package/dist/components/overlays/rating/rating.class.js +1 -1
  213. package/dist/components/overlays/toast/toast-item.class.js +1 -1
  214. package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts +11 -5
  215. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +3 -3
  216. package/dist/components/retrieval/graph/graph-loader.js +1 -1
  217. package/dist/components/retrieval/graph/graph.class.d.ts +1 -1
  218. package/dist/components/retrieval/graph/graph.class.js +10 -10
  219. package/dist/components/retrieval/graph-legend/graph-legend.class.d.ts +4 -2
  220. package/dist/components/retrieval/graph-legend/graph-legend.class.js +1 -1
  221. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +14 -6
  222. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +7 -5
  223. package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +3 -2
  224. package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +4 -3
  225. package/dist/components/retrieval/knowledge-base/knowledge-base.styles.js +1 -1
  226. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +4 -1
  227. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +2 -1
  228. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +1 -1
  229. package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +15 -6
  230. package/dist/components/retrieval/memory-panel/memory-panel.class.js +1 -1
  231. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +1 -1
  232. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +1 -1
  233. package/dist/components/retrieval/node-palette/node-palette.class.d.ts +17 -12
  234. package/dist/components/retrieval/node-palette/node-palette.class.js +2 -2
  235. package/dist/components/retrieval/node-palette/node-palette.styles.js +1 -1
  236. package/dist/components/retrieval/path-strip/path-strip.class.js +1 -1
  237. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +1 -1
  238. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +5 -5
  239. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +1 -1
  240. package/dist/components/retrieval/source-picker/source-picker.class.js +1 -1
  241. package/dist/components/utility/copy-button/copy-button.class.d.ts +2 -1
  242. package/dist/components/utility/copy-button/copy-button.class.js +1 -1
  243. package/dist/components/utility/diff-view/diff-view.class.d.ts +4 -1
  244. package/dist/components/utility/diff-view/diff-view.class.js +1 -1
  245. package/dist/components/utility/export-button/export-button.class.d.ts +2 -2
  246. package/dist/components/utility/export-button/export-button.class.js +1 -1
  247. package/dist/components/utility/export-button/export-button.styles.js +1 -1
  248. package/dist/components/utility/format/format-date.class.js +1 -1
  249. package/dist/components/utility/format/relative-time.class.js +1 -1
  250. package/dist/components/utility/icon/dompurify-loader.js +1 -1
  251. package/dist/components/utility/icon/icon-library.js +1 -1
  252. package/dist/components/utility/intersection-observer/intersection-observer.class.js +1 -1
  253. package/dist/components/utility/json-viewer/json-viewer.class.d.ts +3 -1
  254. package/dist/components/utility/json-viewer/json-viewer.class.js +5 -5
  255. package/dist/components/utility/known-date/known-date.class.js +1 -1
  256. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +29 -44
  257. package/dist/components/utility/mention-popover/mention-popover.class.js +1 -1
  258. package/dist/components/utility/mutation-observer/mutation-observer.class.js +1 -1
  259. package/dist/components/viewers/calendar-viewer/calendar-loader.js +1 -1
  260. package/dist/components/viewers/document-compare/document-compare.class.d.ts +11 -8
  261. package/dist/components/viewers/document-compare/document-compare.class.js +2 -2
  262. package/dist/components/viewers/document-preview/document-preview.class.d.ts +4 -2
  263. package/dist/components/viewers/document-preview/document-preview.class.js +4 -4
  264. package/dist/components/viewers/document-preview/document-preview.styles.js +1 -1
  265. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +2 -0
  266. package/dist/components/viewers/document-viewer/document-viewer.styles.js +1 -1
  267. package/dist/components/viewers/docx-viewer/docx-loader.js +1 -1
  268. package/dist/components/viewers/docx-viewer/docx-viewer.class.js +1 -1
  269. package/dist/components/viewers/ebook-viewer/ebook-loader.d.ts +1 -1
  270. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +2 -2
  271. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
  272. package/dist/components/viewers/email-viewer/email-loader.js +1 -1
  273. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +1 -1
  274. package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -2
  275. package/dist/components/viewers/html-viewer/dompurify-loader.js +1 -1
  276. package/dist/components/viewers/notebook-viewer/dompurify-loader.js +1 -1
  277. package/dist/components/viewers/pdf-viewer/pdf-loader.js +1 -1
  278. package/dist/components/viewers/pptx-viewer/pptx-loader.js +1 -1
  279. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-loader.js +1 -1
  280. package/dist/components/viewers/svg-viewer/dompurify-loader.js +1 -1
  281. package/dist/components/viewers/viewer-loading.js +1 -1
  282. package/dist/components/viewers/viewer-search-limits.d.ts +2 -0
  283. package/dist/components/viewers/viewer-search-limits.js +1 -1
  284. package/dist/custom-elements-jsx.d.ts +1 -1
  285. package/dist/events.d.ts +13 -6
  286. package/dist/internal/aria-controls.d.ts +16 -13
  287. package/dist/internal/aria-controls.js +1 -1
  288. package/dist/internal/aria-reflection.js +1 -1
  289. package/dist/internal/catalog-picker.d.ts +2 -2
  290. package/dist/internal/catalog-picker.js +1 -1
  291. package/dist/internal/chart-annotation-registration.d.ts +1 -0
  292. package/dist/internal/chart-annotation-registration.js +1 -0
  293. package/dist/internal/data-descriptors.d.ts +13 -0
  294. package/dist/internal/data-descriptors.js +1 -0
  295. package/dist/internal/default-strings.generated.d.ts +1 -1
  296. package/dist/internal/default-strings.generated.js +2 -2
  297. package/dist/internal/dev-mode-attribute-warning.js +1 -1
  298. package/dist/internal/element-internals.d.ts +4 -3
  299. package/dist/internal/element-internals.js +1 -1
  300. package/dist/internal/highlight-collection.d.ts +2 -0
  301. package/dist/internal/highlight-collection.js +1 -1
  302. package/dist/internal/localization-types.d.ts +1 -1
  303. package/dist/internal/localization.js +2 -2
  304. package/dist/internal/lyra-element.d.ts +10 -1
  305. package/dist/internal/lyra-element.js +2 -1
  306. package/dist/internal/package-metadata.d.ts +1 -1
  307. package/dist/internal/package-metadata.js +1 -1
  308. package/dist/internal/papaparse-loader.js +1 -1
  309. package/dist/internal/pseudo-localization.js +1 -1
  310. package/dist/internal/safe-css.js +1 -1
  311. package/dist/internal/step-value.d.ts +6 -0
  312. package/dist/internal/step-value.js +1 -0
  313. package/dist/internal/text-quote.js +1 -1
  314. package/dist/lyra.d.ts +1 -1
  315. package/dist/svelte.d.ts +1 -1
  316. package/dist/translations/ar.js +2 -2
  317. package/dist/translations/de.js +2 -2
  318. package/dist/translations/es.js +2 -2
  319. package/dist/translations/fa.js +2 -2
  320. package/dist/translations/fr.js +2 -2
  321. package/dist/translations/he.js +2 -2
  322. package/dist/translations/ja.js +2 -2
  323. package/dist/translations/pseudo/ar-XB.js +1 -1
  324. package/dist/translations/pt-BR.js +2 -2
  325. package/dist/translations/ru.js +2 -2
  326. package/dist/translations/zh-CN.js +2 -2
  327. package/dist/vue.d.ts +1 -1
  328. package/llms/components/lr-accordion-item.md +6 -5
  329. package/llms/components/lr-accordion.md +6 -5
  330. package/llms/components/lr-activity-feed.md +6 -5
  331. package/llms/components/lr-agent-run.md +1 -1
  332. package/llms/components/lr-agent-workspace.md +3 -2
  333. package/llms/components/lr-attachment-chip.md +2 -3
  334. package/llms/components/lr-audio-visualizer.md +9 -6
  335. package/llms/components/lr-bar-chart.md +2 -2
  336. package/llms/components/lr-box-plot.md +9 -6
  337. package/llms/components/lr-bubble-chart.md +2 -2
  338. package/llms/components/lr-calendar.md +10 -4
  339. package/llms/components/lr-chart.md +11 -5
  340. package/llms/components/lr-chat-composer.md +2 -1
  341. package/llms/components/lr-chunk-inspector.md +2 -2
  342. package/llms/components/lr-code-block-core.md +4 -4
  343. package/llms/components/lr-code-block.md +10 -14
  344. package/llms/components/lr-code-editor.md +2 -0
  345. package/llms/components/lr-copy-button.md +4 -1
  346. package/llms/components/lr-data-grid.md +11 -2
  347. package/llms/components/lr-date-input.md +4 -0
  348. package/llms/components/lr-date-picker.md +5 -1
  349. package/llms/components/lr-details.md +6 -5
  350. package/llms/components/lr-diff-view.md +6 -0
  351. package/llms/components/lr-document-compare.md +6 -2
  352. package/llms/components/lr-document-preview.md +11 -3
  353. package/llms/components/lr-document-viewer.md +5 -1
  354. package/llms/components/lr-docx-viewer.md +6 -0
  355. package/llms/components/lr-doughnut-chart.md +2 -2
  356. package/llms/components/lr-ebook-viewer.md +8 -3
  357. package/llms/components/lr-email-viewer.md +5 -0
  358. package/llms/components/lr-eval-dataset.md +2 -2
  359. package/llms/components/lr-export-button.md +9 -0
  360. package/llms/components/lr-file-input.md +5 -8
  361. package/llms/components/lr-format-date.md +3 -1
  362. package/llms/components/lr-graph-legend.md +4 -2
  363. package/llms/components/lr-grounding-summary.md +8 -8
  364. package/llms/components/lr-histogram.md +2 -2
  365. package/llms/components/lr-ingestion-queue.md +1 -1
  366. package/llms/components/lr-intersection-observer.md +9 -0
  367. package/llms/components/lr-json-viewer.md +6 -1
  368. package/llms/components/lr-knowledge-base.md +10 -1
  369. package/llms/components/lr-line-chart.md +2 -2
  370. package/llms/components/lr-lite-chart.md +8 -5
  371. package/llms/components/lr-locale-picker.md +6 -0
  372. package/llms/components/lr-map.md +15 -5
  373. package/llms/components/lr-markdown.md +7 -4
  374. package/llms/components/lr-media-card.md +0 -6
  375. package/llms/components/lr-mention-popover.md +12 -10
  376. package/llms/components/lr-message-actions.md +10 -3
  377. package/llms/components/lr-message-feedback.md +20 -7
  378. package/llms/components/lr-message-parts.md +3 -1
  379. package/llms/components/lr-model-select.md +5 -2
  380. package/llms/components/lr-multi-split.md +5 -1
  381. package/llms/components/lr-mutation-observer.md +8 -0
  382. package/llms/components/lr-node-palette.md +5 -2
  383. package/llms/components/lr-pie-chart.md +2 -2
  384. package/llms/components/lr-polar-area-chart.md +2 -2
  385. package/llms/components/lr-prompt-input.md +7 -3
  386. package/llms/components/lr-prompt-queue.md +6 -0
  387. package/llms/components/lr-push-to-talk.md +5 -0
  388. package/llms/components/lr-qr-code.md +6 -0
  389. package/llms/components/lr-radar-chart.md +2 -2
  390. package/llms/components/lr-rating.md +5 -0
  391. package/llms/components/lr-relative-time.md +2 -0
  392. package/llms/components/lr-result-card.md +3 -3
  393. package/llms/components/lr-result-field.md +3 -3
  394. package/llms/components/lr-retrieval-results.md +1 -1
  395. package/llms/components/lr-scatter-chart.md +2 -2
  396. package/llms/components/lr-scroller.md +5 -5
  397. package/llms/components/lr-sequence-playback.md +1 -2
  398. package/llms/components/lr-slider.md +3 -1
  399. package/llms/components/lr-streaming-text.md +2 -3
  400. package/llms/components/lr-terminal.md +14 -5
  401. package/llms/components/lr-thinking-panel.md +3 -1
  402. package/llms/components/lr-thread-list.md +20 -1
  403. package/llms/components/lr-tool-call-chip.md +2 -2
  404. package/llms/components/lr-tool-param-form.md +2 -2
  405. package/llms/components/lr-tool-result-view.md +2 -3
  406. package/llms/components/lr-tool-select-dialog.md +2 -2
  407. package/llms/components/lr-voice-picker.md +7 -2
  408. package/llms/components/lr-widget-renderer.md +12 -13
  409. package/llms/peers.md +5 -5
  410. package/llms/shared.md +74 -63
  411. package/llms-full.txt +629 -247
  412. package/package.json +21 -14
  413. package/vscode-css-data.json +1 -1
  414. package/vscode-html-data.json +1 -1
  415. package/web-types.json +1 -1
  416. package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.d.ts +0 -1
  417. package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.js +0 -1
  418. package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.d.ts +0 -1
  419. package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.js +0 -1
  420. package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.d.ts +0 -1
  421. package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.js +0 -1
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 2 parts, 1 custom property — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 2 parts, 3 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -79,6 +79,10 @@ polite and assertive sinks, respectively;
79
79
 
80
80
  **Themeable custom properties:** `--lr-document-viewer-max-height` (default `70vh`) — maximum block
81
81
  size of `[part="body"]` before the dialog body scrolls internally.
82
+ `--lr-document-viewer-download-link-hover-bg` defaults to `color-mix(in oklab,
83
+ var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-hover))`, and
84
+ `--lr-document-viewer-download-link-active-bg` uses `var(--lr-color-mix-active)` in that same mix
85
+ for the native download action's hover and pressed backgrounds.
82
86
 
83
87
  **Renderer registry exports:**
84
88
 
@@ -68,6 +68,12 @@ resolved keyboard action was activated.
68
68
  content. `lr-anchor-result` (`detail: { found }`) — fired after an `anchor` assignment or a
69
69
  `scrollToAnchor()` call.
70
70
 
71
+ Mammoth's conversion result is usable only when it has own-data `value: string` and an own-data
72
+ `messages` array; an unusable primary result is terminal. From a usable result, the first 100
73
+ message positions are considered, malformed entries are omitted, and valid opaque causes are
74
+ retained in their diagnostics. Sanitized document content remains visible while those non-fatal
75
+ diagnostics are emitted.
76
+
71
77
  **CSS parts:** `base`, `body`, `content`, `spinner`, `error`, `highlight` (a painted `text-quote`
72
78
  highlight), `highlight-actions` (keyboard-accessible actions for resolved highlights),
73
79
  `highlight-action` (one native highlight activation button), `search-match` (a painted in-document
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [llms-full.txt](../../llms-full.txt)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
12
- - **Themeable via** 16 parts, 35 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 16 parts, 36 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Documented with** `lr-line-chart`, `lr-bar-chart`, `lr-pie-chart`, `lr-radar-chart`, `lr-polar-area-chart`, `lr-bubble-chart`, `lr-scatter-chart` (same section below)
14
14
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
15
15
 
@@ -58,7 +58,7 @@ failure transition is announced through the shared document-level light-DOM asse
58
58
  `--lr-chart-data-table-button-active-bg`, `--lr-chart-data-table-toggle-hover-bg`,
59
59
  `--lr-chart-data-table-toggle-active-bg`, `--lr-chart-reset-zoom-button-hover-bg`,
60
60
  `--lr-chart-reset-zoom-button-active-bg`, `--lr-chart-canvas-hover-outline-width`, and
61
- `--lr-chart-pattern-step`, plus `--lr-chart-legend-side-max` — all inherited from `LyraChart`, identical in meaning and default (see
61
+ `--lr-chart-canvas-hover-outline-color`, `--lr-chart-pattern-step`, plus `--lr-chart-legend-side-max` — all inherited from `LyraChart`, identical in meaning and default (see
62
62
  `lr-chart` above); each of the eight variants below reads the same set, so one rule retunes them
63
63
  together. The mirrored hooks are `--border-color-1`,
64
64
  `--border-color-2`, `--border-color-3`, `--border-color-4`, `--border-color-5`,
@@ -18,7 +18,9 @@
18
18
 
19
19
  Renders EPUB ebooks through the optional `epubjs` peer. `src` is fetched as an `ArrayBuffer`, and
20
20
  epub.js renders the reading area into its stable `mount` element, using an internal iframe for
21
- chapter content.
21
+ chapter content. A usable book exposes `ready`, `renderTo()`, and `destroy()`, and its rendition
22
+ exposes `display()`, `prev()`, `next()`, `on()`, and `annotations.highlight()`/`remove()`; an absent
23
+ required capability is terminal. Navigation and spine data are optional.
22
24
 
23
25
  **Properties:** `src: string = ''` and `name: string = ''`. A plain `aria-label` attribute on the
24
26
  host overrides the reading region's accessible name — by attribute presence, so an explicitly empty
@@ -39,14 +41,17 @@ viewer's supported `LyraAnchor.kind` values for the shared anchor-target contrac
39
41
  **Methods:** `getToc()` resolves the EPUB's own navigation document (`book.navigation.toc`,
40
42
  populated once `book.ready` resolves) flattened into document-ordered `EbookTocItem[]` (`{ id,
41
43
  label, href, level }`, `level` starting at 1 for a top-level entry, `id` falling back to `href`
42
- when a navigation entry has none), `[]` before a book has loaded. `search(query)` resolves the
44
+ when a navigation entry has none), `[]` before a book has loaded or when navigation is absent. TOC
45
+ projection examines at most 10,000 positions, nodes, and depth 100; malformed entries are skipped
46
+ without preventing later valid entries. `search(query)` resolves the
43
47
  match count across every spine section, in document order, via epub.js's own `item.load()`/
44
48
  `item.find()`/`item.unload()` (empty/whitespace query behaves like `clearSearch()`; a newer
45
49
  `search()` call or a `src` change aborts an in-flight scan; peer output is capped at 10,000
46
50
  matches after at most 1,000 spine items and 4,000,000 result code units; queries are capped at 4,096
47
51
  code units); `searchNext()`/`searchPrevious()`
48
52
  advance/step back through matches (wrapping, resolving `false` when there are none); `clearSearch()`
49
- clears the query, matches, and painted search annotation.
53
+ clears the query, matches, and painted search annotation. `matchCountExact: false` also reports
54
+ malformed or holey spine/find data and failed section load/unload work, not only a search ceiling.
50
55
 
51
56
  **Events:** `lr-render-error` with `detail.error` when fetching, opening, or rendering fails;
52
57
  `lr-location-change` (`detail: { cfi, href }`) fired from epub.js's own `relocated` event;
@@ -29,6 +29,11 @@ An attachment with no filename uses the localized `emailViewerUnnamedAttachment`
29
29
  `lr-attachment-open` detail. The fallback resolves while rendering, so changing the locale or
30
30
  per-instance `strings` after the message loads updates it without reparsing the message.
31
31
 
32
+ Parser output is admitted through a bounded direct-data projection: malformed optional fields,
33
+ recipients, and attachment entries are omitted without discarding later valid siblings. Accepted
34
+ string, `Uint8Array`, and `ArrayBuffer` attachment bytes are copied before use, and every
35
+ `lr-attachment-open` creates a fresh Blob, so later source mutation cannot change event bytes.
36
+
32
37
  Sanitized HTML uses the passive-document profile: anchors, form controls, and custom elements are
33
38
  unwrapped to ordinary text/children where safe, remote navigation/resource attributes are removed,
34
39
  and an `<a>` itself never remains. Images render only inline base64 GIF, JPEG, PNG, or WebP data;
@@ -22,8 +22,8 @@ Filterable and taggable evaluation-example list with add, remove, import, and ex
22
22
 
23
23
  - `examples: readonly EvalExample[] = []` (attribute: false) — `EvalExample { id: string; input: string;
24
24
  expectedOutput?: string; tags?: readonly string[]; metadata?: Record<string, unknown> }` (exported here).
25
- Deliberately its own small shape rather than reusing anything from `src/ai/types.ts` none of that
26
- module's interfaces models "one row of a labeled eval dataset". `input`/`expectedOutput` are plain
25
+ It is a dedicated dataset-row shape; no shared agent type models a labeled evaluation row.
26
+ `input`/`expectedOutput` are plain
27
27
  strings (not structured payloads), rendered as plain text by every column's `cell()`. Fully
28
28
  controlled: add/remove/import/export are all _requests_; the host mutates and passes the array
29
29
  back. Empty/blank ids and later duplicate ids are omitted before selection, filtering, mutation requests, and the
@@ -123,6 +123,15 @@ downloadBlob(content: string, filename: string, mime: string, ownerDocument?: Do
123
123
 
124
124
  **Known gotchas:**
125
125
 
126
+ - Format options are read from their direct data fields into a frozen list. Accessor-backed, missing,
127
+ malformed, or throwing descriptor fields are ignored rather than evaluated; later menu rendering
128
+ and `lr-export` events use that snapshot. The snapshot includes only direct `formatId`, `label`,
129
+ `description`, and `extension` fields; accepted records are frozen and never reread from the
130
+ caller. An open multi-format menu is a non-modal overlay owned by the element's
131
+ current document: only its topmost menu handles that document's Escape, outside pointer, or Tab.
132
+ It rebinds after document adoption; Escape or a selected export returns focus to its own trigger,
133
+ while a Tab close permits normal document navigation. Placement uses the current trigger and panel
134
+ geometry and remains clamped to the current document's viewport.
126
135
  - CSV and JSON are the only built-in encoders. To offer XLSX/PDF/etc., pass an
127
136
  `LyraExportFormatDescriptor` and handle its `formatId` from `lr-export`; custom formats never trigger a
128
137
  download or `lr-export-complete` on their own. A descriptor's optional `extension` is metadata
@@ -108,10 +108,8 @@ no client-side CSV/XLSX/etc. parsing is performed (that's left entirely to the h
108
108
  `resetValidity()`; reset clears only consumer custom validity and restores current intrinsic
109
109
  `required` validity.
110
110
 
111
- **Events:** a user selection or removal emits native bubbling/composed `input`, then `change`;
112
- programmatic `files` writes are silent. The hidden native picker's own `change` is contained inside
113
- the shadow root, so a picker selection exposes exactly one post-commit host `change`, not the
114
- implementation event plus a duplicate. `lr-files` (`detail: LyraFileInputFilesDetail`, with fresh
111
+ **Events:** a user selection or removal emits native bubbling/composed `input`, then exactly one
112
+ host `change`; programmatic `files` writes are silent. `lr-files` (`detail: LyraFileInputFilesDetail`, with fresh
115
113
  frozen readonly `files` and `rejected` arrays and frozen rejected-file records, fired on both drop
116
114
  and manual file-picker selection; immutable `File` objects retain identity) —
117
115
  `LyraFileInputRejectedFile = { readonly file: File; readonly reason: 'type' | 'count' | 'size' | 'directory' | 'read' | 'limit'
@@ -172,10 +170,9 @@ What this changes for you:
172
170
  - **Nothing about what the visible text says or where it renders.** `[part="rejection"]`'s text is
173
171
  ordinary visible content and stays in the accessibility tree, so a user who reaches it reads it
174
172
  normally. Both parts remain the right styling hooks.
175
- - **A test that asserted `::part(rejection)` had `role="alert"`, or that read announcements out of
176
- `::part(status)`, now fails.** Assert against the shared light-DOM region instead — query
177
- `[data-lr-live-region="assertive"]` (or `"polite"`) in the document, which is also where every
178
- other Lyra announcement lands.
173
+ - **Read announcements from the shared light-DOM region** query
174
+ `[data-lr-live-region="assertive"]` or `[data-lr-live-region="polite"]` in the document rather
175
+ than the styling parts.
179
176
  - **A `::part(rejection)[role]`-style selector never matched anyway** — an attribute selector
180
177
  cannot follow `::part()`. Nothing that worked before stopped working.
181
178
 
@@ -39,6 +39,8 @@ granular fields are then ignored entirely (`Intl` throws when the two are mixed)
39
39
  to use the granular set. An unparseable `date` renders the default slot. An invalid
40
40
  `timeZone` throws a `RangeError` inside `Intl`, which is caught and retried once without the zone —
41
41
  so the output falls back to the browser's local zone instead of failing to render. Valid output is
42
- wrapped in semantic `<time datetime="…">`.
42
+ wrapped in semantic `<time datetime="…">`. Date input accepts primitive strings/numbers or a
43
+ genuine `Date`; arbitrary objects are rejected without calling their `valueOf()`, `toString()`, or
44
+ other conversion hooks.
43
45
 
44
46
  **Slots:** default — fallback content for an invalid/unparseable `date`.
@@ -37,8 +37,10 @@ string; shape?: 'circle' | 'square' | 'diamond' }`, the shared `lr-graph.nodeTyp
37
37
  `aria-label` makes the host the sole overall owner (the wrapper omits its duplicate role/name);
38
38
  an explicitly empty host label stays empty on the wrapper
39
39
 
40
- **Events:** `lr-visibility-change` (`detail: { hiddenTypes }`, the complete updated array, fired
41
- after each toggle).
40
+ **Events:** cancelable `lr-before-visibility-change` (`detail: { hiddenTypes }`, a frozen complete
41
+ next array) fires before a toggle changes state or announces it. Preventing it suppresses all three.
42
+ `lr-visibility-change` (`detail: { hiddenTypes }`, the complete updated array) fires after an
43
+ accepted assignment and announcement.
42
44
 
43
45
  **Slots:** none.
44
46
 
@@ -25,7 +25,7 @@ and `lr-citation-badge` for each evidence entry.
25
25
  **Properties:**
26
26
 
27
27
  - `assessment: GroundingAssessment | null = null` (attribute: false) — **`GroundingAssessment`,
28
- imported from `@aceshooting/lyra-ui/ai`** (`src/ai/types.ts`): `{ supportedClaims: number;
28
+ imported from `@aceshooting/lyra-ui/ai`**: `{ supportedClaims: number;
29
29
  unsupportedClaims: number; coverage: number; confidence?: number; warnings?: string[];
30
30
  claims?: GroundedClaim[] }`, where `coverage` and `confidence` are 0–1 fractions. `null` renders
31
31
  the empty state
@@ -48,16 +48,16 @@ label?: string }`. Independent of `assessment`; empty omits the whole evidence s
48
48
  level used by both warnings and evidence sections; `'none'` keeps the visual text without
49
49
  exposing a heading role, and invalid untyped values fall back to level 3
50
50
 
51
- Direct citations and `assessment.claims` are canonicalized independently by nonblank `id` before
52
- counts, child composition, rendering, or events. Malformed rows and later duplicate ids are omitted;
53
- the first valid occurrence wins.
51
+ Direct citations and `assessment.claims` are keyed independently by nonblank `id` before counts,
52
+ rendering, or events. Usable display fields are captured once while emitted selected claim/citation
53
+ objects retain their original identity. Malformed rows and later duplicate ids are omitted; the
54
+ first valid occurrence wins.
54
55
 
55
56
  **Events:** `lr-citation-select` (`detail: CitationSelectEventDetail` from
56
57
  `@aceshooting/lyra-ui/ai` = `{ citation: Citation }`) — emitted when an evidence badge is activated.
57
58
  The inner `lr-citation-badge`'s generic activation is stopped at this composition boundary; this
58
- richer event exists because a bare `sourceId`/`index` pair can't tell a host which exact evidence
59
- _span_ to jump to. The composed `lr-claim-evidence` also surfaces
60
- `lr-claim-select` (`detail: { claim }`) unchanged when a claim is activated.
59
+ richer event exists because a bare `sourceId`/`index` pair cannot identify the exact evidence span.
60
+ The summary emits `lr-claim-select` (`detail: { claim }`) when a claim is activated.
61
61
 
62
62
  **Slots:** none.
63
63
 
@@ -69,7 +69,7 @@ row), `warnings` (omitted when there are none), `warnings-heading`, `warnings-co
69
69
  its semantics survive list-style resets),
70
70
  `evidence-item` (one `<li>` containing a badge + always-visible label/span text),
71
71
  `evidence-label` (omitted when `Citation.label` is unset), `evidence-span` (the formatted
72
- `Citation.span` range, omitted when unset), `claims` (the composed claim-evidence audit), `empty`
72
+ `Citation.span` range, omitted when unset), `claims` (the claim/evidence region), `empty`
73
73
  (shown when `assessment` is `null`).
74
74
 
75
75
  **Themeable custom properties:** shared tokens only.
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [llms-full.txt](../../llms-full.txt)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
12
- - **Themeable via** 16 parts, 35 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 16 parts, 36 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -65,7 +65,7 @@ inherited from `LyraChart`, unaffected by the binning logic).
65
65
  `--lr-chart-data-table-button-active-bg`, `--lr-chart-data-table-toggle-hover-bg`,
66
66
  `--lr-chart-data-table-toggle-active-bg`, `--lr-chart-reset-zoom-button-hover-bg`,
67
67
  `--lr-chart-reset-zoom-button-active-bg`, `--lr-chart-canvas-hover-outline-width`, and
68
- `--lr-chart-pattern-step`, plus `--lr-chart-legend-side-max` — inherited from `LyraChart`, identical in meaning, together with the
68
+ `--lr-chart-canvas-hover-outline-color`, `--lr-chart-pattern-step`, plus `--lr-chart-legend-side-max` — inherited from `LyraChart`, identical in meaning, together with the
69
69
  mirrored `--border-color-1`,
70
70
  `--border-color-2`,
71
71
  `--border-color-3`, `--border-color-4`, `--border-color-5`, `--border-color-6`, `--fill-color-1`,
@@ -73,7 +73,7 @@ announcement itself goes to the library's shared **light-DOM** assertive region,
73
73
  consumer's `<body>` and marked `data-lr-live-region="assertive"`, because a live region inside a
74
74
  shadow root is not reliably announced (JAWS with Firefox ignores one outright). What is announced
75
75
  is unchanged: only failures added or transitioned _after_ mount, so historical failed rows stay
76
- visible without being re-announced. Assert against that document-level region rather than
76
+ visible without being re-announced. Read that document-level region rather than
77
77
  `::part(failure-live)`.
78
78
 
79
79
  In virtualized mode (above `virtualizeAt`) the rows live in the internal
@@ -27,6 +27,15 @@ boolean = false` (reflected; unobserves a target after its first intersection).
27
27
  target stays consumed across option-driven observer rebuilds and disconnect/reconnect cycles;
28
28
  setting `once` to false is the explicit reset boundary.
29
29
 
30
+ The browser capability is optional. A missing or throwing owner-window lookup or unavailable
31
+ constructor leaves that rebuild inert rather than leaking an exception; an initial construction
32
+ failure retries once with safe default options. Individual `observe`, `unobserve`, and `disconnect`
33
+ failures are contained, so later valid targets and later rebuilds can still observe. Callbacks are
34
+ tied to the current owner document, so a detached or adopted wrapper cannot emit a stale batch.
35
+ Threshold collections inspect at most their first 10,000 direct data entries. Malformed or
36
+ accessor-backed entries are skipped; a valid prefix remains active, while an entirely unusable value
37
+ falls back to threshold `0`.
38
+
30
39
  **Events:** mapped `lr-intersect` once per entry with `{ entry }`, plus the existing batch alias
31
40
  `lr-intersection` with a frozen
32
41
  `Readonly<{ entries: readonly IntersectionObserverEntry[] }>` detail. The batch sequence is
@@ -18,7 +18,12 @@
18
18
 
19
19
  A collapsible, copyable tree view for an arbitrary JSON-serializable value (object, array, string,
20
20
  number, boolean, null, or `undefined`). Serves as a fallback renderer wherever a raw payload needs
21
- inspecting without a bespoke view. Expand/collapse state is keyed by structural path (not object
21
+ inspecting without a bespoke view. Assignment creates one bounded, frozen graph from own enumerable
22
+ data descriptors. It never invokes getters or object-conversion hooks; accessor/reflection-failed
23
+ branches and function or symbol leaves are omitted, while bigint is retained as decimal text.
24
+ Rendering, searching, toolbar copy, and per-node copy all use that same owned graph, so later
25
+ mutation or revocation of the supplied object cannot change a displayed or copied value. Ordinary
26
+ aliases, cycles, and sparse-array holes are retained. Expand/collapse state is keyed by structural path (not object
22
27
  identity), so it survives a `data` reassignment that keeps the same shape — e.g. a streaming result
23
28
  being patched in place. A container value that self-references (directly or through a longer cycle)
24
29
  renders as a leaf `Circular reference` marker (`data-type="circular"`) instead of recursing — no
@@ -35,7 +35,8 @@ errorMessage?: string }` (all four types exported here), where
35
35
  `syncStatus === 'error'`. `id`/`name` follow `DocumentRef`'s spirit, but a source is a _connector
36
36
  feeding_ documents, not a document, so the rest of the fields are its own
37
37
  - `label?: string` — heading text and the table's accessible name; omission uses the localized
38
- knowledge-base label, while an explicit empty string stays empty
38
+ knowledge-base label. An explicit empty string keeps the visible heading empty while the nested
39
+ table still takes the localized default as its accessible name
39
40
  - `hideSummary: boolean = false` (attribute `hide-summary`, reflected) — hides the aggregate
40
41
  total/synced/syncing/needs-attention row
41
42
  - `hideCreate: boolean = false` (attribute `hide-create`, reflected) — hides the "Add source"
@@ -63,6 +64,14 @@ unset), `sync-cell`, `sync-badge`, `sync-timestamp`, `sync-error`, `health-cell`
63
64
  `document-count` (omitted when unset), `permission-badge` (omitted when `permission` is unset),
64
65
  `actions-menu`, `actions-trigger` (the kebab `<button>`).
65
66
 
67
+ The 13 row parts — `name-cell`, `source-name`, `source-type`, `sync-cell`, `sync-badge`,
68
+ `sync-timestamp`, `sync-error`, `health-cell`, `health-badge`, `document-count`,
69
+ `permission-badge`, `actions-menu`, and `actions-trigger` — are forwarded from the composed table
70
+ through `[part="table"]`/`exportparts`, so they are styleable as
71
+ `lr-knowledge-base::part(actions-trigger)`. `actions-trigger` is the forwarded kebab button: it
72
+ inherits the row font, has the shared `--lr-icon-button-size` minimum hit area (40px by default),
73
+ and keeps independent hover, pressed, and focus treatment.
74
+
66
75
  **Themeable custom properties:** shared tokens only.
67
76
 
68
77
  **Optional peer deps:** none.
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [llms-full.txt](../../llms-full.txt)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
12
- - **Themeable via** 16 parts, 35 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 16 parts, 36 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Documented with** `lr-bar-chart`, `lr-pie-chart`, `lr-doughnut-chart`, `lr-radar-chart`, `lr-polar-area-chart`, `lr-bubble-chart`, `lr-scatter-chart` (same section below)
14
14
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
15
15
 
@@ -58,7 +58,7 @@ failure transition is announced through the shared document-level light-DOM asse
58
58
  `--lr-chart-data-table-button-active-bg`, `--lr-chart-data-table-toggle-hover-bg`,
59
59
  `--lr-chart-data-table-toggle-active-bg`, `--lr-chart-reset-zoom-button-hover-bg`,
60
60
  `--lr-chart-reset-zoom-button-active-bg`, `--lr-chart-canvas-hover-outline-width`, and
61
- `--lr-chart-pattern-step`, plus `--lr-chart-legend-side-max` — all inherited from `LyraChart`, identical in meaning and default (see
61
+ `--lr-chart-canvas-hover-outline-color`, `--lr-chart-pattern-step`, plus `--lr-chart-legend-side-max` — all inherited from `LyraChart`, identical in meaning and default (see
62
62
  `lr-chart` above); each of the eight variants below reads the same set, so one rule retunes them
63
63
  together. The mirrored hooks are `--border-color-1`,
64
64
  `--border-color-2`, `--border-color-3`, `--border-color-4`, `--border-color-5`,
@@ -76,7 +76,8 @@ passthrough). Not a subclass of `LyraChart`.
76
76
  more here than on `lr-chart`: this component exists to avoid the Chart.js peers, so without it an
77
77
  app that chose it for exactly that reason had to either hand-roll a `<details>` around a
78
78
  duplicated table or adopt `lr-chart` and pull in Chart.js for a button — the cheap component
79
- stuck with the expensive workaround. Unset, nothing renders and behavior is unchanged.
79
+ stuck with the expensive workaround. A supplied `slot="data-table"` follows the same disclosure
80
+ state. Unset, nothing renders and behavior is unchanged.
80
81
  Themeable via `--lr-lite-chart-data-table-toggle-hover-bg` (default
81
82
  `var(--lr-color-brand-quiet)`) and `--lr-lite-chart-data-table-toggle-active-bg` (default: that
82
83
  hover colour mixed by `--lr-color-mix-active`).
@@ -152,10 +153,12 @@ passthrough). Not a subclass of `LyraChart`.
152
153
  equivalent for the full charts.
153
154
  - `withoutValueAxis: boolean = false` (attribute `without-value-axis`) — suppresses gridlines and
154
155
  value-axis tick labels; x-axis category labels remain.
155
- - `selectedIndices: readonly number[] = []` (attribute: false) — applies to every interactive data mark for
156
- both `type="bar"` and `type="line"`: matching bars and line points receive `data-selected` and
157
- explicit `aria-pressed="true"`; all other marks render `aria-pressed="false"`. For a multi-series
158
- chart, the category index selects the matching mark in every dataset. Empty is the default.
156
+ - `selectedIndices: readonly number[] = []` (attribute: false) — names **source category indices**,
157
+ not positions in the sampled SVG output. Finite integer entries whose source rows are represented
158
+ in the bounded rendered sample select matching bars and line points, which receive
159
+ `data-selected` and explicit `aria-pressed="true"`; all other marks render `aria-pressed="false"`.
160
+ For a multi-series chart, a selected source category selects the matching rendered mark in every
161
+ dataset. Empty is the default.
159
162
  Style the built-in highlight through `--lr-lite-chart-selected-outline-color` and
160
163
  `--lr-lite-chart-selected-outline-width`. Note
161
164
  `::part(bar)[data-selected]` and `::part(point)[data-selected]` are **invalid CSS** — Shadow Parts
@@ -96,6 +96,12 @@ raises `customError` and blocks submission, `''` restores the picker's own compu
96
96
  required picker with nothing committed goes back to `valueMissing`. It survives every
97
97
  `value`/`required` change and a form reset. `getForm()` returns the browser-resolved owning form.
98
98
 
99
+ The open list is a nonmodal overlay: only its topmost owner handles Escape and outside pointer
100
+ dismissal; Escape restores the trigger, while Tab keeps ordinary document navigation. Disconnect or
101
+ cross-document adoption closes it. A required, uncommitted value recomputes its intrinsic localized
102
+ message when `.strings` or the effective locale changes; an author custom-validity message retains
103
+ priority until cleared.
104
+
99
105
  **Slots:** `label`, `hint`, `error`.
100
106
 
101
107
  **CSS parts:** `form-control`, `form-control-label`, `trigger`,
@@ -94,7 +94,8 @@ string; geojson: GeoJSON.FeatureCollection; field: string; stops: [number, strin
94
94
  the live host cascade before passing the expression to MapLibre's WebGL renderer.
95
95
  - `markers: LyraMapMarker[] = []` (attribute: false) — `LyraMapMarker { id?: string; lngLat:
96
96
  [number, number]; color?: string; label?: string; unsafeHtml?: string }`; an explicit `id` is
97
- trimmed and must be nonempty, and the first marker for an explicit ID wins. Markers are reconciled
97
+ trimmed and must be nonempty, and the first successfully admitted marker for an explicit ID wins.
98
+ A malformed earlier row does not reserve that ID. Markers are reconciled
98
99
  by that explicit ID (falling back
99
100
  to a `lng,lat` key, disambiguated by occurrence order for duplicate-coordinate id-less markers,
100
101
  when `id` is omitted) so an unchanged marker isn't torn down and recreated on every `markers`
@@ -120,7 +121,8 @@ string; geojson: GeoJSON.FeatureCollection; field: string; stops: [number, strin
120
121
  GeoJSON.FeatureCollection; tone?: 'accent' | 'success' | 'warning' |
121
122
  'danger' | 'neutral'; color?: string; strokeColor?: string; kind?: LyraMapDataLayerKind;
122
123
  heatmap?: LyraMapHeatmapOptions; cluster?: LyraMapClusterOptions }`. `sourceId` is trimmed and must be nonempty; the first layer for a
123
- `sourceId` wins and blank or later duplicate records are ignored. Each retained entry adds one
124
+ `sourceId` that is successfully admitted wins; blank, malformed, and later duplicate records are
125
+ ignored without reserving an identity for a valid later sibling. Each retained entry adds one
124
126
  GeoJSON source plus three geometry-filtered layers
125
127
  (fill, line, and circle, so a mixed `FeatureCollection` renders correctly), colored from the
126
128
  matching `--lr-color-*` token (`tone` defaults to `'accent'` → `--lr-color-brand`).
@@ -144,6 +146,10 @@ heatmap?: LyraMapHeatmapOptions; cluster?: LyraMapClusterOptions }`. `sourceId`
144
146
  its private source/layers removed, and a genuinely new `sourceId` gets new resources — nothing
145
147
  leaks on removal, style change, or disconnect.
146
148
 
149
+ The component snapshots the configuration it reads. It passes `choropleth.geojson` and
150
+ `dataLayers[].geojson` through to MapLibre; assign a new `choropleth`, `dataLayers`, or `markers`
151
+ value after changing configuration, because mutating an assigned value is not observed.
152
+
147
153
  `cluster` and `kind` (both new in 12.0.0) opt one entry out of that three-layer geometry split.
148
154
  **Both are strictly additive: an entry that sets neither renders exactly what it rendered before,
149
155
  down to the layer ids and the point layer's filter.**
@@ -216,9 +222,9 @@ expensive on an animated one. When every feature has a unique `string`/`number`
216
222
  features keep semantically unchanged geometry/bbox values, the component emits MapLibre's
217
223
  incremental `updateData()` for property changes, additions, removals, and order changes. The exact
218
224
  next order is preserved: an unchanged prefix stays in place and only the invalidated suffix is
219
- removed and re-added. Lyra's immutable ownership boundary detaches GeoJSON assignments, so geometry
220
- reference identity cannot survive between frames; a bounded, accessor-free comparison verifies the
221
- JSON geometry graph instead. A missing/duplicate ID, changed geometry, exceeded bound, or uncertain
225
+ removed and re-added. Lyra snapshots control and projection data while retaining opaque GeoJSON
226
+ identity at the MapLibre boundary; a bounded, accessor-free comparison verifies the JSON geometry
227
+ graph instead. A missing/duplicate ID, changed geometry, exceeded bound, or uncertain
222
228
  comparison falls back to `setData()` with no change in rendered behaviour. Peers without
223
229
  `updateData()` always take the old path.
224
230
 
@@ -273,6 +279,10 @@ zoom-to-cluster handler reads. The count label is deliberately not hit-tested (i
273
279
  the circle already queried and would only make the label the topmost hit), and a `kind: 'heatmap'`
274
280
  layer is never queried at all — MapLibre returns no features for a rendered density surface
275
281
 
282
+ The outer marker-activation detail is frozen, while an opaque marker `unsafeHtml` value remains the
283
+ original supplied value at the MapLibre popup and marker-activation boundary. Treat it as trusted
284
+ markup as described above.
285
+
276
286
  **Slots:** `legend` — custom legend content, rendered inside the legend panel's own layout so it
277
287
  stays positioned with the map instead of floating beside it. Supplying it opens the panel even
278
288
  when `legend` and `legendGradient` are both empty.
@@ -74,7 +74,9 @@ uses for its own `[part="body"]`.
74
74
  to plain text if the peer is unavailable; `escape` displays raw HTML source as text while ordinary
75
75
  Markdown still renders; `trusted` renders raw HTML without sanitization and is only for trusted
76
76
  content.
77
- - `gfm: boolean = true` — GitHub-flavored Markdown (tables, strikethrough, autolinks, task lists)
77
+ - `gfm: boolean = true` — GitHub-flavored Markdown (tables, strikethrough, autolinks, task lists).
78
+ GFM task-list checkboxes stay disabled. A task's primary inline text supplies its accessible name;
79
+ nested task text is excluded, and a blank task receives no generated name.
78
80
  - `linkTarget: string | null = '_blank'` (attribute `link-target`) — `target` applied to every
79
81
  rendered `<a>`, with `rel="noopener noreferrer"` always added alongside it whenever a `target` is
80
82
  emitted. `'_blank'` (the default) preserves the original output; a falsy value (`null`, or the
@@ -140,9 +142,10 @@ placed first and preserved inside both ceilings.
140
142
 
141
143
  **Events:**
142
144
 
143
- - `lr-link-click` (`detail: { href: string }`) — fired, with the click prevented,
144
- when a rendered link's `href` starts with `internal-link-prefix`; ordinary external links navigate
145
- normally and never fire this
145
+ - `lr-link-click` (`detail: { href: string }`) — fired, with navigation prevented, when a rendered
146
+ link's `href` starts with `internal-link-prefix`; ordinary external links navigate normally and
147
+ never fire this. If an intercepted link overlaps a painted highlight,
148
+ `lr-highlight-activate` fires first for pointer and Enter activation.
146
149
  - `lr-render-error` (`detail: { error: unknown }`) — rendering fell back to plain text (see the
147
150
  fallback matrix below), or `math` is set but the `katex` peer isn't installed
148
151
  - `lr-highlight-activate` (`detail: { highlightId: string }`) — a painted `text-quote` highlight was clicked
@@ -151,12 +151,6 @@ the video's own native controls bubble up and spuriously fire `lr-media-open`.
151
151
 
152
152
  **Known gotchas:**
153
153
 
154
- - Calling the real `.click()` (or dispatching a `click`/`MouseEvent`) on the file-chip's `<a href>`
155
- in a test genuinely triggers real browser navigation — always `preventDefault()` on a `click`
156
- listener registered before triggering it, the same precaution `lr-document-preview`'s own
157
- download-link tests already take. A synthetic `dispatchEvent(new MouseEvent('click', {cancelable:
158
- true}))` still invokes the anchor's native activation behavior if nothing calls
159
- `preventDefault()` during dispatch — it is not a safe no-op.
160
154
  - `kind` only reflects to the host attribute when explicitly set — CSS keying off the
161
155
  auto-detected resolved kind should target the rendered `[part]`/element (e.g. `video[part="media"]`),
162
156
  not `:host([kind=...])`, since the latter won't see an auto-detected kind.
@@ -18,13 +18,14 @@
18
18
 
19
19
  A caret-anchored, keyboard-navigable popover for `@`-mention and `/`-slash-command autocomplete
20
20
  inside a plain-text `<textarea>`/`<input>` the host owns. First-party invention (no Web Awesome
21
- equivalent). While open with a text-control `anchor`, the component atomically projects
22
- `role="combobox"` (unless the author supplied a role), `aria-expanded`, `aria-haspopup`, a
23
- resolvable controls element, and the active descendant. On platforms accepting cross-root ARIA
24
- element reflection, the host's own input keeps focus. Where the active-option reference is
25
- rejected, `focusActiveOption()` moves real focus into this component's shadow listbox so the focus
26
- owner and option share one tree scope. Every author ARIA value is restored on close, anchor
27
- replacement, disconnect, or adoption; a cross-root string IDREF is never left behind.
21
+ equivalent). A textarea keeps its native textbox semantics while open and, after a consumed
22
+ navigation key, `focusActiveOption()` moves real focus to the active option in the shadow listbox.
23
+ A single-line text input retains its active-descendant element-reference route; only that route
24
+ uses `syncActiveDescendant()`, which returns `false` for a textarea.
25
+ Textarea ARIA/AOM values are restored on close, anchor replacement, disconnect, or adoption; a
26
+ cross-root string IDREF is never left behind. Later localized result-count and active-position
27
+ changes are announced once through the shared polite region; opening markup and unchanged state are
28
+ silent.
28
29
 
29
30
  **Properties:**
30
31
 
@@ -66,9 +67,10 @@ replacement, disconnect, or adoption; a cross-root string IDREF is never left be
66
67
  `preventDefault()` when `filteredItems` is empty, letting the keystroke fall through to the
67
68
  host's own control unchanged. `Escape` closes with no selection. Returns `true` whenever the key
68
69
  was intercepted and `false` for keys the method does not recognize.
69
- - `syncActiveDescendant(control: HTMLElement): boolean` — clears any string
70
- `aria-activedescendant`, then applies `ariaActiveDescendantElement` when the platform accepts the
71
- cross-root reference. Returns whether that reference was accepted.
70
+ - `syncActiveDescendant(control: HTMLElement): boolean` — applies
71
+ `ariaActiveDescendantElement` only for a retained single-line input route. For a textarea it
72
+ returns `false` without mutating `aria-activedescendant`; the managed textarea session clears that
73
+ value separately.
72
74
  - `focusActiveOption(options?: LyraMentionFocusOptions): Promise<boolean>` — same-tree fallback
73
75
  after a consumed navigation key when `syncActiveDescendant()` returns `false`. Focuses the active
74
76
  option, lets the popover handle subsequent navigation, and restores focus to `anchor` when the
@@ -41,19 +41,26 @@ intent events, so each built-in can occur at most once. `copyText: string = ''`
41
41
  (attribute `copy-text`) — required for the `copy` built-in to render at all. `feedbackRating:
42
42
  MessageFeedbackValue = null` (attribute `feedback-rating`) — forwarded to the embedded, thumbs-only
43
43
  `lr-message-feedback` (its `detail`/`detailFor` are never forwarded, so its detail panel never
44
- opens). `revealOnInteraction: boolean = false` (reflected, attribute `reveal-on-interaction`) — hides
44
+ opens). `feedbackPending: boolean` (read-only, nonreflecting) — true only while the current built-in
45
+ feedback control awaits settlement; it has no `feedback-pending` attribute or change event.
46
+ `revealOnInteraction: boolean = false` (reflected, attribute `reveal-on-interaction`) — hides
45
47
  the bar until the closest `lr-chat-message` ancestor is hovered, or the toolbar contains focus.
46
48
  `label: string = ''` — accessible name override for the toolbar. `accessibleLabel: string | null =
47
49
  null` (attribute `aria-label`) — overrides the toolbar's computed accessible name, winning over
48
50
  `label` and the localized default; attribute-reflects from a host-level `aria-label`.
49
51
 
52
+ **Methods:** `finalizePendingSubmit(submissionId: string): boolean` and
53
+ `revertPendingSubmit(submissionId: string): boolean` settle only the current built-in feedback
54
+ request. Both return `false` for blank, stale, mismatched, removed, or replaced requests.
55
+
50
56
  **Events:** `lr-regenerate`/`lr-edit` — a built-in was activated, `detail: null`. `lr-copy` —
51
57
  frozen `detail: { ok: true, text }`, emitted only after the embedded `lr-copy-button`'s clipboard
52
58
  write fulfills (bubbles/composed already, not re-emitted). A failed write surfaces generic
53
59
  `lr-error` (`detail: null`) plus `lr-copy-error` with frozen
54
60
  `detail: { ok: false, text, reason, error }`; `reason` is `'unsupported' | 'denied' | 'failed'`.
55
- `lr-feedback-change`/`lr-feedback-submit` — bubble unchanged from the embedded,
56
- thumbs-only `lr-message-feedback`. A colliding event from an
61
+ `lr-feedback-change`/`lr-feedback-submit` — bubble unchanged from the embedded, thumbs-only
62
+ `lr-message-feedback`; the frozen submit detail includes its `submissionId`, which is the value to
63
+ pass to either settlement method. A colliding event from an
57
64
  arbitrary slotted child is contained at that slot boundary rather than being mistaken for a
58
65
  built-in action.
59
66
 
@@ -36,21 +36,34 @@ owns that one detail panel. `disabled: boolean = false` (reflected) makes a reco
36
36
  submission while host persistence is unresolved; all feedback controls are disabled and the panel
37
37
  reports busy until that state is resolved.
38
38
 
39
+ When the optional comment textarea renders, `spellcheck: boolean = true`,
40
+ `autocapitalize: string = ''`, `autocorrect: boolean = true`, and
41
+ `wrap: MessageFeedbackWrap = 'soft'` forward to it; they have no effect without that textarea.
42
+ `MessageFeedbackWrap` is `'soft' | 'hard' | 'off'`, the native textarea wrap vocabulary.
43
+
39
44
  **Methods:** `focus()` focuses the thumb matching the current `rating` (the up thumb when `null`);
40
45
  `blur()` blurs both thumbs; `click()` activates that same thumb when enabled.
41
46
  `getToolbarActions()` returns the ordered logical thumb actions used by an enclosing toolbar.
42
- `finalizePendingSubmit()` completes a prevented submit after persistence succeeds, closing the
43
- panel, announcing success, and returning focus to the active thumb. `revertPendingSubmit()` releases
44
- the pending state after failure without clearing the draft or announcing success, leaving the panel
45
- open for retry. Both are no-ops when no submit is pending.
47
+ `finalizePendingSubmit(submissionId?: string): boolean` completes a prevented submit after persistence succeeds, closing the
48
+ panel, announcing success, and returning focus to the active thumb.
49
+ `revertPendingSubmit(submissionId?: string): boolean` releases
50
+ the pending state after failure without clearing the draft or announcing success, restoring the
51
+ prior rating and panel state. A detail-panel submit remains open for retry, while a thumbs-only
52
+ submit remains panel-free; it likewise accepts an optional `submissionId` and returns `boolean`. The event
53
+ supplies a nonblank, never-reused id; a later/current settlement must use that exact id. Legacy
54
+ no-argument settlement remains available only for the first transaction that has never been
55
+ invalidated; stale or mismatched settlements return `false`.
46
56
 
47
57
  **Events:** `lr-feedback-change` — `detail: { rating: 'up' | 'down' | null }`, fired when a thumb's
48
58
  provisional rating changes or clears. `lr-feedback-submit` — cancelable
49
- `detail: { rating: 'up' | 'down' | null; reasonIds: string[]; comment: string }`, fired for every
59
+ `detail: { rating: 'up' | 'down' | null; reasonIds: string[]; comment: string; submissionId: string }`, fired for every
50
60
  terminal thumbs-only choice/clear and by the detail panel's submit button. The pending transaction
51
- is installed before dispatch, so even a synchronous listener may finalize/revert it safely.
61
+ is installed before dispatch, so even a synchronous listener may finalize/revert it safely. The
62
+ event detail is frozen.
52
63
  `preventDefault()` holds the panel/control in `pending` and delays
53
- success announcement/focus until `finalizePendingSubmit()`; call `revertPendingSubmit()` on failure.
64
+ success announcement/focus until `finalizePendingSubmit(detail.submissionId)`; call
65
+ `revertPendingSubmit(detail.submissionId)` on failure. The no-argument form is only the documented
66
+ legacy first-transaction path.
54
67
  When uncanceled it retains the synchronous close/announce/focus behavior. The optional comment
55
68
  `<textarea>`'s native `focus` and `blur` are re-dispatched as bubbling, composed host events.
56
69
  `lr-toolbar-actions-change` is the no-detail coordination event emitted when the provider's logical
@@ -23,12 +23,14 @@ parse/highlight work; replacing that same-id part with `state: 'complete'` flush
23
23
  Citation badge ranks are precomputed in one linear pass per render, rather than rescanning and
24
24
  allocating every preceding part for each citation in a citation-heavy or growing message.
25
25
 
26
- **Properties:** `parts: MessagePart[] = []` (attribute: false); `contentMode: 'plain' | 'markdown' =
26
+ **Properties:** `parts: MessagePart[] = []` (attribute: false); `contentMode: MessagePartsContentMode =
27
27
  'markdown'` (attribute `content-mode`, reflected) and `showReasoning: boolean = true` (attribute
28
28
  `show-reasoning`, reflected, with string-aware true-default conversion);
29
29
  `renderPart?: MessagePartRenderer` (attribute: false), where returning `undefined` delegates that
30
30
  part to the built-in renderer; `accessibleLabel: string | null = null` (attribute `aria-label`).
31
31
 
32
+ Unsupported direct or `content-mode` attribute values normalize and reflect as `markdown`.
33
+
32
34
  `MessagePartRenderer = (part: MessagePart, index: number) => unknown`; `MessagePart` and its
33
35
  discriminated part shapes come from the `@aceshooting/lyra-ui/ai` subpath. Tool results are a strict
34
36
  success/error union: a success has `result` and cannot have `error`; an error has `error` and may